| @@ -21,6 +21,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| #include <fstream> | |||
| #include <assert.h> | |||
| // for linux mkdir | |||
| #include <sys/stat.h> | |||
| #include <sys/types.h> | |||
| #include "JackSystemDeps.h" | |||
| #include "JackLockedEngine.h" | |||
| #include "JackExternalClient.h" | |||
| @@ -926,22 +931,31 @@ void JackEngine::SessionNotify(int refnum, const char *target, jack_session_even | |||
| fSessionResult = new JackSessionNotifyResult(); | |||
| for (int i = 0; i < CLIENT_NUM; i++) { | |||
| jack_log("JackEngine::SessionNotify ... checking client %d", i); | |||
| JackClientInterface* client = fClientTable[i]; | |||
| if (client && client->GetClientControl()->fCallback[kSessionCallback]) { | |||
| jack_log("JackEngine::SessionNotify ... got target: %s", client->GetClientControl()->fName); | |||
| // check if this is a notification to a specific client. | |||
| if (target!=NULL && strlen(target)!=0) { | |||
| if (strcmp(target, client->GetClientControl()->fName)) { | |||
| jack_log("JackEngine::SessionNotify ... not this one"); | |||
| continue; | |||
| } | |||
| } | |||
| jack_log("JackEngine::SessionNotify ... sending"); | |||
| int result = client->ClientNotify(i, client->GetClientControl()->fName, kSessionCallback, true, path, (int) type, 0); | |||
| jack_log("JackEngine::SessionNotify ... got reply: %d", result); | |||
| // TODO: this is linux specific right now. need proper platform abstract way. | |||
| #define DIR_SEPARATOR '/' | |||
| char path_buf[JACK_PORT_NAME_SIZE]; | |||
| snprintf( path_buf, sizeof(path_buf), "%s%s%c", path, client->GetClientControl()->fName, DIR_SEPARATOR ); | |||
| int mkdir_res = mkdir( path_buf, 0777 ); | |||
| if (mkdir_res != 0 && mkdir_res != EEXIST) | |||
| { | |||
| jack_error( "JackEngine::SessionNotify: can not create session directory '%s'", path_buf ); | |||
| } | |||
| // end of platform specific code. | |||
| int result = client->ClientNotify(i, client->GetClientControl()->fName, kSessionCallback, true, path_buf, (int) type, 0); | |||
| if (result == 2) { | |||
| fSessionPendingReplies += 1; | |||
| @@ -1001,7 +1015,6 @@ void JackEngine::GetUUIDForClientName(const char *client_name, char *uuid_res, i | |||
| void JackEngine::GetClientNameForUUID(const char *uuid, char *name_res, int *result) | |||
| { | |||
| jack_log( "want uuid %s", uuid ); | |||
| for (int i = 0; i < CLIENT_NUM; i++) { | |||
| JackClientInterface* client = fClientTable[i]; | |||
| @@ -1011,11 +1024,9 @@ void JackEngine::GetClientNameForUUID(const char *uuid, char *name_res, int *res | |||
| char uuid_buf[33]; | |||
| snprintf(uuid_buf, 32, "%d", client->GetClientControl()->fSessionID); | |||
| jack_log( "check uuid %s", uuid_buf ); | |||
| if (strcmp(uuid,uuid_buf) == 0) { | |||
| strncpy(name_res, client->GetClientControl()->fName, JACK_CLIENT_NAME_SIZE); | |||
| *result = 0; | |||
| jack_log( "found name\n" ); | |||
| return; | |||
| } | |||
| } | |||