00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _GUAC_USER_H
00021 #define _GUAC_USER_H
00022
00031 #include "client-types.h"
00032 #include "layer-types.h"
00033 #include "pool-types.h"
00034 #include "socket-types.h"
00035 #include "stream-types.h"
00036 #include "timestamp-types.h"
00037 #include "user-constants.h"
00038 #include "user-fntypes.h"
00039 #include "user-types.h"
00040
00041 #include <cairo/cairo.h>
00042
00043 #include <pthread.h>
00044 #include <stdarg.h>
00045
00046 struct guac_user_info {
00047
00054 int optimal_width;
00055
00062 int optimal_height;
00063
00068 const char** audio_mimetypes;
00069
00074 const char** video_mimetypes;
00075
00081 const char** image_mimetypes;
00082
00090 int optimal_resolution;
00091
00092 };
00093
00094 struct guac_user {
00095
00099 guac_client* client;
00100
00106 guac_socket* socket;
00107
00114 char* user_id;
00115
00120 int owner;
00121
00128 int active;
00129
00136 guac_user* __prev;
00137
00144 guac_user* __next;
00145
00150 guac_timestamp last_received_timestamp;
00151
00157 int last_frame_duration;
00158
00163 int processing_lag;
00164
00169 guac_user_info info;
00170
00174 guac_pool* __stream_pool;
00175
00179 guac_stream* __output_streams;
00180
00184 guac_stream* __input_streams;
00185
00189 guac_pool* __object_pool;
00190
00194 guac_object* __objects;
00195
00199 void* data;
00200
00226 guac_user_mouse_handler* mouse_handler;
00227
00244 guac_user_key_handler* key_handler;
00245
00265 guac_user_clipboard_handler* clipboard_handler;
00266
00282 guac_user_size_handler* size_handler;
00283
00301 guac_user_file_handler* file_handler;
00302
00320 guac_user_pipe_handler* pipe_handler;
00321
00339 guac_user_ack_handler* ack_handler;
00340
00358 guac_user_blob_handler* blob_handler;
00359
00376 guac_user_end_handler* end_handler;
00377
00395 guac_user_sync_handler* sync_handler;
00396
00414 guac_user_leave_handler* leave_handler;
00415
00434 guac_user_get_handler* get_handler;
00435
00454 guac_user_put_handler* put_handler;
00455
00476 guac_user_audio_handler* audio_handler;
00477
00478 };
00479
00486 guac_user* guac_user_alloc();
00487
00493 void guac_user_free(guac_user* user);
00494
00517 int guac_user_handle_connection(guac_user* user, int usec_timeout);
00518
00542 int guac_user_handle_instruction(guac_user* user, const char* opcode,
00543 int argc, char** argv);
00544
00552 guac_stream* guac_user_alloc_stream(guac_user* user);
00553
00561 void guac_user_free_stream(guac_user* user, guac_stream* stream);
00562
00569 void guac_user_stop(guac_user* user);
00570
00582 void guac_user_abort(guac_user* user, guac_protocol_status status,
00583 const char* format, ...);
00584
00597 void vguac_user_abort(guac_user* user, guac_protocol_status status,
00598 const char* format, va_list ap);
00599
00610 void guac_user_log(guac_user* user, guac_client_log_level level,
00611 const char* format, ...);
00612
00624 void vguac_user_log(guac_user* user, guac_client_log_level level,
00625 const char* format, va_list ap);
00626
00637 guac_object* guac_user_alloc_object(guac_user* user);
00638
00649 void guac_user_free_object(guac_user* user, guac_object* object);
00650
00680 void guac_user_stream_png(guac_user* user, guac_socket* socket,
00681 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00682 cairo_surface_t* surface);
00683
00718 void guac_user_stream_jpeg(guac_user* user, guac_socket* socket,
00719 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00720 cairo_surface_t* surface, int quality);
00721
00764 void guac_user_stream_webp(guac_user* user, guac_socket* socket,
00765 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00766 cairo_surface_t* surface, int quality, int lossless);
00767
00779 int guac_user_supports_webp(guac_user* user);
00780
00817 char* guac_user_parse_args_string(guac_user* user, const char** arg_names,
00818 const char** argv, int index, const char* default_value);
00819
00850 int guac_user_parse_args_int(guac_user* user, const char** arg_names,
00851 const char** argv, int index, int default_value);
00852
00886 int guac_user_parse_args_boolean(guac_user* user, const char** arg_names,
00887 const char** argv, int index, int default_value);
00888
00889 #endif
00890