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
00518 int guac_user_handle_instruction(guac_user* user, const char* opcode,
00519 int argc, char** argv);
00520
00528 guac_stream* guac_user_alloc_stream(guac_user* user);
00529
00537 void guac_user_free_stream(guac_user* user, guac_stream* stream);
00538
00545 void guac_user_stop(guac_user* user);
00546
00558 void guac_user_abort(guac_user* user, guac_protocol_status status,
00559 const char* format, ...);
00560
00573 void vguac_user_abort(guac_user* user, guac_protocol_status status,
00574 const char* format, va_list ap);
00575
00586 void guac_user_log(guac_user* user, guac_client_log_level level,
00587 const char* format, ...);
00588
00600 void vguac_user_log(guac_user* user, guac_client_log_level level,
00601 const char* format, va_list ap);
00602
00613 guac_object* guac_user_alloc_object(guac_user* user);
00614
00625 void guac_user_free_object(guac_user* user, guac_object* object);
00626
00656 void guac_user_stream_png(guac_user* user, guac_socket* socket,
00657 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00658 cairo_surface_t* surface);
00659
00694 void guac_user_stream_jpeg(guac_user* user, guac_socket* socket,
00695 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00696 cairo_surface_t* surface, int quality);
00697
00740 void guac_user_stream_webp(guac_user* user, guac_socket* socket,
00741 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00742 cairo_surface_t* surface, int quality, int lossless);
00743
00755 int guac_user_supports_webp(guac_user* user);
00756
00793 char* guac_user_parse_args_string(guac_user* user, const char** arg_names,
00794 const char** argv, int index, const char* default_value);
00795
00826 int guac_user_parse_args_int(guac_user* user, const char** arg_names,
00827 const char** argv, int index, int default_value);
00828
00862 int guac_user_parse_args_boolean(guac_user* user, const char** arg_names,
00863 const char** argv, int index, int default_value);
00864
00865 #endif
00866