diff --git a/common/JackRequest.h b/common/JackRequest.h index 87906484..c91bfac6 100644 --- a/common/JackRequest.h +++ b/common/JackRequest.h @@ -119,22 +119,32 @@ struct JackRequest virtual ~JackRequest() {} - virtual int Read(detail::JackChannelTransactionInterface* trans) - { - return trans->Read(&fType, sizeof(RequestType)); - } + virtual int Read(detail::JackChannelTransactionInterface* trans) = 0; - virtual int Write(detail::JackChannelTransactionInterface* trans) { return -1; } + virtual int Write(detail::JackChannelTransactionInterface* trans) = 0; - virtual int Write(detail::JackChannelTransactionInterface* trans, int size) + virtual int Size() const = 0; + + int Write(detail::JackChannelTransactionInterface* trans, int size) { fSize = size; CheckRes(trans->Write(&fType, sizeof(RequestType))); return trans->Write(&fSize, sizeof(int)); } - virtual int Size() const { return 0; } +}; + +struct JackRequestHeader +{ + JackRequest::RequestType fType; + + JackRequestHeader(): fType((JackRequest::RequestType)0) + {} + int Read(detail::JackChannelTransactionInterface* trans) + { + return trans->Read(&fType, sizeof(JackRequest::RequestType)); + } }; /*! diff --git a/common/JackRequestDecoder.cpp b/common/JackRequestDecoder.cpp index 2bed809c..9f231107 100644 --- a/common/JackRequestDecoder.cpp +++ b/common/JackRequestDecoder.cpp @@ -58,7 +58,7 @@ int JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* s CheckWriteName("JackRequest::ClientCheck", socket); // Atomic ClientCheck followed by ClientOpen on same socket if (req.fOpen) { - JackRequest header; + JackRequestHeader header; header.Read(socket); return HandleRequest(socket, header.fType); } diff --git a/posix/JackSocketServerChannel.cpp b/posix/JackSocketServerChannel.cpp index aba7bf23..13c99c7f 100644 --- a/posix/JackSocketServerChannel.cpp +++ b/posix/JackSocketServerChannel.cpp @@ -235,7 +235,7 @@ bool JackSocketServerChannel::Execute() } else if (fPollTable[i].revents & POLLIN) { JackClientSocket* socket = fSocketTable[fd].second; // Decode header - JackRequest header; + JackRequestHeader header; if (header.Read(socket) < 0) { jack_log("JackSocketServerChannel::Execute : cannot decode header"); ClientKill(fd); diff --git a/windows/JackWinNamedPipeServerChannel.cpp b/windows/JackWinNamedPipeServerChannel.cpp index 954fae2a..09d94aa9 100644 --- a/windows/JackWinNamedPipeServerChannel.cpp +++ b/windows/JackWinNamedPipeServerChannel.cpp @@ -83,7 +83,7 @@ bool JackClientPipeThread::Execute() try { jack_log("JackClientPipeThread::Execute %x", this); - JackRequest header; + JackRequestHeader header; int res = header.Read(fPipe); bool ret = true;