21 #include "JackDebugClient.h"
22 #include "JackLibClient.h"
23 #include "JackChannel.h"
24 #include "JackLibGlobals.h"
25 #include "JackGlobals.h"
26 #include "JackCompilerDeps.h"
27 #include "JackTools.h"
28 #include "JackSystemDeps.h"
29 #include "JackServerLaunch.h"
39 jack_client_t * jack_client_new_aux (
const char *client_name,
40 jack_options_t options,
41 jack_status_t *status);
44 jack_options_t options,
45 jack_status_t *status, ...);
54 static jack_client_t * jack_client_open_aux (
const char *client_name,
55 jack_options_t options,
56 jack_status_t *status, va_list ap);
59 int JackLibGlobals::fClientCount = 0;
61 jack_client_t* jack_client_new_aux(
const char* client_name, jack_options_t options, jack_status_t* status)
64 jack_status_t my_status;
67 if (client_name == NULL) {
68 jack_error(
"jack_client_new called with a NULL client_name");
72 jack_log(
"jack_client_new %s", client_name);
76 *status = (jack_status_t)0;
79 if ((options & ~JackOpenOptions)) {
80 int my_status1 = *status | (JackFailure | JackInvalidOption);
81 *status = (jack_status_t)my_status1;
86 jack_varargs_init(&va);
88 JackLibGlobals::Init();
90 if (try_start_server(&va, options, status)) {
91 jack_error(
"jack server is not running or cannot be started");
92 JackLibGlobals::Destroy();
102 int res = client->Open(va.server_name, client_name, va.session_id, options, status);
105 JackLibGlobals::Destroy();
106 int my_status1 = (JackFailure | JackServerError);
107 *status = (jack_status_t)my_status1;
110 return (jack_client_t*)client;
114 static jack_client_t* jack_client_open_aux(
const char* client_name, jack_options_t options, jack_status_t* status, va_list ap)
117 jack_status_t my_status;
120 if (client_name == NULL) {
121 jack_error(
"jack_client_open called with a NULL client_name");
125 jack_log(
"jack_client_open %s", client_name);
129 *status = (jack_status_t)0;
132 if ((options & ~JackOpenOptions)) {
133 int my_status1 = *status | (JackFailure | JackInvalidOption);
134 *status = (jack_status_t)my_status1;
139 jack_varargs_parse(options, ap, &va);
141 JackLibGlobals::Init();
143 if (try_start_server(&va, options, status)) {
144 jack_error(
"jack server is not running or cannot be started");
145 JackLibGlobals::Destroy();
155 int res = client->Open(va.server_name, client_name, va.session_id, options, status);
158 JackLibGlobals::Destroy();
159 int my_status1 = (JackFailure | JackServerError);
160 *status = (jack_status_t)my_status1;
163 return (jack_client_t*)client;
167 LIB_EXPORT jack_client_t*
jack_client_open(
const char* ext_client_name, jack_options_t options, jack_status_t* status, ...)
169 JackGlobals::CheckContext(
"jack_client_open");
172 assert(JackGlobals::fOpenMutex);
173 JackGlobals::fOpenMutex->Lock();
175 va_start(ap, status);
176 jack_client_t* res = jack_client_open_aux(ext_client_name, options, status, ap);
178 JackGlobals::fOpenMutex->Unlock();
180 }
catch (std::bad_alloc& e) {
191 JackGlobals::CheckContext(
"jack_client_close");
193 assert(JackGlobals::fOpenMutex);
194 JackGlobals::fOpenMutex->Lock();
198 if (client == NULL) {
199 jack_error(
"jack_client_close called with a NULL client");
201 res = client->Close();
203 JackLibGlobals::Destroy();
204 jack_log(
"jack_client_close res = %d", res);
206 JackGlobals::fOpenMutex->Unlock();
212 jack_error(
"jack_get_client_pid : not implemented on library side");
SERVER_EXPORT void jack_error(const char *fmt,...)
LIB_EXPORT jack_client_t * jack_client_open(const char *client_name, jack_options_t options, jack_status_t *status,...)
Global library static structure: singleton kind of pattern.
LIB_EXPORT int jack_get_client_pid(const char *name)
A "decorator" debug client to validate API use.
SERVER_EXPORT void jack_log(const char *fmt,...)
The base class for clients: share part of the implementation for JackInternalClient and JackLibClient...
Client on the library side.
LIB_EXPORT int jack_client_close(jack_client_t *client)