libguac
0.9.0
Main Page
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
guacamole
socket.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2013 Glyptodon LLC
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining a copy
5
* of this software and associated documentation files (the "Software"), to deal
6
* in the Software without restriction, including without limitation the rights
7
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
* copies of the Software, and to permit persons to whom the Software is
9
* furnished to do so, subject to the following conditions:
10
*
11
* The above copyright notice and this permission notice shall be included in
12
* all copies or substantial portions of the Software.
13
*
14
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
* THE SOFTWARE.
21
*/
22
23
24
#ifndef _GUAC_SOCKET_H
25
#define _GUAC_SOCKET_H
26
33
#include "
timestamp.h
"
34
35
#include <pthread.h>
36
#include <stdint.h>
37
#include <unistd.h>
38
42
#define GUAC_SOCKET_OUTPUT_BUFFER_SIZE 8192
43
48
#define GUAC_SOCKET_KEEP_ALIVE_INTERVAL 5000
49
50
typedef
struct
guac_socket
guac_socket
;
51
62
typedef
ssize_t
guac_socket_read_handler
(
guac_socket
* socket,
63
void
* buf,
size_t
count);
64
75
typedef
ssize_t
guac_socket_write_handler
(
guac_socket
* socket,
76
const
void
* buf,
size_t
count);
77
89
typedef
int
guac_socket_select_handler
(
guac_socket
* socket,
int
usec_timeout);
90
99
typedef
int
guac_socket_free_handler
(
guac_socket
* socket);
100
104
typedef
enum
guac_socket_state
{
105
109
GUAC_SOCKET_OPEN
,
110
114
GUAC_SOCKET_CLOSED
115
116
}
guac_socket_state
;
117
122
struct
guac_socket
{
123
127
void
*
data
;
128
132
guac_socket_read_handler
*
read_handler
;
133
139
guac_socket_write_handler
*
write_handler
;
140
145
guac_socket_select_handler
*
select_handler
;
146
150
guac_socket_free_handler
*
free_handler
;
151
155
guac_socket_state
state
;
156
161
guac_timestamp
last_write_timestamp
;
162
166
int
__ready;
167
172
int
__ready_buf[3];
173
177
int
__written;
178
183
char
__out_buf[
GUAC_SOCKET_OUTPUT_BUFFER_SIZE
];
184
189
char
* __instructionbuf_unparsed_start;
190
194
char
* __instructionbuf_unparsed_end;
195
201
char
__instructionbuf[32768];
202
207
int
__threadsafe_instructions;
208
213
pthread_mutex_t __instruction_write_lock;
214
218
pthread_mutex_t __buffer_lock;
219
223
int
__keep_alive_enabled;
224
228
pthread_t __keep_alive_thread;
229
230
};
231
239
guac_socket
*
guac_socket_alloc
();
240
246
void
guac_socket_free
(
guac_socket
* socket);
247
257
void
guac_socket_require_threadsafe
(
guac_socket
* socket);
258
268
void
guac_socket_require_keep_alive
(
guac_socket
* socket);
269
277
void
guac_socket_instruction_begin
(
guac_socket
* socket);
278
285
void
guac_socket_instruction_end
(
guac_socket
* socket);
286
294
void
guac_socket_update_buffer_begin
(
guac_socket
* socket);
295
303
void
guac_socket_update_buffer_end
(
guac_socket
* socket);
304
317
guac_socket
*
guac_socket_open
(
int
fd);
318
333
guac_socket
*
guac_socket_nest
(
guac_socket
* parent,
int
index);
334
347
ssize_t
guac_socket_write_int
(
guac_socket
* socket, int64_t i);
348
363
ssize_t
guac_socket_write_string
(
guac_socket
* socket,
const
char
* str);
364
381
ssize_t
guac_socket_write_base64
(
guac_socket
* socket,
const
void
* buf,
size_t
count);
382
395
ssize_t
guac_socket_write
(
guac_socket
* socket,
const
void
* buf,
size_t
count);
396
410
ssize_t
guac_socket_read
(
guac_socket
* socket,
void
* buf,
size_t
count);
411
421
ssize_t
guac_socket_flush_base64
(
guac_socket
* socket);
422
432
ssize_t
guac_socket_flush
(
guac_socket
* socket);
433
450
int
guac_socket_select
(
guac_socket
* socket,
int
usec_timeout);
451
452
#endif
453
Generated on Fri Mar 28 2014 11:53:04 for libguac by
1.8.1.2