diff --git a/src/ca/access.cpp b/src/ca/access.cpp index 722e4d7d1..7d037c269 100644 --- a/src/ca/access.cpp +++ b/src/ca/access.cpp @@ -1088,6 +1088,12 @@ double epicsShareAPI ca_beacon_period ( chid pChan ) return pChan->beaconPeriod (); } +// extern "C" +double epicsShareAPI ca_receive_watchdog_delay ( chid pChan ) +{ + return pChan->receiveWatchdogDelay (); +} + /* * ca_get_ioc_connection_count() * diff --git a/src/ca/cacChannel.cpp b/src/ca/cacChannel.cpp index 82317f6bb..b50211ae5 100644 --- a/src/ca/cacChannel.cpp +++ b/src/ca/cacChannel.cpp @@ -59,6 +59,11 @@ double cacChannel::beaconPeriod () const return - DBL_MAX; } +double cacChannel::receiveWatchdogDelay () const +{ + return - DBL_MAX; +} + bool cacChannel::ca_v42_ok () const { return true; diff --git a/src/ca/cacIO.h b/src/ca/cacIO.h index 0f70cebcc..f86f4a201 100644 --- a/src/ca/cacIO.h +++ b/src/ca/cacIO.h @@ -179,6 +179,7 @@ public: virtual caAccessRights accessRights () const; // defaults to unrestricted access virtual unsigned searchAttempts () const; // defaults to zero virtual double beaconPeriod () const; // defaults to negative DBL_MAX + virtual double receiveWatchdogDelay () const; // defaults to negative DBL_MAX virtual bool ca_v42_ok () const; // defaults to true virtual bool connected () const; // defaults to true virtual void hostName ( diff --git a/src/ca/cadef.h b/src/ca/cadef.h index ab48d2441..c0fd976b9 100644 --- a/src/ca/cadef.h +++ b/src/ca/cadef.h @@ -935,6 +935,8 @@ epicsShareFunc void epicsShareAPI ca_self_test (void); epicsShareFunc unsigned epicsShareAPI ca_beacon_anomaly_count (void); epicsShareFunc unsigned epicsShareAPI ca_search_attempts (chid chan); epicsShareFunc double epicsShareAPI ca_beacon_period (chid chan); +epicsShareFunc double epicsShareAPI ca_receive_watchdog_delay (chid chan); + /* * used when an auxillary thread needs to join a CA client context started diff --git a/src/ca/nciu.cpp b/src/ca/nciu.cpp index 5429a10eb..effb60b4a 100644 --- a/src/ca/nciu.cpp +++ b/src/ca/nciu.cpp @@ -396,6 +396,12 @@ double nciu::beaconPeriod () const return this->cacCtx.beaconPeriod ( *this ); } +double nciu::receiveWatchdogDelay () const +{ + epicsGuard < cacMutex > locker ( this->cacCtx.mutexRef() ); + return this->piiu->receiveWatchdogDelay (); +} + void nciu::show ( unsigned level ) const { epicsGuard < cacMutex > locker ( this->cacCtx.mutexRef() ); diff --git a/src/ca/nciu.h b/src/ca/nciu.h index 5d78c4e8f..15888a7e5 100644 --- a/src/ca/nciu.h +++ b/src/ca/nciu.h @@ -127,6 +127,7 @@ private: caAccessRights accessRights () const; unsigned searchAttempts () const; double beaconPeriod () const; + double receiveWatchdogDelay () const; bool ca_v42_ok () const; void hostName ( char *pBuf, unsigned bufLength ) const; static void stringVerify ( const char *pStr, const unsigned count ); diff --git a/src/ca/netiiu.h b/src/ca/netiiu.h index 93048d9ba..a58ccaf15 100644 --- a/src/ca/netiiu.h +++ b/src/ca/netiiu.h @@ -66,6 +66,7 @@ public: virtual void requestRecvProcessPostponedFlush () = 0; virtual osiSockAddr getNetworkAddress () const = 0; virtual void uninstallChan ( epicsGuard < cacMutex > &, nciu & ) = 0; + virtual double receiveWatchdogDelay () const = 0; }; #endif // netiiuh diff --git a/src/ca/oldAccess.h b/src/ca/oldAccess.h index 873003ba1..386f972e5 100644 --- a/src/ca/oldAccess.h +++ b/src/ca/oldAccess.h @@ -80,6 +80,7 @@ public: caAccessRights accessRights () const; // defaults to unrestricted access unsigned searchAttempts () const; // defaults to zero double beaconPeriod () const; // defaults to negative DBL_MAX + double receiveWatchdogDelay () const; // defaults to negative DBL_MAX bool ca_v42_ok () const; bool connected () const; bool previouslyConnected () const; @@ -401,6 +402,11 @@ inline double oldChannelNotify::beaconPeriod () const return this->io.beaconPeriod (); } +inline double oldChannelNotify::receiveWatchdogDelay () const +{ + return this->io.receiveWatchdogDelay (); +} + inline bool oldChannelNotify::ca_v42_ok () const { return this->io.ca_v42_ok (); diff --git a/src/ca/tcpRecvWatchdog.cpp b/src/ca/tcpRecvWatchdog.cpp index c279b6570..176a091d3 100644 --- a/src/ca/tcpRecvWatchdog.cpp +++ b/src/ca/tcpRecvWatchdog.cpp @@ -137,6 +137,11 @@ void tcpRecvWatchdog::cancel () debugPrintf ( ("canceling TCP recv watchdog\n") ); } +double tcpRecvWatchdog::delay () const +{ + return this->timer.getExpireDelay (); +} + void tcpRecvWatchdog::show ( unsigned level ) const { ::printf ( "Receive virtual circuit watchdog at %p, period %f\n", diff --git a/src/ca/tcpRecvWatchdog.h b/src/ca/tcpRecvWatchdog.h index 5c5958922..6b3b0db78 100644 --- a/src/ca/tcpRecvWatchdog.h +++ b/src/ca/tcpRecvWatchdog.h @@ -46,6 +46,7 @@ public: void connectNotify (); void cancel (); void show ( unsigned level ) const; + double delay () const; private: const double period; epicsTimer & timer; diff --git a/src/ca/udpiiu.cpp b/src/ca/udpiiu.cpp index 28506789d..8775ad3f8 100644 --- a/src/ca/udpiiu.cpp +++ b/src/ca/udpiiu.cpp @@ -621,12 +621,12 @@ bool udpiiu::searchRespAction ( // X aCC 361 if ( CA_V42 ( minorVersion ) ) { success = this->cacRef.lookupChannelAndTransferToTCP ( cbLocker, msg.m_available, msg.m_cid, 0xffff, - 0, minorVersion, serverAddr, currentTime ); + 0, minorVersion, serverAddr ); } else { success = this->cacRef.lookupChannelAndTransferToTCP ( cbLocker, msg.m_available, msg.m_cid, msg.m_dataType, - msg.m_count, minorVersion, serverAddr, currentTime ); + msg.m_count, minorVersion, serverAddr ); } if ( success ) { @@ -1153,5 +1153,11 @@ osiSockAddr udpiiu::getNetworkAddress () const return netiiu::getNetworkAddress (); } +double udpiiu::receiveWatchdogDelay () const +{ + return - DBL_MAX; +} + + diff --git a/src/ca/udpiiu.h b/src/ca/udpiiu.h index 1fe26bcad..3256465d7 100644 --- a/src/ca/udpiiu.h +++ b/src/ca/udpiiu.h @@ -182,6 +182,7 @@ private: ( cacNotify &, epicsGuard < cacMutex > & ); void requestRecvProcessPostponedFlush (); osiSockAddr getNetworkAddress () const; + double receiveWatchdogDelay () const; udpiiu ( const udpiiu & ); udpiiu & operator = ( const udpiiu & ); diff --git a/src/ca/virtualCircuit.h b/src/ca/virtualCircuit.h index 0e57a3266..ed42a83ee 100644 --- a/src/ca/virtualCircuit.h +++ b/src/ca/virtualCircuit.h @@ -183,6 +183,7 @@ private: const char * pHostName () const; void blockUntilBytesArePendingInOS (); void shutdown ( epicsGuard & ); + double receiveWatchdogDelay () const; // send protocol stubs void echoRequest ( epicsGuard < cacMutex > & );