00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _GUAC_SOCKET_H
00021 #define _GUAC_SOCKET_H
00022
00029 #include "client-types.h"
00030 #include "socket-constants.h"
00031 #include "socket-fntypes.h"
00032 #include "socket-types.h"
00033 #include "timestamp-types.h"
00034
00035 #include <pthread.h>
00036 #include <stdint.h>
00037 #include <unistd.h>
00038
00039 struct guac_socket {
00040
00044 void* data;
00045
00049 guac_socket_read_handler* read_handler;
00050
00054 guac_socket_write_handler* write_handler;
00055
00059 guac_socket_flush_handler* flush_handler;
00060
00065 guac_socket_lock_handler* lock_handler;
00066
00071 guac_socket_unlock_handler* unlock_handler;
00072
00077 guac_socket_select_handler* select_handler;
00078
00082 guac_socket_free_handler* free_handler;
00083
00087 guac_socket_state state;
00088
00093 guac_timestamp last_write_timestamp;
00094
00098 int __ready;
00099
00104 int __ready_buf[3];
00105
00109 int __keep_alive_enabled;
00110
00114 pthread_t __keep_alive_thread;
00115
00116 };
00117
00125 guac_socket* guac_socket_alloc();
00126
00132 void guac_socket_free(guac_socket* socket);
00133
00142 void guac_socket_require_keep_alive(guac_socket* socket);
00143
00150 void guac_socket_instruction_begin(guac_socket* socket);
00151
00158 void guac_socket_instruction_end(guac_socket* socket);
00159
00173 guac_socket* guac_socket_open(int fd);
00174
00190 guac_socket* guac_socket_nest(guac_socket* parent, int index);
00191
00222 guac_socket* guac_socket_tee(guac_socket* primary, guac_socket* secondary);
00223
00248 guac_socket* guac_socket_broadcast(guac_client* client);
00249
00262 ssize_t guac_socket_write_int(guac_socket* socket, int64_t i);
00263
00276 ssize_t guac_socket_write_string(guac_socket* socket, const char* str);
00277
00294 ssize_t guac_socket_write_base64(guac_socket* socket, const void* buf, size_t count);
00295
00308 ssize_t guac_socket_write(guac_socket* socket, const void* buf, size_t count);
00309
00323 ssize_t guac_socket_read(guac_socket* socket, void* buf, size_t count);
00324
00334 ssize_t guac_socket_flush_base64(guac_socket* socket);
00335
00345 ssize_t guac_socket_flush(guac_socket* socket);
00346
00363 int guac_socket_select(guac_socket* socket, int usec_timeout);
00364
00365 #endif
00366