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
00097 const char* timezone;
00098
00099 };
00100
00101 struct guac_user {
00102
00106 guac_client* client;
00107
00113 guac_socket* socket;
00114
00121 char* user_id;
00122
00127 int owner;
00128
00135 int active;
00136
00143 guac_user* __prev;
00144
00151 guac_user* __next;
00152
00157 guac_timestamp last_received_timestamp;
00158
00164 int last_frame_duration;
00165
00170 int processing_lag;
00171
00176 guac_user_info info;
00177
00181 guac_pool* __stream_pool;
00182
00186 guac_stream* __output_streams;
00187
00191 guac_stream* __input_streams;
00192
00196 guac_pool* __object_pool;
00197
00201 guac_object* __objects;
00202
00206 void* data;
00207
00233 guac_user_mouse_handler* mouse_handler;
00234
00251 guac_user_key_handler* key_handler;
00252
00272 guac_user_clipboard_handler* clipboard_handler;
00273
00289 guac_user_size_handler* size_handler;
00290
00308 guac_user_file_handler* file_handler;
00309
00327 guac_user_pipe_handler* pipe_handler;
00328
00346 guac_user_ack_handler* ack_handler;
00347
00365 guac_user_blob_handler* blob_handler;
00366
00383 guac_user_end_handler* end_handler;
00384
00402 guac_user_sync_handler* sync_handler;
00403
00421 guac_user_leave_handler* leave_handler;
00422
00441 guac_user_get_handler* get_handler;
00442
00461 guac_user_put_handler* put_handler;
00462
00483 guac_user_audio_handler* audio_handler;
00484
00504 guac_user_argv_handler* argv_handler;
00505
00506 };
00507
00514 guac_user* guac_user_alloc();
00515
00521 void guac_user_free(guac_user* user);
00522
00545 int guac_user_handle_connection(guac_user* user, int usec_timeout);
00546
00570 int guac_user_handle_instruction(guac_user* user, const char* opcode,
00571 int argc, char** argv);
00572
00584 guac_stream* guac_user_alloc_stream(guac_user* user);
00585
00593 void guac_user_free_stream(guac_user* user, guac_stream* stream);
00594
00601 void guac_user_stop(guac_user* user);
00602
00614 void guac_user_abort(guac_user* user, guac_protocol_status status,
00615 const char* format, ...);
00616
00629 void vguac_user_abort(guac_user* user, guac_protocol_status status,
00630 const char* format, va_list ap);
00631
00642 void guac_user_log(guac_user* user, guac_client_log_level level,
00643 const char* format, ...);
00644
00656 void vguac_user_log(guac_user* user, guac_client_log_level level,
00657 const char* format, va_list ap);
00658
00669 guac_object* guac_user_alloc_object(guac_user* user);
00670
00681 void guac_user_free_object(guac_user* user, guac_object* object);
00682
00706 void guac_user_stream_argv(guac_user* user, guac_socket* socket,
00707 const char* mimetype, const char* name, const char* value);
00708
00738 void guac_user_stream_png(guac_user* user, guac_socket* socket,
00739 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00740 cairo_surface_t* surface);
00741
00776 void guac_user_stream_jpeg(guac_user* user, guac_socket* socket,
00777 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00778 cairo_surface_t* surface, int quality);
00779
00822 void guac_user_stream_webp(guac_user* user, guac_socket* socket,
00823 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00824 cairo_surface_t* surface, int quality, int lossless);
00825
00837 int guac_user_supports_webp(guac_user* user);
00838
00875 char* guac_user_parse_args_string(guac_user* user, const char** arg_names,
00876 const char** argv, int index, const char* default_value);
00877
00908 int guac_user_parse_args_int(guac_user* user, const char** arg_names,
00909 const char** argv, int index, int default_value);
00910
00944 int guac_user_parse_args_boolean(guac_user* user, const char** arg_names,
00945 const char** argv, int index, int default_value);
00946
00947 #endif
00948