@@ -63,14 +63,6 @@ enum JackSessionFlags { | |||||
* an error occured while saving. | * an error occured while saving. | ||||
*/ | */ | ||||
JackSessionSaveError = 0x01, | JackSessionSaveError = 0x01, | ||||
/** | |||||
* this reply indicates that a client is part of a multiclient application. | |||||
* the command reply is left empty. but the session manager should still | |||||
* consider this client part of a session. it will come up due to invocation of another | |||||
* client. | |||||
*/ | |||||
JackSessionChildClient = 0x02 | |||||
}; | }; | ||||
typedef enum JackSessionFlags jack_session_flags_t; | typedef enum JackSessionFlags jack_session_flags_t; | ||||
@@ -130,6 +122,10 @@ typedef void (*JackSessionCallback)(jack_session_event_t *event, void *arg); | |||||
* Tell the JACK server to call @a save_callback the session handler wants | * Tell the JACK server to call @a save_callback the session handler wants | ||||
* to save. | * to save. | ||||
* | * | ||||
* setting more than one session_callback per process is probably a design | |||||
* error. if you have a multiclient application its more sensible to create | |||||
* a jack_client with only a session callback set. | |||||
* | |||||
* @return 0 on success, otherwise a non-zero error code | * @return 0 on success, otherwise a non-zero error code | ||||
*/ | */ | ||||
int jack_set_session_callback(jack_client_t *client, | int jack_set_session_callback(jack_client_t *client, | ||||
@@ -155,7 +151,16 @@ int jack_session_reply( jack_client_t *client, jack_session_event_t *event ) JAC | |||||
* if its non NULL. | * if its non NULL. | ||||
*/ | */ | ||||
void jack_session_event_free (jack_session_event_t *event); | |||||
void jack_session_event_free (jack_session_event_t *event) JACK_WEAK_EXPORT; | |||||
/** | |||||
* get the assigned uuid for client. | |||||
* safe to call from callback and all other threads. | |||||
* memory needs to be freed. | |||||
*/ | |||||
char *jack_client_get_uuid (jack_client_t *client) JACK_WEAK_EXPORT; | |||||
/*@}*/ | /*@}*/ | ||||
@@ -2638,14 +2638,18 @@ jack_do_session_notify (jack_engine_t *engine, jack_request_t *req, int reply_fd | |||||
/* GRAPH MUST BE LOCKED : see callers of jack_send_connection_notification() | /* GRAPH MUST BE LOCKED : see callers of jack_send_connection_notification() | ||||
*/ | */ | ||||
// make sure all uuids are set. | |||||
for (node = engine->clients; node; node = jack_slist_next (node)) { | |||||
jack_client_internal_t* client = (jack_client_internal_t*) node->data; | |||||
if( client->control->uid == 0 ) { | |||||
client->control->uid=jack_engine_get_max_uuid( engine ) + 1; | |||||
} | |||||
} | |||||
for (node = engine->clients; node; node = jack_slist_next (node)) { | for (node = engine->clients; node; node = jack_slist_next (node)) { | ||||
jack_client_internal_t* client = (jack_client_internal_t*) node->data; | jack_client_internal_t* client = (jack_client_internal_t*) node->data; | ||||
if (client->control->session_cbset) { | if (client->control->session_cbset) { | ||||
if( client->control->uid == 0 ) { | |||||
client->control->uid=jack_engine_get_max_uuid( engine ) + 1; | |||||
} | |||||
// in case we only want to send to a special client. | // in case we only want to send to a special client. | ||||
// uuid assign is still complete. not sure if thats necessary. | // uuid assign is still complete. not sure if thats necessary. | ||||
if( (req->x.session.target[0] != 0) && strcmp(req->x.session.target, (char *)client->control->name) ) | if( (req->x.session.target[0] != 0) && strcmp(req->x.session.target, (char *)client->control->name) ) | ||||
@@ -2676,6 +2676,16 @@ jack_get_client_name_by_uuid( jack_client_t *client, const char *uuid ) | |||||
return strdup( request.x.port_info.name ); | return strdup( request.x.port_info.name ); | ||||
} | } | ||||
char * | |||||
jack_client_get_uuid( jack_client_t *client ) | |||||
{ | |||||
char retval[16]; | |||||
snprintf( retval, sizeof(retval), "%d", client->control->uid ); | |||||
return strdup(retval); | |||||
} | |||||
int | 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 ) | ||||
{ | { | ||||