git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4697 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.9.5
@@ -36,9 +36,13 @@ John Emmas | |||||
Jackdmp changes log | Jackdmp changes log | ||||
--------------------------- | --------------------------- | ||||
2012-01-13 Stephane Letz <letz@grame.fr> | |||||
* More robust server/client protocol. | |||||
2012-01-11 Stephane Letz <letz@grame.fr> | 2012-01-11 Stephane Letz <letz@grame.fr> | ||||
* Factorize code the server/client request. | |||||
* Factorize code the server/client request in JackRequestDecoder class. | |||||
2012-01-06 Stephane Letz <letz@grame.fr> | 2012-01-06 Stephane Letz <letz@grame.fr> | ||||
@@ -157,7 +157,7 @@ bool JackEngine::Process(jack_time_t cur_cycle_begin, jack_time_t prev_cycle_end | |||||
// Cycle begin | // Cycle begin | ||||
fEngineControl->CycleBegin(fClientTable, fGraphManager, cur_cycle_begin, prev_cycle_end); | fEngineControl->CycleBegin(fClientTable, fGraphManager, cur_cycle_begin, prev_cycle_end); | ||||
// Graph | // Graph | ||||
if (fGraphManager->IsFinishedGraph()) { | if (fGraphManager->IsFinishedGraph()) { | ||||
ProcessNext(cur_cycle_begin); | ProcessNext(cur_cycle_begin); | ||||
@@ -1000,7 +1000,7 @@ void JackEngine::SessionNotify(int refnum, const char *target, jack_session_even | |||||
} | } | ||||
} | } | ||||
void JackEngine::SessionReply(int refnum) | |||||
int JackEngine::SessionReply(int refnum) | |||||
{ | { | ||||
JackClientInterface* client = fClientTable[refnum]; | JackClientInterface* client = fClientTable[refnum]; | ||||
char uuid_buf[JACK_UUID_SIZE]; | char uuid_buf[JACK_UUID_SIZE]; | ||||
@@ -1019,72 +1019,73 @@ void JackEngine::SessionReply(int refnum) | |||||
} | } | ||||
fSessionResult = NULL; | fSessionResult = NULL; | ||||
} | } | ||||
return 0; | |||||
} | } | ||||
void JackEngine::GetUUIDForClientName(const char *client_name, char *uuid_res, int *result) | |||||
int JackEngine::GetUUIDForClientName(const char *client_name, char *uuid_res) | |||||
{ | { | ||||
for (int i = 0; i < CLIENT_NUM; i++) { | for (int i = 0; i < CLIENT_NUM; i++) { | ||||
JackClientInterface* client = fClientTable[i]; | JackClientInterface* client = fClientTable[i]; | ||||
if (client && (strcmp(client_name, client->GetClientControl()->fName) == 0)) { | if (client && (strcmp(client_name, client->GetClientControl()->fName) == 0)) { | ||||
snprintf(uuid_res, JACK_UUID_SIZE, "%d", client->GetClientControl()->fSessionID); | snprintf(uuid_res, JACK_UUID_SIZE, "%d", client->GetClientControl()->fSessionID); | ||||
*result = 0; | |||||
return; | |||||
return 0; | |||||
} | } | ||||
} | } | ||||
// Did not find name. | // Did not find name. | ||||
*result = -1; | |||||
return -1; | |||||
} | } | ||||
void JackEngine::GetClientNameForUUID(const char *uuid, char *name_res, int *result) | |||||
int JackEngine::GetClientNameForUUID(const char *uuid, char *name_res) | |||||
{ | { | ||||
for (int i = 0; i < CLIENT_NUM; i++) { | for (int i = 0; i < CLIENT_NUM; i++) { | ||||
JackClientInterface* client = fClientTable[i]; | JackClientInterface* client = fClientTable[i]; | ||||
if (!client) | |||||
if (!client) { | |||||
continue; | continue; | ||||
} | |||||
char uuid_buf[JACK_UUID_SIZE]; | char uuid_buf[JACK_UUID_SIZE]; | ||||
snprintf(uuid_buf, JACK_UUID_SIZE, "%d", client->GetClientControl()->fSessionID); | snprintf(uuid_buf, JACK_UUID_SIZE, "%d", client->GetClientControl()->fSessionID); | ||||
if (strcmp(uuid,uuid_buf) == 0) { | if (strcmp(uuid,uuid_buf) == 0) { | ||||
strncpy(name_res, client->GetClientControl()->fName, JACK_CLIENT_NAME_SIZE); | strncpy(name_res, client->GetClientControl()->fName, JACK_CLIENT_NAME_SIZE); | ||||
*result = 0; | |||||
return; | |||||
return 0; | |||||
} | } | ||||
} | } | ||||
// Did not find uuid. | // Did not find uuid. | ||||
*result = -1; | |||||
return -1; | |||||
} | } | ||||
void JackEngine::ReserveClientName(const char *name, const char *uuid, int *result) | |||||
int JackEngine::ReserveClientName(const char *name, const char *uuid) | |||||
{ | { | ||||
jack_log("JackEngine::ReserveClientName ( name = %s, uuid = %s )", name, uuid); | jack_log("JackEngine::ReserveClientName ( name = %s, uuid = %s )", name, uuid); | ||||
if (ClientCheckName(name)) { | if (ClientCheckName(name)) { | ||||
*result = -1; | |||||
jack_log("name already taken"); | jack_log("name already taken"); | ||||
return; | |||||
return -1; | |||||
} | } | ||||
EnsureUUID(atoi(uuid)); | EnsureUUID(atoi(uuid)); | ||||
fReservationMap[atoi(uuid)] = name; | fReservationMap[atoi(uuid)] = name; | ||||
*result = 0; | |||||
return 0; | |||||
} | } | ||||
void JackEngine::ClientHasSessionCallback(const char *name, int *result) | |||||
int JackEngine::ClientHasSessionCallback(const char *name) | |||||
{ | { | ||||
JackClientInterface* client = NULL; | JackClientInterface* client = NULL; | ||||
for (int i = 0; i < CLIENT_NUM; i++) { | for (int i = 0; i < CLIENT_NUM; i++) { | ||||
client = fClientTable[i]; | client = fClientTable[i]; | ||||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | |||||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) { | |||||
break; | break; | ||||
} | |||||
} | } | ||||
if (client) { | if (client) { | ||||
*result = client->GetClientControl()->fCallback[kSessionCallback]; | |||||
return client->GetClientControl()->fCallback[kSessionCallback]; | |||||
} else { | } else { | ||||
*result = -1; | |||||
return -1; | |||||
} | } | ||||
} | } | ||||
@@ -148,12 +148,12 @@ class SERVER_EXPORT JackEngine : public JackLockAble | |||||
// Session management | // Session management | ||||
void SessionNotify(int refnum, const char *target, jack_session_event_type_t type, const char *path, detail::JackChannelTransactionInterface *socket, JackSessionNotifyResult** result); | void SessionNotify(int refnum, const char *target, jack_session_event_type_t type, const char *path, detail::JackChannelTransactionInterface *socket, JackSessionNotifyResult** result); | ||||
void SessionReply(int refnum); | |||||
int SessionReply(int refnum); | |||||
void GetUUIDForClientName(const char *client_name, char *uuid_res, int *result); | |||||
void GetClientNameForUUID(const char *uuid, char *name_res, int *result); | |||||
void ReserveClientName(const char *name, const char *uuid, int *result); | |||||
void ClientHasSessionCallback(const char *name, int *result); | |||||
int GetUUIDForClientName(const char *client_name, char *uuid_res); | |||||
int GetClientNameForUUID(const char *uuid, char *name_res); | |||||
int ReserveClientName(const char *name, const char *uuid); | |||||
int ClientHasSessionCallback(const char *name); | |||||
}; | }; | ||||
@@ -142,8 +142,7 @@ class JackInternalClientChannel : public detail::JackClientChannelInterface | |||||
{ | { | ||||
JackSessionNotifyResult* res; | JackSessionNotifyResult* res; | ||||
fEngine->SessionNotify(refnum, target, type, path, NULL, &res); | fEngine->SessionNotify(refnum, target, type, path, NULL, &res); | ||||
if (res == NULL) | |||||
{ | |||||
if (res == NULL) { | |||||
*result = NULL; | *result = NULL; | ||||
return; | return; | ||||
} | } | ||||
@@ -154,28 +153,27 @@ class JackInternalClientChannel : public detail::JackClientChannelInterface | |||||
void SessionReply(int refnum, int* result) | void SessionReply(int refnum, int* result) | ||||
{ | { | ||||
fEngine->SessionReply(refnum); | |||||
*result = 0; | |||||
*result = fEngine->SessionReply(refnum); | |||||
} | } | ||||
void GetUUIDForClientName(int refnum, const char* client_name, char* uuid_res, int* result) | void GetUUIDForClientName(int refnum, const char* client_name, char* uuid_res, int* result) | ||||
{ | { | ||||
fEngine->GetUUIDForClientName(client_name, uuid_res, result); | |||||
*result = fEngine->GetUUIDForClientName(client_name, uuid_res); | |||||
} | } | ||||
void GetClientNameForUUID(int refnum, const char* uuid, char* name_res, int* result) | void GetClientNameForUUID(int refnum, const char* uuid, char* name_res, int* result) | ||||
{ | { | ||||
fEngine->GetClientNameForUUID(uuid, name_res, result); | |||||
*result = fEngine->GetClientNameForUUID(uuid, name_res); | |||||
} | } | ||||
void ReserveClientName(int refnum, const char* client_name, const char *uuid, int* result) | void ReserveClientName(int refnum, const char* client_name, const char *uuid, int* result) | ||||
{ | { | ||||
fEngine->ReserveClientName(client_name, uuid, result); | |||||
*result = fEngine->ReserveClientName(client_name, uuid); | |||||
} | } | ||||
void ClientHasSessionCallback(const char* client_name, int* result) | void ClientHasSessionCallback(const char* client_name, int* result) | ||||
{ | { | ||||
fEngine->ClientHasSessionCallback(client_name, result); | |||||
*result = fEngine->ClientHasSessionCallback(client_name); | |||||
} | } | ||||
@@ -333,42 +333,42 @@ class SERVER_EXPORT JackLockedEngine | |||||
CATCH_EXCEPTION | CATCH_EXCEPTION | ||||
} | } | ||||
void SessionReply(int refnum) | |||||
int SessionReply(int refnum) | |||||
{ | { | ||||
TRY_CALL | TRY_CALL | ||||
JackLock lock(&fEngine); | JackLock lock(&fEngine); | ||||
fEngine.SessionReply(refnum); | |||||
CATCH_EXCEPTION | |||||
return fEngine.SessionReply(refnum); | |||||
CATCH_EXCEPTION_RETURN | |||||
} | } | ||||
void GetUUIDForClientName(const char *client_name, char *uuid_res, int *result) | |||||
int GetUUIDForClientName(const char *client_name, char *uuid_res) | |||||
{ | { | ||||
TRY_CALL | TRY_CALL | ||||
JackLock lock(&fEngine); | JackLock lock(&fEngine); | ||||
fEngine.GetUUIDForClientName(client_name, uuid_res, result); | |||||
CATCH_EXCEPTION | |||||
return fEngine.GetUUIDForClientName(client_name, uuid_res); | |||||
CATCH_EXCEPTION_RETURN | |||||
} | } | ||||
void GetClientNameForUUID(const char *uuid, char *name_res, int *result) | |||||
int GetClientNameForUUID(const char *uuid, char *name_res) | |||||
{ | { | ||||
TRY_CALL | TRY_CALL | ||||
JackLock lock(&fEngine); | JackLock lock(&fEngine); | ||||
fEngine.GetClientNameForUUID(uuid, name_res, result); | |||||
CATCH_EXCEPTION | |||||
return fEngine.GetClientNameForUUID(uuid, name_res); | |||||
CATCH_EXCEPTION_RETURN | |||||
} | } | ||||
void ReserveClientName(const char *name, const char *uuid, int *result) | |||||
int ReserveClientName(const char *name, const char *uuid) | |||||
{ | { | ||||
TRY_CALL | TRY_CALL | ||||
JackLock lock(&fEngine); | JackLock lock(&fEngine); | ||||
fEngine.ReserveClientName(name, uuid, result); | |||||
CATCH_EXCEPTION | |||||
return fEngine.ReserveClientName(name, uuid); | |||||
CATCH_EXCEPTION_RETURN | |||||
} | } | ||||
void ClientHasSessionCallback(const char *name, int *result) | |||||
int ClientHasSessionCallback(const char *name) | |||||
{ | { | ||||
TRY_CALL | TRY_CALL | ||||
JackLock lock(&fEngine); | JackLock lock(&fEngine); | ||||
fEngine.ClientHasSessionCallback(name, result); | |||||
CATCH_EXCEPTION | |||||
return fEngine.ClientHasSessionCallback(name); | |||||
CATCH_EXCEPTION_RETURN | |||||
} | } | ||||
}; | }; | ||||
@@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||||
#define __JackRequest__ | #define __JackRequest__ | ||||
#include "JackConstants.h" | #include "JackConstants.h" | ||||
#include "JackError.h" | |||||
#include "JackPlatformPlug.h" | #include "JackPlatformPlug.h" | ||||
#include "JackChannel.h" | #include "JackChannel.h" | ||||
#include "JackTime.h" | #include "JackTime.h" | ||||
@@ -34,7 +35,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
#define CheckRes(exp) { if ((exp) < 0) return -1; } | |||||
#define CheckRes(exp) { if ((exp) < 0) { jack_error("CheckRes error"); return -1; } } | |||||
#define CheckSize() { CheckRes(trans->Read(&fSize, sizeof(int))); if (fSize != Size()) { jack_error("CheckSize error size = %d Size() = %d", fSize, Size()); return -1; } } | |||||
/*! | /*! | ||||
\brief Session API constants. | \brief Session API constants. | ||||
@@ -91,11 +93,12 @@ struct JackRequest | |||||
}; | }; | ||||
RequestType fType; | RequestType fType; | ||||
int fSize; | |||||
JackRequest(): fType((RequestType)0) | |||||
JackRequest(): fType((RequestType)0), fSize(0) | |||||
{} | {} | ||||
JackRequest(RequestType type): fType(type) | |||||
JackRequest(RequestType type): fType(type), fSize(0) | |||||
{} | {} | ||||
virtual ~JackRequest() | virtual ~JackRequest() | ||||
@@ -106,10 +109,16 @@ struct JackRequest | |||||
return trans->Read(&fType, sizeof(RequestType)); | return trans->Read(&fType, sizeof(RequestType)); | ||||
} | } | ||||
virtual int Write(detail::JackChannelTransactionInterface* trans) | |||||
virtual int Write(detail::JackChannelTransactionInterface* trans) { return -1; } | |||||
virtual int Write(detail::JackChannelTransactionInterface* trans, int size) | |||||
{ | { | ||||
return trans->Write(&fType, sizeof(RequestType)); | |||||
fSize = size; | |||||
CheckRes(trans->Write(&fType, sizeof(RequestType))); | |||||
return trans->Write(&fSize, sizeof(int)); | |||||
} | } | ||||
virtual int Size() { return 0; } | |||||
}; | }; | ||||
@@ -164,6 +173,7 @@ struct JackClientCheckRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
CheckRes(trans->Read(&fProtocol, sizeof(int))); | CheckRes(trans->Read(&fProtocol, sizeof(int))); | ||||
CheckRes(trans->Read(&fOptions, sizeof(int))); | CheckRes(trans->Read(&fOptions, sizeof(int))); | ||||
@@ -173,13 +183,15 @@ struct JackClientCheckRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
CheckRes(trans->Write(&fProtocol, sizeof(int))); | CheckRes(trans->Write(&fProtocol, sizeof(int))); | ||||
CheckRes(trans->Write(&fOptions, sizeof(int))); | CheckRes(trans->Write(&fOptions, sizeof(int))); | ||||
CheckRes(trans->Write(&fUUID, sizeof(int))); | CheckRes(trans->Write(&fUUID, sizeof(int))); | ||||
return trans->Write(&fOpen, sizeof(int)); | return trans->Write(&fOpen, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(fName) + 4 * sizeof(int); } | |||||
}; | }; | ||||
@@ -241,6 +253,7 @@ struct JackClientOpenRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fPID, sizeof(int))); | CheckRes(trans->Read(&fPID, sizeof(int))); | ||||
CheckRes(trans->Read(&fUUID, sizeof(int))); | CheckRes(trans->Read(&fUUID, sizeof(int))); | ||||
return trans->Read(&fName, sizeof(fName)); | return trans->Read(&fName, sizeof(fName)); | ||||
@@ -248,12 +261,14 @@ struct JackClientOpenRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fPID, sizeof(int))); | CheckRes(trans->Write(&fPID, sizeof(int))); | ||||
CheckRes(trans->Write(&fUUID, sizeof(int))); | CheckRes(trans->Write(&fUUID, sizeof(int))); | ||||
return trans->Write(&fName, sizeof(fName)); | return trans->Write(&fName, sizeof(fName)); | ||||
} | } | ||||
int Size() { return 2 * sizeof(int) + sizeof(fName); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -310,15 +325,17 @@ struct JackClientCloseRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
return trans->Read(&fRefNum, sizeof(int)); | return trans->Read(&fRefNum, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
return trans->Write(&fRefNum, sizeof(int)); | return trans->Write(&fRefNum, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -339,17 +356,19 @@ struct JackActivateRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
return trans->Read(&fIsRealTime, sizeof(int)); | return trans->Read(&fIsRealTime, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
return trans->Write(&fIsRealTime, sizeof(int)); | return trans->Write(&fIsRealTime, sizeof(int)); | ||||
} | } | ||||
int Size() { return 2 * sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -368,15 +387,17 @@ struct JackDeactivateRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
return trans->Read(&fRefNum, sizeof(int)); | return trans->Read(&fRefNum, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
return trans->Write(&fRefNum, sizeof(int)); | return trans->Write(&fRefNum, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -403,6 +424,7 @@ struct JackPortRegisterRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
CheckRes(trans->Read(&fPortType, sizeof(fPortType))); | CheckRes(trans->Read(&fPortType, sizeof(fPortType))); | ||||
@@ -413,7 +435,7 @@ struct JackPortRegisterRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
CheckRes(trans->Write(&fPortType, sizeof(fPortType))); | CheckRes(trans->Write(&fPortType, sizeof(fPortType))); | ||||
@@ -421,6 +443,8 @@ struct JackPortRegisterRequest : public JackRequest | |||||
CheckRes(trans->Write(&fBufferSize, sizeof(unsigned int))); | CheckRes(trans->Write(&fBufferSize, sizeof(unsigned int))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(fName) + sizeof(fPortType) + 2 * sizeof(unsigned int); } | |||||
}; | }; | ||||
@@ -468,6 +492,7 @@ struct JackPortUnRegisterRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fPortIndex, sizeof(jack_port_id_t))); | CheckRes(trans->Read(&fPortIndex, sizeof(jack_port_id_t))); | ||||
return 0; | return 0; | ||||
@@ -475,12 +500,13 @@ struct JackPortUnRegisterRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fPortIndex, sizeof(jack_port_id_t))); | CheckRes(trans->Write(&fPortIndex, sizeof(jack_port_id_t))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(jack_port_id_t); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -505,21 +531,23 @@ struct JackPortConnectNameRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fSrc, sizeof(fSrc))); | CheckRes(trans->Read(&fSrc, sizeof(fSrc))); | ||||
CheckRes(trans->Read(&fDst, sizeof(fDst))); | CheckRes(trans->Read(&fDst, sizeof(fDst))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fSrc, sizeof(fSrc))); | CheckRes(trans->Write(&fSrc, sizeof(fSrc))); | ||||
CheckRes(trans->Write(&fDst, sizeof(fDst))); | CheckRes(trans->Write(&fDst, sizeof(fDst))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(fSrc) + sizeof(fDst); } | |||||
}; | }; | ||||
@@ -545,6 +573,7 @@ struct JackPortDisconnectNameRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fSrc, sizeof(fSrc))); | CheckRes(trans->Read(&fSrc, sizeof(fSrc))); | ||||
CheckRes(trans->Read(&fDst, sizeof(fDst))); | CheckRes(trans->Read(&fDst, sizeof(fDst))); | ||||
@@ -553,13 +582,15 @@ struct JackPortDisconnectNameRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fSrc, sizeof(fSrc))); | CheckRes(trans->Write(&fSrc, sizeof(fSrc))); | ||||
CheckRes(trans->Write(&fDst, sizeof(fDst))); | CheckRes(trans->Write(&fDst, sizeof(fDst))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(fSrc) + sizeof(fDst); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -581,6 +612,7 @@ struct JackPortConnectRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t))); | CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t))); | ||||
CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t))); | CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t))); | ||||
@@ -589,13 +621,14 @@ struct JackPortConnectRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t))); | CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t))); | ||||
CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t))); | CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(jack_port_id_t) + sizeof(jack_port_id_t); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -617,6 +650,7 @@ struct JackPortDisconnectRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t))); | CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t))); | ||||
CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t))); | CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t))); | ||||
@@ -625,13 +659,14 @@ struct JackPortDisconnectRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t))); | CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t))); | ||||
CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t))); | CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(jack_port_id_t) + sizeof(jack_port_id_t); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -655,6 +690,7 @@ struct JackPortRenameRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fPort, sizeof(jack_port_id_t))); | CheckRes(trans->Read(&fPort, sizeof(jack_port_id_t))); | ||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
@@ -663,13 +699,14 @@ struct JackPortRenameRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fPort, sizeof(jack_port_id_t))); | CheckRes(trans->Write(&fPort, sizeof(jack_port_id_t))); | ||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(jack_port_id_t) + sizeof(fName); } | |||||
}; | }; | ||||
@@ -690,15 +727,17 @@ struct JackSetBufferSizeRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
return trans->Read(&fBufferSize, sizeof(jack_nframes_t)); | return trans->Read(&fBufferSize, sizeof(jack_nframes_t)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
return trans->Write(&fBufferSize, sizeof(jack_nframes_t)); | return trans->Write(&fBufferSize, sizeof(jack_nframes_t)); | ||||
} | } | ||||
int Size() { return sizeof(jack_nframes_t); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -718,14 +757,17 @@ struct JackSetFreeWheelRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
return trans->Read(&fOnOff, sizeof(int)); | return trans->Read(&fOnOff, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
return trans->Write(&fOnOff, sizeof(int)); | return trans->Write(&fOnOff, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int); } | |||||
}; | }; | ||||
@@ -742,15 +784,17 @@ struct JackComputeTotalLatenciesRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
return 0; | return 0; | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return 0; } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -770,14 +814,17 @@ struct JackReleaseTimebaseRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
return trans->Read(&fRefNum, sizeof(int)); | return trans->Read(&fRefNum, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
return trans->Write(&fRefNum, sizeof(int)); | return trans->Write(&fRefNum, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int); } | |||||
}; | }; | ||||
@@ -799,17 +846,19 @@ struct JackSetTimebaseCallbackRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
return trans->Read(&fConditionnal, sizeof(int)); | return trans->Read(&fConditionnal, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
return trans->Write(&fConditionnal, sizeof(int)); | return trans->Write(&fConditionnal, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -830,17 +879,19 @@ struct JackGetInternalClientNameRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
return trans->Read(&fIntRefNum, sizeof(int)); | return trans->Read(&fIntRefNum, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
return trans->Write(&fIntRefNum, sizeof(int)); | return trans->Write(&fIntRefNum, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -874,6 +925,7 @@ struct JackGetInternalClientNameResult : public JackResult | |||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(fName); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -896,17 +948,19 @@ struct JackInternalClientHandleRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
return trans->Read(&fName, sizeof(fName)); | return trans->Read(&fName, sizeof(fName)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
return trans->Write(&fName, sizeof(fName)); | return trans->Write(&fName, sizeof(fName)); | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(fName); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -941,6 +995,7 @@ struct JackInternalClientHandleResult : public JackResult | |||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -974,6 +1029,7 @@ struct JackInternalClientLoadRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
CheckRes(trans->Read(&fDllName, sizeof(fDllName))); | CheckRes(trans->Read(&fDllName, sizeof(fDllName))); | ||||
@@ -984,7 +1040,7 @@ struct JackInternalClientLoadRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
CheckRes(trans->Write(&fDllName, sizeof(fDllName))); | CheckRes(trans->Write(&fDllName, sizeof(fDllName))); | ||||
@@ -993,6 +1049,7 @@ struct JackInternalClientLoadRequest : public JackRequest | |||||
return trans->Write(&fOptions, sizeof(int)); | return trans->Write(&fOptions, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(fName) + sizeof(fDllName) + sizeof(fLoadInitName) + 2 * sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -1027,6 +1084,7 @@ struct JackInternalClientLoadResult : public JackResult | |||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -1047,16 +1105,19 @@ struct JackInternalClientUnloadRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
return trans->Read(&fIntRefNum, sizeof(int)); | return trans->Read(&fIntRefNum, sizeof(int)); | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
return trans->Write(&fIntRefNum, sizeof(int)); | return trans->Write(&fIntRefNum, sizeof(int)); | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -1088,6 +1149,7 @@ struct JackInternalClientUnloadResult : public JackResult | |||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -1109,6 +1171,7 @@ struct JackClientNotificationRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fNotify, sizeof(int))); | CheckRes(trans->Read(&fNotify, sizeof(int))); | ||||
CheckRes(trans->Read(&fValue, sizeof(int))); | CheckRes(trans->Read(&fValue, sizeof(int))); | ||||
@@ -1117,12 +1180,14 @@ struct JackClientNotificationRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fNotify, sizeof(int))); | CheckRes(trans->Write(&fNotify, sizeof(int))); | ||||
CheckRes(trans->Write(&fValue, sizeof(int))); | CheckRes(trans->Write(&fValue, sizeof(int))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return 3 * sizeof(int); } | |||||
}; | }; | ||||
@@ -1260,6 +1325,7 @@ struct JackSessionNotifyRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | ||||
CheckRes(trans->Read(&fPath, sizeof(fPath))); | CheckRes(trans->Read(&fPath, sizeof(fPath))); | ||||
CheckRes(trans->Read(&fDst, sizeof(fDst))); | CheckRes(trans->Read(&fDst, sizeof(fDst))); | ||||
@@ -1269,7 +1335,7 @@ struct JackSessionNotifyRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | ||||
CheckRes(trans->Write(&fPath, sizeof(fPath))); | CheckRes(trans->Write(&fPath, sizeof(fPath))); | ||||
CheckRes(trans->Write(&fDst, sizeof(fDst))); | CheckRes(trans->Write(&fDst, sizeof(fDst))); | ||||
@@ -1277,6 +1343,7 @@ struct JackSessionNotifyRequest : public JackRequest | |||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(fRefNum) + sizeof(fPath) + sizeof(fDst) + sizeof(fEventType); } | |||||
}; | }; | ||||
struct JackSessionReplyRequest : public JackRequest | struct JackSessionReplyRequest : public JackRequest | ||||
@@ -1292,17 +1359,20 @@ struct JackSessionReplyRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | |||||
CheckSize(); | |||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||||
return 0; | return 0; | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int); } | |||||
}; | }; | ||||
struct JackClientNameResult : public JackResult | struct JackClientNameResult : public JackResult | ||||
@@ -1330,7 +1400,7 @@ struct JackClientNameResult : public JackResult | |||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
return 0; | return 0; | ||||
} | } | ||||
}; | }; | ||||
struct JackUUIDResult : public JackResult | struct JackUUIDResult : public JackResult | ||||
@@ -1376,17 +1446,20 @@ struct JackGetUUIDRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(fName); } | |||||
}; | }; | ||||
struct JackGetClientNameRequest : public JackRequest | struct JackGetClientNameRequest : public JackRequest | ||||
@@ -1403,18 +1476,21 @@ struct JackGetClientNameRequest : public JackRequest | |||||
} | } | ||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | |||||
{ | |||||
CheckSize(); | |||||
CheckRes(trans->Read(&fUUID, sizeof(fUUID))); | CheckRes(trans->Read(&fUUID, sizeof(fUUID))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fUUID, sizeof(fUUID))); | CheckRes(trans->Write(&fUUID, sizeof(fUUID))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(fUUID); } | |||||
}; | }; | ||||
struct JackReserveNameRequest : public JackRequest | struct JackReserveNameRequest : public JackRequest | ||||
@@ -1435,6 +1511,7 @@ struct JackReserveNameRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fUUID, sizeof(fUUID))); | CheckRes(trans->Read(&fUUID, sizeof(fUUID))); | ||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | ||||
@@ -1443,13 +1520,15 @@ struct JackReserveNameRequest : public JackRequest | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fUUID, sizeof(fUUID))); | CheckRes(trans->Write(&fUUID, sizeof(fUUID))); | ||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(fUUID) + sizeof(fName) + sizeof(fRefNum); } | |||||
}; | }; | ||||
struct JackClientHasSessionCallbackRequest : public JackRequest | struct JackClientHasSessionCallbackRequest : public JackRequest | ||||
@@ -1467,17 +1546,20 @@ struct JackClientHasSessionCallbackRequest : public JackRequest | |||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(JackRequest::Write(trans)); | |||||
CheckRes(JackRequest::Write(trans, Size())); | |||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(fName); } | |||||
}; | }; | ||||
/*! | /*! | ||||
@@ -1486,6 +1568,7 @@ struct JackClientHasSessionCallbackRequest : public JackRequest | |||||
struct JackClientNotification | struct JackClientNotification | ||||
{ | { | ||||
int fSize; | |||||
char fName[JACK_CLIENT_NAME_SIZE + 1]; | char fName[JACK_CLIENT_NAME_SIZE + 1]; | ||||
int fRefNum; | int fRefNum; | ||||
int fNotify; | int fNotify; | ||||
@@ -1501,10 +1584,12 @@ struct JackClientNotification | |||||
{ | { | ||||
snprintf(fName, sizeof(fName), "%s", name); | snprintf(fName, sizeof(fName), "%s", name); | ||||
snprintf(fMessage, sizeof(fMessage), "%s", message); | snprintf(fMessage, sizeof(fMessage), "%s", message); | ||||
fSize = Size(); | |||||
} | } | ||||
int Read(detail::JackChannelTransactionInterface* trans) | int Read(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckSize(); | |||||
CheckRes(trans->Read(&fName, sizeof(fName))); | CheckRes(trans->Read(&fName, sizeof(fName))); | ||||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | CheckRes(trans->Read(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Read(&fNotify, sizeof(int))); | CheckRes(trans->Read(&fNotify, sizeof(int))); | ||||
@@ -1517,6 +1602,7 @@ struct JackClientNotification | |||||
int Write(detail::JackChannelTransactionInterface* trans) | int Write(detail::JackChannelTransactionInterface* trans) | ||||
{ | { | ||||
CheckRes(trans->Write(&fSize, sizeof(int))); | |||||
CheckRes(trans->Write(&fName, sizeof(fName))); | CheckRes(trans->Write(&fName, sizeof(fName))); | ||||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | CheckRes(trans->Write(&fRefNum, sizeof(int))); | ||||
CheckRes(trans->Write(&fNotify, sizeof(int))); | CheckRes(trans->Write(&fNotify, sizeof(int))); | ||||
@@ -1526,6 +1612,8 @@ struct JackClientNotification | |||||
CheckRes(trans->Write(&fMessage, sizeof(fMessage))); | CheckRes(trans->Write(&fMessage, sizeof(fMessage))); | ||||
return 0; | return 0; | ||||
} | } | ||||
int Size() { return sizeof(int) + sizeof(fName) + 5 * sizeof(int) + sizeof(fMessage); } | |||||
}; | }; | ||||
@@ -30,6 +30,11 @@ using namespace std; | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
#define CheckRead(req, socket) { if (req.Read(socket) < 0) { jack_error("CheckRead error"); return -1; } } | |||||
#define CheckWriteName(error, socket) { if (res.Write(socket) < 0) { jack_error("%s write error name = %s", error, req.fName); } } | |||||
#define CheckWriteRefNum(error, socket) { if (res.Write(socket) < 0) { jack_error("%s write error ref = %d", error, req.fRefNum); } } | |||||
#define CheckWrite(error, socket) { if (res.Write(socket) < 0) { jack_error("%s write error", error); } } | |||||
JackRequestDecoder::JackRequestDecoder(JackServer* server, JackClientHandlerInterface* handler) | JackRequestDecoder::JackRequestDecoder(JackServer* server, JackClientHandlerInterface* handler) | ||||
:fServer(server), fHandler(handler) | :fServer(server), fHandler(handler) | ||||
{} | {} | ||||
@@ -37,7 +42,7 @@ JackRequestDecoder::JackRequestDecoder(JackServer* server, JackClientHandlerInte | |||||
JackRequestDecoder::~JackRequestDecoder() | JackRequestDecoder::~JackRequestDecoder() | ||||
{} | {} | ||||
void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* socket, int type_aux) | |||||
int JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* socket, int type_aux) | |||||
{ | { | ||||
JackRequest::RequestType type = (JackRequest::RequestType)type_aux; | JackRequest::RequestType type = (JackRequest::RequestType)type_aux; | ||||
@@ -48,15 +53,14 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ClientCheck"); | jack_log("JackRequest::ClientCheck"); | ||||
JackClientCheckRequest req; | JackClientCheckRequest req; | ||||
JackClientCheckResult res; | JackClientCheckResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->ClientCheck(req.fName, req.fUUID, res.fName, req.fProtocol, req.fOptions, &res.fStatus); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ClientCheck write error name = %s", req.fName); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->ClientCheck(req.fName, req.fUUID, res.fName, req.fProtocol, req.fOptions, &res.fStatus); | |||||
CheckWriteName("JackRequest::ClientCheck", socket); | |||||
// Atomic ClientCheck followed by ClientOpen on same socket | // Atomic ClientCheck followed by ClientOpen on same socket | ||||
if (req.fOpen) { | if (req.fOpen) { | ||||
JackRequest header; | JackRequest header; | ||||
header.Read(socket); | header.Read(socket); | ||||
HandleRequest(socket, header.fType); | |||||
return HandleRequest(socket, header.fType); | |||||
} | } | ||||
break; | break; | ||||
} | } | ||||
@@ -65,10 +69,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ClientOpen"); | jack_log("JackRequest::ClientOpen"); | ||||
JackClientOpenRequest req; | JackClientOpenRequest req; | ||||
JackClientOpenResult res; | JackClientOpenResult res; | ||||
if (req.Read(socket) == 0) | |||||
fHandler->ClientAdd(socket, &req, &res); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ClientOpen write error name = %s", req.fName); | |||||
CheckRead(req, socket); | |||||
fHandler->ClientAdd(socket, &req, &res); | |||||
CheckWriteName("JackRequest::ClientOpen", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -76,10 +79,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ClientClose"); | jack_log("JackRequest::ClientClose"); | ||||
JackClientCloseRequest req; | JackClientCloseRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->ClientExternalClose(req.fRefNum); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ClientClose write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->ClientExternalClose(req.fRefNum); | |||||
CheckWriteRefNum("JackRequest::ClientClose", socket); | |||||
fHandler->ClientRemove(socket, req.fRefNum); | fHandler->ClientRemove(socket, req.fRefNum); | ||||
break; | break; | ||||
} | } | ||||
@@ -88,10 +90,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
JackActivateRequest req; | JackActivateRequest req; | ||||
JackResult res; | JackResult res; | ||||
jack_log("JackRequest::ActivateClient"); | jack_log("JackRequest::ActivateClient"); | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, req.fIsRealTime); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ActivateClient write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, req.fIsRealTime); | |||||
CheckWriteRefNum("JackRequest::ActivateClient", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -99,10 +100,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::DeactivateClient"); | jack_log("JackRequest::DeactivateClient"); | ||||
JackDeactivateRequest req; | JackDeactivateRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->ClientDeactivate(req.fRefNum); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::DeactivateClient write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->ClientDeactivate(req.fRefNum); | |||||
CheckWriteRefNum("JackRequest::DeactivateClient", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -110,10 +110,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::RegisterPort"); | jack_log("JackRequest::RegisterPort"); | ||||
JackPortRegisterRequest req; | JackPortRegisterRequest req; | ||||
JackPortRegisterResult res; | JackPortRegisterResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->PortRegister(req.fRefNum, req.fName, req.fPortType, req.fFlags, req.fBufferSize, &res.fPortIndex); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::RegisterPort write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->PortRegister(req.fRefNum, req.fName, req.fPortType, req.fFlags, req.fBufferSize, &res.fPortIndex); | |||||
CheckWriteRefNum("JackRequest::RegisterPort", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -121,10 +120,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::UnRegisterPort"); | jack_log("JackRequest::UnRegisterPort"); | ||||
JackPortUnRegisterRequest req; | JackPortUnRegisterRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->PortUnRegister(req.fRefNum, req.fPortIndex); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::UnRegisterPort write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->PortUnRegister(req.fRefNum, req.fPortIndex); | |||||
CheckWriteRefNum("JackRequest::UnRegisterPort", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -132,10 +130,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ConnectNamePorts"); | jack_log("JackRequest::ConnectNamePorts"); | ||||
JackPortConnectNameRequest req; | JackPortConnectNameRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ConnectNamePorts write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||||
CheckWriteRefNum("JackRequest::ConnectNamePorts", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -143,10 +140,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::DisconnectNamePorts"); | jack_log("JackRequest::DisconnectNamePorts"); | ||||
JackPortDisconnectNameRequest req; | JackPortDisconnectNameRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::DisconnectNamePorts write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||||
CheckWriteRefNum("JackRequest::DisconnectNamePorts", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -154,10 +150,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ConnectPorts"); | jack_log("JackRequest::ConnectPorts"); | ||||
JackPortConnectRequest req; | JackPortConnectRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ConnectPorts write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||||
CheckWriteRefNum("JackRequest::ConnectPorts", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -165,10 +160,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::DisconnectPorts"); | jack_log("JackRequest::DisconnectPorts"); | ||||
JackPortDisconnectRequest req; | JackPortDisconnectRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::DisconnectPorts write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||||
CheckWriteRefNum("JackRequest::DisconnectPorts", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -176,10 +170,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::PortRename"); | jack_log("JackRequest::PortRename"); | ||||
JackPortRenameRequest req; | JackPortRenameRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->PortRename(req.fRefNum, req.fPort, req.fName); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::PortRename write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->PortRename(req.fRefNum, req.fPort, req.fName); | |||||
CheckWriteRefNum("JackRequest::PortRename", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -187,10 +180,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::SetBufferSize"); | jack_log("JackRequest::SetBufferSize"); | ||||
JackSetBufferSizeRequest req; | JackSetBufferSizeRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->SetBufferSize(req.fBufferSize); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::SetBufferSize write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->SetBufferSize(req.fBufferSize); | |||||
CheckWrite("JackRequest::SetBufferSize", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -198,10 +190,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::SetFreeWheel"); | jack_log("JackRequest::SetFreeWheel"); | ||||
JackSetFreeWheelRequest req; | JackSetFreeWheelRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->SetFreewheel(req.fOnOff); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::SetFreeWheel write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->SetFreewheel(req.fOnOff); | |||||
CheckWrite("JackRequest::SetFreeWheel", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -209,10 +200,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ComputeTotalLatencies"); | jack_log("JackRequest::ComputeTotalLatencies"); | ||||
JackComputeTotalLatenciesRequest req; | JackComputeTotalLatenciesRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->ComputeTotalLatencies(); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ComputeTotalLatencies write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->ComputeTotalLatencies(); | |||||
CheckWrite("JackRequest::ComputeTotalLatencies", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -220,10 +210,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ReleaseTimebase"); | jack_log("JackRequest::ReleaseTimebase"); | ||||
JackReleaseTimebaseRequest req; | JackReleaseTimebaseRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->ReleaseTimebase(req.fRefNum); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ReleaseTimebase write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->ReleaseTimebase(req.fRefNum); | |||||
CheckWriteRefNum("JackRequest::ReleaseTimebase", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -231,10 +220,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::SetTimebaseCallback"); | jack_log("JackRequest::SetTimebaseCallback"); | ||||
JackSetTimebaseCallbackRequest req; | JackSetTimebaseCallbackRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->SetTimebaseCallback(req.fRefNum, req.fConditionnal); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::SetTimebaseCallback write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->SetTimebaseCallback(req.fRefNum, req.fConditionnal); | |||||
CheckWriteRefNum("JackRequest::SetTimebaseCallback", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -242,10 +230,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::GetInternalClientName"); | jack_log("JackRequest::GetInternalClientName"); | ||||
JackGetInternalClientNameRequest req; | JackGetInternalClientNameRequest req; | ||||
JackGetInternalClientNameResult res; | JackGetInternalClientNameResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::GetInternalClientName write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName); | |||||
CheckWriteRefNum("JackRequest::GetInternalClientName", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -253,10 +240,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::InternalClientHandle"); | jack_log("JackRequest::InternalClientHandle"); | ||||
JackInternalClientHandleRequest req; | JackInternalClientHandleRequest req; | ||||
JackInternalClientHandleResult res; | JackInternalClientHandleResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::InternalClientHandle write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum); | |||||
CheckWriteRefNum("JackRequest::InternalClientHandle", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -264,10 +250,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::InternalClientLoad"); | jack_log("JackRequest::InternalClientLoad"); | ||||
JackInternalClientLoadRequest req; | JackInternalClientLoadRequest req; | ||||
JackInternalClientLoadResult res; | JackInternalClientLoadResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->InternalClientLoad1(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, req.fUUID, &res.fStatus); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::InternalClientLoad write error name = %s", req.fName); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->InternalClientLoad1(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, req.fUUID, &res.fStatus); | |||||
CheckWriteName("JackRequest::InternalClientLoad", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -275,23 +260,21 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::InternalClientUnload"); | jack_log("JackRequest::InternalClientUnload"); | ||||
JackInternalClientUnloadRequest req; | JackInternalClientUnloadRequest req; | ||||
JackInternalClientUnloadResult res; | JackInternalClientUnloadResult res; | ||||
if (req.Read(socket) == 0) | |||||
res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus); | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::InternalClientUnload write error ref = %d", req.fRefNum); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus); | |||||
CheckWriteRefNum("JackRequest::InternalClientUnload", socket); | |||||
break; | break; | ||||
} | } | ||||
case JackRequest::kNotification: { | case JackRequest::kNotification: { | ||||
jack_log("JackRequest::Notification"); | jack_log("JackRequest::Notification"); | ||||
JackClientNotificationRequest req; | JackClientNotificationRequest req; | ||||
if (req.Read(socket) == 0) { | |||||
if (req.fNotify == kQUIT) { | |||||
jack_log("JackRequest::Notification kQUIT"); | |||||
throw JackQuitException(); | |||||
} else { | |||||
fServer->Notify(req.fRefNum, req.fNotify, req.fValue); | |||||
} | |||||
CheckRead(req, socket); | |||||
if (req.fNotify == kQUIT) { | |||||
jack_log("JackRequest::Notification kQUIT"); | |||||
throw JackQuitException(); | |||||
} else { | |||||
fServer->Notify(req.fRefNum, req.fNotify, req.fValue); | |||||
} | } | ||||
break; | break; | ||||
} | } | ||||
@@ -299,9 +282,8 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
case JackRequest::kSessionNotify: { | case JackRequest::kSessionNotify: { | ||||
jack_log("JackRequest::SessionNotify"); | jack_log("JackRequest::SessionNotify"); | ||||
JackSessionNotifyRequest req; | JackSessionNotifyRequest req; | ||||
if (req.Read(socket) == 0) { | |||||
fServer->GetEngine()->SessionNotify(req.fRefNum, req.fDst, req.fEventType, req.fPath, socket, NULL); | |||||
} | |||||
CheckRead(req, socket); | |||||
fServer->GetEngine()->SessionNotify(req.fRefNum, req.fDst, req.fEventType, req.fPath, socket, NULL); | |||||
break; | break; | ||||
} | } | ||||
@@ -309,12 +291,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::SessionReply"); | jack_log("JackRequest::SessionReply"); | ||||
JackSessionReplyRequest req; | JackSessionReplyRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) { | |||||
fServer->GetEngine()->SessionReply(req.fRefNum); | |||||
res.fResult = 0; | |||||
} | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::SessionReply write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->SessionReply(req.fRefNum); | |||||
CheckWrite("JackRequest::SessionReply", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -322,11 +301,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::GetClientByUUID"); | jack_log("JackRequest::GetClientByUUID"); | ||||
JackGetClientNameRequest req; | JackGetClientNameRequest req; | ||||
JackClientNameResult res; | JackClientNameResult res; | ||||
if (req.Read(socket) == 0) { | |||||
fServer->GetEngine()->GetClientNameForUUID(req.fUUID, res.fName, &res.fResult); | |||||
} | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::GetClientByUUID write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->GetClientNameForUUID(req.fUUID, res.fName); | |||||
CheckWrite("JackRequest::GetClientByUUID", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -334,11 +311,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::GetUUIDByClient"); | jack_log("JackRequest::GetUUIDByClient"); | ||||
JackGetUUIDRequest req; | JackGetUUIDRequest req; | ||||
JackUUIDResult res; | JackUUIDResult res; | ||||
if (req.Read(socket) == 0) { | |||||
fServer->GetEngine()->GetUUIDForClientName(req.fName, res.fUUID, &res.fResult); | |||||
} | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::GetUUIDByClient write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->GetUUIDForClientName(req.fName, res.fUUID); | |||||
CheckWrite("JackRequest::GetUUIDByClient", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -346,11 +321,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ReserveClientName"); | jack_log("JackRequest::ReserveClientName"); | ||||
JackReserveNameRequest req; | JackReserveNameRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) { | |||||
fServer->GetEngine()->ReserveClientName(req.fName, req.fUUID, &res.fResult); | |||||
} | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ReserveClientName write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->ReserveClientName(req.fName, req.fUUID); | |||||
CheckWrite("JackRequest::ReserveClientName", socket); | |||||
break; | break; | ||||
} | } | ||||
@@ -358,18 +331,18 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||||
jack_log("JackRequest::ClientHasSessionCallback"); | jack_log("JackRequest::ClientHasSessionCallback"); | ||||
JackClientHasSessionCallbackRequest req; | JackClientHasSessionCallbackRequest req; | ||||
JackResult res; | JackResult res; | ||||
if (req.Read(socket) == 0) { | |||||
fServer->GetEngine()->ClientHasSessionCallback(req.fName, &res.fResult); | |||||
} | |||||
if (res.Write(socket) < 0) | |||||
jack_error("JackRequest::ClientHasSessionCallback write error"); | |||||
CheckRead(req, socket); | |||||
res.fResult = fServer->GetEngine()->ClientHasSessionCallback(req.fName); | |||||
CheckWrite("JackRequest::ClientHasSessionCallback", socket); | |||||
break; | break; | ||||
} | } | ||||
default: | default: | ||||
jack_error("Unknown request %ld", type); | jack_error("Unknown request %ld", type); | ||||
break; | |||||
return -1; | |||||
} | } | ||||
return 0; | |||||
} | } | ||||
} // end of namespace | } // end of namespace | ||||
@@ -52,7 +52,7 @@ class JackRequestDecoder | |||||
JackRequestDecoder(JackServer* server, JackClientHandlerInterface* handler); | JackRequestDecoder(JackServer* server, JackClientHandlerInterface* handler); | ||||
virtual ~JackRequestDecoder(); | virtual ~JackRequestDecoder(); | ||||
void HandleRequest(detail::JackChannelTransactionInterface* socket, int type); | |||||
int HandleRequest(detail::JackChannelTransactionInterface* socket, int type); | |||||
}; | }; | ||||
} // end of namespace | } // end of namespace | ||||
@@ -287,7 +287,7 @@ OSStatus JackCoreAudioDriver::Render(void* inRefCon, | |||||
// Setup threaded based log function et get RT thread parameters once... | // Setup threaded based log function et get RT thread parameters once... | ||||
if (set_threaded_log_function()) { | if (set_threaded_log_function()) { | ||||
jack_log("set_threaded_log_function"); | |||||
jack_log("JackCoreAudioDriver::Render : set_threaded_log_function"); | |||||
JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint); | JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint); | ||||
if (driver->fComputationGrain > 0) { | if (driver->fComputationGrain > 0) { | ||||
@@ -302,8 +302,8 @@ OSStatus JackCoreAudioDriver::Render(void* inRefCon, | |||||
driver->CycleTakeBeginTime(); | driver->CycleTakeBeginTime(); | ||||
if (driver->Process() < 0) { | if (driver->Process() < 0) { | ||||
jack_error("Process error, stopping driver."); | |||||
driver->NotifyFailure(JackBackendError, "Process error, stopping driver."); // Message length limited to JACK_MESSAGE_SIZE | |||||
jack_error("Process error, stopping driver"); | |||||
driver->NotifyFailure(JackBackendError, "Process error, stopping driver"); // Message length limited to JACK_MESSAGE_SIZE | |||||
driver->Stop(); | driver->Stop(); | ||||
kill(JackTools::GetPID(), SIGINT); | kill(JackTools::GetPID(), SIGINT); | ||||
return kAudioHardwareUnsupportedOperationError; | return kAudioHardwareUnsupportedOperationError; | ||||
@@ -359,7 +359,7 @@ OSStatus JackCoreAudioDriver::SRNotificationCallback(AudioDeviceID inDevice, | |||||
jack_error("Cannot get current sample rate"); | jack_error("Cannot get current sample rate"); | ||||
printError(err); | printError(err); | ||||
} else { | } else { | ||||
jack_log("SRNotificationCallback : checked sample rate = %f", tmp_sample_rate); | |||||
jack_log("JackCoreAudioDriver::SRNotificationCallback : checked sample rate = %f", tmp_sample_rate); | |||||
} | } | ||||
driver->fState = true; | driver->fState = true; | ||||
break; | break; | ||||
@@ -389,7 +389,7 @@ OSStatus JackCoreAudioDriver::BSNotificationCallback(AudioDeviceID inDevice, | |||||
jack_error("Cannot get current buffer size"); | jack_error("Cannot get current buffer size"); | ||||
printError(err); | printError(err); | ||||
} else { | } else { | ||||
jack_log("BSNotificationCallback : checked buffer size = %d", tmp_buffer_size); | |||||
jack_log("JackCoreAudioDriver::BSNotificationCallback : checked buffer size = %d", tmp_buffer_size); | |||||
} | } | ||||
driver->fState = true; | driver->fState = true; | ||||
break; | break; | ||||
@@ -469,7 +469,7 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||||
case kAudioDevicePropertyStreamConfiguration: { | case kAudioDevicePropertyStreamConfiguration: { | ||||
jack_error("Cannot handle kAudioDevicePropertyStreamConfiguration : server will quit..."); | jack_error("Cannot handle kAudioDevicePropertyStreamConfiguration : server will quit..."); | ||||
driver->NotifyFailure(JackBackendError, "Another application has changed the device configuration."); // Message length limited to JACK_MESSAGE_SIZE | |||||
driver->NotifyFailure(JackBackendError, "Another application has changed the device configuration"); // Message length limited to JACK_MESSAGE_SIZE | |||||
driver->CloseAUHAL(); | driver->CloseAUHAL(); | ||||
kill(JackTools::GetPID(), SIGINT); | kill(JackTools::GetPID(), SIGINT); | ||||
return kAudioHardwareUnsupportedOperationError; | return kAudioHardwareUnsupportedOperationError; | ||||
@@ -492,7 +492,7 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||||
// Digidesign hardware, so "special" code : change the SR again here | // Digidesign hardware, so "special" code : change the SR again here | ||||
if (strncmp(device_name, digidesign_name, 10) == 0) { | if (strncmp(device_name, digidesign_name, 10) == 0) { | ||||
jack_log("Digidesign HW = %s", device_name); | |||||
jack_log("JackCoreAudioDriver::DeviceNotificationCallback Digidesign HW = %s", device_name); | |||||
// Set sample rate again... | // Set sample rate again... | ||||
sample_rate = driver->fEngineControl->fSampleRate; | sample_rate = driver->fEngineControl->fSampleRate; | ||||
@@ -501,7 +501,7 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||||
jack_error("Cannot set sample rate = %f", sample_rate); | jack_error("Cannot set sample rate = %f", sample_rate); | ||||
printError(err); | printError(err); | ||||
} else { | } else { | ||||
jack_log("Set sample rate = %f", sample_rate); | |||||
jack_log("JackCoreAudioDriver::DeviceNotificationCallback : set sample rate = %f", sample_rate); | |||||
} | } | ||||
// Check new sample rate again... | // Check new sample rate again... | ||||
@@ -511,12 +511,12 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||||
jack_error("Cannot get current sample rate"); | jack_error("Cannot get current sample rate"); | ||||
printError(err); | printError(err); | ||||
} else { | } else { | ||||
jack_log("Checked sample rate = %f", sample_rate); | |||||
jack_log("JackCoreAudioDriver::DeviceNotificationCallback : checked sample rate = %f", sample_rate); | |||||
} | } | ||||
return noErr; | return noErr; | ||||
} else { | } else { | ||||
driver->NotifyFailure(JackBackendError, "Another application has changed the sample rate."); // Message length limited to JACK_MESSAGE_SIZE | |||||
driver->NotifyFailure(JackBackendError, "Another application has changed the sample rate"); // Message length limited to JACK_MESSAGE_SIZE | |||||
driver->CloseAUHAL(); | driver->CloseAUHAL(); | ||||
kill(JackTools::GetPID(), SIGINT); | kill(JackTools::GetPID(), SIGINT); | ||||
return kAudioHardwareUnsupportedOperationError; | return kAudioHardwareUnsupportedOperationError; | ||||
@@ -539,7 +539,7 @@ OSStatus JackCoreAudioDriver::GetDeviceIDFromUID(const char* UID, AudioDeviceID* | |||||
} else { | } else { | ||||
OSStatus res = AudioHardwareGetProperty(kAudioHardwarePropertyDeviceForUID, &size, &value); | OSStatus res = AudioHardwareGetProperty(kAudioHardwarePropertyDeviceForUID, &size, &value); | ||||
CFRelease(inIUD); | CFRelease(inIUD); | ||||
jack_log("GetDeviceIDFromUID %s %ld", UID, *id); | |||||
jack_log("JackCoreAudioDriver::GetDeviceIDFromUID %s %ld", UID, *id); | |||||
return (*id == kAudioDeviceUnknown) ? kAudioHardwareBadDeviceError : res; | return (*id == kAudioDeviceUnknown) ? kAudioHardwareBadDeviceError : res; | ||||
} | } | ||||
} | } | ||||
@@ -559,7 +559,7 @@ OSStatus JackCoreAudioDriver::GetDefaultDevice(AudioDeviceID* id) | |||||
return res; | return res; | ||||
} | } | ||||
jack_log("GetDefaultDevice: input = %ld output = %ld", inDefault, outDefault); | |||||
jack_log("JackCoreAudioDriver::GetDefaultDevice : input = %ld output = %ld", inDefault, outDefault); | |||||
// Get the device only if default input and output are the same | // Get the device only if default input and output are the same | ||||
if (inDefault != outDefault) { | if (inDefault != outDefault) { | ||||
@@ -588,7 +588,7 @@ OSStatus JackCoreAudioDriver::GetDefaultInputDevice(AudioDeviceID* id) | |||||
jack_error("Error: default input device is 0, please select a correct one !!"); | jack_error("Error: default input device is 0, please select a correct one !!"); | ||||
return -1; | return -1; | ||||
} | } | ||||
jack_log("GetDefaultInputDevice: input = %ld ", inDefault); | |||||
jack_log("JackCoreAudioDriver::GetDefaultInputDevice : input = %ld ", inDefault); | |||||
*id = inDefault; | *id = inDefault; | ||||
return noErr; | return noErr; | ||||
} | } | ||||
@@ -607,7 +607,7 @@ OSStatus JackCoreAudioDriver::GetDefaultOutputDevice(AudioDeviceID* id) | |||||
jack_error("Error: default output device is 0, please select a correct one !!"); | jack_error("Error: default output device is 0, please select a correct one !!"); | ||||
return -1; | return -1; | ||||
} | } | ||||
jack_log("GetDefaultOutputDevice: output = %ld", outDefault); | |||||
jack_log("JackCoreAudioDriver::GetDefaultOutputDevice : output = %ld", outDefault); | |||||
*id = outDefault; | *id = outDefault; | ||||
return noErr; | return noErr; | ||||
} | } | ||||
@@ -741,11 +741,11 @@ OSStatus JackCoreAudioDriver::CreateAggregateDevice(AudioDeviceID captureDeviceI | |||||
vector<AudioDeviceID> captureDeviceIDArray; | vector<AudioDeviceID> captureDeviceIDArray; | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_log("Input device does not have subdevices"); | |||||
jack_log("JackCoreAudioDriver::CreateAggregateDevice : input device does not have subdevices"); | |||||
captureDeviceIDArray.push_back(captureDeviceID); | captureDeviceIDArray.push_back(captureDeviceID); | ||||
} else { | } else { | ||||
int num_devices = outSize / sizeof(AudioObjectID); | int num_devices = outSize / sizeof(AudioObjectID); | ||||
jack_log("Input device has %d subdevices", num_devices); | |||||
jack_log("JackCoreAudioDriver::CreateAggregateDevice :Input device has %d subdevices", num_devices); | |||||
for (int i = 0; i < num_devices; i++) { | for (int i = 0; i < num_devices; i++) { | ||||
captureDeviceIDArray.push_back(sub_device[i]); | captureDeviceIDArray.push_back(sub_device[i]); | ||||
} | } | ||||
@@ -755,11 +755,11 @@ OSStatus JackCoreAudioDriver::CreateAggregateDevice(AudioDeviceID captureDeviceI | |||||
vector<AudioDeviceID> playbackDeviceIDArray; | vector<AudioDeviceID> playbackDeviceIDArray; | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_log("Output device does not have subdevices"); | |||||
jack_log("JackCoreAudioDriver::CreateAggregateDevice : output device does not have subdevices"); | |||||
playbackDeviceIDArray.push_back(playbackDeviceID); | playbackDeviceIDArray.push_back(playbackDeviceID); | ||||
} else { | } else { | ||||
int num_devices = outSize / sizeof(AudioObjectID); | int num_devices = outSize / sizeof(AudioObjectID); | ||||
jack_log("Output device has %d subdevices", num_devices); | |||||
jack_log("JackCoreAudioDriver::CreateAggregateDevice : output device has %d subdevices", num_devices); | |||||
for (int i = 0; i < num_devices; i++) { | for (int i = 0; i < num_devices; i++) { | ||||
playbackDeviceIDArray.push_back(sub_device[i]); | playbackDeviceIDArray.push_back(sub_device[i]); | ||||
} | } | ||||
@@ -1107,7 +1107,7 @@ OSStatus JackCoreAudioDriver::CreateAggregateDeviceAux(vector<AudioDeviceID> cap | |||||
CFRelease(playbackDeviceUID[i]); | CFRelease(playbackDeviceUID[i]); | ||||
} | } | ||||
jack_log("New aggregate device %ld", *outAggregateDevice); | |||||
jack_log("JackCoreAudioDriver::CreateAggregateDeviceAux : new aggregate device %ld", *outAggregateDevice); | |||||
return noErr; | return noErr; | ||||
error: | error: | ||||
@@ -1126,13 +1126,13 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
// Duplex | // Duplex | ||||
if (strcmp(capture_driver_uid, "") != 0 && strcmp(playback_driver_uid, "") != 0) { | if (strcmp(capture_driver_uid, "") != 0 && strcmp(playback_driver_uid, "") != 0) { | ||||
jack_log("JackCoreAudioDriver::Open duplex"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : duplex"); | |||||
// Same device for capture and playback... | // Same device for capture and playback... | ||||
if (strcmp(capture_driver_uid, playback_driver_uid) == 0) { | if (strcmp(capture_driver_uid, playback_driver_uid) == 0) { | ||||
if (GetDeviceIDFromUID(playback_driver_uid, &fDeviceID) != noErr) { | if (GetDeviceIDFromUID(playback_driver_uid, &fDeviceID) != noErr) { | ||||
jack_log("Will take default in/out"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : will take default in/out"); | |||||
if (GetDefaultDevice(&fDeviceID) != noErr) { | if (GetDefaultDevice(&fDeviceID) != noErr) { | ||||
jack_error("Cannot open default device"); | jack_error("Cannot open default device"); | ||||
return -1; | return -1; | ||||
@@ -1149,7 +1149,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
AudioDeviceID captureID, playbackID; | AudioDeviceID captureID, playbackID; | ||||
if (GetDeviceIDFromUID(capture_driver_uid, &captureID) != noErr) { | if (GetDeviceIDFromUID(capture_driver_uid, &captureID) != noErr) { | ||||
jack_log("Will take default input"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : will take default input"); | |||||
if (GetDefaultInputDevice(&captureID) != noErr) { | if (GetDefaultInputDevice(&captureID) != noErr) { | ||||
jack_error("Cannot open default input device"); | jack_error("Cannot open default input device"); | ||||
return -1; | return -1; | ||||
@@ -1157,7 +1157,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
} | } | ||||
if (GetDeviceIDFromUID(playback_driver_uid, &playbackID) != noErr) { | if (GetDeviceIDFromUID(playback_driver_uid, &playbackID) != noErr) { | ||||
jack_log("Will take default output"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : will take default output"); | |||||
if (GetDefaultOutputDevice(&playbackID) != noErr) { | if (GetDefaultOutputDevice(&playbackID) != noErr) { | ||||
jack_error("Cannot open default output device"); | jack_error("Cannot open default output device"); | ||||
return -1; | return -1; | ||||
@@ -1174,9 +1174,9 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
// Capture only | // Capture only | ||||
} else if (strcmp(capture_driver_uid, "") != 0) { | } else if (strcmp(capture_driver_uid, "") != 0) { | ||||
jack_log("JackCoreAudioDriver::Open capture only"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : capture only"); | |||||
if (GetDeviceIDFromUID(capture_driver_uid, &fDeviceID) != noErr) { | if (GetDeviceIDFromUID(capture_driver_uid, &fDeviceID) != noErr) { | ||||
jack_log("Will take default input"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : will take default input"); | |||||
if (GetDefaultInputDevice(&fDeviceID) != noErr) { | if (GetDefaultInputDevice(&fDeviceID) != noErr) { | ||||
jack_error("Cannot open default input device"); | jack_error("Cannot open default input device"); | ||||
return -1; | return -1; | ||||
@@ -1189,9 +1189,9 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
// Playback only | // Playback only | ||||
} else if (strcmp(playback_driver_uid, "") != 0) { | } else if (strcmp(playback_driver_uid, "") != 0) { | ||||
jack_log("JackCoreAudioDriver::Open playback only"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : playback only"); | |||||
if (GetDeviceIDFromUID(playback_driver_uid, &fDeviceID) != noErr) { | if (GetDeviceIDFromUID(playback_driver_uid, &fDeviceID) != noErr) { | ||||
jack_log("Will take default output"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : will take default output"); | |||||
if (GetDefaultOutputDevice(&fDeviceID) != noErr) { | if (GetDefaultOutputDevice(&fDeviceID) != noErr) { | ||||
jack_error("Cannot open default output device"); | jack_error("Cannot open default output device"); | ||||
return -1; | return -1; | ||||
@@ -1204,7 +1204,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
// Use default driver in duplex mode | // Use default driver in duplex mode | ||||
} else { | } else { | ||||
jack_log("JackCoreAudioDriver::Open default driver"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : default driver"); | |||||
if (GetDefaultDevice(&fDeviceID) != noErr) { | if (GetDefaultDevice(&fDeviceID) != noErr) { | ||||
jack_error("Cannot open default device in duplex mode, so aggregate default input and default output"); | jack_error("Cannot open default device in duplex mode, so aggregate default input and default output"); | ||||
@@ -1212,7 +1212,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
AudioDeviceID captureID, playbackID; | AudioDeviceID captureID, playbackID; | ||||
if (GetDeviceIDFromUID(capture_driver_uid, &captureID) != noErr) { | if (GetDeviceIDFromUID(capture_driver_uid, &captureID) != noErr) { | ||||
jack_log("Will take default input"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : will take default input"); | |||||
if (GetDefaultInputDevice(&captureID) != noErr) { | if (GetDefaultInputDevice(&captureID) != noErr) { | ||||
jack_error("Cannot open default input device"); | jack_error("Cannot open default input device"); | ||||
return -1; | return -1; | ||||
@@ -1220,7 +1220,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||||
} | } | ||||
if (GetDeviceIDFromUID(playback_driver_uid, &playbackID) != noErr) { | if (GetDeviceIDFromUID(playback_driver_uid, &playbackID) != noErr) { | ||||
jack_log("Will take default output"); | |||||
jack_log("JackCoreAudioDriver::SetupDevices : will take default output"); | |||||
if (GetDefaultOutputDevice(&playbackID) != noErr) { | if (GetDefaultOutputDevice(&playbackID) != noErr) { | ||||
jack_error("Cannot open default output device"); | jack_error("Cannot open default output device"); | ||||
return -1; | return -1; | ||||
@@ -1255,11 +1255,11 @@ int JackCoreAudioDriver::SetupChannels(bool capturing, bool playing, int& inchan | |||||
if (capturing) { | if (capturing) { | ||||
err = GetTotalChannels(fDeviceID, in_nChannels, true); | err = GetTotalChannels(fDeviceID, in_nChannels, true); | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_error("Cannot get input channel number"); | |||||
jack_error("JackCoreAudioDriver::SetupChannels : cannot get input channel number"); | |||||
printError(err); | printError(err); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
jack_log("Max input channels : %d", in_nChannels); | |||||
jack_log("JackCoreAudioDriver::SetupChannels : max input channels : %d", in_nChannels); | |||||
} | } | ||||
} | } | ||||
@@ -1270,7 +1270,7 @@ int JackCoreAudioDriver::SetupChannels(bool capturing, bool playing, int& inchan | |||||
printError(err); | printError(err); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
jack_log("Max output channels : %d", out_nChannels); | |||||
jack_log("JackCoreAudioDriver::SetupChannels : max output channels : %d", out_nChannels); | |||||
} | } | ||||
} | } | ||||
@@ -1289,12 +1289,12 @@ int JackCoreAudioDriver::SetupChannels(bool capturing, bool playing, int& inchan | |||||
} | } | ||||
if (inchannels == -1) { | if (inchannels == -1) { | ||||
jack_log("Setup max in channels = %d", in_nChannels); | |||||
jack_log("JackCoreAudioDriver::SetupChannels : setup max in channels = %d", in_nChannels); | |||||
inchannels = in_nChannels; | inchannels = in_nChannels; | ||||
} | } | ||||
if (outchannels == -1) { | if (outchannels == -1) { | ||||
jack_log("Setup max out channels = %d", out_nChannels); | |||||
jack_log("JackCoreAudioDriver::SetupChannels : setup max out channels = %d", out_nChannels); | |||||
outchannels = out_nChannels; | outchannels = out_nChannels; | ||||
} | } | ||||
@@ -1314,7 +1314,7 @@ int JackCoreAudioDriver::SetupBufferSize(jack_nframes_t buffer_size) | |||||
printError(err); | printError(err); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
jack_log("Current buffer size = %ld", tmp_buffer_size); | |||||
jack_log("JackCoreAudioDriver::SetupBufferSize : current buffer size = %ld", tmp_buffer_size); | |||||
} | } | ||||
// If needed, set new buffer size | // If needed, set new buffer size | ||||
@@ -1335,14 +1335,14 @@ int JackCoreAudioDriver::SetupBufferSize(jack_nframes_t buffer_size) | |||||
err = AudioDeviceSetProperty(fDeviceID, NULL, 0, kAudioDeviceSectionGlobal, kAudioDevicePropertyBufferFrameSize, outSize, &tmp_buffer_size); | err = AudioDeviceSetProperty(fDeviceID, NULL, 0, kAudioDeviceSectionGlobal, kAudioDevicePropertyBufferFrameSize, outSize, &tmp_buffer_size); | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_error("Cannot set buffer size = %ld", tmp_buffer_size); | |||||
jack_error("JackCoreAudioDriver::SetupBufferSize : cannot set buffer size = %ld", tmp_buffer_size); | |||||
printError(err); | printError(err); | ||||
goto error; | goto error; | ||||
} | } | ||||
while (!fState && count++ < WAIT_NOTIFICATION_COUNTER) { | while (!fState && count++ < WAIT_NOTIFICATION_COUNTER) { | ||||
usleep(100000); | usleep(100000); | ||||
jack_log("Wait count = %d", count); | |||||
jack_log("JackCoreAudioDriver::SetupBufferSize : wait count = %d", count); | |||||
} | } | ||||
if (count >= WAIT_NOTIFICATION_COUNTER) { | if (count >= WAIT_NOTIFICATION_COUNTER) { | ||||
@@ -1357,7 +1357,7 @@ int JackCoreAudioDriver::SetupBufferSize(jack_nframes_t buffer_size) | |||||
jack_error("Cannot get current buffer size"); | jack_error("Cannot get current buffer size"); | ||||
printError(err); | printError(err); | ||||
} else { | } else { | ||||
jack_log("Checked buffer size = %ld", tmp_buffer_size); | |||||
jack_log("JackCoreAudioDriver::SetupBufferSize : checked buffer size = %ld", tmp_buffer_size); | |||||
} | } | ||||
// Remove BS change notification | // Remove BS change notification | ||||
@@ -1393,7 +1393,7 @@ int JackCoreAudioDriver::SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes | |||||
printError(err); | printError(err); | ||||
return -1; | return -1; | ||||
} else { | } else { | ||||
jack_log("Current sample rate = %f", tmp_sample_rate); | |||||
jack_log("JackCoreAudioDriver::SetupSampleRateAux : current sample rate = %f", tmp_sample_rate); | |||||
} | } | ||||
// If needed, set new sample rate | // If needed, set new sample rate | ||||
@@ -1421,7 +1421,7 @@ int JackCoreAudioDriver::SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes | |||||
while (!fState && count++ < WAIT_NOTIFICATION_COUNTER) { | while (!fState && count++ < WAIT_NOTIFICATION_COUNTER) { | ||||
usleep(100000); | usleep(100000); | ||||
jack_log("Wait count = %d", count); | |||||
jack_log("JackCoreAudioDriver::SetupSampleRateAux : wait count = %d", count); | |||||
} | } | ||||
if (count >= WAIT_NOTIFICATION_COUNTER) { | if (count >= WAIT_NOTIFICATION_COUNTER) { | ||||
@@ -1436,7 +1436,7 @@ int JackCoreAudioDriver::SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes | |||||
jack_error("Cannot get current sample rate"); | jack_error("Cannot get current sample rate"); | ||||
printError(err); | printError(err); | ||||
} else { | } else { | ||||
jack_log("Checked sample rate = %f", tmp_sample_rate); | |||||
jack_log("JackCoreAudioDriver::SetupSampleRateAux : checked sample rate = %f", tmp_sample_rate); | |||||
} | } | ||||
// Remove SR change notification | // Remove SR change notification | ||||
@@ -1469,7 +1469,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||||
AudioDeviceID currAudioDeviceID; | AudioDeviceID currAudioDeviceID; | ||||
UInt32 size; | UInt32 size; | ||||
jack_log("OpenAUHAL capturing = %d playing = %d inchannels = %d outchannels = %d in_nChannels = %d out_nChannels = %d chan_in_list = %d chan_out_list = %d", | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : capturing = %d playing = %d inchannels = %d outchannels = %d in_nChannels = %d out_nChannels = %d chan_in_list = %d chan_out_list = %d", | |||||
capturing, playing, inchannels, outchannels, in_nChannels, out_nChannels, chan_in_list.size(), chan_out_list.size()); | capturing, playing, inchannels, outchannels, in_nChannels, out_nChannels, chan_in_list.size(), chan_out_list.size()); | ||||
if (inchannels == 0 && outchannels == 0) { | if (inchannels == 0 && outchannels == 0) { | ||||
@@ -1498,10 +1498,10 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||||
// Start I/O | // Start I/O | ||||
if (capturing && inchannels > 0) { | if (capturing && inchannels > 0) { | ||||
enableIO = 1; | enableIO = 1; | ||||
jack_log("Setup AUHAL input on"); | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL input on"); | |||||
} else { | } else { | ||||
enableIO = 0; | enableIO = 0; | ||||
jack_log("Setup AUHAL input off"); | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL input off"); | |||||
} | } | ||||
err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO)); | err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO)); | ||||
@@ -1513,10 +1513,10 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||||
if (playing && outchannels > 0) { | if (playing && outchannels > 0) { | ||||
enableIO = 1; | enableIO = 1; | ||||
jack_log("Setup AUHAL output on"); | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL output on"); | |||||
} else { | } else { | ||||
enableIO = 0; | enableIO = 0; | ||||
jack_log("Setup AUHAL output off"); | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL output off"); | |||||
} | } | ||||
err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO)); | err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO)); | ||||
@@ -1533,7 +1533,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||||
printError(err1); | printError(err1); | ||||
goto error; | goto error; | ||||
} else { | } else { | ||||
jack_log("AudioUnitGetPropertyCurrentDevice = %d", currAudioDeviceID); | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : AudioUnitGetPropertyCurrentDevice = %d", currAudioDeviceID); | |||||
} | } | ||||
// Setup up choosen device, in both input and output cases | // Setup up choosen device, in both input and output cases | ||||
@@ -1643,7 +1643,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||||
} | } | ||||
PrintStreamDesc(&srcFormat); | PrintStreamDesc(&srcFormat); | ||||
jack_log("Setup AUHAL input stream converter SR = %ld", sample_rate); | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL input stream converter SR = %ld", sample_rate); | |||||
srcFormat.mSampleRate = sample_rate; | srcFormat.mSampleRate = sample_rate; | ||||
srcFormat.mFormatID = kAudioFormatLinearPCM; | srcFormat.mFormatID = kAudioFormatLinearPCM; | ||||
srcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; | srcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; | ||||
@@ -1673,7 +1673,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||||
} | } | ||||
PrintStreamDesc(&dstFormat); | PrintStreamDesc(&dstFormat); | ||||
jack_log("Setup AUHAL output stream converter SR = %ld", sample_rate); | |||||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL output stream converter SR = %ld", sample_rate); | |||||
dstFormat.mSampleRate = sample_rate; | dstFormat.mSampleRate = sample_rate; | ||||
dstFormat.mFormatID = kAudioFormatLinearPCM; | dstFormat.mFormatID = kAudioFormatLinearPCM; | ||||
dstFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; | dstFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; | ||||
@@ -2043,18 +2043,18 @@ int JackCoreAudioDriver::Attach() | |||||
char name[REAL_JACK_PORT_NAME_SIZE]; | char name[REAL_JACK_PORT_NAME_SIZE]; | ||||
char alias[REAL_JACK_PORT_NAME_SIZE]; | char alias[REAL_JACK_PORT_NAME_SIZE]; | ||||
jack_log("JackCoreAudioDriver::Attach fBufferSize %ld fSampleRate %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | |||||
jack_log("JackCoreAudioDriver::Attach : fBufferSize %ld fSampleRate %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | |||||
for (int i = 0; i < fCaptureChannels; i++) { | for (int i = 0; i < fCaptureChannels; i++) { | ||||
err = AudioDeviceGetPropertyInfo(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, &isWritable); | err = AudioDeviceGetPropertyInfo(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, &isWritable); | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_log("AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||||
} | } | ||||
if (err == noErr && size > 0) { | if (err == noErr && size > 0) { | ||||
err = AudioDeviceGetProperty(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, channel_name); | err = AudioDeviceGetProperty(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, channel_name); | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||||
} | } | ||||
snprintf(alias, sizeof(alias), "%s:%s:out_%s%u", fAliasName, fCaptureDriverName, channel_name, i + 1); | snprintf(alias, sizeof(alias), "%s:%s:out_%s%u", fAliasName, fCaptureDriverName, channel_name, i + 1); | ||||
} else { | } else { | ||||
@@ -2077,12 +2077,12 @@ int JackCoreAudioDriver::Attach() | |||||
err = AudioDeviceGetPropertyInfo(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, &isWritable); | err = AudioDeviceGetPropertyInfo(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, &isWritable); | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_log("AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||||
} | } | ||||
if (err == noErr && size > 0) { | if (err == noErr && size > 0) { | ||||
err = AudioDeviceGetProperty(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, channel_name); | err = AudioDeviceGetProperty(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, channel_name); | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||||
} | } | ||||
snprintf(alias, sizeof(alias), "%s:%s:in_%s%u", fAliasName, fPlaybackDriverName, channel_name, i + 1); | snprintf(alias, sizeof(alias), "%s:%s:in_%s%u", fAliasName, fPlaybackDriverName, channel_name, i + 1); | ||||
} else { | } else { | ||||
@@ -2102,7 +2102,7 @@ int JackCoreAudioDriver::Attach() | |||||
// Monitor ports | // Monitor ports | ||||
if (fWithMonitorPorts) { | if (fWithMonitorPorts) { | ||||
jack_log("Create monitor port"); | |||||
jack_log("JackCoreAudioDriver::Attach : create monitor port"); | |||||
snprintf(name, sizeof(name), "%s:monitor_%u", fClientControl.fName, i + 1); | snprintf(name, sizeof(name), "%s:monitor_%u", fClientControl.fName, i + 1); | ||||
if (fEngine->PortRegister(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, MonitorDriverFlags, fEngineControl->fBufferSize, &port_index) < 0) { | if (fEngine->PortRegister(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, MonitorDriverFlags, fEngineControl->fBufferSize, &port_index) < 0) { | ||||
jack_error("Cannot register monitor port for %s", name); | jack_error("Cannot register monitor port for %s", name); | ||||
@@ -2137,7 +2137,7 @@ int JackCoreAudioDriver::Start() | |||||
while (!fState && count++ < WAIT_COUNTER) { | while (!fState && count++ < WAIT_COUNTER) { | ||||
usleep(100000); | usleep(100000); | ||||
jack_log("JackCoreAudioDriver::Start wait count = %d", count); | |||||
jack_log("JackCoreAudioDriver::Start : wait count = %d", count); | |||||
} | } | ||||
if (count < WAIT_COUNTER) { | if (count < WAIT_COUNTER) { | ||||
@@ -2215,11 +2215,11 @@ bool JackCoreAudioDriver::TakeHog() | |||||
err = AudioDeviceGetProperty(fDeviceID, 0, kAudioDeviceSectionGlobal, kAudioAggregateDevicePropertyActiveSubDeviceList, &outSize, sub_device); | err = AudioDeviceGetProperty(fDeviceID, 0, kAudioDeviceSectionGlobal, kAudioAggregateDevicePropertyActiveSubDeviceList, &outSize, sub_device); | ||||
if (err != noErr) { | if (err != noErr) { | ||||
jack_log("Device does not have subdevices"); | |||||
jack_log("JackCoreAudioDriver::TakeHog : device does not have subdevices"); | |||||
return TakeHogAux(fDeviceID, true); | return TakeHogAux(fDeviceID, true); | ||||
} else { | } else { | ||||
int num_devices = outSize / sizeof(AudioObjectID); | int num_devices = outSize / sizeof(AudioObjectID); | ||||
jack_log("Device does has %d subdevices", num_devices); | |||||
jack_log("JackCoreAudioDriver::TakeHog : device does has %d subdevices", num_devices); | |||||
for (int i = 0; i < num_devices; i++) { | for (int i = 0; i < num_devices; i++) { | ||||
if (!TakeHogAux(sub_device[i], true)) { | if (!TakeHogAux(sub_device[i], true)) { | ||||
return false; | return false; | ||||
@@ -42,7 +42,7 @@ void* JackPosixThread::ThreadHandler(void* arg) | |||||
} | } | ||||
// Signal creation thread when started with StartSync | // Signal creation thread when started with StartSync | ||||
jack_log("ThreadHandler: start"); | |||||
jack_log("JackPosixThread::ThreadHandler : start"); | |||||
obj->fStatus = kIniting; | obj->fStatus = kIniting; | ||||
// Call Init method | // Call Init method | ||||
@@ -59,7 +59,7 @@ void* JackPosixThread::ThreadHandler(void* arg) | |||||
res = runnable->Execute(); | res = runnable->Execute(); | ||||
} | } | ||||
jack_log("ThreadHandler: exit"); | |||||
jack_log("JackPosixThread::ThreadHandler : exit"); | |||||
pthread_exit(0); | pthread_exit(0); | ||||
return 0; // never reached | return 0; // never reached | ||||
} | } | ||||
@@ -112,7 +112,7 @@ int JackPosixThread::StartImp(jack_native_thread_t* thread, int priority, int re | |||||
if (realtime) { | if (realtime) { | ||||
jack_log("Create RT thread"); | |||||
jack_log("JackPosixThread::StartImp : create RT thread"); | |||||
if ((res = pthread_attr_setinheritsched(&attributes, PTHREAD_EXPLICIT_SCHED))) { | if ((res = pthread_attr_setinheritsched(&attributes, PTHREAD_EXPLICIT_SCHED))) { | ||||
jack_error("Cannot request explicit scheduling for RT thread res = %d", res); | jack_error("Cannot request explicit scheduling for RT thread res = %d", res); | ||||
@@ -133,7 +133,7 @@ int JackPosixThread::StartImp(jack_native_thread_t* thread, int priority, int re | |||||
} | } | ||||
} else { | } else { | ||||
jack_log("Create non RT thread"); | |||||
jack_log("JackPosixThread::StartImp : create non RT thread"); | |||||
} | } | ||||
if ((res = pthread_attr_setstacksize(&attributes, THREAD_STACK))) { | if ((res = pthread_attr_setstacksize(&attributes, THREAD_STACK))) { | ||||
@@ -141,7 +141,7 @@ void JackSocketServerChannel::ClientAdd(detail::JackChannelTransactionInterface* | |||||
#ifdef __APPLE__ | #ifdef __APPLE__ | ||||
int on = 1; | int on = 1; | ||||
if (setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, (const char*)&on, sizeof(on)) < 0) { | if (setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, (const char*)&on, sizeof(on)) < 0) { | ||||
jack_log("setsockopt SO_NOSIGPIPE fd = %ld err = %s", fd, strerror(errno)); | |||||
jack_log("JackSocketServerChannel::ClientAdd : setsockopt SO_NOSIGPIPE fd = %ld err = %s", fd, strerror(errno)); | |||||
} | } | ||||
#endif | #endif | ||||
} else { | } else { | ||||
@@ -202,7 +202,7 @@ void JackSocketServerChannel::BuildPoolTable() | |||||
int i; | int i; | ||||
for (i = 1, it = fSocketTable.begin(); it != fSocketTable.end(); it++, i++) { | for (i = 1, it = fSocketTable.begin(); it != fSocketTable.end(); it++, i++) { | ||||
jack_log("fSocketTable i = %ld fd = %ld", i, it->first); | |||||
jack_log("JackSocketServerChannel::BuildPoolTable fSocketTable i = %ld fd = %ld", i, it->first); | |||||
fPollTable[i].fd = it->first; | fPollTable[i].fd = it->first; | ||||
fPollTable[i].events = POLLIN | POLLPRI | POLLERR | POLLHUP | POLLNVAL; | fPollTable[i].events = POLLIN | POLLPRI | POLLERR | POLLHUP | POLLNVAL; | ||||
} | } | ||||
@@ -224,44 +224,46 @@ bool JackSocketServerChannel::Execute() | |||||
// Global poll | // Global poll | ||||
if ((poll(fPollTable, fSocketTable.size() + 1, 10000) < 0) && (errno != EINTR)) { | if ((poll(fPollTable, fSocketTable.size() + 1, 10000) < 0) && (errno != EINTR)) { | ||||
jack_error("Engine poll failed err = %s request thread quits...", strerror(errno)); | |||||
jack_error("JackSocketServerChannel::Execute : engine poll failed err = %s request thread quits...", strerror(errno)); | |||||
return false; | return false; | ||||
} else { | } else { | ||||
// Poll all clients | // Poll all clients | ||||
for (unsigned int i = 1; i < fSocketTable.size() + 1; i++) { | for (unsigned int i = 1; i < fSocketTable.size() + 1; i++) { | ||||
int fd = fPollTable[i].fd; | int fd = fPollTable[i].fd; | ||||
jack_log("fPollTable i = %ld fd = %ld", i, fd); | |||||
jack_log("JackSocketServerChannel::Execute : fPollTable i = %ld fd = %ld", i, fd); | |||||
if (fPollTable[i].revents & ~POLLIN) { | if (fPollTable[i].revents & ~POLLIN) { | ||||
jack_log("Poll client error err = %s", strerror(errno)); | |||||
jack_log("JackSocketServerChannel::Execute : poll client error err = %s", strerror(errno)); | |||||
ClientKill(fd); | ClientKill(fd); | ||||
} else if (fPollTable[i].revents & POLLIN) { | } else if (fPollTable[i].revents & POLLIN) { | ||||
// Read header | |||||
JackClientSocket* socket = fSocketTable[fd].second; | JackClientSocket* socket = fSocketTable[fd].second; | ||||
// Decode header | |||||
JackRequest header; | JackRequest header; | ||||
if (header.Read(socket) < 0) { | if (header.Read(socket) < 0) { | ||||
jack_log("HandleRequest: cannot read header"); | |||||
jack_log("JackSocketServerChannel::Execute : cannot decode header"); | |||||
ClientKill(fd); | ClientKill(fd); | ||||
return false; | |||||
} else { | |||||
fDecoder->HandleRequest(socket, header.fType); | |||||
// Decode request | |||||
} else if (fDecoder->HandleRequest(socket, header.fType) < 0) { | |||||
jack_log("JackSocketServerChannel::Execute : cannot decode request"); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
// Check the server request socket */ | // Check the server request socket */ | ||||
if (fPollTable[0].revents & POLLERR) | |||||
if (fPollTable[0].revents & POLLERR) { | |||||
jack_error("Error on server request socket err = %s", strerror(errno)); | jack_error("Error on server request socket err = %s", strerror(errno)); | ||||
} | |||||
if (fPollTable[0].revents & POLLIN) | |||||
if (fPollTable[0].revents & POLLIN) { | |||||
ClientCreate(); | ClientCreate(); | ||||
} | |||||
} | } | ||||
BuildPoolTable(); | BuildPoolTable(); | ||||
return true; | return true; | ||||
} catch (JackQuitException& e) { | } catch (JackQuitException& e) { | ||||
jack_log("JackSocketServerChannel::Execute JackQuitException"); | |||||
jack_log("JackSocketServerChannel::Execute : JackQuitException"); | |||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
@@ -85,34 +85,36 @@ void JackClientPipeThread::Close() // Close | |||||
bool JackClientPipeThread::Execute() | bool JackClientPipeThread::Execute() | ||||
{ | { | ||||
try{ | |||||
try { | |||||
jack_log("JackClientPipeThread::Execute"); | jack_log("JackClientPipeThread::Execute"); | ||||
JackRequest header; | JackRequest header; | ||||
int res = header.Read(fPipe); | int res = header.Read(fPipe); | ||||
bool ret = true; | bool ret = true; | ||||
// Lock the global mutex | // Lock the global mutex | ||||
if (WaitForSingleObject(fMutex, INFINITE) == WAIT_FAILED) { | if (WaitForSingleObject(fMutex, INFINITE) == WAIT_FAILED) { | ||||
jack_error("JackClientPipeThread::HandleRequest: mutex wait error"); | |||||
jack_error("JackClientPipeThread::Execute : mutex wait error"); | |||||
} | } | ||||
// Decode header | |||||
if (res < 0) { | if (res < 0) { | ||||
jack_log("HandleRequest: cannot read header"); | |||||
jack_log("JackClientPipeThread::Execute : cannot decode header"); | |||||
ClientKill(); | ClientKill(); | ||||
ret = false; | ret = false; | ||||
// Decode request | |||||
} else if {fDecoder->HandleRequest(fPipe, header.fType) < 0) { | |||||
jack_log("JackClientPipeThread::Execute : cannot decode request"); | |||||
} | } | ||||
fDecoder->HandleRequest(fPipe, header.fType); | |||||
// Unlock the global mutex | // Unlock the global mutex | ||||
if (!ReleaseMutex(fMutex)) { | if (!ReleaseMutex(fMutex)) { | ||||
jack_error("JackClientPipeThread::HandleRequest: mutex release error"); | |||||
jack_error("JackClientPipeThread::Execute : mutex release error"); | |||||
} | } | ||||
return ret; | return ret; | ||||
} catch (JackQuitException& e) { | } catch (JackQuitException& e) { | ||||
jack_log("JackClientPipeThread::Execute JackQuitException"); | |||||
jack_log("JackClientPipeThread::Execute : JackQuitException"); | |||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
@@ -32,7 +32,7 @@ DWORD WINAPI JackWinThread::ThreadHandler(void* arg) | |||||
JackRunnableInterface* runnable = obj->fRunnable; | JackRunnableInterface* runnable = obj->fRunnable; | ||||
// Signal creation thread when started with StartSync | // Signal creation thread when started with StartSync | ||||
jack_log("ThreadHandler: start"); | |||||
jack_log("JackWinThread::ThreadHandler : start"); | |||||
obj->fStatus = kIniting; | obj->fStatus = kIniting; | ||||
// Call Init method | // Call Init method | ||||
@@ -50,7 +50,7 @@ DWORD WINAPI JackWinThread::ThreadHandler(void* arg) | |||||
} | } | ||||
SetEvent(obj->fEvent); | SetEvent(obj->fEvent); | ||||
jack_log("ThreadHandler: exit"); | |||||
jack_log("JackWinThread::ThreadHandler : exit"); | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -109,14 +109,14 @@ int JackWinThread::StartImp(jack_native_thread_t* thread, int priority, int real | |||||
if (realtime) { | if (realtime) { | ||||
jack_log("Create RT thread"); | |||||
jack_log("JackWinThread::StartImp : create RT thread"); | |||||
if (!SetThreadPriority(*thread, THREAD_PRIORITY_TIME_CRITICAL)) { | if (!SetThreadPriority(*thread, THREAD_PRIORITY_TIME_CRITICAL)) { | ||||
jack_error("Cannot set priority class = %d", GetLastError()); | jack_error("Cannot set priority class = %d", GetLastError()); | ||||
return -1; | return -1; | ||||
} | } | ||||
} else { | } else { | ||||
jack_log("Create non RT thread"); | |||||
jack_log("JackWinThread::StartImp : create non RT thread"); | |||||
} | } | ||||
return 0; | return 0; | ||||