GUAC-1389: Ensure users that join after a SVC has connected are alerted to its existence.
This commit is contained in:
parent
9191e264f8
commit
8ca77c1c78
@ -97,8 +97,9 @@ void guac_svc_process_connect(rdpSvcPlugin* plugin) {
|
||||
|
||||
/* Create pipe */
|
||||
svc->output_pipe = guac_client_alloc_stream(svc->client);
|
||||
guac_protocol_send_pipe(svc->client->socket, svc->output_pipe,
|
||||
"application/octet-stream", svc->name);
|
||||
|
||||
/* Notify of pipe's existence */
|
||||
guac_rdp_svc_send_pipe(svc->client->socket, svc);
|
||||
|
||||
/* Log connection to static channel */
|
||||
guac_client_log(svc->client, GUAC_LOG_INFO,
|
||||
|
@ -65,6 +65,32 @@ void guac_rdp_free_svc(guac_rdp_svc* svc) {
|
||||
free(svc);
|
||||
}
|
||||
|
||||
void guac_rdp_svc_send_pipe(guac_socket* socket, guac_rdp_svc* svc) {
|
||||
|
||||
/* Send pipe instruction for the SVC's output stream */
|
||||
guac_protocol_send_pipe(socket, svc->output_pipe,
|
||||
"application/octet-stream", svc->name);
|
||||
|
||||
}
|
||||
|
||||
void guac_rdp_svc_send_pipes(guac_user* user) {
|
||||
|
||||
guac_client* client = user->client;
|
||||
guac_rdp_client* rdp_client = (guac_rdp_client*) client->data;
|
||||
|
||||
guac_common_list_lock(rdp_client->available_svc);
|
||||
|
||||
/* Send pipe for each allocated SVC's output stream */
|
||||
guac_common_list_element* current = rdp_client->available_svc->head;
|
||||
while (current != NULL) {
|
||||
guac_rdp_svc_send_pipe(user->socket, (guac_rdp_svc*) current->data);
|
||||
current = current->next;
|
||||
}
|
||||
|
||||
guac_common_list_unlock(rdp_client->available_svc);
|
||||
|
||||
}
|
||||
|
||||
void guac_rdp_add_svc(guac_client* client, guac_rdp_svc* svc) {
|
||||
|
||||
guac_rdp_client* rdp_client = (guac_rdp_client*) client->data;
|
||||
|
@ -79,6 +79,31 @@ guac_rdp_svc* guac_rdp_alloc_svc(guac_client* client, char* name);
|
||||
*/
|
||||
void guac_rdp_free_svc(guac_rdp_svc* svc);
|
||||
|
||||
/**
|
||||
* Sends the "pipe" instruction describing the given static virtual channel
|
||||
* along the given socket. This pipe instruction will relate the SVC's
|
||||
* underlying output stream with the SVC's name and the mimetype
|
||||
* "application/octet-stream".
|
||||
*
|
||||
* @param socket
|
||||
* The socket along which the "pipe" instruction should be sent.
|
||||
*
|
||||
* @param svc
|
||||
* The static virtual channel that the "pipe" instruction should describe.
|
||||
*/
|
||||
void guac_rdp_svc_send_pipe(guac_socket* socket, guac_rdp_svc* svc);
|
||||
|
||||
/**
|
||||
* Sends the "pipe" instructions describing all static virtual channels
|
||||
* available to the given user along that user's socket. Each pipe instruction
|
||||
* will relate the associated SVC's underlying output stream with the SVC's
|
||||
* name and the mimetype "application/octet-stream".
|
||||
*
|
||||
* @param user
|
||||
* The user to send the "pipe" instructions to.
|
||||
*/
|
||||
void guac_rdp_svc_send_pipes(guac_user* user);
|
||||
|
||||
/**
|
||||
* Add the given SVC to the list of all available SVCs.
|
||||
*
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "rdp.h"
|
||||
#include "rdp_settings.h"
|
||||
#include "rdp_stream.h"
|
||||
#include "rdp_svc.h"
|
||||
|
||||
#ifdef ENABLE_COMMON_SSH
|
||||
#include "sftp.h"
|
||||
@ -76,6 +77,9 @@ int guac_rdp_user_join_handler(guac_user* user, int argc, char** argv) {
|
||||
if (rdp_client->audio)
|
||||
guac_audio_stream_add_user(rdp_client->audio, user);
|
||||
|
||||
/* Bring user up to date with any registered static channels */
|
||||
guac_rdp_svc_send_pipes(user);
|
||||
|
||||
/* Synchronize with current display */
|
||||
guac_common_display_dup(rdp_client->display, user, user->socket);
|
||||
guac_socket_flush(user->socket);
|
||||
|
Loading…
Reference in New Issue
Block a user