From b6ba34d3720c0150d21594876d705f0b11dca38f Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Thu, 7 Sep 2000 01:36:26 +0000 Subject: [PATCH] eliminated claimsPendingIIU class --- src/ca/nciu.cpp | 66 ++++++++++++++++++++++++++++++++++++++++-------- src/ca/nciu_IL.h | 10 ++++++-- 2 files changed, 63 insertions(+), 13 deletions(-) diff --git a/src/ca/nciu.cpp b/src/ca/nciu.cpp index d64af306f..099f2d380 100644 --- a/src/ca/nciu.cpp +++ b/src/ca/nciu.cpp @@ -27,11 +27,12 @@ #include "netWriteNotifyIO_IL.h" #include "netSubscription_IL.h" #include "cac_IL.h" +#include "ioCounter_IL.h" tsFreeList < class nciu, 1024 > nciu::freeList; nciu::nciu ( cac &cacIn, cacChannel &chanIn, const char *pNameIn ) : - cacChannelIO ( chanIn ), cacPrivate ( cacIn ) + cacChannelIO ( chanIn ), cacPrivateListOfIO ( cacIn ) { static const caar defaultAccessRights = { false, false }; size_t strcnt; @@ -55,9 +56,10 @@ nciu::nciu ( cac &cacIn, cacChannel &chanIn, const char *pNameIn ) : this->sid = UINT_MAX; /* invalid initial server id */ this->ar = defaultAccessRights; this->nameLength = strcnt; - this->previousConn = 0; + this->f_previousConn = false; this->f_connected = false; this->f_fullyConstructed = true; + this->f_claimSent = false; this->retry = 0u; this->retrySeqNo = 0u; this->ptrLockCount = 0u; @@ -464,9 +466,15 @@ int nciu::write ( unsigned type, unsigned long countIn, const void *pValue, cacN return status; } -void nciu::connect ( tcpiiu &iiu, unsigned nativeType, +void nciu::connect ( unsigned nativeType, unsigned long nativeCount, unsigned sidIn ) { + if ( ! this->f_claimSent ) { + ca_printf ( + "CAC: Ignored conn resp to chan lacking virtual circuit CID=%u SID=%u?\n", + this->getId (), sidIn ); + return; + } if ( this->f_connected ) { ca_printf ( @@ -475,20 +483,24 @@ void nciu::connect ( tcpiiu &iiu, unsigned nativeType, return; } + this->lockPIIU (); + bool v41Ok = this->piiu->ca_v41_ok (); + this->unlockPIIU (); + this->lock (); this->typeCode = nativeType; this->count = nativeCount; this->sid = sidIn; this->f_connected = true; - this->previousConn = true; + this->f_previousConn = true; /* * if less than v4.1 then the server will never * send access rights and we know that there * will always be access */ - if ( ! iiu.ca_v41_ok () ) { + if ( ! v41Ok ) { this->ar.read_access = true; this->ar.write_access = true; } @@ -506,7 +518,7 @@ void nciu::connect ( tcpiiu &iiu, unsigned nativeType, * will always be access and also need to call * their call back here */ - if ( ! iiu.ca_v41_ok () ) { + if ( ! v41Ok ) { this->accessRightsNotify ( this->ar ); } } @@ -525,6 +537,7 @@ void nciu::disconnect () this->sid = UINT_MAX; this->ar.read_access = false; this->ar.write_access = false; + this->f_claimSent = false; if ( this->f_connected ) { wasConnected = true; @@ -640,8 +653,10 @@ void nciu::attachChanToIIU ( netiiu &iiu ) iiu.mutex.lock (); - // add to the front of the list so that - // search requests for new channels will be sent first + // add to the front of the list so that search requests + // for new channels will be sent first and so that + // channels lacking a claim message prior to connecting + // are located iiu.channelList.push ( *this ); this->piiu = &iiu; @@ -692,7 +707,7 @@ void nciu::unlockOutstandingIO () const unsigned nciu::readSequence () const { - return this->cacCtx.readSequence (); + return this->cacCtx.readSequenceOfOutstandingIO (); } void nciu::hostName ( char *pBuf, unsigned bufLength ) const @@ -773,7 +788,7 @@ channel_state nciu::state () const if ( this->f_connected ) { stateOut = cs_conn; } - else if ( this->previousConn ) { + else if ( this->f_previousConn ) { stateOut = cs_prev_conn; } else { @@ -830,7 +845,7 @@ void nciu::show ( unsigned level ) const } printf ( "\n" ); } - else if ( this->previousConn ) { + else if ( this->f_previousConn ) { printf ( "Channel \"%s\" (previously connected to a server)\n", this->pNameStr ); } else { @@ -847,3 +862,32 @@ void nciu::show ( unsigned level ) const printf ( "\tfully cunstructed boolean=%u\n", this->f_fullyConstructed ); } } + +bool nciu::setClaimMsgCache ( claimMsgCache &cache ) +{ + cache.clientId = this->id; + cache.serverId = this->sid; + if ( cache.v44 ) { + unsigned len = strlen ( this->pNameStr ) + 1u; + if ( cache.bufLen < len ) { + unsigned newBufLen = 2 * len; + char *pNewStr = new char [ newBufLen ]; + if ( pNewStr ) { + delete [] cache.pStr; + cache.pStr = pNewStr; + cache.bufLen = newBufLen; + } + else { + return false; + } + } + strcpy ( cache.pStr, this->pNameStr ); + cache.currentStrLen = len; + } + else { + cache.currentStrLen = 0u; + } + this->f_claimSent = true; + return true; +} + diff --git a/src/ca/nciu_IL.h b/src/ca/nciu_IL.h index 94395834a..87a047ace 100644 --- a/src/ca/nciu_IL.h +++ b/src/ca/nciu_IL.h @@ -111,9 +111,10 @@ inline void nciu::subscriptionCancelMsg ( ca_uint32_t clientId ) this->unlockPIIU (); } -inline void nciu::connect ( tcpiiu &iiu ) +// this is to only be used by early protocol revisions +inline void nciu::connect () { - this->connect ( iiu, this->typeCode, this->count, this->sid ); + this->connect ( this->typeCode, this->count, this->sid ); } inline void nciu::searchReplySetUp ( unsigned sidIn, @@ -135,6 +136,11 @@ inline bool nciu::connected () const return this->f_connected; } +inline bool nciu::claimSent () const +{ + return this->f_claimSent; +} + inline bool nciu::connectionInProgress ( const osiSockAddr &addrIn ) { bool status;