git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1638 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.68
@@ -13,6 +13,10 @@ Tom Szilagyi | |||||
Jackdmp changes log | Jackdmp changes log | ||||
--------------------------- | --------------------------- | ||||
2007-10-24 Stephane Letz <letz@grame.fr> | |||||
* Implementation of server_name setting (-n) in progress. | |||||
2007-10-23 Stephane Letz <letz@grame.fr> | 2007-10-23 Stephane Letz <letz@grame.fr> | ||||
* Correct jack_acquire_real_time_scheduling on OSX. | * Correct jack_acquire_real_time_scheduling on OSX. | ||||
@@ -53,10 +53,8 @@ extern "C" | |||||
EXPORT int jack_internal_client_new (const char *client_name, | EXPORT int jack_internal_client_new (const char *client_name, | ||||
const char *load_name, | const char *load_name, | ||||
const char *load_init); | const char *load_init); | ||||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name); | |||||
EXPORT void jack_internal_client_close (const char *client_name); | EXPORT void jack_internal_client_close (const char *client_name); | ||||
EXPORT void my_jack_internal_client_close (jack_client_t* client); | |||||
EXPORT int jack_is_realtime (jack_client_t *client); | |||||
EXPORT int jack_is_realtime (jack_client_t *client); | |||||
EXPORT void jack_on_shutdown (jack_client_t *client, | EXPORT void jack_on_shutdown (jack_client_t *client, | ||||
void (*function)(void *arg), void *arg); | void (*function)(void *arg), void *arg); | ||||
EXPORT int jack_set_process_callback (jack_client_t *client, | EXPORT int jack_set_process_callback (jack_client_t *client, | ||||
@@ -36,9 +36,7 @@ extern "C" | |||||
EXPORT int jack_internal_client_new (const char *client_name, | EXPORT int jack_internal_client_new (const char *client_name, | ||||
const char *load_name, | const char *load_name, | ||||
const char *load_init); | const char *load_init); | ||||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); | |||||
EXPORT void jack_internal_client_close (const char *client_name); | EXPORT void jack_internal_client_close (const char *client_name); | ||||
EXPORT void my_jack_internal_client_close (jack_client_t* client); | |||||
EXPORT int jack_is_realtime (jack_client_t *client); | EXPORT int jack_is_realtime (jack_client_t *client); | ||||
EXPORT void jack_on_shutdown (jack_client_t *client, | EXPORT void jack_on_shutdown (jack_client_t *client, | ||||
void (*function)(void *arg), void *arg); | void (*function)(void *arg), void *arg); | ||||
@@ -48,7 +48,7 @@ class JackClientChannelInterface | |||||
{} | {} | ||||
// Open the Server/Client connection | // Open the Server/Client connection | ||||
virtual int Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||||
virtual int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -170,7 +170,7 @@ class JackServerChannelInterface | |||||
{} | {} | ||||
// Open the Server/Client connection | // Open the Server/Client connection | ||||
virtual int Open(JackServer* server) | |||||
virtual int Open(const char* server_name, JackServer* server) | |||||
{ | { | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -194,7 +194,7 @@ class JackServerNotifyChannelInterface | |||||
{} | {} | ||||
// Open the Server RT/Server connection | // Open the Server RT/Server connection | ||||
virtual int Open() | |||||
virtual int Open(const char* server_name) | |||||
{ | { | ||||
return 0; | return 0; | ||||
} | } | ||||
@@ -76,6 +76,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface | |||||
void* fTimebaseArg; | void* fTimebaseArg; | ||||
void* fSyncArg; | void* fSyncArg; | ||||
int fConditionnal; | int fConditionnal; | ||||
char fServerName[64]; | |||||
JackThread* fThread; /*! Thread to execute the Process function */ | JackThread* fThread; /*! Thread to execute the Process function */ | ||||
JackClientChannelInterface* fChannel; | JackClientChannelInterface* fChannel; | ||||
@@ -99,7 +100,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface | |||||
JackClient(JackSynchro** table); | JackClient(JackSynchro** table); | ||||
virtual ~JackClient(); | virtual ~JackClient(); | ||||
virtual int Open(const char* name, jack_options_t options, jack_status_t* status) = 0; | |||||
virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) = 0; | |||||
virtual int Close(); | virtual int Close(); | ||||
virtual JackGraphManager* GetGraphManager() const = 0; | virtual JackGraphManager* GetGraphManager() const = 0; | ||||
@@ -74,9 +74,9 @@ JackDebugClient::~JackDebugClient() | |||||
delete fClient; | delete fClient; | ||||
} | } | ||||
int JackDebugClient::Open(const char* name, jack_options_t options, jack_status_t* status) | |||||
int JackDebugClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
int res = fClient->Open(name, options, status); | |||||
int res = fClient->Open(server_name, name, options, status); | |||||
char provstr[256]; | char provstr[256]; | ||||
char buffer[256]; | char buffer[256]; | ||||
time_t curtime; | time_t curtime; | ||||
@@ -67,7 +67,7 @@ class JackDebugClient : public JackClient | |||||
JackDebugClient(JackClient* fTheClient); | JackDebugClient(JackClient* fTheClient); | ||||
virtual ~JackDebugClient(); | virtual ~JackDebugClient(); | ||||
virtual int Open(const char* name, jack_options_t options, jack_status_t* status); | |||||
virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | |||||
int Close(); | int Close(); | ||||
virtual JackGraphManager* GetGraphManager() const; | virtual JackGraphManager* GetGraphManager() const; | ||||
@@ -67,7 +67,7 @@ int JackEngine::Open() | |||||
JackLog("JackEngine::Open\n"); | JackLog("JackEngine::Open\n"); | ||||
// Open audio thread => request thread communication channel | // Open audio thread => request thread communication channel | ||||
if (fChannel->Open() < 0) { | |||||
if (fChannel->Open(fEngineControl->fServerName) < 0) { | |||||
jack_error("Cannot connect to server"); | jack_error("Cannot connect to server"); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
@@ -515,7 +515,7 @@ int JackEngine::ClientExternalOpen(const char* name, int* ref, int* shared_engin | |||||
JackExternalClient* client = new JackExternalClient(); | JackExternalClient* client = new JackExternalClient(); | ||||
if (!fSynchroTable[refnum]->Allocate(name, 0)) { | |||||
if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) { | |||||
jack_error("Cannot allocate synchro"); | jack_error("Cannot allocate synchro"); | ||||
goto error; | goto error; | ||||
} | } | ||||
@@ -562,7 +562,7 @@ int JackEngine::ClientInternalOpen(const char* name, int* ref, JackEngineControl | |||||
return -1; | return -1; | ||||
} | } | ||||
if (!fSynchroTable[refnum]->Allocate(name, 0)) { | |||||
if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) { | |||||
jack_error("Cannot allocate synchro"); | jack_error("Cannot allocate synchro"); | ||||
return -1; | return -1; | ||||
} | } | ||||
@@ -47,18 +47,22 @@ struct JackEngineControl : public JackShmMem | |||||
UInt64 fPeriod; | UInt64 fPeriod; | ||||
UInt64 fComputation; | UInt64 fComputation; | ||||
UInt64 fConstraint; | UInt64 fConstraint; | ||||
char fServerName[64]; | |||||
JackFrameTimer fFrameTimer; | JackFrameTimer fFrameTimer; | ||||
JackTransportEngine fTransport; | JackTransportEngine fTransport; | ||||
bool fVerbose; | bool fVerbose; | ||||
JackEngineControl(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose) | |||||
JackEngineControl(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, const char* server_name) | |||||
:fSyncMode(sync), | :fSyncMode(sync), | ||||
fTemporary(temporary), | fTemporary(temporary), | ||||
fTimeOutUsecs(timeout * 1000), | fTimeOutUsecs(timeout * 1000), | ||||
fRealTime(rt), | fRealTime(rt), | ||||
fPriority(priority), | fPriority(priority), | ||||
fVerbose(verbose) | fVerbose(verbose) | ||||
{} | |||||
{ | |||||
snprintf(fServerName, sizeof(fServerName), server_name); | |||||
} | |||||
void InitFrameTime() | void InitFrameTime() | ||||
{ | { | ||||
@@ -29,9 +29,9 @@ This program is free software; you can redistribute it and/or modify | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
void JackFifo::BuildName(const char* name, char* res) | |||||
void JackFifo::BuildName(const char* name, const char* server_name, char* res) | |||||
{ | { | ||||
sprintf(res, "%s/jack_fifo.%s", jack_client_dir, name); | |||||
sprintf(res, "%s/jack_fifo.%s_%s", jack_client_dir, server_name, name); | |||||
} | } | ||||
bool JackFifo::Signal() | bool JackFifo::Signal() | ||||
@@ -103,10 +103,10 @@ bool JackFifo::TimedWait(long usec) | |||||
#endif | #endif | ||||
// Server side | // Server side | ||||
bool JackFifo::Allocate(const char* name, int value) | |||||
bool JackFifo::Allocate(const char* name, const char* server_name, int value) | |||||
{ | { | ||||
struct stat statbuf; | struct stat statbuf; | ||||
BuildName(name, fName); | |||||
BuildName(name, server_name, fName); | |||||
JackLog("JackFifo::Allocate name = %s\n", fName); | JackLog("JackFifo::Allocate name = %s\n", fName); | ||||
@@ -138,9 +138,9 @@ bool JackFifo::Allocate(const char* name, int value) | |||||
} | } | ||||
// Client side | // Client side | ||||
bool JackFifo::ConnectAux(const char* name, int access) | |||||
bool JackFifo::ConnectAux(const char* name, const char* server_name, int access) | |||||
{ | { | ||||
BuildName(name, fName); | |||||
BuildName(name, server_name, fName); | |||||
JackLog("JackFifo::ConnectAux name = %s\n", fName); | JackLog("JackFifo::ConnectAux name = %s\n", fName); | ||||
// Temporary... | // Temporary... | ||||
@@ -159,19 +159,19 @@ bool JackFifo::ConnectAux(const char* name, int access) | |||||
} | } | ||||
} | } | ||||
bool JackFifo::Connect(const char* name) | |||||
bool JackFifo::Connect(const char* name, const char* server_name) | |||||
{ | { | ||||
return ConnectAux(name, O_RDWR); | |||||
return ConnectAux(name, server_name, O_RDWR); | |||||
} | } | ||||
bool JackFifo::ConnectOutput(const char* name) | |||||
bool JackFifo::ConnectOutput(const char* name, const char* server_name) | |||||
{ | { | ||||
return ConnectAux(name, O_WRONLY | O_NONBLOCK); | |||||
return ConnectAux(name, server_name, O_WRONLY | O_NONBLOCK); | |||||
} | } | ||||
bool JackFifo::ConnectInput(const char* name) | |||||
bool JackFifo::ConnectInput(const char* name, const char* server_name) | |||||
{ | { | ||||
return ConnectAux(name, O_RDONLY); | |||||
return ConnectAux(name, server_name, O_RDONLY); | |||||
} | } | ||||
bool JackFifo::Disconnect() | bool JackFifo::Disconnect() | ||||
@@ -40,11 +40,11 @@ class JackFifo : public JackSynchro | |||||
int fFifo; | int fFifo; | ||||
pollfd fPoll; | pollfd fPoll; | ||||
bool ConnectAux(const char* name, int access); | |||||
bool ConnectAux(const char* name, const char* server_name, int access); | |||||
protected: | protected: | ||||
void BuildName(const char* name, char* res); | |||||
void BuildName(const char* name, const char* server_name, char* res); | |||||
public: | public: | ||||
@@ -58,10 +58,10 @@ class JackFifo : public JackSynchro | |||||
bool Wait(); | bool Wait(); | ||||
bool TimedWait(long usec); | bool TimedWait(long usec); | ||||
bool Allocate(const char* name, int value); | |||||
bool Connect(const char* name); | |||||
bool ConnectInput(const char* name); | |||||
bool ConnectOutput(const char* name); | |||||
bool Allocate(const char* name, const char* server_name, int value); | |||||
bool Connect(const char* name, const char* server_name); | |||||
bool ConnectInput(const char* name, const char* server_name); | |||||
bool ConnectOutput(const char* name, const char* server_name); | |||||
bool Disconnect(); | bool Disconnect(); | ||||
void Destroy(); | void Destroy(); | ||||
}; | }; | ||||
@@ -65,11 +65,13 @@ JackInternalClient::~JackInternalClient() | |||||
delete fChannel; | delete fChannel; | ||||
} | } | ||||
int JackInternalClient::Open(const char* name, jack_options_t options, jack_status_t* status) | |||||
int JackInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
int result; | int result; | ||||
char name_res[JACK_CLIENT_NAME_SIZE]; | char name_res[JACK_CLIENT_NAME_SIZE]; | ||||
JackLog("JackInternalClient::Open name = %s\n", name); | JackLog("JackInternalClient::Open name = %s\n", name); | ||||
snprintf(fServerName, sizeof(fServerName), server_name); | |||||
fChannel->ClientCheck(name, name_res, JACK_PROTOCOL_VERSION, (int)options, (int*)status, &result); | fChannel->ClientCheck(name, name_res, JACK_PROTOCOL_VERSION, (int)options, (int*)status, &result); | ||||
if (result < 0) { | if (result < 0) { | ||||
@@ -154,9 +156,9 @@ JackLoadableInternalClient::~JackLoadableInternalClient() | |||||
UnloadJackModule(fHandle); | UnloadJackModule(fHandle); | ||||
} | } | ||||
int JackLoadableInternalClient::Open(const char* name, jack_options_t options, jack_status_t* status) | |||||
int JackLoadableInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
int res = JackInternalClient::Open(name, options, status); | |||||
int res = JackInternalClient::Open(server_name, name, options, status); | |||||
if (res == 0) | if (res == 0) | ||||
fInitialize((jack_client_t*)this, fObjectData); | fInitialize((jack_client_t*)this, fObjectData); | ||||
return res; | return res; | ||||
@@ -45,7 +45,7 @@ class JackInternalClient : public JackClient | |||||
JackInternalClient(JackServer* server, JackSynchro** table); | JackInternalClient(JackServer* server, JackSynchro** table); | ||||
virtual ~JackInternalClient(); | virtual ~JackInternalClient(); | ||||
int Open(const char* name, jack_options_t options, jack_status_t* status); | |||||
int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | |||||
JackGraphManager* GetGraphManager() const; | JackGraphManager* GetGraphManager() const; | ||||
JackEngineControl* GetEngineControl() const; | JackEngineControl* GetEngineControl() const; | ||||
@@ -95,7 +95,7 @@ class JackLoadableInternalClient : public JackInternalClient | |||||
JackLoadableInternalClient(JackServer* server, JackSynchro** table, const char* so_name, const char* object_data); | JackLoadableInternalClient(JackServer* server, JackSynchro** table, const char* so_name, const char* object_data); | ||||
virtual ~JackLoadableInternalClient(); | virtual ~JackLoadableInternalClient(); | ||||
int Open(const char* name, jack_options_t options, jack_status_t* status); | |||||
int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | |||||
}; | }; | ||||
@@ -77,7 +77,7 @@ static jack_client_t* jack_client_open_aux(const char* client_name, jack_options | |||||
va_start(ap, status); | va_start(ap, status); | ||||
jack_varargs_parse(options, ap, &va); | jack_varargs_parse(options, ap, &va); | ||||
va_end(ap); | va_end(ap); | ||||
JackLog("jack_client_open %s\n", client_name); | JackLog("jack_client_open %s\n", client_name); | ||||
if (client_name == NULL) { | if (client_name == NULL) { | ||||
jack_error("jack_client_new called with a NULL client_name"); | jack_error("jack_client_new called with a NULL client_name"); | ||||
@@ -100,7 +100,7 @@ static jack_client_t* jack_client_open_aux(const char* client_name, jack_options | |||||
JackClient* client = new JackLibClient(GetSynchroTable()); | JackClient* client = new JackLibClient(GetSynchroTable()); | ||||
#endif | #endif | ||||
int res = client->Open(client_name, options, status); | |||||
int res = client->Open(va.server_name, client_name, options, status); | |||||
if (res < 0) { | if (res < 0) { | ||||
delete client; | delete client; | ||||
JackLibGlobals::Destroy(); // jack library destruction | JackLibGlobals::Destroy(); // jack library destruction | ||||
@@ -61,14 +61,16 @@ JackLibClient::~JackLibClient() | |||||
delete fChannel; | delete fChannel; | ||||
} | } | ||||
int JackLibClient::Open(const char* name, jack_options_t options, jack_status_t* status) | |||||
int JackLibClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
int shared_engine, shared_client, shared_graph, result; | int shared_engine, shared_client, shared_graph, result; | ||||
JackLog("JackLibClient::Open %s\n", name); | JackLog("JackLibClient::Open %s\n", name); | ||||
snprintf(fServerName, sizeof(fServerName), server_name); | |||||
// Open server/client channel | // Open server/client channel | ||||
char name_res[JACK_CLIENT_NAME_SIZE]; | char name_res[JACK_CLIENT_NAME_SIZE]; | ||||
if (fChannel->Open(name, name_res, this, options, status) < 0) { | |||||
if (fChannel->Open(server_name, name, name_res, this, options, status) < 0) { | |||||
jack_error("Cannot connect to the server"); | jack_error("Cannot connect to the server"); | ||||
goto error; | goto error; | ||||
} | } | ||||
@@ -88,9 +90,9 @@ int JackLibClient::Open(const char* name, jack_options_t options, jack_status_t* | |||||
try { | try { | ||||
// Map shared memory segments | // Map shared memory segments | ||||
JackLibGlobals::fGlobals->fEngineControl = shared_engine; | |||||
JackLibGlobals::fGlobals->fGraphManager = shared_graph; | |||||
fClientControl = shared_client; | |||||
JackLibGlobals::fGlobals->fEngineControl.SetShmIndex(shared_engine, fServerName); | |||||
JackLibGlobals::fGlobals->fGraphManager.SetShmIndex(shared_graph, fServerName); | |||||
fClientControl.SetShmIndex(shared_client, fServerName); | |||||
jack_verbose = GetEngineControl()->fVerbose; | jack_verbose = GetEngineControl()->fVerbose; | ||||
} catch (int n) { | } catch (int n) { | ||||
jack_error("Map shared memory segments exception %d", n); | jack_error("Map shared memory segments exception %d", n); | ||||
@@ -109,7 +111,7 @@ int JackLibClient::Open(const char* name, jack_options_t options, jack_status_t* | |||||
#endif | #endif | ||||
*/ | */ | ||||
// Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process | // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process | ||||
if (!fSynchroTable[fClientControl->fRefNum]->Connect(name_res)) { | |||||
if (!fSynchroTable[fClientControl->fRefNum]->Connect(name_res, fServerName)) { | |||||
jack_error("Cannot ConnectSemaphore %s client", name_res); | jack_error("Cannot ConnectSemaphore %s client", name_res); | ||||
goto error; | goto error; | ||||
} | } | ||||
@@ -135,8 +137,8 @@ int JackLibClient::ClientNotifyImp(int refnum, const char* name, int notify, int | |||||
case kAddClient: | case kAddClient: | ||||
JackLog("JackClient::AddClient name = %s, ref = %ld \n", name, refnum); | JackLog("JackClient::AddClient name = %s, ref = %ld \n", name, refnum); | ||||
// the synchro must be usable in I/O mode when several clients live in the same process | |||||
res = fSynchroTable[refnum]->Connect(name) ? 0 : -1; | |||||
// the synchro must be usable in I/O mode when several clients live in the same process | |||||
res = fSynchroTable[refnum]->Connect(name, fServerName) ? 0 : -1; | |||||
break; | break; | ||||
case kRemoveClient: | case kRemoveClient: | ||||
@@ -44,7 +44,7 @@ class JackLibClient : public JackClient | |||||
JackLibClient(JackSynchro** table); | JackLibClient(JackSynchro** table); | ||||
virtual ~JackLibClient(); | virtual ~JackLibClient(); | ||||
int Open(const char* name, jack_options_t options, jack_status_t* status); | |||||
int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); | |||||
int ClientNotifyImp(int refnum, const char* name, int notify, int sync, int value); | int ClientNotifyImp(int refnum, const char* name, int notify, int sync, int value); | ||||
@@ -26,9 +26,9 @@ This program is free software; you can redistribute it and/or modify | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
void JackPosixSemaphore::BuildName(const char* name, char* res) | |||||
void JackPosixSemaphore::BuildName(const char* name, const char* server_name, char* res) | |||||
{ | { | ||||
sprintf(res, "%s/jack_sem.%s", jack_client_dir, name); | |||||
sprintf(res, "%s/jack_sem.%s_%s", jack_client_dir, server_name, name); | |||||
} | } | ||||
bool JackPosixSemaphore::Signal() | bool JackPosixSemaphore::Signal() | ||||
@@ -123,9 +123,9 @@ bool JackPosixSemaphore::TimedWait(long usec) | |||||
} | } | ||||
// Server side : publish the semaphore in the global namespace | // Server side : publish the semaphore in the global namespace | ||||
bool JackPosixSemaphore::Allocate(const char* name, int value) | |||||
bool JackPosixSemaphore::Allocate(const char* name, const char* server_name, int value) | |||||
{ | { | ||||
BuildName(name, fName); | |||||
BuildName(name, server_name, fName); | |||||
JackLog("JackPosixSemaphore::Allocate name = %s val = %ld\n", fName, value); | JackLog("JackPosixSemaphore::Allocate name = %s val = %ld\n", fName, value); | ||||
if ((fSemaphore = sem_open(fName, O_CREAT, 0777, value)) == (sem_t*)SEM_FAILED) { | if ((fSemaphore = sem_open(fName, O_CREAT, 0777, value)) == (sem_t*)SEM_FAILED) { | ||||
@@ -137,9 +137,9 @@ bool JackPosixSemaphore::Allocate(const char* name, int value) | |||||
} | } | ||||
// Client side : get the published semaphore from server | // Client side : get the published semaphore from server | ||||
bool JackPosixSemaphore::ConnectInput(const char* name) | |||||
bool JackPosixSemaphore::ConnectInput(const char* name, const char* server_name) | |||||
{ | { | ||||
BuildName(name, fName); | |||||
BuildName(name, server_name, fName); | |||||
JackLog("JackPosixSemaphore::Connect %s\n", fName); | JackLog("JackPosixSemaphore::Connect %s\n", fName); | ||||
// Temporary... | // Temporary... | ||||
@@ -159,14 +159,14 @@ bool JackPosixSemaphore::ConnectInput(const char* name) | |||||
} | } | ||||
} | } | ||||
bool JackPosixSemaphore::Connect(const char* name) | |||||
bool JackPosixSemaphore::Connect(const char* name, const char* server_name) | |||||
{ | { | ||||
return ConnectInput(name); | |||||
return ConnectInput(name, server_name); | |||||
} | } | ||||
bool JackPosixSemaphore::ConnectOutput(const char* name) | |||||
bool JackPosixSemaphore::ConnectOutput(const char* name, const char* server_name) | |||||
{ | { | ||||
return ConnectInput(name); | |||||
return ConnectInput(name, server_name); | |||||
} | } | ||||
bool JackPosixSemaphore::Disconnect() | bool JackPosixSemaphore::Disconnect() | ||||
@@ -42,7 +42,7 @@ class JackPosixSemaphore : public JackSynchro | |||||
protected: | protected: | ||||
void BuildName(const char* name, char* res); | |||||
void BuildName(const char* name, const char* server_name, char* res); | |||||
public: | public: | ||||
@@ -56,10 +56,10 @@ class JackPosixSemaphore : public JackSynchro | |||||
bool Wait(); | bool Wait(); | ||||
bool TimedWait(long usec); | bool TimedWait(long usec); | ||||
bool Allocate(const char* name, int value); | |||||
bool Connect(const char* name); | |||||
bool ConnectInput(const char* name); | |||||
bool ConnectOutput(const char* name); | |||||
bool Allocate(const char* name, const char* server_name, int value); | |||||
bool Connect(const char* name, const char* server_name); | |||||
bool ConnectInput(const char* name, const char* server_name); | |||||
bool ConnectOutput(const char* name, const char* server_name); | |||||
bool Disconnect(); | bool Disconnect(); | ||||
void Destroy(); | void Destroy(); | ||||
}; | }; | ||||
@@ -137,7 +137,7 @@ class JackInterProcessSync : public JackSyncInterface | |||||
bool Allocate(const char* name) | bool Allocate(const char* name) | ||||
{ | { | ||||
return fSynchro->Allocate(name, 0); | |||||
return fSynchro->Allocate(name, "", 0); | |||||
} | } | ||||
void Destroy() | void Destroy() | ||||
@@ -147,7 +147,7 @@ class JackInterProcessSync : public JackSyncInterface | |||||
bool Connect(const char* name) | bool Connect(const char* name) | ||||
{ | { | ||||
return fSynchro->Connect(name); | |||||
return fSynchro->Connect(name, ""); | |||||
} | } | ||||
bool TimedWait(long usec) | bool TimedWait(long usec) | ||||
@@ -46,13 +46,13 @@ namespace Jack | |||||
JackServer* JackServer::fInstance = NULL; | JackServer* JackServer::fInstance = NULL; | ||||
JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose) | |||||
JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose, const char* server_name) | |||||
{ | { | ||||
JackGlobals::InitServer(); | JackGlobals::InitServer(); | ||||
for (int i = 0; i < CLIENT_NUM; i++) | for (int i = 0; i < CLIENT_NUM; i++) | ||||
fSynchroTable[i] = JackGlobals::MakeSynchro(); | fSynchroTable[i] = JackGlobals::MakeSynchro(); | ||||
fGraphManager = new JackGraphManager(); | fGraphManager = new JackGraphManager(); | ||||
fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose); | |||||
fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name); | |||||
fEngine = new JackEngine(fGraphManager, fSynchroTable, fEngineControl); | fEngine = new JackEngine(fGraphManager, fSynchroTable, fEngineControl); | ||||
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable)); | fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable)); | ||||
fLoopbackDriver = new JackLoopbackDriver("loopback", fEngine, fSynchroTable); | fLoopbackDriver = new JackLoopbackDriver("loopback", fEngine, fSynchroTable); | ||||
@@ -89,7 +89,7 @@ JackServer::~JackServer() | |||||
int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params) | int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params) | ||||
{ | { | ||||
if (fChannel->Open(this) < 0) { | |||||
if (fChannel->Open(fEngineControl->fServerName, this) < 0) { | |||||
jack_error("Server channel open error"); | jack_error("Server channel open error"); | ||||
return -1; | return -1; | ||||
} | } | ||||
@@ -179,7 +179,7 @@ int JackServer::InternalClientLoad(const char* client_name, const char* so_name, | |||||
*status = 0; | *status = 0; | ||||
JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data); | JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data); | ||||
assert(client); | assert(client); | ||||
int res = client->Open(client_name, (jack_options_t)options, (jack_status_t*)status); | |||||
int res = client->Open("unused", client_name, (jack_options_t)options, (jack_status_t*)status); | |||||
if (res < 0) { | if (res < 0) { | ||||
delete client; | delete client; | ||||
*int_ref = 0; | *int_ref = 0; | ||||
@@ -61,7 +61,7 @@ class EXPORT JackServer | |||||
public: | public: | ||||
JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose); | |||||
JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose, const char* server_name); | |||||
virtual ~JackServer(); | virtual ~JackServer(); | ||||
int Open(jack_driver_desc_t* driver_desc, JSList* driver_params); | int Open(jack_driver_desc_t* driver_desc, JSList* driver_params); | ||||
@@ -41,9 +41,6 @@ extern "C" | |||||
{ | { | ||||
#endif | #endif | ||||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); | |||||
EXPORT void my_jack_internal_client_close(jack_client_t* ext_client); | |||||
EXPORT jack_client_t * jack_client_open (const char *client_name, | EXPORT jack_client_t * jack_client_open (const char *client_name, | ||||
jack_options_t options, | jack_options_t options, | ||||
jack_status_t *status, ...); | jack_status_t *status, ...); | ||||
@@ -56,51 +53,6 @@ extern "C" | |||||
using namespace Jack; | using namespace Jack; | ||||
EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data) | |||||
{ | |||||
jack_status_t my_status = (jack_status_t)0; | |||||
JackLog("jack_internal_client_new %s", client_name); | |||||
if (client_name == NULL) { | |||||
jack_error("jack_internal_client_new called with a NULL client_name"); | |||||
return NULL; | |||||
} | |||||
JackClient* client; | |||||
try { | |||||
#ifdef __CLIENTDEBUG__ | |||||
client = new JackDebugClient(new JackLoadableInternalClient(JackServer::fInstance, GetSynchroTable(), dll_name, object_data)); // Debug mode | |||||
#else | |||||
client = new JackLoadableInternalClient(JackServer::fInstance, GetSynchroTable(), dll_name, object_data); // To improve... | |||||
#endif | |||||
} catch (...) { // Allocation or dynamic code loading failure | |||||
return NULL; | |||||
} | |||||
jack_options_t options = JackUseExactName; | |||||
int res = client->Open(client_name, options, &my_status); | |||||
if (res < 0) { | |||||
delete client; | |||||
return NULL; | |||||
} else { | |||||
return (jack_client_t*)client; | |||||
} | |||||
} | |||||
EXPORT void my_jack_internal_client_close(jack_client_t* ext_client) | |||||
{ | |||||
JackLog("jack_internal_client_close"); | |||||
JackClient* client = (JackClient*)ext_client; | |||||
if (client == NULL) { | |||||
jack_error("jack_internal_client_close called with a NULL client"); | |||||
} else { | |||||
client->Close(); | |||||
delete client; | |||||
JackLog("jack_internal_client_close OK"); | |||||
} | |||||
} | |||||
EXPORT jack_client_t* jack_client_new(const char* client_name) | EXPORT jack_client_t* jack_client_new(const char* client_name) | ||||
{ | { | ||||
int options = JackUseExactName; | int options = JackUseExactName; | ||||
@@ -150,7 +102,7 @@ EXPORT jack_client_t* jack_client_open(const char* client_name, jack_options_t o | |||||
JackClient* client = new JackInternalClient(JackServer::fInstance, GetSynchroTable()); // To improve... | JackClient* client = new JackInternalClient(JackServer::fInstance, GetSynchroTable()); // To improve... | ||||
#endif | #endif | ||||
int res = client->Open(client_name, options, status); | |||||
int res = client->Open(va.server_name, client_name, options, status); | |||||
if (res < 0) { | if (res < 0) { | ||||
delete client; | delete client; | ||||
JackServerGlobals::Destroy(); // jack server destruction | JackServerGlobals::Destroy(); // jack server destruction | ||||
@@ -46,7 +46,7 @@ static char* jack_default_server_name(void) | |||||
{ | { | ||||
char* server_name; | char* server_name; | ||||
if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) | if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) | ||||
server_name = "jackdmp_default"; | |||||
server_name = "default"; | |||||
return server_name; | return server_name; | ||||
} | } | ||||
@@ -141,10 +141,10 @@ jack_cleanup_files(const char *server_name) | |||||
#endif | #endif | ||||
int JackServerGlobals::JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose) | |||||
int JackServerGlobals::JackStart(const char* server_name, jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose) | |||||
{ | { | ||||
JackLog("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld \n", sync, time_out_ms, rt, priority, verbose); | JackLog("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld \n", sync, time_out_ms, rt, priority, verbose); | ||||
fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose); | |||||
fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose, server_name); | |||||
int res = fServer->Open(driver_desc, driver_params); | int res = fServer->Open(driver_desc, driver_params); | ||||
return (res < 0) ? res : fServer->Start(); | return (res < 0) ? res : fServer->Start(); | ||||
} | } | ||||
@@ -384,7 +384,7 @@ bool JackServerGlobals::Init() | |||||
free(argv[i]); | free(argv[i]); | ||||
} | } | ||||
int res = JackStart(driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, verbose_aux); | |||||
int res = JackStart(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, verbose_aux); | |||||
if (res < 0) { | if (res < 0) { | ||||
jack_error("Cannot start server... exit"); | jack_error("Cannot start server... exit"); | ||||
JackDelete(); | JackDelete(); | ||||
@@ -46,7 +46,16 @@ struct JackServerGlobals | |||||
static bool Init(); | static bool Init(); | ||||
static void Destroy(); | static void Destroy(); | ||||
static int JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose); | |||||
static int JackStart(const char* server_name, | |||||
jack_driver_desc_t* driver_desc, | |||||
JSList* driver_params, | |||||
int sync, | |||||
int temporary, | |||||
int time_out_ms, | |||||
int rt, | |||||
int priority, | |||||
int loopback, | |||||
int verbose); | |||||
static int JackStop(); | static int JackStop(); | ||||
static int JackDelete(); | static int JackDelete(); | ||||
}; | }; | ||||
@@ -26,8 +26,6 @@ namespace Jack | |||||
{ | { | ||||
unsigned long JackShmMem::fSegmentNum = 0; | unsigned long JackShmMem::fSegmentNum = 0; | ||||
unsigned long JackShmMem::fSegmentCount = 0; | |||||
jack_shm_info_t JackShmMem::gInfo; | jack_shm_info_t JackShmMem::gInfo; | ||||
size_t JackMem::gSize = 0; | size_t JackMem::gSize = 0; | ||||
@@ -39,14 +37,6 @@ void* JackShmMem::operator new(size_t size) | |||||
snprintf(name, sizeof(name), "/jack_shared%ld", JackShmMem::fSegmentNum++); | snprintf(name, sizeof(name), "/jack_shared%ld", JackShmMem::fSegmentNum++); | ||||
if (JackShmMem::fSegmentCount++ == 0) { | |||||
JackLog("jack_initialize_shm\n"); | |||||
if (jack_initialize_shm_server() < 0) { | |||||
jack_error("cannot initialize shm", strerror(errno)); | |||||
goto error; | |||||
} | |||||
} | |||||
if (jack_shmalloc(name, size, &info)) { | if (jack_shmalloc(name, size, &info)) { | ||||
jack_error("cannot create shared memory segment of size = %d", size, strerror(errno)); | jack_error("cannot create shared memory segment of size = %d", size, strerror(errno)); | ||||
goto error; | goto error; | ||||
@@ -84,11 +74,6 @@ void JackShmMem::operator delete(void* p, size_t size) | |||||
jack_release_shm(&info); | jack_release_shm(&info); | ||||
jack_destroy_shm(&info); | jack_destroy_shm(&info); | ||||
if (--JackShmMem::fSegmentCount == 0) { | |||||
JackLog("jack_cleanup_shm\n"); | |||||
jack_cleanup_shm(); | |||||
} | |||||
} | } | ||||
void LockMemoryImp(void* ptr, size_t size) | void LockMemoryImp(void* ptr, size_t size) | ||||
@@ -100,7 +100,6 @@ class JackShmMem | |||||
jack_shm_info_t fInfo; | jack_shm_info_t fInfo; | ||||
static unsigned long fSegmentNum; | static unsigned long fSegmentNum; | ||||
static unsigned long fSegmentCount; | |||||
static jack_shm_info_t gInfo; | static jack_shm_info_t gInfo; | ||||
public: | public: | ||||
@@ -152,11 +151,11 @@ class JackShmReadWritePtr | |||||
jack_shm_info_t fInfo; | jack_shm_info_t fInfo; | ||||
void Init(int index) | |||||
void Init(int index, const char* server_name = "default") | |||||
{ | { | ||||
if (fInfo.index < 0 && index >= 0) { | if (fInfo.index < 0 && index >= 0) { | ||||
JackLog("JackShmReadWritePtr::Init %ld %ld\n", index, fInfo.index); | JackLog("JackShmReadWritePtr::Init %ld %ld\n", index, fInfo.index); | ||||
if (jack_initialize_shm_client() < 0) | |||||
if (jack_initialize_shm(server_name) < 0) | |||||
throw - 1; | throw - 1; | ||||
fInfo.index = index; | fInfo.index = index; | ||||
if (jack_attach_shm(&fInfo)) { | if (jack_attach_shm(&fInfo)) { | ||||
@@ -174,9 +173,9 @@ class JackShmReadWritePtr | |||||
fInfo.attached_at = NULL; | fInfo.attached_at = NULL; | ||||
} | } | ||||
JackShmReadWritePtr(int index) | |||||
JackShmReadWritePtr(int index, const char* server_name) | |||||
{ | { | ||||
Init(index); | |||||
Init(index, server_name); | |||||
} | } | ||||
virtual ~JackShmReadWritePtr() | virtual ~JackShmReadWritePtr() | ||||
@@ -203,6 +202,11 @@ class JackShmReadWritePtr | |||||
Init(index); | Init(index); | ||||
return *this; | return *this; | ||||
} | } | ||||
void SetShmIndex(int index, const char* server_name) | |||||
{ | |||||
Init(index, server_name); | |||||
} | |||||
int GetShmIndex() | int GetShmIndex() | ||||
{ | { | ||||
@@ -227,11 +231,11 @@ class JackShmReadWritePtr1 | |||||
jack_shm_info_t fInfo; | jack_shm_info_t fInfo; | ||||
void Init(int index) | |||||
void Init(int index, const char* server_name = "default") | |||||
{ | { | ||||
if (fInfo.index < 0 && index >= 0) { | if (fInfo.index < 0 && index >= 0) { | ||||
JackLog("JackShmReadWritePtr1::Init %ld %ld\n", index, fInfo.index); | JackLog("JackShmReadWritePtr1::Init %ld %ld\n", index, fInfo.index); | ||||
if (jack_initialize_shm_client() < 0) | |||||
if (jack_initialize_shm(server_name) < 0) | |||||
throw - 1; | throw - 1; | ||||
fInfo.index = index; | fInfo.index = index; | ||||
if (jack_attach_shm(&fInfo)) { | if (jack_attach_shm(&fInfo)) { | ||||
@@ -255,9 +259,9 @@ class JackShmReadWritePtr1 | |||||
fInfo.attached_at = NULL; | fInfo.attached_at = NULL; | ||||
} | } | ||||
JackShmReadWritePtr1(int index) | |||||
JackShmReadWritePtr1(int index, const char* server_name) | |||||
{ | { | ||||
Init(index); | |||||
Init(index, server_name); | |||||
} | } | ||||
virtual ~JackShmReadWritePtr1() | virtual ~JackShmReadWritePtr1() | ||||
@@ -284,6 +288,11 @@ class JackShmReadWritePtr1 | |||||
Init(index); | Init(index); | ||||
return *this; | return *this; | ||||
} | } | ||||
void SetShmIndex(int index, const char* server_name) | |||||
{ | |||||
Init(index, server_name); | |||||
} | |||||
int GetShmIndex() | int GetShmIndex() | ||||
{ | { | ||||
@@ -308,11 +317,11 @@ class JackShmReadPtr | |||||
jack_shm_info_t fInfo; | jack_shm_info_t fInfo; | ||||
void Init(int index) | |||||
void Init(int index, const char* server_name = "default") | |||||
{ | { | ||||
if (fInfo.index < 0 && index >= 0) { | if (fInfo.index < 0 && index >= 0) { | ||||
JackLog("JackShmPtrRead::Init %ld %ld\n", index, fInfo.index); | JackLog("JackShmPtrRead::Init %ld %ld\n", index, fInfo.index); | ||||
if (jack_initialize_shm_client() < 0) | |||||
if (jack_initialize_shm(server_name) < 0) | |||||
throw - 1; | throw - 1; | ||||
fInfo.index = index; | fInfo.index = index; | ||||
if (jack_attach_shm_read(&fInfo)) { | if (jack_attach_shm_read(&fInfo)) { | ||||
@@ -330,9 +339,9 @@ class JackShmReadPtr | |||||
fInfo.attached_at = NULL; | fInfo.attached_at = NULL; | ||||
} | } | ||||
JackShmReadPtr(int index) | |||||
JackShmReadPtr(int index, const char* server_name) | |||||
{ | { | ||||
Init(index); | |||||
Init(index, server_name); | |||||
} | } | ||||
virtual ~JackShmReadPtr() | virtual ~JackShmReadPtr() | ||||
@@ -359,6 +368,11 @@ class JackShmReadPtr | |||||
Init(index); | Init(index); | ||||
return *this; | return *this; | ||||
} | } | ||||
void SetShmIndex(int index, const char* server_name) | |||||
{ | |||||
Init(index, server_name); | |||||
} | |||||
int GetShmIndex() | int GetShmIndex() | ||||
{ | { | ||||
@@ -41,6 +41,8 @@ JackSocketClientChannel::~JackSocketClientChannel() | |||||
int JackSocketClientChannel::ServerCheck(const char* server_name) | int JackSocketClientChannel::ServerCheck(const char* server_name) | ||||
{ | { | ||||
JackLog("JackSocketClientChannel::ServerCheck = %s\n", server_name); | JackLog("JackSocketClientChannel::ServerCheck = %s\n", server_name); | ||||
char jack_server_dir_name[512]; | |||||
snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); | |||||
// Connect to server | // Connect to server | ||||
if (fRequestSocket.Connect(jack_server_dir, 0) < 0) { | if (fRequestSocket.Connect(jack_server_dir, 0) < 0) { | ||||
@@ -52,12 +54,14 @@ int JackSocketClientChannel::ServerCheck(const char* server_name) | |||||
} | } | ||||
} | } | ||||
int JackSocketClientChannel::Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||||
int JackSocketClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
int result = 0; | int result = 0; | ||||
JackLog("JackSocketClientChannel::Open name = %s\n", name); | JackLog("JackSocketClientChannel::Open name = %s\n", name); | ||||
char jack_server_dir_name[512]; | |||||
snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); | |||||
if (fRequestSocket.Connect(jack_server_dir, 0) < 0) { | |||||
if (fRequestSocket.Connect(jack_server_dir_name, 0) < 0) { | |||||
jack_error("Cannot connect to server socket"); | jack_error("Cannot connect to server socket"); | ||||
goto error; | goto error; | ||||
} | } | ||||
@@ -51,7 +51,7 @@ class JackSocketClientChannel : public JackClientChannelInterface, public JackRu | |||||
JackSocketClientChannel(); | JackSocketClientChannel(); | ||||
virtual ~JackSocketClientChannel(); | virtual ~JackSocketClientChannel(); | ||||
int Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); | |||||
int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); | |||||
void Close(); | void Close(); | ||||
int Start(); | int Start(); | ||||
@@ -44,13 +44,16 @@ JackSocketServerChannel::~JackSocketServerChannel() | |||||
delete[] fPollTable; | delete[] fPollTable; | ||||
} | } | ||||
int JackSocketServerChannel::Open(JackServer* server) | |||||
int JackSocketServerChannel::Open(const char* server_name, JackServer* server) | |||||
{ | { | ||||
JackLog("JackSocketServerChannel::Open \n"); | JackLog("JackSocketServerChannel::Open \n"); | ||||
char jack_server_dir_name[512]; | |||||
snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); | |||||
fServer = server; | fServer = server; | ||||
// Prepare request socket | // Prepare request socket | ||||
if (fRequestListenSocket.Bind(jack_server_dir, 0) < 0) { | |||||
if (fRequestListenSocket.Bind(jack_server_dir_name, 0) < 0) { | |||||
JackLog("JackSocketServerChannel::Open : cannot create result listen socket\n"); | JackLog("JackSocketServerChannel::Open : cannot create result listen socket\n"); | ||||
return -1; | return -1; | ||||
} | } | ||||
@@ -57,7 +57,7 @@ class JackSocketServerChannel : public JackServerChannelInterface, public JackRu | |||||
JackSocketServerChannel(); | JackSocketServerChannel(); | ||||
virtual ~JackSocketServerChannel(); | virtual ~JackSocketServerChannel(); | ||||
int Open(JackServer* server); // Open the Server/Client connection | |||||
int Open(const char* server_name, JackServer* server); // Open the Server/Client connection | |||||
void Close(); // Close the Server/Client connection | void Close(); // Close the Server/Client connection | ||||
// JackRunnableInterface interface | // JackRunnableInterface interface | ||||
@@ -25,9 +25,12 @@ This program is free software; you can redistribute it and/or modify | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
int JackSocketServerNotifyChannel::Open() | |||||
int JackSocketServerNotifyChannel::Open(const char* server_name) | |||||
{ | { | ||||
if (fRequestSocket.Connect(jack_server_dir, 0) < 0) { | |||||
char jack_server_dir_name[512]; | |||||
snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); | |||||
if (fRequestSocket.Connect(jack_server_dir_name, 0) < 0) { | |||||
jack_error("Cannot connect to server socket"); | jack_error("Cannot connect to server socket"); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
@@ -43,7 +43,7 @@ class JackSocketServerNotifyChannel : public JackServerNotifyChannelInterface | |||||
virtual ~JackSocketServerNotifyChannel() | virtual ~JackSocketServerNotifyChannel() | ||||
{} | {} | ||||
int Open(); | |||||
int Open(const char* server_name); | |||||
void Close(); | void Close(); | ||||
void ClientNotify(int refnum, int notify, int value); | void ClientNotify(int refnum, int notify, int value); | ||||
@@ -39,7 +39,7 @@ class JackSynchro | |||||
char fName[SYNC_MAX_NAME_SIZE]; | char fName[SYNC_MAX_NAME_SIZE]; | ||||
bool fFlush; // If true, signal are "flushed" : used for drivers that do no consume the signal | bool fFlush; // If true, signal are "flushed" : used for drivers that do no consume the signal | ||||
virtual void BuildName(const char* name, char* res) | |||||
virtual void BuildName(const char* name, const char* server_name, char* res) | |||||
{} | {} | ||||
public: | public: | ||||
@@ -65,19 +65,19 @@ class JackSynchro | |||||
{ | { | ||||
return true; | return true; | ||||
} | } | ||||
virtual bool Allocate(const char* name, int value) | |||||
virtual bool Allocate(const char* name, const char* server_name, int value) | |||||
{ | { | ||||
return true; | return true; | ||||
} | } | ||||
virtual bool Connect(const char* name) | |||||
virtual bool Connect(const char* name, const char* server_name) | |||||
{ | { | ||||
return true; | return true; | ||||
} | } | ||||
virtual bool ConnectInput(const char* name) | |||||
virtual bool ConnectInput(const char* name, const char* server_name) | |||||
{ | { | ||||
return true; | return true; | ||||
} | } | ||||
virtual bool ConnectOutput(const char* name) | |||||
virtual bool ConnectOutput(const char* name, const char* server_name) | |||||
{ | { | ||||
return true; | return true; | ||||
} | } | ||||
@@ -73,7 +73,7 @@ static void usage(FILE* file) | |||||
copyright(file); | copyright(file); | ||||
fprintf(file, "\n" | fprintf(file, "\n" | ||||
"usage: jackdmp [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" | "usage: jackdmp [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" | ||||
// " [ --name OR -n server-name ]\n" | |||||
" [ --name OR -n server-name ]\n" | |||||
// " [ --no-mlock OR -m ]\n" | // " [ --no-mlock OR -m ]\n" | ||||
// " [ --unlock OR -u ]\n" | // " [ --unlock OR -u ]\n" | ||||
" [ --timeout OR -t client-timeout-in-msecs ]\n" | " [ --timeout OR -t client-timeout-in-msecs ]\n" | ||||
@@ -103,10 +103,10 @@ static void DoNothingHandler(int sig) | |||||
write(1, buf, strlen(buf)); | write(1, buf, strlen(buf)); | ||||
} | } | ||||
static int JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose) | |||||
static int JackStart(const char* server_name, jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose) | |||||
{ | { | ||||
JackLog("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld \n", sync, time_out_ms, rt, priority, verbose); | JackLog("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld \n", sync, time_out_ms, rt, priority, verbose); | ||||
fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose); | |||||
fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose, server_name); | |||||
int res = fServer->Open(driver_desc, driver_params); | int res = fServer->Open(driver_desc, driver_params); | ||||
return (res < 0) ? res : fServer->Start(); | return (res < 0) ? res : fServer->Start(); | ||||
} | } | ||||
@@ -141,7 +141,7 @@ static char* jack_default_server_name(void) | |||||
{ | { | ||||
char* server_name; | char* server_name; | ||||
if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) | if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) | ||||
server_name = "jackdmp_default"; | |||||
server_name = "default"; | |||||
return server_name; | return server_name; | ||||
} | } | ||||
@@ -452,7 +452,7 @@ int main(int argc, char* argv[]) | |||||
if (!realtime && client_timeout == 0) | if (!realtime && client_timeout == 0) | ||||
client_timeout = 500; /* 0.5 sec; usable when non realtime. */ | client_timeout = 500; /* 0.5 sec; usable when non realtime. */ | ||||
int res = JackStart(driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, jack_verbose); | |||||
int res = JackStart(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, jack_verbose); | |||||
if (res < 0) { | if (res < 0) { | ||||
jack_error("Cannot start server... exit"); | jack_error("Cannot start server... exit"); | ||||
JackDelete(); | JackDelete(); | ||||
@@ -460,14 +460,6 @@ int main(int argc, char* argv[]) | |||||
} | } | ||||
/* | /* | ||||
jack_client_t* c1 = my_jack_internal_client_new("c1", "inprocess.so", "untitled"); | |||||
jack_client_t* c2 = my_jack_internal_client_new("c2", "inprocess.so", "untitled"); | |||||
jack_client_t* c3 = my_jack_internal_client_new("c3", "inprocess.so", "untitled"); | |||||
jack_client_t* c4 = my_jack_internal_client_new("c4", "inprocess.so", "untitled"); | |||||
jack_client_t* c5 = my_jack_internal_client_new("c5", "inprocess.so", "untitled"); | |||||
*/ | |||||
/* | |||||
For testing purpose... | For testing purpose... | ||||
InternalMetro* client1 = new InternalMetro(1200, 0.4, 20, 80, "metro1"); | InternalMetro* client1 = new InternalMetro(1200, 0.4, 20, 80, "metro1"); | ||||
InternalMetro* client2 = new InternalMetro(600, 0.4, 20, 150, "metro2"); | InternalMetro* client2 = new InternalMetro(600, 0.4, 20, 150, "metro2"); | ||||
@@ -523,15 +515,7 @@ int main(int argc, char* argv[]) | |||||
sigprocmask(SIG_UNBLOCK, &signals, 0); | sigprocmask(SIG_UNBLOCK, &signals, 0); | ||||
} | } | ||||
/* | |||||
my_jack_internal_client_close(c1); | |||||
my_jack_internal_client_close(c2); | |||||
my_jack_internal_client_close(c3); | |||||
my_jack_internal_client_close(c4); | |||||
my_jack_internal_client_close(c5); | |||||
*/ | |||||
JackStop(); | |||||
JackStop(); | |||||
jack_cleanup_shm(); | jack_cleanup_shm(); | ||||
jack_cleanup_files(server_name); | jack_cleanup_files(server_name); | ||||
@@ -146,8 +146,6 @@ extern "C" | |||||
const char *load_name, | const char *load_name, | ||||
const char *load_init); | const char *load_init); | ||||
jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); | |||||
/** | /** | ||||
* Remove an internal client from a JACK server. | * Remove an internal client from a JACK server. | ||||
* | * | ||||
@@ -155,8 +153,6 @@ extern "C" | |||||
*/ | */ | ||||
void jack_internal_client_close (const char *client_name); | void jack_internal_client_close (const char *client_name); | ||||
void my_jack_internal_client_close (jack_client_t* client); | |||||
/** | /** | ||||
* @param client pointer to JACK client structure. | * @param client pointer to JACK client structure. | ||||
* | * | ||||
@@ -352,18 +352,6 @@ jack_initialize_shm (const char *server_name) | |||||
} | } | ||||
// steph | |||||
int jack_initialize_shm_server() | |||||
{ | |||||
return jack_initialize_shm("default"); | |||||
} | |||||
int jack_initialize_shm_client() | |||||
{ | |||||
return jack_initialize_shm("default"); | |||||
} | |||||
char* jack_shm_addr (jack_shm_info_t* si) | char* jack_shm_addr (jack_shm_info_t* si) | ||||
{ | { | ||||
return (char*)si->attached_at; | return (char*)si->attached_at; | ||||
@@ -15,7 +15,6 @@ | |||||
* along with this program; if not, write to the Free Software | * along with this program; if not, write to the Free Software | ||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
* | * | ||||
* $Id: varargs.h,v 1.3 2005/11/23 11:24:00 letz Exp $ | |||||
*/ | */ | ||||
#ifndef __jack_varargs_h__ | #ifndef __jack_varargs_h__ | ||||
@@ -54,9 +53,12 @@ extern "C" | |||||
jack_varargs_init (va); | jack_varargs_init (va); | ||||
if ((options & JackServerName)) { | if ((options & JackServerName)) { | ||||
printf("jack_varargs_parse :JackServerName\n"); | |||||
char *sn = va_arg(ap, char *); | char *sn = va_arg(ap, char *); | ||||
if (sn) | |||||
if (sn) { | |||||
printf("jack_varargs_parse : FOUND SERVER NAME %s\n", sn); | |||||
va->server_name = sn; | va->server_name = sn; | ||||
} | |||||
} | } | ||||
if ((options & JackLoadName)) | if ((options & JackLoadName)) | ||||
va->load_name = va_arg(ap, char *); | va->load_name = va_arg(ap, char *); | ||||
@@ -44,9 +44,11 @@ JackMachClientChannel::~JackMachClientChannel() | |||||
int JackMachClientChannel::ServerCheck(const char* server_name) | int JackMachClientChannel::ServerCheck(const char* server_name) | ||||
{ | { | ||||
JackLog("JackMachClientChannel::ServerCheck = %s\n", server_name); | JackLog("JackMachClientChannel::ServerCheck = %s\n", server_name); | ||||
char jack_server_entry_name[512]; | |||||
snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); | |||||
// Connect to server | // Connect to server | ||||
if (!fServerPort.ConnectPort(jack_server_entry)) { | |||||
if (!fServerPort.ConnectPort(jack_server_entry_name)) { | |||||
jack_error("Cannot connect to server Mach port"); | jack_error("Cannot connect to server Mach port"); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
@@ -54,12 +56,14 @@ int JackMachClientChannel::ServerCheck(const char* server_name) | |||||
} | } | ||||
} | } | ||||
int JackMachClientChannel::Open(const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status) | |||||
int JackMachClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
JackLog("JackMachClientChannel::Open name = %s\n", name); | JackLog("JackMachClientChannel::Open name = %s\n", name); | ||||
char jack_server_entry_name[512]; | |||||
snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); | |||||
// Connect to server | // Connect to server | ||||
if (!fServerPort.ConnectPort(jack_server_entry)) { | |||||
if (!fServerPort.ConnectPort(jack_server_entry_name)) { | |||||
jack_error("Cannot connect to server Mach port"); | jack_error("Cannot connect to server Mach port"); | ||||
return -1; | return -1; | ||||
} | } | ||||
@@ -48,7 +48,7 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn | |||||
JackMachClientChannel(); | JackMachClientChannel(); | ||||
virtual ~JackMachClientChannel(); | virtual ~JackMachClientChannel(); | ||||
int Open(const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status); | |||||
int Open(const char* server_name, const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status); | |||||
void Close(); | void Close(); | ||||
int Start(); | int Start(); | ||||
@@ -27,9 +27,9 @@ namespace Jack | |||||
mach_port_t JackMachSemaphore::fBootPort = 0; | mach_port_t JackMachSemaphore::fBootPort = 0; | ||||
void JackMachSemaphore::BuildName(const char* name, char* res) | |||||
void JackMachSemaphore::BuildName(const char* name, const char* server_name, char* res) | |||||
{ | { | ||||
sprintf(res, "jack_mach_sem.%s", name); | |||||
sprintf(res, "jack_mach_sem.%s_%s", server_name, name); | |||||
} | } | ||||
bool JackMachSemaphore::Signal() | bool JackMachSemaphore::Signal() | ||||
@@ -84,9 +84,9 @@ bool JackMachSemaphore::TimedWait(long usec) | |||||
} | } | ||||
// Server side : publish the semaphore in the global namespace | // Server side : publish the semaphore in the global namespace | ||||
bool JackMachSemaphore::Allocate(const char* name, int value) | |||||
bool JackMachSemaphore::Allocate(const char* name, const char* server_name, int value) | |||||
{ | { | ||||
BuildName(name, fName); | |||||
BuildName(name, server_name, fName); | |||||
mach_port_t task = mach_task_self(); | mach_port_t task = mach_task_self(); | ||||
kern_return_t res; | kern_return_t res; | ||||
@@ -128,9 +128,9 @@ bool JackMachSemaphore::Allocate(const char* name, int value) | |||||
} | } | ||||
// Client side : get the published semaphore from server | // Client side : get the published semaphore from server | ||||
bool JackMachSemaphore::ConnectInput(const char* name) | |||||
bool JackMachSemaphore::ConnectInput(const char* name, const char* server_name) | |||||
{ | { | ||||
BuildName(name, fName); | |||||
BuildName(name, server_name, fName); | |||||
kern_return_t res; | kern_return_t res; | ||||
// Temporary... A REVOIR | // Temporary... A REVOIR | ||||
@@ -157,14 +157,14 @@ bool JackMachSemaphore::ConnectInput(const char* name) | |||||
return true; | return true; | ||||
} | } | ||||
bool JackMachSemaphore::Connect(const char* name) | |||||
bool JackMachSemaphore::Connect(const char* name, const char* server_name) | |||||
{ | { | ||||
return ConnectInput(name); | |||||
return ConnectInput(name, server_name); | |||||
} | } | ||||
bool JackMachSemaphore::ConnectOutput(const char* name) | |||||
bool JackMachSemaphore::ConnectOutput(const char* name, const char* server_name) | |||||
{ | { | ||||
return ConnectInput(name); | |||||
return ConnectInput(name, server_name); | |||||
} | } | ||||
bool JackMachSemaphore::Disconnect() | bool JackMachSemaphore::Disconnect() | ||||
@@ -45,7 +45,7 @@ class JackMachSemaphore : public JackSynchro | |||||
protected: | protected: | ||||
void BuildName(const char* name, char* res); | |||||
void BuildName(const char* name, const char* server_name, char* res); | |||||
public: | public: | ||||
@@ -59,10 +59,10 @@ class JackMachSemaphore : public JackSynchro | |||||
bool Wait(); | bool Wait(); | ||||
bool TimedWait(long usec); | bool TimedWait(long usec); | ||||
bool Allocate(const char* name, int value); | |||||
bool Connect(const char* name); | |||||
bool ConnectInput(const char* name); | |||||
bool ConnectOutput(const char* name); | |||||
bool Allocate(const char* name, const char* server_name, int value); | |||||
bool Connect(const char* name, const char* server_name); | |||||
bool ConnectInput(const char* name, const char* server_name); | |||||
bool ConnectOutput(const char* name, const char* server_name); | |||||
bool Disconnect(); | bool Disconnect(); | ||||
void Destroy(); | void Destroy(); | ||||
}; | }; | ||||
@@ -42,11 +42,13 @@ JackMachServerChannel::~JackMachServerChannel() | |||||
delete fThread; | delete fThread; | ||||
} | } | ||||
int JackMachServerChannel::Open(JackServer* server) | |||||
int JackMachServerChannel::Open(const char* server_name, JackServer* server) | |||||
{ | { | ||||
JackLog("JackMachServerChannel::Open\n"); | JackLog("JackMachServerChannel::Open\n"); | ||||
char jack_server_entry_name[512]; | |||||
snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); | |||||
if (!fServerPort.AllocatePort(jack_server_entry, 16)) { // 16 is the max possible value | |||||
if (!fServerPort.AllocatePort(jack_server_entry_name, 16)) { // 16 is the max possible value | |||||
jack_error("Cannot check in Jack server"); | jack_error("Cannot check in Jack server"); | ||||
return -1; | return -1; | ||||
} | } | ||||
@@ -52,7 +52,7 @@ class JackMachServerChannel : public JackServerChannelInterface, public JackRunn | |||||
JackMachServerChannel(); | JackMachServerChannel(); | ||||
virtual ~JackMachServerChannel(); | virtual ~JackMachServerChannel(); | ||||
int Open(JackServer* server); // Open the Server/Client connection | |||||
int Open(const char* server_name, JackServer* server); // Open the Server/Client connection | |||||
void Close(); // Close the Server/Client connection | void Close(); // Close the Server/Client connection | ||||
JackEngine* GetEngine(); | JackEngine* GetEngine(); | ||||
@@ -24,11 +24,13 @@ This program is free software; you can redistribute it and/or modify | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
int JackMachServerNotifyChannel::Open() | |||||
int JackMachServerNotifyChannel::Open(const char* server_name) | |||||
{ | { | ||||
JackLog("JackMachServerChannel::Open\n"); | JackLog("JackMachServerChannel::Open\n"); | ||||
char jack_server_entry_name[512]; | |||||
snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); | |||||
if (!fClientPort.ConnectPort(jack_server_entry)) { | |||||
if (!fClientPort.ConnectPort(jack_server_entry_name)) { | |||||
jack_error("Cannot connect to server port"); | jack_error("Cannot connect to server port"); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
@@ -44,7 +44,7 @@ class JackMachServerNotifyChannel : public JackServerNotifyChannelInterface | |||||
virtual ~JackMachServerNotifyChannel() | virtual ~JackMachServerNotifyChannel() | ||||
{} | {} | ||||
int Open(); // Open the Server/Client connection | |||||
int Open(const char* server_name); // Open the Server/Client connection | |||||
void Close(); // Close the Server/Client connection | void Close(); // Close the Server/Client connection | ||||
void ClientNotify(int refnum, int notify, int value); | void ClientNotify(int refnum, int notify, int value); | ||||
@@ -463,7 +463,8 @@ int main (int argc, char *argv[]) | |||||
{ | { | ||||
const char **inports; // array of PHY input/output | const char **inports; // array of PHY input/output | ||||
const char **outports; // array of PHY input/outputs | const char **outports; // array of PHY input/outputs | ||||
const char *server_name = NULL; | |||||
//const char *server_name = NULL; | |||||
const char *server_name = "titititi"; | |||||
const char **connexions1; | const char **connexions1; | ||||
const char **connexions2; | const char **connexions2; | ||||
jack_status_t status; | jack_status_t status; | ||||
@@ -479,10 +480,10 @@ int main (int argc, char *argv[]) | |||||
int connected = 0; // check connect functions of ports | int connected = 0; // check connect functions of ports | ||||
const char *options = "kRnqvt:"; | const char *options = "kRnqvt:"; | ||||
float ratio; // for speed calculation in freewheel mode | float ratio; // for speed calculation in freewheel mode | ||||
jack_options_t jack_options = JackNullOption; | |||||
jack_options_t jack_options = JackNullOption; | |||||
//jack_options_t jack_options = JackServerName; | |||||
struct option long_options[] = { | struct option long_options[] = { | ||||
{"realtime", 0, 0, 'R' | |||||
}, | |||||
{"realtime", 0, 0, 'R'}, | |||||
{"non-realtime", 0, 0, 'n'}, | {"non-realtime", 0, 0, 'n'}, | ||||
{"time", 0, 0, 't'}, | {"time", 0, 0, 't'}, | ||||
{"quiet", 0, 0, 'q'}, | {"quiet", 0, 0, 'q'}, | ||||
@@ -42,8 +42,8 @@ struct ServerThread : public JackRunnableInterface { | |||||
ServerThread() | ServerThread() | ||||
{ | { | ||||
fServerSem->Allocate("JackSemServer", 0); | |||||
fClientSem->Allocate("JackSemClient", 0); | |||||
fServerSem->Allocate("JackSemServer", "default", 0); | |||||
fClientSem->Allocate("JackSemClient", "default", 0); | |||||
//fThread = new JackMachThread(this); | //fThread = new JackMachThread(this); | ||||
fThread->SetParams(0, 500*1000, 500*1000); | fThread->SetParams(0, 500*1000, 500*1000); | ||||
fThread->Start(); | fThread->Start(); | ||||
@@ -76,8 +76,8 @@ struct ClientThread : public JackRunnableInterface { | |||||
ClientThread() | ClientThread() | ||||
{ | { | ||||
fServerSem->Connect("JackSemServer"); | |||||
fClientSem->Connect("JackSemClient"); | |||||
fServerSem->Connect("JackSemServer", "default"); | |||||
fClientSem->Connect("JackSemClient", "default"); | |||||
//fThread = new JackMachThread(this); | //fThread = new JackMachThread(this); | ||||
fThread->SetParams(0, 500*1000, 500*1000); | fThread->SetParams(0, 500*1000, 500*1000); | ||||
fThread->Start(); | fThread->Start(); | ||||
@@ -114,7 +114,7 @@ void server(JackSynchro* sem) | |||||
char c; | char c; | ||||
printf("server\n"); | printf("server\n"); | ||||
sem->Allocate("JackSem", 0); | |||||
sem->Allocate("JackSem", "default", 0); | |||||
while (((c = getchar()) != 'q')) { | while (((c = getchar()) != 'q')) { | ||||
@@ -141,7 +141,7 @@ void client(JackSynchro* sem) | |||||
char c; | char c; | ||||
printf("client\n"); | printf("client\n"); | ||||
sem->Connect("JackSem"); | |||||
sem->Connect("JackSem", "default"); | |||||
while (((c = getchar()) != 'q')) { | while (((c = getchar()) != 'q')) { | ||||
@@ -129,8 +129,8 @@ int main(int ac, char *av []) | |||||
} | } | ||||
#endif | #endif | ||||
sem1->ConnectOutput(SERVER); | |||||
sem2->ConnectInput(CLIENT); | |||||
sem1->ConnectOutput(SERVER, "default"); | |||||
sem2->ConnectInput(CLIENT, "default"); | |||||
obj = new Test2(sem1, sem2); | obj = new Test2(sem1, sem2); | ||||
@@ -185,8 +185,8 @@ int main(int ac, char *av []) | |||||
} | } | ||||
#endif | #endif | ||||
sem1->Allocate(SERVER, 0); | |||||
sem2->Allocate(CLIENT, 0); | |||||
sem1->Allocate(SERVER, "default", 0); | |||||
sem2->Allocate(CLIENT, "default", 0); | |||||
// run test in RT thread | // run test in RT thread | ||||
obj = new Test1(sem1, sem2); | obj = new Test1(sem1, sem2); | ||||
@@ -233,10 +233,10 @@ int main(int ac, char *av []) | |||||
} | } | ||||
#endif | #endif | ||||
sem1->Allocate(SERVER, 0); | |||||
sem2->Allocate(CLIENT, 0); | |||||
sem3->ConnectOutput(SERVER); | |||||
sem4->ConnectInput(CLIENT); | |||||
sem1->Allocate(SERVER, "default", 0); | |||||
sem2->Allocate(CLIENT, "default", 0); | |||||
sem3->ConnectOutput(SERVER, "default"); | |||||
sem4->ConnectInput(CLIENT, "default"); | |||||
// run test in RT thread | // run test in RT thread | ||||
obj1 = new Test1(sem1, sem2); | obj1 = new Test1(sem1, sem2); | ||||
@@ -49,7 +49,7 @@ int JackWinNamedPipeClientChannel::ServerCheck(const char* server_name) | |||||
} | } | ||||
} | } | ||||
int JackWinNamedPipeClientChannel::Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||||
int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) | |||||
{ | { | ||||
int result = 0; | int result = 0; | ||||
JackLog("JackWinNamedPipeClientChannel::Open name = %s\n", name); | JackLog("JackWinNamedPipeClientChannel::Open name = %s\n", name); | ||||
@@ -251,41 +251,41 @@ void JackWinNamedPipeClientChannel::SetTimebaseCallback(int refnum, int conditio | |||||
JackSetTimebaseCallbackRequest req(refnum, conditional); | JackSetTimebaseCallbackRequest req(refnum, conditional); | ||||
JackResult res; | JackResult res; | ||||
ServerSyncCall(&req, &res, result); | ServerSyncCall(&req, &res, result); | ||||
} | |||||
void JackWinNamedPipeClientChannel::GetInternalClientName(int refnum, int int_ref, char* name_res, int* result) | |||||
{ | |||||
JackGetInternalClientNameRequest req(refnum, int_ref); | |||||
JackGetInternalClientNameResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
strcpy(name_res, res.fName); | |||||
} | |||||
void JackWinNamedPipeClientChannel::InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result) | |||||
{ | |||||
JackInternalClientHandleRequest req(refnum, client_name); | |||||
JackInternalClientHandleResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
*int_ref = res.fIntRefNum; | |||||
*status = res.fStatus; | |||||
} | |||||
void JackWinNamedPipeClientChannel::InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result) | |||||
{ | |||||
JackInternalClientLoadRequest req(refnum, client_name, so_name, objet_data, options); | |||||
JackInternalClientLoadResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
*int_ref = res.fIntRefNum; | |||||
*status = res.fStatus; | |||||
} | |||||
void JackWinNamedPipeClientChannel::InternalClientUnload(int refnum, int int_ref, int* status, int* result) | |||||
{ | |||||
JackInternalClientUnloadRequest req(refnum, int_ref); | |||||
JackInternalClientUnloadResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
*status = res.fStatus; | |||||
} | |||||
} | |||||
void JackWinNamedPipeClientChannel::GetInternalClientName(int refnum, int int_ref, char* name_res, int* result) | |||||
{ | |||||
JackGetInternalClientNameRequest req(refnum, int_ref); | |||||
JackGetInternalClientNameResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
strcpy(name_res, res.fName); | |||||
} | |||||
void JackWinNamedPipeClientChannel::InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result) | |||||
{ | |||||
JackInternalClientHandleRequest req(refnum, client_name); | |||||
JackInternalClientHandleResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
*int_ref = res.fIntRefNum; | |||||
*status = res.fStatus; | |||||
} | |||||
void JackWinNamedPipeClientChannel::InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result) | |||||
{ | |||||
JackInternalClientLoadRequest req(refnum, client_name, so_name, objet_data, options); | |||||
JackInternalClientLoadResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
*int_ref = res.fIntRefNum; | |||||
*status = res.fStatus; | |||||
} | |||||
void JackWinNamedPipeClientChannel::InternalClientUnload(int refnum, int int_ref, int* status, int* result) | |||||
{ | |||||
JackInternalClientUnloadRequest req(refnum, int_ref); | |||||
JackInternalClientUnloadResult res; | |||||
ServerSyncCall(&req, &res, result); | |||||
*status = res.fStatus; | |||||
} | |||||
bool JackWinNamedPipeClientChannel::Init() | bool JackWinNamedPipeClientChannel::Init() | ||||
{ | { | ||||
@@ -50,7 +50,7 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public | |||||
JackWinNamedPipeClientChannel(); | JackWinNamedPipeClientChannel(); | ||||
virtual ~JackWinNamedPipeClientChannel(); | virtual ~JackWinNamedPipeClientChannel(); | ||||
int Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); | |||||
int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); | |||||
void Close(); | void Close(); | ||||
int Start(); | int Start(); | ||||
@@ -78,12 +78,12 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public | |||||
void SetFreewheel(int onoff, int* result); | void SetFreewheel(int onoff, int* result); | ||||
void ReleaseTimebase(int refnum, int* result); | void ReleaseTimebase(int refnum, int* result); | ||||
void SetTimebaseCallback(int refnum, int conditional, int* result); | |||||
void GetInternalClientName(int refnum, int int_ref, char* name_res, int* result); | |||||
void InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result); | |||||
virtual void InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result); | |||||
virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result); | |||||
void SetTimebaseCallback(int refnum, int conditional, int* result); | |||||
void GetInternalClientName(int refnum, int int_ref, char* name_res, int* result); | |||||
void InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result); | |||||
virtual void InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result); | |||||
virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result); | |||||
// JackRunnableInterface interface | // JackRunnableInterface interface | ||||
bool Init(); | bool Init(); | ||||
@@ -54,7 +54,7 @@ JackClientPipeThread::~JackClientPipeThread() | |||||
delete fThread; | delete fThread; | ||||
} | } | ||||
int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client connection | |||||
int JackClientPipeThread::Open(const char* server_name, JackServer* server) // Open the Server/Client connection | |||||
{ | { | ||||
fServer = server; | fServer = server; | ||||
@@ -257,46 +257,46 @@ int JackClientPipeThread::HandleRequest() | |||||
res.fResult = fServer->GetEngine()->SetTimebaseCallback(req.fRefNum, req.fConditionnal); | res.fResult = fServer->GetEngine()->SetTimebaseCallback(req.fRefNum, req.fConditionnal); | ||||
res.Write(fPipe); | res.Write(fPipe); | ||||
break; | break; | ||||
} | |||||
case JackRequest::kGetInternalClientName: { | |||||
JackLog("JackRequest::kGetInternalClientName\n"); | |||||
JackGetInternalClientNameRequest req; | |||||
JackGetInternalClientNameResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | |||||
case JackRequest::kInternalClientHandle: { | |||||
JackLog("JackRequest::kInternalClientHandle\n"); | |||||
JackInternalClientHandleRequest req; | |||||
JackInternalClientHandleResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | |||||
case JackRequest::kInternalClientLoad: { | |||||
JackLog("JackRequest::kInternalClientLoad\n"); | |||||
JackInternalClientLoadRequest req; | |||||
JackInternalClientLoadResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->InternalClientLoad(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, &res.fStatus); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | |||||
case JackRequest::kInternalClientUnload: { | |||||
JackLog("JackRequest::kInternalClientUnload\n"); | |||||
JackInternalClientUnloadRequest req; | |||||
JackInternalClientUnloadResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | |||||
case JackRequest::kGetInternalClientName: { | |||||
JackLog("JackRequest::kGetInternalClientName\n"); | |||||
JackGetInternalClientNameRequest req; | |||||
JackGetInternalClientNameResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | |||||
case JackRequest::kInternalClientHandle: { | |||||
JackLog("JackRequest::kInternalClientHandle\n"); | |||||
JackInternalClientHandleRequest req; | |||||
JackInternalClientHandleResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | |||||
case JackRequest::kInternalClientLoad: { | |||||
JackLog("JackRequest::kInternalClientLoad\n"); | |||||
JackInternalClientLoadRequest req; | |||||
JackInternalClientLoadResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->InternalClientLoad(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, &res.fStatus); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | |||||
case JackRequest::kInternalClientUnload: { | |||||
JackLog("JackRequest::kInternalClientUnload\n"); | |||||
JackInternalClientUnloadRequest req; | |||||
JackInternalClientUnloadResult res; | |||||
if (req.Read(fPipe) == 0) | |||||
res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus); | |||||
res.Write(fPipe); | |||||
break; | |||||
} | } | ||||
case JackRequest::kNotification: { | case JackRequest::kNotification: { | ||||
@@ -50,7 +50,7 @@ class JackClientPipeThread : public JackRunnableInterface | |||||
JackClientPipeThread(JackWinNamedPipeClient* pipe); | JackClientPipeThread(JackWinNamedPipeClient* pipe); | ||||
virtual ~JackClientPipeThread(); | virtual ~JackClientPipeThread(); | ||||
int Open(JackServer* server); // Open the Server/Client connection | |||||
int Open(const char* server_name, JackServer* server); // Open the Server/Client connection | |||||
void Close(); // Close the Server/Client connection | void Close(); // Close the Server/Client connection | ||||
int HandleRequest(); | int HandleRequest(); | ||||
@@ -25,7 +25,7 @@ This program is free software; you can redistribute it and/or modify | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
int JackWinNamedPipeServerNotifyChannel::Open() | |||||
int JackWinNamedPipeServerNotifyChannel::Open(const char* server_name) | |||||
{ | { | ||||
if (fRequestPipe.Connect(jack_server_dir, 0) < 0) { | if (fRequestPipe.Connect(jack_server_dir, 0) < 0) { | ||||
jack_error("Cannot connect to server pipe"); | jack_error("Cannot connect to server pipe"); | ||||
@@ -43,7 +43,7 @@ class JackWinNamedPipeServerNotifyChannel : public JackServerNotifyChannelInterf | |||||
virtual ~JackWinNamedPipeServerNotifyChannel() | virtual ~JackWinNamedPipeServerNotifyChannel() | ||||
{} | {} | ||||
int Open(); | |||||
int Open(const char* server_name); | |||||
void Close(); | void Close(); | ||||
void ClientNotify(int refnum, int notify, int value); | void ClientNotify(int refnum, int notify, int value); | ||||