Browse Source

remove uuid field from ports again, and add jack_get_client_name_by_uuid()

tags/0.120.1
Torben Hohn 16 years ago
parent
commit
c96d49d21e
7 changed files with 45 additions and 30 deletions
  1. +2
    -1
      jack/internal.h
  2. +2
    -0
      jack/jack.h
  3. +0
    -1
      jack/port.h
  4. +16
    -10
      jackd/engine.c
  5. +13
    -13
      libjack/client.c
  6. +0
    -1
      libjack/port.c
  7. +12
    -4
      tools/session_notify.c

+ 2
- 1
jack/internal.h View File

@@ -375,7 +375,8 @@ typedef enum {
IntClientUnload = 22,
RecomputeTotalLatencies = 23,
RecomputeTotalLatency = 24,
SessionNotify = 25
SessionNotify = 25,
GetClientByUUID = 26
} RequestType;

struct _jack_request {


+ 2
- 0
jack/jack.h View File

@@ -1026,6 +1026,8 @@ struct session_command {

struct session_command * jack_session_notify (jack_client_t* client, jack_session_event_t code, const char *path );

char *jack_get_client_name_by_uuid( jack_client_t *client, const char *uuid );

#ifdef __cplusplus
}
#endif


+ 0
- 1
jack/port.h View File

@@ -113,7 +113,6 @@ typedef struct _jack_port_shared {
jack_port_type_id_t ptype_id; /* index into port type array */
jack_shmsize_t offset; /* buffer offset in shm segment */
jack_port_id_t id; /* index into engine port array */
jack_port_id_t uid; /* index into engine port array */
uint32_t flags;
char name[JACK_CLIENT_NAME_SIZE+JACK_PORT_NAME_SIZE];
char alias1[JACK_CLIENT_NAME_SIZE+JACK_PORT_NAME_SIZE];


+ 16
- 10
jackd/engine.c View File

@@ -134,6 +134,7 @@ static void jack_compute_all_port_total_latencies (jack_engine_t *engine);
static void jack_compute_port_total_latency (jack_engine_t *engine, jack_port_shared_t*);
static void jack_engine_signal_problems (jack_engine_t* engine);
static int jack_do_session_notify (jack_engine_t *engine, jack_request_t *req, int reply_fd );
static void jack_do_get_client_by_uuid ( jack_engine_t *engine, jack_request_t *req);

static inline int
jack_rolling_interval (jack_time_t period_usecs)
@@ -1340,11 +1341,16 @@ do_request (jack_engine_t *engine, jack_request_t *req, int *reply_fd)
req->status = 0;
break;

case GetClientByUUID:
jack_lock_graph (engine);
jack_do_get_client_by_uuid (engine, req);
jack_unlock_graph (engine);
break;
case SessionNotify:
jack_lock_graph (engine);
if ((req->status =
jack_do_session_notify (engine, req, *reply_fd))
== 0) {
>= 0) {
/* we have already replied, don't do it again */
*reply_fd = -1;
}
@@ -2447,16 +2453,17 @@ static jack_client_id_t jack_engine_get_max_uuid( jack_engine_t *engine )
return retval;
}

static void jack_client_fixup_uuid (jack_client_internal_t *client )
static void jack_do_get_client_by_uuid ( jack_engine_t *engine, jack_request_t *req)
{
JSList *node;
jack_port_t *port;

for (node = client->ports; node; node = jack_slist_next (node)) {
port = (jack_port_t *) node->data;

port->shared->uid = client->control->uid;

req->status = -1;
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 == req->x.client_id ) {
snprintf( req->x.port_info.name, sizeof(req->x.port_info.name), "%s", client->control->name );
req->status = 0;
return;
}
}
}

@@ -2483,7 +2490,6 @@ jack_do_session_notify (jack_engine_t *engine, jack_request_t *req, int reply_fd
if( client->control->uid == 0 ) {
client->control->uid=jack_engine_get_max_uuid( engine ) + 1;
jack_client_fixup_uuid( client );
}
reply = jack_deliver_event (engine, client, &event);



+ 13
- 13
libjack/client.c View File

@@ -2536,6 +2536,19 @@ jack_on_info_shutdown (jack_client_t *client, void (*function)(jack_status_t, co
client->on_info_shutdown_arg = arg;
}

char *jack_get_client_name_by_uuid( jack_client_t *client, const char *uuid )
{
jack_request_t request;

jack_client_id_t uuid_int = atoi( uuid );
request.type = GetClientByUUID;
request.x.client_id = uuid_int;
if( jack_client_deliver_request( client, &request ) )
return NULL;

return strdup( request.x.port_info.name );
}

const char **
jack_get_ports (jack_client_t *client,
const char *port_name_pattern,
@@ -2550,18 +2563,9 @@ jack_get_ports (jack_client_t *client,
regex_t port_regex;
regex_t type_regex;
int matching;
jack_client_id_t port_uuid_match = 0U;

engine = client->engine;

if( port_name_pattern ) {
if((strncmp( "!uuid:", port_name_pattern, sizeof("!uuid:") ) )) {
port_uuid_match = atoi( port_name_pattern+6);
port_name_pattern = NULL;
}
}
if (port_name_pattern && port_name_pattern[0]) {
regcomp (&port_regex, port_name_pattern,
REG_EXTENDED|REG_NOSUB);
@@ -2591,10 +2595,6 @@ jack_get_ports (jack_client_t *client,
}
}

if (matching && port_uuid_match) {
if( psp[i].uid != port_uuid_match )
matching = 0;
}
if (matching && port_name_pattern && port_name_pattern[0]) {
if (regexec (&port_regex, psp[i].name, 0, NULL, 0)) {
matching = 0;


+ 0
- 1
libjack/port.c View File

@@ -201,7 +201,6 @@ jack_port_new (const jack_client_t *client, jack_port_id_t port_id,
port_functions = &jack_builtin_NULL_functions;
port->fptr = *port_functions;
port->shared->has_mixdown = (port->fptr.mixdown ? TRUE : FALSE);
port->shared->uid = client->control->uid;
}

/* set up a base address so that port->offset can be used to


+ 12
- 4
tools/session_notify.c View File

@@ -102,20 +102,28 @@ int main(int argc, char *argv[])

for(i=0; retval[i].uid != 0; i++ ) {
char uidstring[16];
snprintf( uidstring, sizeof(uidstring), "!uuid:%d", retval[i].uid );
const char **ports = jack_get_ports( client, uidstring, NULL, 0 );

snprintf( uidstring, sizeof(uidstring), "%d", retval[i].uid );
char* port_regexp = alloca( jack_client_name_size()+3 );
char* client_name = jack_get_client_name_by_uuid( client, uidstring );
printf( "client by uuid(%d) %s\n", retval[i].uid, client_name );
snprintf( port_regexp, jack_client_name_size()+3, "%s", client_name );
printf( "port_regexp: %s\n", port_regexp );
jack_free(client_name);
const char **ports = jack_get_ports( client, port_regexp, NULL, 0 );
if( !ports )
continue;
for (i = 0; ports[i]; ++i) {
printf( "port: %s\n", ports[i] );
const char **connections;
if ((connections = jack_port_get_all_connections (client, jack_port_by_name(client, ports[i]))) != 0) {
for (j = 0; connections[j]; j++) {
printf( "jack_connect %s %s\n", ports[i], connections[j] );
}
free (connections);
jack_free (connections);
}
}
free(ports);
jack_free(ports);

}
free(retval);


Loading…
Cancel
Save