mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
Moved pluggable client load outside client spawn
This commit is contained in:
@@ -30,8 +30,20 @@
|
|||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
|
/* Client registry */
|
||||||
guac_client_registry_node* registry;
|
guac_client_registry_node* registry;
|
||||||
|
|
||||||
|
/* Pluggable client */
|
||||||
|
guac_client* client;
|
||||||
|
void* client_plugin_handle;
|
||||||
|
|
||||||
|
union {
|
||||||
|
void (*client_init)(guac_client* client, const char* hostname, int port);
|
||||||
|
void* obj;
|
||||||
|
} alias;
|
||||||
|
|
||||||
|
char* error;
|
||||||
|
|
||||||
/* Server */
|
/* Server */
|
||||||
int socket_fd;
|
int socket_fd;
|
||||||
struct sockaddr_in server_addr;
|
struct sockaddr_in server_addr;
|
||||||
@@ -76,6 +88,27 @@ int main(int argc, char* argv[]) {
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fprintf(stderr, "[guacamole] loading pluggable client\n");
|
||||||
|
|
||||||
|
/* Load client plugin */
|
||||||
|
client_plugin_handle = dlopen("libguac_client_vnc.so", RTLD_LAZY);
|
||||||
|
if (!client_plugin_handle) {
|
||||||
|
fprintf(stderr, "[guacamole] could not open client plugin: %s\n", dlerror());
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
dlerror(); /* Clear errors */
|
||||||
|
|
||||||
|
/* Get init function */
|
||||||
|
alias.obj = dlsym(client_plugin_handle, "guac_client_init");
|
||||||
|
|
||||||
|
if ((error = dlerror()) != NULL) {
|
||||||
|
fprintf(stderr, "[guacamole] could not get guac_client_init in plugin: %s\n", error);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(stderr, "[guacamole] listening on port %i, forwarding to %s:%i\n", listen_port, connect_host, connect_port);
|
fprintf(stderr, "[guacamole] listening on port %i, forwarding to %s:%i\n", listen_port, connect_host, connect_port);
|
||||||
|
|
||||||
/* Allocate registry */
|
/* Allocate registry */
|
||||||
@@ -108,39 +141,15 @@ int main(int argc, char* argv[]) {
|
|||||||
/* In child ... */
|
/* In child ... */
|
||||||
else if (client_pid == 0) {
|
else if (client_pid == 0) {
|
||||||
|
|
||||||
guac_client* client;
|
|
||||||
void* client_plugin_handle;
|
|
||||||
|
|
||||||
union {
|
|
||||||
void (*client_init)(guac_client* client, const char* hostname, int port);
|
|
||||||
void* obj;
|
|
||||||
} alias;
|
|
||||||
|
|
||||||
char* error;
|
|
||||||
|
|
||||||
|
|
||||||
fprintf(stderr, "[guacamole] spawning client\n");
|
fprintf(stderr, "[guacamole] spawning client\n");
|
||||||
|
|
||||||
/* Load client plugin */
|
|
||||||
client_plugin_handle = dlopen("libguac_client_vnc.so", RTLD_LAZY);
|
|
||||||
if (!client_plugin_handle) {
|
|
||||||
fprintf(stderr, "[guacamole] could not open client plugin: %s\n", dlerror());
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
dlerror(); /* Clear errors */
|
|
||||||
|
|
||||||
/* Get init function */
|
|
||||||
alias.obj = dlsym(client_plugin_handle, "guac_client_init");
|
|
||||||
|
|
||||||
if ((error = dlerror()) != NULL) {
|
|
||||||
fprintf(stderr, "[guacamole] could not get guac_client_init in plugin: %s\n", error);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load and start client */
|
/* Load and start client */
|
||||||
client = guac_get_client(connected_socket_fd, registry, alias.client_init, connect_host, connect_port);
|
client = guac_get_client(connected_socket_fd, registry, alias.client_init, connect_host, connect_port);
|
||||||
guac_start_client(client);
|
guac_start_client(client);
|
||||||
|
|
||||||
|
/* FIXME: Need to free client, but only if the client is not
|
||||||
|
* being used. This line will be reached if handoff occurs
|
||||||
|
*/
|
||||||
guac_free_client(client, registry);
|
guac_free_client(client, registry);
|
||||||
|
|
||||||
/* Close socket */
|
/* Close socket */
|
||||||
@@ -149,12 +158,6 @@ int main(int argc, char* argv[]) {
|
|||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Load client plugin */
|
|
||||||
if (dlclose(client_plugin_handle)) {
|
|
||||||
fprintf(stderr, "[guacamole] could not close client plugin: %s\n", dlerror());
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(stderr, "[guacamole] client finished\n");
|
fprintf(stderr, "[guacamole] client finished\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -169,6 +172,13 @@ int main(int argc, char* argv[]) {
|
|||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Load client plugin */
|
||||||
|
if (dlclose(client_plugin_handle)) {
|
||||||
|
fprintf(stderr, "[guacamole] could not close client plugin: %s\n", dlerror());
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user