/*************************************************************************\ * Copyright (c) 2002 The University of Chicago, as Operator of Argonne * National Laboratory. * Copyright (c) 2002 The Regents of the University of California, as * Operator of Los Alamos National Laboratory. * EPICS BASE is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. \*************************************************************************/ /* * Revision-Id: anj@aps.anl.gov-20101005192737-disfz3vs0f3fiixd * * Author Jeffrey O. Hill * johill@lanl.gov * 505 665 1831 */ #include "errlog.h" #define epicsExportSharedSymbols #include "casAsyncPVExistIOI.h" casAsyncPVExistIOI::casAsyncPVExistIOI ( casAsyncPVExistIO & intf, const casCtx & ctx ) : casAsyncIOI ( ctx ), msg ( *ctx.getMsg() ), asyncPVExistIO ( intf ), retVal ( pverDoesNotExistHere ), dgOutAddr ( ctx.getClient()->fetchLastRecvAddr () ), protocolRevision ( ctx.getClient()->protocolRevision () ), sequenceNumber ( ctx.getClient()->datagramSequenceNumber () ) { ctx.getServer()->incrementIOInProgCount (); ctx.getClient()->installAsynchIO ( *this ); } caStatus casAsyncPVExistIOI::postIOCompletion ( const pvExistReturn & retValIn ) { this->retVal = retValIn; return this->insertEventQueue (); } caStatus casAsyncPVExistIOI::cbFuncAsyncIO ( epicsGuard < casClientMutex > & guard ) { caStatus status; if ( this->msg.m_cmmd == CA_PROTO_SEARCH ) { // // pass output DG address parameters // status = this->client.asyncSearchResponse ( guard, this->dgOutAddr, this->msg, this->retVal, this->protocolRevision, this->sequenceNumber ); } else { errPrintf ( S_cas_invalidAsynchIO, __FILE__, __LINE__, " - client request type = %u", this->msg.m_cmmd ); status = S_cas_invalidAsynchIO; } if ( status != S_cas_sendBlocked ) { this->client.uninstallAsynchIO ( *this ); this->client.getCAS().decrementIOInProgCount (); } return status; }