diff --git a/ChangeLog b/ChangeLog index dfe66148..baf07965 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,34 +11,38 @@ Tom Szilagyi --------------------------- Jackdmp changes log ---------------------------- - -2007-10-12 Stephane Letz - - * Internal loadable client implementation, socket version added. +--------------------------- + +2007-10-16 Stephane Letz + + * Internal loadable client implementation, winpipe version added. + +2007-10-12 Stephane Letz + + * Internal loadable client implementation, socket version added. * Fix JackEngine::Close() method. - -2007-10-11 Stephane Letz - + +2007-10-11 Stephane Letz + * Internal loadable client implementation (in progress). - + 2007-10-08 Stephane Letz - - * Use .jackdrc file (instead of .jackdmprc). Install script now creates a link "jackd ==> jackdmp" so that automatic launch can work correctly. - * Paul Davis patch for -r (--replace-registry) feature. - + + * Use .jackdrc file (instead of .jackdmprc). Install script now creates a link "jackd ==> jackdmp" so that automatic launch can work correctly. + * Paul Davis patch for -r (--replace-registry) feature. + 2007-10-07 Stephane Letz - * Add missing timestamps.c and timestamps.h files. Correctly export public headers in OSX frameworks. Suppress JackEngine::ClientInternalCloseIm method. - + * Add missing timestamps.c and timestamps.h files. Correctly export public headers in OSX frameworks. Suppress JackEngine::ClientInternalCloseIm method. + 2007-10-04 Stephane Letz - * Correct "jack_register_server" in shm.c. - + * Correct "jack_register_server" in shm.c. + 2007-10-04 Stephane Letz - * Fix a resource leak issue in JackCoreAudioDriver::Close(). Better implement "jack_client_open" when linking a client with the server library. - + * Fix a resource leak issue in JackCoreAudioDriver::Close(). Better implement "jack_client_open" when linking a client with the server library. + 2007-10-03 Stephane Letz * Rename server_name from "default" to "jackdmp_default" to avoid conflict with regular jackd server. diff --git a/windows/JackWinNamedPipeClientChannel.cpp b/windows/JackWinNamedPipeClientChannel.cpp index 1c9f69ac..a54669a3 100644 --- a/windows/JackWinNamedPipeClientChannel.cpp +++ b/windows/JackWinNamedPipeClientChannel.cpp @@ -251,7 +251,41 @@ void JackWinNamedPipeClientChannel::SetTimebaseCallback(int refnum, int conditio JackSetTimebaseCallbackRequest req(refnum, conditional); JackResult res; 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; +} bool JackWinNamedPipeClientChannel::Init() { diff --git a/windows/JackWinNamedPipeClientChannel.h b/windows/JackWinNamedPipeClientChannel.h index 1c01a5d8..614c578c 100644 --- a/windows/JackWinNamedPipeClientChannel.h +++ b/windows/JackWinNamedPipeClientChannel.h @@ -78,8 +78,13 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public void SetFreewheel(int onoff, int* result); void ReleaseTimebase(int refnum, int* result); - void SetTimebaseCallback(int refnum, int conditional, 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 bool Init(); bool Execute(); diff --git a/windows/JackWinNamedPipeServerChannel.cpp b/windows/JackWinNamedPipeServerChannel.cpp index 99b8ea4b..78e7b067 100644 --- a/windows/JackWinNamedPipeServerChannel.cpp +++ b/windows/JackWinNamedPipeServerChannel.cpp @@ -257,6 +257,46 @@ int JackClientPipeThread::HandleRequest() res.fResult = fServer->GetEngine()->SetTimebaseCallback(req.fRefNum, req.fConditionnal); 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: {