libguac  0.9.10-incubating
client.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
20 #ifndef _GUAC_CLIENT_H
21 #define _GUAC_CLIENT_H
22 
29 #include "client-fntypes.h"
30 #include "client-types.h"
31 #include "client-constants.h"
32 #include "layer-types.h"
33 #include "object-types.h"
34 #include "pool-types.h"
35 #include "socket-types.h"
36 #include "stream-types.h"
37 #include "timestamp-types.h"
38 #include "user-fntypes.h"
39 #include "user-types.h"
40 
41 #include <cairo/cairo.h>
42 
43 #include <pthread.h>
44 #include <stdarg.h>
45 
46 struct guac_client {
47 
62 
70 
76  void* data;
77 
83 
106 
130 
136  guac_pool* __buffer_pool;
137 
143  guac_pool* __layer_pool;
144 
148  guac_pool* __stream_pool;
149 
154  guac_stream* __output_streams;
155 
164 
169  pthread_rwlock_t __users_lock;
170 
175  guac_user* __users;
176 
182  guac_user* __owner;
183 
189 
212 
230 
255  const char** args;
256 
262  void* __plugin_handle;
263 
264 };
265 
273 
279 void guac_client_free(guac_client* client);
280 
292  const char* format, ...);
293 
306  const char* format, va_list ap);
307 
315 void guac_client_stop(guac_client* client);
316 
329  const char* format, ...);
330 
344  const char* format, va_list ap);
345 
354 
363 
371 void guac_client_free_buffer(guac_client* client, guac_layer* layer);
372 
380 void guac_client_free_layer(guac_client* client, guac_layer* layer);
381 
393 
404 void guac_client_free_stream(guac_client* client, guac_stream* stream);
405 
418 int guac_client_add_user(guac_client* client, guac_user* user, int argc, char** argv);
419 
427 void guac_client_remove_user(guac_client* client, guac_user* user);
428 
454  guac_user_callback* callback, void* data);
455 
487 void* guac_client_for_owner(guac_client* client, guac_user_callback* callback,
488  void* data);
489 
525 void* guac_client_for_user(guac_client* client, guac_user* user,
526  guac_user_callback* callback, void* data);
527 
540 
553 int guac_client_load_plugin(guac_client* client, const char* protocol);
554 
568 
599  guac_composite_mode mode, const guac_layer* layer, int x, int y,
600  cairo_surface_t* surface);
601 
637  guac_composite_mode mode, const guac_layer* layer, int x, int y,
638  cairo_surface_t* surface, int quality);
639 
682  guac_composite_mode mode, const guac_layer* layer, int x, int y,
683  cairo_surface_t* surface, int quality, int lossless);
684 
697 
701 extern const guac_layer* GUAC_DEFAULT_LAYER;
702 
703 #endif
704 
guac_user_join_handler * join_handler
Handler for join events, called whenever a new user is joining an active connection.
Definition: client.h:211
void guac_client_foreach_user(guac_client *client, guac_user_callback *callback, void *data)
Calls the given function on all currently-connected users of the given client.
int guac_client_end_frame(guac_client *client)
Marks the end of the current frame by sending a "sync" instruction to all connected users...
void vguac_client_abort(guac_client *client, guac_protocol_status status, const char *format, va_list ap)
Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an...
const guac_layer * GUAC_DEFAULT_LAYER
The default Guacamole client layer, layer 0.
int guac_client_supports_webp(guac_client *client)
Returns whether all users of the given client support WebP.
Constants related to the Guacamole client structure, guac_client.
int guac_client_load_plugin(guac_client *client, const char *protocol)
Initializes the given guac_client using the initialization routine provided by the plugin correspondi...
Type definitions related to the guac_socket object.
void * guac_user_callback(guac_user *user, void *data)
Callback which relates to a single guac_user at a time, along with arbitrary data.
Definition: user-fntypes.h:59
guac_socket * socket
The guac_socket structure to be used to communicate with all connected web-clients (users)...
Definition: client.h:61
guac_timestamp last_sent_timestamp
The time (in milliseconds) that the last sync message was sent to the client.
Definition: client.h:82
const char ** args
NULL-terminated array of all arguments accepted by this client , in order.
Definition: client.h:255
Type definitions related to Guacamole protocol streams.
The core I/O object of Guacamole.
Definition: socket.h:38
guac_stream * guac_client_alloc_stream(guac_client *client)
Allocates a new stream.
Type definitions related to Guacamole protocol objects.
guac_client_state
Possible current states of the Guacamole client.
Definition: client-types.h:41
void * data
Arbitrary reference to proxy client-specific data.
Definition: client.h:76
void guac_client_free_layer(guac_client *client, guac_layer *layer)
Returns the given layer to the pool of available layers, such that it can be reused by any subsequent...
Type definitions related to the Guacamole client structure, guac_client.
guac_layer * guac_client_alloc_buffer(guac_client *client)
Allocates a new buffer (invisible layer).
void guac_client_abort(guac_client *client, guac_protocol_status status, const char *format,...)
Signals the given client to stop gracefully, while also signalling via the Guacamole protocol that an...
void vguac_client_log(guac_client *client, guac_client_log_level level, const char *format, va_list ap)
Writes a message in the log used by the given client.
guac_client_log_handler * log_handler
Logging handler.
Definition: client.h:129
void guac_client_stream_jpeg(guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality)
Streams the image data of the given surface over an image stream ("img" instruction) as JPEG-encoded ...
void guac_client_free_buffer(guac_client *client, guac_layer *layer)
Returns the given buffer to the pool of available buffers, such that it can be reused by any subseque...
Function type definitions related to the guac_user object.
int guac_client_free_handler(guac_client *client)
Handler for freeing up any extra data allocated by the client implementation.
Definition: client-fntypes.h:49
Representation of a physical connection within a larger logical connection which may be shared...
Definition: user.h:94
int guac_client_add_user(guac_client *client, guac_user *user, int argc, char **argv)
Adds the given user to the internal list of connected users.
Type definitions related to the guac_pool pool of unique integers.
guac_client_state state
The current state of the client.
Definition: client.h:69
int64_t guac_timestamp
An arbitrary timestamp denoting a relative time value in milliseconds.
Definition: timestamp-types.h:34
Function type definitions related to the Guacamole client structure, guac_client. ...
Guacamole proxy client.
Definition: client.h:46
int connected_users
The number of currently-connected users.
Definition: client.h:188
A pool of integers.
Definition: pool.h:34
guac_client * guac_client_alloc()
Returns a new, barebones guac_client.
guac_user_leave_handler * leave_handler
Handler for leave events, called whenever a new user is leaving an active connection.
Definition: client.h:229
void * guac_client_for_owner(guac_client *client, guac_user_callback *callback, void *data)
Calls the given function with the currently-connected user that is marked as the owner.
void guac_client_free(guac_client *client)
Free all resources associated with the given client.
void guac_client_stream_webp(guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface, int quality, int lossless)
Streams the image data of the given surface over an image stream ("img" instruction) as WebP-encoded ...
guac_layer * guac_client_alloc_layer(guac_client *client)
Allocates a new layer.
Type definitions related to Guacamole layers.
int guac_user_leave_handler(guac_user *user)
Handler for Guacamole leave events.
Definition: user-fntypes.h:355
guac_composite_mode
Composite modes used by Guacamole draw instructions.
Definition: protocol-types.h:141
guac_client_free_handler * free_handler
Handler for freeing data when the client is being unloaded.
Definition: client.h:105
guac_protocol_status
Set of all possible status codes returned by protocol operations.
Definition: protocol-types.h:44
Represents a single layer within the Guacamole protocol.
Definition: layer.h:34
void guac_client_stop(guac_client *client)
Signals the given client to stop gracefully.
void guac_client_stream_png(guac_client *client, guac_socket *socket, guac_composite_mode mode, const guac_layer *layer, int x, int y, cairo_surface_t *surface)
Streams the image data of the given surface over an image stream ("img" instruction) as PNG-encoded d...
void guac_client_remove_user(guac_client *client, guac_user *user)
Removes the given user, removing the user from the internally-tracked list of connected users...
Represents a single stream within the Guacamole protocol.
Definition: stream.h:32
void guac_client_log_handler(guac_client *client, guac_client_log_level level, const char *format, va_list args)
Handler for logging messages related to a given guac_client instance.
Definition: client-fntypes.h:67
int guac_client_get_processing_lag(guac_client *client)
Calculates and returns the approximate processing lag experienced by the pool of users.
guac_client_log_level
All supported log levels used by the logging subsystem of each Guacamole client.
Definition: client-types.h:62
void guac_client_free_stream(guac_client *client, guac_stream *stream)
Returns the given stream to the pool of available streams, such that it can be reused by any subseque...
int guac_user_join_handler(guac_user *user, int argc, char **argv)
Handler for Guacamole join events.
Definition: user-fntypes.h:336
Type definitions related to Guacamole protocol timestamps.
Type definitions related to the guac_user object.
char * connection_id
The unique identifier allocated for the connection, which may be used within the Guacamole protocol t...
Definition: client.h:163
void guac_client_log(guac_client *client, guac_client_log_level level, const char *format,...)
Writes a message in the log used by the given client.
void * guac_client_for_user(guac_client *client, guac_user *user, guac_user_callback *callback, void *data)
Calls the given function with the given user ONLY if they are currently connected.