blockingClientTCPTransport.cpp:
- changed magic numbers to enums blockingTCPTransport.cpp: - debug helpers only responseHandlers.*: - added two new handlers, NOOP and Echo
This commit is contained in:
@@ -188,7 +188,7 @@ namespace epics {
|
||||
* send verification response message
|
||||
*/
|
||||
|
||||
control->startMessage(1, 2*sizeof(int32)+sizeof(int16));
|
||||
control->startMessage(CMD_CONNECTION_VALIDATION, 2*sizeof(int32)+sizeof(int16));
|
||||
|
||||
// receive buffer size
|
||||
buffer->putInt(getReceiveBufferSize());
|
||||
@@ -205,7 +205,7 @@ namespace epics {
|
||||
_verifyOrEcho = false;
|
||||
}
|
||||
else {
|
||||
control->startMessage(2, 0);
|
||||
control->startMessage(CMD_ECHO, 0);
|
||||
// send immediately
|
||||
control->flush(true);
|
||||
}
|
||||
|
||||
@@ -417,6 +417,11 @@ namespace epics {
|
||||
|
||||
void BlockingTCPTransport::processReadCached(bool nestedCall,
|
||||
ReceiveStage inStage, int requiredBytes, bool addToBuffer) {
|
||||
// TODO remove debug
|
||||
errlogSevPrintf(errlogInfo,
|
||||
"processReadCached(%d, %d, %d, %d), _stage: %d",
|
||||
nestedCall, inStage, requiredBytes, addToBuffer, _stage);
|
||||
|
||||
try {
|
||||
while(!_closed) {
|
||||
if(_stage==READ_FROM_SOCKET||inStage!=NONE) {
|
||||
@@ -453,6 +458,11 @@ namespace epics {
|
||||
|
||||
int requiredPosition = (currentStartPosition
|
||||
+requiredBytes);
|
||||
|
||||
// TODO remove debug
|
||||
errlogSevPrintf(errlogInfo,
|
||||
"requredPos:%d, buffer->pos:%d",
|
||||
requiredPosition, _socketBuffer->getPosition());
|
||||
while(_socketBuffer->getPosition()<requiredPosition) {
|
||||
// read
|
||||
char readBuffer[MAX_TCP_RECV];
|
||||
@@ -462,6 +472,12 @@ namespace epics {
|
||||
maxToRead, 0);
|
||||
_socketBuffer->put(readBuffer, 0, bytesRead);
|
||||
|
||||
// TODO remove debug
|
||||
if(bytesRead>0) errlogSevPrintf(
|
||||
errlogInfo,
|
||||
"***!!! got %d bytes of %d (reqPos=%d)!!!***",
|
||||
bytesRead, requiredBytes, requiredPosition);
|
||||
|
||||
if(bytesRead<0) {
|
||||
// error (disconnect, end-of-stream) detected
|
||||
close(true);
|
||||
|
||||
@@ -63,9 +63,9 @@ namespace epics {
|
||||
|
||||
_handlerTable = new ResponseHandler*[HANDLER_TABLE_LENGTH];
|
||||
// TODO add real handlers, as they are developed
|
||||
_handlerTable[0] = badResponse;
|
||||
_handlerTable[0] = new NoopResponse(_context, "Beacon");
|
||||
_handlerTable[1] = new ConnectionValidationHandler(_context);
|
||||
_handlerTable[2] = badResponse;
|
||||
_handlerTable[2] = new EchoHandler(_context);
|
||||
_handlerTable[3] = badResponse;
|
||||
_handlerTable[4] = badResponse;
|
||||
_handlerTable[5] = badResponse;
|
||||
@@ -96,6 +96,8 @@ namespace epics {
|
||||
ServerResponseHandler::~ServerResponseHandler() {
|
||||
delete _handlerTable[0];
|
||||
delete _handlerTable[1];
|
||||
delete _handlerTable[2];
|
||||
delete _handlerTable[27];
|
||||
delete[] _handlerTable;
|
||||
}
|
||||
|
||||
@@ -137,5 +139,42 @@ namespace epics {
|
||||
//transport.setPriority(payloadBuffer.getShort());
|
||||
}
|
||||
|
||||
class EchoTransportSender : public TransportSender {
|
||||
public:
|
||||
EchoTransportSender(osiSockAddr* echoFrom) {
|
||||
memcpy(&_echoFrom, echoFrom, sizeof(osiSockAddr));
|
||||
}
|
||||
|
||||
virtual void send(ByteBuffer* buffer, TransportSendControl* control) {
|
||||
control->startMessage(CMD_ECHO, 0);
|
||||
control->setRecipient(&_echoFrom);
|
||||
}
|
||||
|
||||
virtual void lock() {
|
||||
}
|
||||
|
||||
virtual void unlock() {
|
||||
delete this;
|
||||
}
|
||||
private:
|
||||
osiSockAddr _echoFrom;
|
||||
|
||||
virtual ~EchoTransportSender() {
|
||||
}
|
||||
};
|
||||
|
||||
void EchoHandler::handleResponse(osiSockAddr* responseFrom,
|
||||
Transport* transport, int8 version, int8 command,
|
||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer) {
|
||||
AbstractServerResponseHandler::handleResponse(responseFrom,
|
||||
transport, version, command, payloadSize, payloadBuffer);
|
||||
|
||||
EchoTransportSender* echoReply = new EchoTransportSender(
|
||||
responseFrom);
|
||||
|
||||
// send back
|
||||
transport->enqueueSendRequest(echoReply);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,6 +103,41 @@ namespace epics {
|
||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||
};
|
||||
|
||||
/**
|
||||
* NOOP response.
|
||||
* @author <a href="mailto:matej.sekoranjaATcosylab.com">Matej Sekoranja</a>
|
||||
* @version $Id: NoopResponse.java,v 1.1 2010/05/03 14:45:39 mrkraimer Exp $
|
||||
*/
|
||||
class NoopResponse : public AbstractServerResponseHandler {
|
||||
public:
|
||||
/**
|
||||
* @param context
|
||||
* @param description
|
||||
*/
|
||||
NoopResponse(ServerContextImpl* context, String description) :
|
||||
AbstractServerResponseHandler(context, description) {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Echo request handler.
|
||||
* @author <a href="mailto:matej.sekoranjaATcosylab.com">Matej Sekoranja</a>
|
||||
* @version $Id: EchoHandler.java,v 1.1 2010/05/03 14:45:39 mrkraimer Exp $
|
||||
*/
|
||||
class EchoHandler : public AbstractServerResponseHandler {
|
||||
public:
|
||||
/**
|
||||
* @param context
|
||||
*/
|
||||
EchoHandler(ServerContextImpl* context) :
|
||||
AbstractServerResponseHandler(context, "Echo request") {
|
||||
}
|
||||
|
||||
virtual void handleResponse(osiSockAddr* responseFrom,
|
||||
Transport* transport, int8 version, int8 command,
|
||||
int payloadSize, epics::pvData::ByteBuffer* payloadBuffer);
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user