summaryrefslogtreecommitdiff
path: root/libjack/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'libjack/client.c')
-rw-r--r--libjack/client.c104
1 files changed, 51 insertions, 53 deletions
diff --git a/libjack/client.c b/libjack/client.c
index 2be9e63..c585f1b 100644
--- a/libjack/client.c
+++ b/libjack/client.c
@@ -40,6 +40,7 @@
#include <jack/jack.h>
#include <jack/jslist.h>
#include <jack/thread.h>
+#include <jack/uuid.h>
#include "internal.h"
#include "engine.h"
@@ -436,9 +437,9 @@ jack_client_handle_port_connection (jack_client_t *client, jack_event_t *event)
jack_port_t *other = 0;
JSList *node;
int need_free = FALSE;
-
- if (client->engine->ports[event->x.self_id].client_id == client->control->id ||
- client->engine->ports[event->y.other_id].client_id == client->control->id) {
+
+ if (jack_uuid_compare (client->engine->ports[event->x.self_id].client_id, client->control->uuid) == 0 ||
+ jack_uuid_compare (client->engine->ports[event->y.other_id].client_id, client->control->uuid) == 0) {
/* its one of ours */
@@ -516,24 +517,24 @@ jack_client_handle_port_connection (jack_client_t *client, jack_event_t *event)
int
jack_client_handle_session_callback (jack_client_t *client, jack_event_t *event)
{
- char prefix[32];
+ char uuidstr[37];
jack_session_event_t *s_event;
if (! client->control->session_cbset) {
return -1;
}
- snprintf( prefix, sizeof(prefix), "%d", client->control->uid );
+ uuid_unparse (client->control->uuid, uuidstr);
s_event = malloc( sizeof(jack_session_event_t) );
s_event->type = event->y.n;
- s_event->session_dir = strdup( event->x.name );
- s_event->client_uuid = strdup( prefix );
+ s_event->session_dir = strdup (event->x.name);
+ s_event->client_uuid = strdup (uuidstr);
s_event->command_line = NULL;
s_event->future = 0;
client->session_cb_immediate_reply = 0;
- client->session_cb ( s_event, client->session_cb_arg);
+ client->session_cb (s_event, client->session_cb_arg);
if (client->session_cb_immediate_reply) {
return 2;
@@ -805,7 +806,7 @@ server_event_connect (jack_client_t *client, const char *server_name)
return -1;
}
- req.client_id = client->control->id;
+ jack_uuid_copy (req.client_id, client->control->uuid);
if (write (fd, &req, sizeof (req)) != sizeof (req)) {
jack_error ("cannot write event connect request to server (%s)",
@@ -1032,10 +1033,13 @@ jack_request_client (ClientType type,
/* format connection request */
- if( va->sess_uuid )
- req.uuid = atoi( va->sess_uuid );
- else
- req.uuid = 0;
+ if (va->sess_uuid) {
+ if (jack_uuid_parse (va->sess_uuid, req.uuid) != 0) {
+ goto fail;
+ }
+ } else {
+ jack_uuid_clear (req.uuid);
+ }
req.protocol_v = jack_protocol_version;
req.load = TRUE;
req.type = type;
@@ -1280,11 +1284,6 @@ jack_client_open_aux (const char *client_name,
client->deliver_request = oop_client_deliver_request;
client->deliver_arg = client;
- if( va.sess_uuid )
- client->control->uid = atoi( va.sess_uuid );
- else
- client->control->uid = 0U;
-
if ((ev_fd = server_event_connect (client, va.server_name)) < 0) {
goto fail;
}
@@ -1470,7 +1469,7 @@ jack_set_freewheel (jack_client_t* client, int onoff)
VALGRIND_MEMSET (&request, 0, sizeof (request));
request.type = onoff ? FreeWheel : StopFreeWheel;
- request.x.client_id = client->control->id;
+ jack_uuid_copy (request.x.client_id, client->control->uuid);
return jack_client_deliver_request (client, &request);
}
@@ -1496,7 +1495,7 @@ jack_session_reply (jack_client_t *client, jack_session_event_t *event )
VALGRIND_MEMSET (&request, 0, sizeof (request));
request.type = SessionReply;
- request.x.client_id = client->control->id;
+ jack_uuid_copy (request.x.client_id, client->control->uuid);
retval = jack_client_deliver_request(client, &request);
}
@@ -1565,7 +1564,8 @@ jack_session_notify (jack_client_t* client, const char *target, jack_session_eve
}
while( 1 ) {
- jack_client_id_t uid;
+ jack_uuid_t uid;
+
if (read (client->request_fd, &uid, sizeof (uid)) != sizeof (uid)) {
jack_error ("cannot read result for request type %d from"
" server (%s)", request.type, strerror (errno));
@@ -1576,16 +1576,16 @@ jack_session_notify (jack_client_t* client, const char *target, jack_session_eve
retval = realloc( retval, (num_replies)*sizeof(jack_session_command_t) );
retval[num_replies-1].client_name = malloc (JACK_CLIENT_NAME_SIZE);
retval[num_replies-1].command = malloc (JACK_PORT_NAME_SIZE);
- retval[num_replies-1].uuid = malloc (16);
+ retval[num_replies-1].uuid = malloc (JACK_UUID_STRING_SIZE);
if ( (retval[num_replies-1].client_name == NULL)
||(retval[num_replies-1].command == NULL)
||(retval[num_replies-1].uuid == NULL) )
goto out;
- if( uid == 0 )
+ if (jack_uuid_empty (uid)) {
break;
-
+ }
if (read (client->request_fd, (char *)retval[num_replies-1].client_name, JACK_CLIENT_NAME_SIZE)
!= JACK_CLIENT_NAME_SIZE) {
@@ -1605,7 +1605,7 @@ jack_session_notify (jack_client_t* client, const char *target, jack_session_eve
" server (%s)", request.type, strerror (errno));
goto out;
}
- snprintf( (char *)retval[num_replies-1].uuid, 16, "%d", uid );
+ uuid_unparse (uid, (char *)retval[num_replies-1].uuid);
}
free((char *)retval[num_replies-1].uuid);
retval[num_replies-1].uuid = NULL;
@@ -2342,7 +2342,7 @@ jack_activate (jack_client_t *client)
startit:
req.type = ActivateClient;
- req.x.client_id = client->control->id;
+ jack_uuid_copy (req.x.client_id, client->control->uuid);
return jack_client_deliver_request (client, &req);
}
@@ -2358,7 +2358,7 @@ jack_deactivate_aux (jack_client_t *client)
if (client->control->active) { /* still active? */
VALGRIND_MEMSET (&req, 0, sizeof (req));
req.type = DeactivateClient;
- req.x.client_id = client->control->id;
+ jack_uuid_copy (req.x.client_id, client->control->uuid);
rc = jack_client_deliver_request (client, &req);
}
}
@@ -2774,25 +2774,25 @@ jack_on_info_shutdown (jack_client_t *client, void (*function)(jack_status_t, co
}
char *
-jack_get_client_name_by_uuid( jack_client_t *client, const char *uuid )
+jack_get_client_name_by_uuid (jack_client_t *client, const char *uuid_str)
{
jack_request_t request;
- char *end_ptr;
- jack_client_id_t uuid_int = strtol( uuid, &end_ptr, 10 );
- if ( *end_ptr != '\0' ) return NULL;
-
+
VALGRIND_MEMSET (&request, 0, sizeof (request));
+ if (uuid_parse (uuid_str, request.x.client_id) != 0) {
+ return NULL;
+ }
+
request.type = GetClientByUUID;
- request.x.client_id = uuid_int;
- if( jack_client_deliver_request( client, &request ) )
+ if( jack_client_deliver_request (client, &request))
return NULL;
- return strdup( request.x.port_info.name );
+ return strdup (request.x.port_info.name);
}
char*
-jack_get_uuid_for_client_name ( jack_client_t *client, const char *client_name )
+jack_get_uuid_for_client_name (jack_client_t *client, const char *client_name)
{
jack_request_t request;
size_t len = strlen(client_name) + 1;
@@ -2804,40 +2804,38 @@ jack_get_uuid_for_client_name ( jack_client_t *client, const char *client_name )
request.type = GetUUIDByClientName;
memcpy(request.x.name, client_name, len);
- if( jack_client_deliver_request( client, &request ) )
+ if (jack_client_deliver_request( client, &request)) {
return NULL;
+ }
- return strdup( request.x.port_info.name );
+ char buf[37];
+ uuid_unparse (request.x.client_id, buf);
+ return strdup (buf);
}
char *
-jack_client_get_uuid( jack_client_t *client )
+jack_client_get_uuid (jack_client_t *client)
{
- char retval[16];
-
- snprintf( retval, sizeof(retval), "%d", client->control->uid );
-
- return strdup(retval);
+ char retval[37];
+ uuid_unparse (client->control->uuid, retval);
+ return strdup (retval);
}
int
-jack_reserve_client_name( jack_client_t *client, const char *name, const char *uuid )
+jack_reserve_client_name (jack_client_t *client, const char *name, const char *uuid_str)
{
jack_request_t request;
- char *end_ptr;
- jack_client_id_t uuid_int = strtol( uuid, &end_ptr, 10 );
-
- if( *end_ptr != '\0' ) {
- return -1;
- }
VALGRIND_MEMSET (&request, 0, sizeof (request));
request.type = ReserveName;
snprintf( request.x.reservename.name, sizeof( request.x.reservename.name ),
"%s", name );
- request.x.reservename.uuid = uuid_int;
- return jack_client_deliver_request( client, &request );
+ if (uuid_parse (uuid_str, request.x.reservename.uuid) != 0) {
+ return NULL;
+ }
+
+ return jack_client_deliver_request (client, &request);
}
const char **