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
00103 guac_protocol_version protocol_version;
00104
00105 };
00106
00107 struct guac_user {
00108
00112 guac_client* client;
00113
00119 guac_socket* socket;
00120
00127 char* user_id;
00128
00133 int owner;
00134
00141 int active;
00142
00149 guac_user* __prev;
00150
00157 guac_user* __next;
00158
00163 guac_timestamp last_received_timestamp;
00164
00170 int last_frame_duration;
00171
00176 int processing_lag;
00177
00182 guac_user_info info;
00183
00187 guac_pool* __stream_pool;
00188
00192 guac_stream* __output_streams;
00193
00197 guac_stream* __input_streams;
00198
00202 guac_pool* __object_pool;
00203
00207 guac_object* __objects;
00208
00212 void* data;
00213
00239 guac_user_mouse_handler* mouse_handler;
00240
00257 guac_user_key_handler* key_handler;
00258
00278 guac_user_clipboard_handler* clipboard_handler;
00279
00295 guac_user_size_handler* size_handler;
00296
00314 guac_user_file_handler* file_handler;
00315
00333 guac_user_pipe_handler* pipe_handler;
00334
00352 guac_user_ack_handler* ack_handler;
00353
00371 guac_user_blob_handler* blob_handler;
00372
00389 guac_user_end_handler* end_handler;
00390
00408 guac_user_sync_handler* sync_handler;
00409
00427 guac_user_leave_handler* leave_handler;
00428
00447 guac_user_get_handler* get_handler;
00448
00467 guac_user_put_handler* put_handler;
00468
00489 guac_user_audio_handler* audio_handler;
00490
00510 guac_user_argv_handler* argv_handler;
00511
00512 };
00513
00520 guac_user* guac_user_alloc();
00521
00527 void guac_user_free(guac_user* user);
00528
00551 int guac_user_handle_connection(guac_user* user, int usec_timeout);
00552
00576 int guac_user_handle_instruction(guac_user* user, const char* opcode,
00577 int argc, char** argv);
00578
00590 guac_stream* guac_user_alloc_stream(guac_user* user);
00591
00599 void guac_user_free_stream(guac_user* user, guac_stream* stream);
00600
00607 void guac_user_stop(guac_user* user);
00608
00620 void guac_user_abort(guac_user* user, guac_protocol_status status,
00621 const char* format, ...);
00622
00635 void vguac_user_abort(guac_user* user, guac_protocol_status status,
00636 const char* format, va_list ap);
00637
00648 void guac_user_log(guac_user* user, guac_client_log_level level,
00649 const char* format, ...);
00650
00662 void vguac_user_log(guac_user* user, guac_client_log_level level,
00663 const char* format, va_list ap);
00664
00675 guac_object* guac_user_alloc_object(guac_user* user);
00676
00687 void guac_user_free_object(guac_user* user, guac_object* object);
00688
00712 void guac_user_stream_argv(guac_user* user, guac_socket* socket,
00713 const char* mimetype, const char* name, const char* value);
00714
00744 void guac_user_stream_png(guac_user* user, guac_socket* socket,
00745 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00746 cairo_surface_t* surface);
00747
00782 void guac_user_stream_jpeg(guac_user* user, guac_socket* socket,
00783 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00784 cairo_surface_t* surface, int quality);
00785
00828 void guac_user_stream_webp(guac_user* user, guac_socket* socket,
00829 guac_composite_mode mode, const guac_layer* layer, int x, int y,
00830 cairo_surface_t* surface, int quality, int lossless);
00831
00841 int guac_user_supports_required(guac_user* user);
00842
00854 int guac_user_supports_webp(guac_user* user);
00855
00892 char* guac_user_parse_args_string(guac_user* user, const char** arg_names,
00893 const char** argv, int index, const char* default_value);
00894
00925 int guac_user_parse_args_int(guac_user* user, const char** arg_names,
00926 const char** argv, int index, int default_value);
00927
00961 int guac_user_parse_args_boolean(guac_user* user, const char** arg_names,
00962 const char** argv, int index, int default_value);
00963
00964 #endif
00965