diff --git a/src/cas/build/singleThread/Makefile.Host b/src/cas/build/singleThread/Makefile.Host index 837731218..3223af635 100644 --- a/src/cas/build/singleThread/Makefile.Host +++ b/src/cas/build/singleThread/Makefile.Host @@ -11,7 +11,7 @@ include $(TOP)/config/CONFIG_BASE CXXCMPLR = STRICT # sometimes it's good to have different C/C++ flags, not now: -USR_CFLAGS = -I$(SRC) -I$(IOSRC) -I$(STSRC) -I$(CA) +USR_CFLAGS = -I$(SRC) -I$(IOSRC) -I$(STSRC) -I$(CA) -DcaNetAddrSock USR_CXXFLAGS = $(USR_CFLAGS) LIBSRCS += caServer.cc @@ -38,7 +38,6 @@ LIBSRCS += casAsyncPVCIOI.cc LIBSRCS += casEventSys.cc LIBSRCS += casMonitor.cc LIBSRCS += casMonEvent.cc -LIBSRCS += casOpaqueAddr.cc LIBSRCS += inBuf.o LIBSRCS += outBuf.cc LIBSRCS += dgInBuf.o diff --git a/src/cas/example/Makefile b/src/cas/example/Makefile index 829678154..484b2e4b0 100644 --- a/src/cas/example/Makefile +++ b/src/cas/example/Makefile @@ -3,7 +3,7 @@ TOP=../../.. include $(TOP)/config/CONFIG_BASE -DIRS = simple +DIRS = simple directoryService include $(TOP)/config/RULES_DIRS diff --git a/src/cas/example/simple/exPV.cc b/src/cas/example/simple/exPV.cc index aa7890908..d10ddfed4 100644 --- a/src/cas/example/simple/exPV.cc +++ b/src/cas/example/simple/exPV.cc @@ -86,7 +86,8 @@ caStatus exPV::update(gdd &valueIn) return cas; } - cur.get (t.tv_sec, t.tv_nsec); + t.tv_sec = (time_t) cur.getSecTruncToLong (); + t.tv_nsec = cur.getNSecTruncToLong (); this->pValue->setTimeStamp(&t); this->pValue->setStat (epicsAlarmNone); this->pValue->setSevr (epicsSevNone); @@ -242,7 +243,8 @@ inline aitTimeStamp exPV::getTS() } else { osiTime cur(osiTime::getCurrent()); - cur.get(ts.tv_sec, ts.tv_nsec); + ts.tv_sec = (time_t) cur.getSecTruncToLong (); + ts.tv_nsec = cur.getNSecTruncToLong (); } return ts; } diff --git a/src/cas/example/simple/exServer.cc b/src/cas/example/simple/exServer.cc index 63f3affda..70de5e545 100644 --- a/src/cas/example/simple/exServer.cc +++ b/src/cas/example/simple/exServer.cc @@ -140,7 +140,8 @@ void exServer::installAliasName(pvInfo &info, const char *pAliasName) // // exServer::pvExistTest() // -pvExistReturn exServer::pvExistTest(const casCtx& ctxIn, const char *pPVName) +pvExistReturn exServer::pvExistTest + (const casCtx& ctxIn, const char *pPVName) { // // lifetime of id is shorter than lifetime of pName @@ -185,7 +186,8 @@ pvExistReturn exServer::pvExistTest(const casCtx& ctxIn, const char *pPVName) // // exServer::createPV() // -pvCreateReturn exServer::createPV (const casCtx &ctx, const char *pName) +pvCreateReturn exServer::createPV + (const casCtx &ctx, const char *pName) { // // lifetime of id is shorter than lifetime of pName @@ -196,7 +198,7 @@ pvCreateReturn exServer::createPV (const casCtx &ctx, const char *pName) pPVE = this->stringResTbl.lookup(id); if (!pPVE) { - return pvCreateReturn(S_casApp_pvNotFound); + return S_casApp_pvNotFound; } pvInfo &pvi = pPVE->getInfo(); @@ -206,17 +208,20 @@ pvCreateReturn exServer::createPV (const casCtx &ctx, const char *pName) // if (pvi.getIOType() == excasIoSync) { pPV = pvi.createPV(*this, aitFalse); - if (!pPV) { - pvCreateReturn(S_casApp_noMemory); + if (pPV) { + return *pPV; } - return pvCreateReturn(*pPV); + else { + return S_casApp_noMemory; + } + } // // Initiate async IO if this is an async PV // else { if (this->simultAsychIOCount>=maxSimultAsyncIO) { - return pvCreateReturn(S_casApp_postponeAsyncIO); + return S_casApp_postponeAsyncIO; } this->simultAsychIOCount++; @@ -224,10 +229,10 @@ pvCreateReturn exServer::createPV (const casCtx &ctx, const char *pName) exAsyncCreateIO *pIO = new exAsyncCreateIO(pvi, *this, ctx); if (pIO) { - return pvCreateReturn(S_casApp_asyncCompletion); + return S_casApp_asyncCompletion; } else { - return pvCreateReturn(S_casApp_noMemory); + return S_casApp_noMemory; } } } diff --git a/src/cas/example/simple/exServer.h b/src/cas/example/simple/exServer.h index d6489cc3c..768fe2efc 100644 --- a/src/cas/example/simple/exServer.h +++ b/src/cas/example/simple/exServer.h @@ -66,10 +66,10 @@ public: // for this class // pvInfo (const pvInfo ©In) : - scanPeriod(copyIn.scanPeriod), pName(copyIn.pName), - hopr(copyIn.hopr), lopr(copyIn.lopr), - ioType(copyIn.ioType), elementCount(copyIn.elementCount), - pPV(copyIn.pPV) + scanPeriod(copyIn.scanPeriod), pName(copyIn.pName), + hopr(copyIn.hopr), lopr(copyIn.lopr), + ioType(copyIn.ioType), elementCount(copyIn.elementCount), + pPV(copyIn.pPV) { } @@ -78,7 +78,8 @@ public: const double getHopr () const { return this->hopr; } const double getLopr () const { return this->lopr; } const excasIoType getIOType () const { return this->ioType; } - const unsigned getElementCount() const { return this->elementCount; } + const unsigned getElementCount() const + { return this->elementCount; } void destroyPV() { this->pPV=NULL; } exPV *createPV (exServer &exCAS, aitBool preCreateFlag); private: @@ -103,7 +104,8 @@ private: // class pvEntry : public stringId, public tsSLNode { public: - pvEntry (pvInfo &infoIn, exServer &casIn, const char *pAliasName) : + pvEntry (pvInfo &infoIn, exServer &casIn, + const char *pAliasName) : stringId(pAliasName), info(infoIn), cas(casIn) { assert(this->stringId::resourceName()!=NULL); @@ -113,13 +115,8 @@ public: pvInfo &getInfo() const { return this->info; } - void destroy () - { - // - // always created with new - // - delete this; - } + inline void destroy (); + private: pvInfo &info; exServer &cas; @@ -252,7 +249,8 @@ protected: // class exScalarPV : public exPV { public: - exScalarPV (caServer &cas, pvInfo &setup, aitBool preCreateFlag) : + exScalarPV (caServer &cas, + pvInfo &setup, aitBool preCreateFlag) : exPV (cas, setup, preCreateFlag) {} void scan(); private: @@ -264,7 +262,8 @@ private: // class exVectorPV : public exPV { public: - exVectorPV (caServer &cas, pvInfo &setup, aitBool preCreateFlag) : + exVectorPV (caServer &cas, pvInfo &setup, + aitBool preCreateFlag) : exPV (cas, setup, preCreateFlag) {} void scan(); @@ -302,7 +301,8 @@ public: this->simultAsychIOCount--; } else { - fprintf(stderr, "inconsistent simultAsychIOCount?\n"); + fprintf(stderr, + "simultAsychIOCount underflow?\n"); } } private: @@ -561,4 +561,15 @@ inline pvEntry::~pvEntry() { this->cas.removeAliasName(*this); } + +// +// pvEntry:: destroy() +// +inline void pvEntry::destroy () +{ + // + // always created with new + // + delete this; +} diff --git a/src/cas/example/testdb/pvServ.cc b/src/cas/example/testdb/pvServ.cc index c7a8854d0..a5eaf2d7a 100644 --- a/src/cas/example/testdb/pvServ.cc +++ b/src/cas/example/testdb/pvServ.cc @@ -1,6 +1,9 @@ // $Id$ // $Log$ +// Revision 1.2 1997/03/05 21:16:22 jbk +// Fixes cvs log id at top +// #include #include "pvServ.h" @@ -80,7 +83,7 @@ int main(int argc, char* argv[]) Debug3("total=%d,rate=%lf,prefix=%s\n",total_pv,rate,name); - server = new serv(total_pv,rate,name,40u,total_pv,total_pv); + server = new serv(total_pv,rate,name,total_pv); rc=server->Main(); delete server; return rc; @@ -100,38 +103,19 @@ int serv::InitDB(void) int serv::Main(void) { - unsigned i; + int not_done=1; - - double inv=(1.0/event_rate); - double num=(unsigned long)inv; - double fract=inv-num; - unsigned long lfract=fract?(unsigned long)(1.0/fract):0; - unsigned long nsec = lfract?1000000000u/lfract:0; - unsigned long sec = (unsigned long)num; - struct timeval tv_curr,tv_prev; - - osiTime delay(sec,nsec); - - tv_prev.tv_sec=0; - tv_prev.tv_usec=0; - - Debug2("Update every sec=%lu nsec=%lu\n",sec,nsec); + + if (event_rate>0) { + Debug1("Update every %f sec\n", inv); + double inv=(1.0/event_rate); + pScanTimer = new scanTimer (inv, *this); + } while(not_done) { + osiTime delay(10.0); fileDescriptorManager.process(delay); - - gettimeofday(&tv_curr,NULL); - - if(tv_curr.tv_sec-tv_prev.tv_sec >= sec && - tv_curr.tv_usec-tv_prev.tv_usec >= (nsec/1000)) - { - for(i=0;i=0 && valunreference(); db.node=NULL; + delete [] pName; } -unsigned servPV::maxSimultAsyncOps(void) const { return 100000u; } - caStatus servPV::interestRegister() { if(!monitored) monitored=1; @@ -239,6 +238,11 @@ aitEnum servPV::bestExternalType() const return aitEnumFloat64; } +const char *servPV::getName() const +{ + return pName; +} + caStatus servPV::read(const casCtx&, gdd &dd) { Debug1("read: %s\n",db.pvname); @@ -277,3 +281,27 @@ void servPV::eventReady(void) postEvent(mgr.event_mask,*value); } +// +// scanTimer::expire () +// +void scanTimer::expire () +{ + serv.scan(); +} + +// +// scanTimer::again() +// +osiBool scanTimer::again() const +{ + return osiTrue; +} + +// +// scanTimer::delay() +// +const osiTime scanTimer::delay() const +{ + return period; +} + diff --git a/src/cas/example/testdb/pvServ.h b/src/cas/example/testdb/pvServ.h index 684b253d0..a0291f8f1 100644 --- a/src/cas/example/testdb/pvServ.h +++ b/src/cas/example/testdb/pvServ.h @@ -2,6 +2,9 @@ /* * $Id$ * $Log$ + * Revision 1.2 1997/03/05 21:16:23 jbk + * Fixes cvs log id at top + * */ #include "casdef.h" @@ -45,19 +48,38 @@ public: servPV* node; }; +class serv; + +// +// scanTimer +// +class scanTimer : public osiTimer { +public: + scanTimer (double delayIn, serv &servIn) : + osiTimer(delayIn), serv(servIn), + period(delayIn) {} + void expire (); + osiBool again() const; + const osiTime delay() const; +private: + serv &serv; + double period; +}; + class serv : public caServer { public: - serv(int totpv,double rate,char* prefix, - unsigned maxnamelen,unsigned pvtotalest, unsigned maxsimio); + serv(int totpv,double rate,char* prefix,unsigned pvtotalest); virtual ~serv(void); virtual pvExistReturn pvExistTest(const casCtx& c,const char* pvname); - virtual casPV* createPV(const casCtx& c,const char* pvname); + virtual pvCreateReturn createPV(const casCtx& c,const char* pvname); int InitDB(void); int Main(void); + void scan(); + // sloppy char* prefix; int prefix_len; @@ -65,12 +87,13 @@ public: double event_rate; casEventMask event_mask; dBase* db_sync; + scanTimer *pScanTimer; }; class servPV : public casPV { public: - servPV(const casCtx&,serv&,const char* pvname,dBase&); + servPV(serv&,const char* pvname,dBase&); virtual ~servPV(void); virtual caStatus interestRegister(void); @@ -79,7 +102,7 @@ public: virtual caStatus read(const casCtx &ctx, gdd &prototype); virtual caStatus write(const casCtx &ctx, gdd &value); virtual void destroy(void); - virtual unsigned maxSimultAsyncOps(void) const; + virtual const char *getName() const; void eventReady(void); @@ -88,5 +111,7 @@ private: dBase& db; gdd* value; int monitored; + char *pName; }; + diff --git a/src/cas/generic/Makefile.Host b/src/cas/generic/Makefile.Host index e2424ab20..5932cab58 100644 --- a/src/cas/generic/Makefile.Host +++ b/src/cas/generic/Makefile.Host @@ -2,7 +2,7 @@ TOP = ../../../.. include $(TOP)/config/CONFIG_BASE -INC := casdef.h casInternal.h casEventMask.h +INC := casdef.h casInternal.h casEventMask.h caNetAddr.h include $(TOP)/config/RULES.Host diff --git a/src/cas/generic/caServer.cc b/src/cas/generic/caServer.cc index 768d4b76c..fd5eba050 100644 --- a/src/cas/generic/caServer.cc +++ b/src/cas/generic/caServer.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.5 1997/04/10 19:33:52 jhill + * API changes + * * Revision 1.4 1996/11/02 00:53:53 jhill * many improvements * @@ -89,6 +92,22 @@ caServer::~caServer() } } +// +// caServer::pvExistTest() +// +pvExistReturn caServer::pvExistTest (const casCtx &, const char *) +{ + return pverDoesNotExistHere; +} + +// +// caServer::createPV() +// +pvCreateReturn caServer::createPV (const casCtx &, const char *) +{ + return S_casApp_pvNotFound; +} + // // caServer::registerEvent() // diff --git a/src/cas/generic/caServerI.cc b/src/cas/generic/caServerI.cc index 0ae2cb2a0..e8970efd9 100644 --- a/src/cas/generic/caServerI.cc +++ b/src/cas/generic/caServerI.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.7 1997/04/10 19:33:53 jhill + * API changes + * * Revision 1.6 1996/11/02 00:53:54 jhill * many improvements * @@ -333,7 +336,7 @@ void serverToolDebugFunc(const char *pFile, unsigned line, const char *pComment) // // caServerI::addAddr() // -caStatus caServerI::addAddr(const caAddr &caAddr, int autoBeaconAddr, +caStatus caServerI::addAddr(const caNetAddr &addr, int autoBeaconAddr, int addConfigBeaconAddr) { caStatus stat; @@ -341,7 +344,7 @@ caStatus caServerI::addAddr(const caAddr &caAddr, int autoBeaconAddr, pIntf = new casIntfOS(*this); if (pIntf) { - stat = pIntf->init(caAddr, this->dgClient, + stat = pIntf->init(addr, this->dgClient, autoBeaconAddr, addConfigBeaconAddr); if (stat==S_cas_success) { this->osiLock(); diff --git a/src/cas/generic/caServerIIL.h b/src/cas/generic/caServerIIL.h index b6e156c07..421f73486 100644 --- a/src/cas/generic/caServerIIL.h +++ b/src/cas/generic/caServerIIL.h @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.4 1997/04/10 19:33:54 jhill + * API changes + * * Revision 1.3 1996/11/02 00:53:56 jhill * many improvements * @@ -96,15 +99,6 @@ inline casChannelI *caServerI::resIdToChannel(const caResId &id) return (casChannelI *) pRes; } -// -// find the channel associated with a resource id -// -inline casPVExistReturn caServerI::pvExistTest( - const casCtx &ctxIn, const char *pPVName) -{ - return casPVExistReturn((*this)->pvExistTest(ctxIn, pPVName)); -} - // // caServerI::installItem() // diff --git a/src/cas/generic/casAsyncExIOI.cc b/src/cas/generic/casAsyncExIOI.cc index 0efb85048..dbb035ba1 100644 --- a/src/cas/generic/casAsyncExIOI.cc +++ b/src/cas/generic/casAsyncExIOI.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.3 1997/04/10 19:33:54 jhill + * API changes + * * Revision 1.2 1996/11/06 22:15:53 jhill * allow monitor init read to using rd async io * @@ -43,17 +46,17 @@ #include "server.h" #include "casAsyncIOIIL.h" // casAsyncIOI in line func #include "casChannelIIL.h" // casChannelI in line func -#include "casOpaqueAddrIL.h" // casOpaqueAddr in line func #include "casCtxIL.h" // casCtx in line func #include "casCoreClientIL.h" // casCoreClient in line func // // casAsyncExIOI::casAsyncExIOI() // -casAsyncExIOI::casAsyncExIOI(const casCtx &ctx, - casAsyncPVExistIO &ioIn) : +casAsyncExIOI::casAsyncExIOI( + const casCtx &ctx, casAsyncPVExistIO &ioIn) : casAsyncIOI(*ctx.getClient(), ioIn), msg(*ctx.getMsg()), + retVal(pverDoesNotExistHere), pOutDGIntfIO(ctx.getClient()->fetchOutIntf()), dgOutAddr(ctx.getClient()->fetchRespAddr()) { @@ -94,7 +97,7 @@ caStatus casAsyncExIOI::cbFuncAsyncIO() // assert(this->pOutDGIntfIO); status = this->client.asyncSearchResponse(*this->pOutDGIntfIO, - this->dgOutAddr.get(), this->msg, this->retVal); + this->dgOutAddr, this->msg, this->retVal); break; default: diff --git a/src/cas/generic/casAsyncPVCIOI.cc b/src/cas/generic/casAsyncPVCIOI.cc index c827e9a0c..d443d6fbe 100644 --- a/src/cas/generic/casAsyncPVCIOI.cc +++ b/src/cas/generic/casAsyncPVCIOI.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.1 1997/04/10 19:38:14 jhill + * installed + * * Revision 1.2 1996/11/06 22:15:53 jhill * allow monitor init read to using rd async io * @@ -43,7 +46,6 @@ #include "server.h" #include "casAsyncIOIIL.h" // casAsyncIOI in line func #include "casChannelIIL.h" // casChannelI in line func -#include "casOpaqueAddrIL.h" // casOpaqueAddr in line func #include "casCtxIL.h" // casCtx in line func #include "casCoreClientIL.h" // casCoreClient in line func @@ -53,7 +55,8 @@ casAsyncPVCIOI::casAsyncPVCIOI(const casCtx &ctx, casAsyncPVCreateIO &ioIn) : casAsyncIOI(*ctx.getClient(), ioIn), - msg(*ctx.getMsg()) + msg(*ctx.getMsg()), + retVal(S_cas_badParameter) { assert (&this->msg); this->client.installAsyncIO(*this); diff --git a/src/cas/generic/casChanDelEv.cc b/src/cas/generic/casChanDelEv.cc index 8476f8740..a71f08391 100644 --- a/src/cas/generic/casChanDelEv.cc +++ b/src/cas/generic/casChanDelEv.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.3 1997/04/10 19:33:58 jhill + * API changes + * * Revision 1.2 1996/11/02 00:54:01 jhill * many improvements * @@ -42,6 +45,13 @@ #include "server.h" #include "casEventSysIL.h" // casEventSys in line func +// +// casChanDelEv() +// +casChanDelEv::~casChanDelEv() +{ +} + // // casChanDelEv() // diff --git a/src/cas/generic/casCoreClient.cc b/src/cas/generic/casCoreClient.cc index 64948b505..5fa7cd0ad 100644 --- a/src/cas/generic/casCoreClient.cc +++ b/src/cas/generic/casCoreClient.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.5 1997/04/10 19:34:03 jhill + * API changes + * * Revision 1.4 1996/11/02 00:54:07 jhill * many improvements * @@ -182,7 +185,7 @@ void casCoreClient::show (unsigned level) const // asynchronous completion // caStatus casCoreClient::asyncSearchResponse(casDGIntfIO &, - const caAddr &, const caHdr &, const pvExistReturn) + const caNetAddr &, const caHdr &, const pvExistReturn &) { return S_casApp_noSupport; } @@ -239,11 +242,9 @@ void casCoreClient::removeChannel(casChannelI &) // // casCoreClient::fetchRespAddr() // -caAddr casCoreClient::fetchRespAddr() +caNetAddr casCoreClient::fetchRespAddr() { - caAddr addr; - memset (&addr, '\0', sizeof(addr)); - return addr; + return caNetAddr(); // sets addr type to UDF } // diff --git a/src/cas/generic/casDGClient.cc b/src/cas/generic/casDGClient.cc index 8b8f31fc7..f44dc63c6 100644 --- a/src/cas/generic/casDGClient.cc +++ b/src/cas/generic/casDGClient.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.9 1997/04/10 19:34:06 jhill + * API changes + * * Revision 1.8 1997/01/10 21:17:53 jhill * code around gnu g++ inline bug when -O isnt used * @@ -127,7 +130,6 @@ caStatus casDGClient::searchAction() void *dp = this->ctx.getData(); const char *pChanName = (const char *) dp; caStatus status; - pvExistReturn pver; if (this->ctx.getServer()->getDebugLevel()>2u) { printf("client is searching for \"%s\"\n", pChanName); @@ -149,38 +151,34 @@ caStatus casDGClient::searchAction() // ask the server tool if this PV exists // this->asyncIOFlag = 0u; - casPVExistReturn retVal = - this->ctx.getServer()->pvExistTest(this->ctx, pChanName); - if (retVal.getStatus()!=S_cas_success) { - return retVal.getStatus(); - } + pvExistReturn pver = + (*this->ctx.getServer())->pvExistTest(this->ctx, pChanName); // // prevent problems when they initiate // async IO but dont return status // indicating so (and vise versa) // - pver = retVal.getAppStat(); if (this->asyncIOFlag) { pver = pverAsyncCompletion; } - else if (pver == pverAsyncCompletion) { + else if (pver.getStatus() == pverAsyncCompletion) { pver = pverDoesNotExistHere; errMessage(S_cas_badParameter, - "- expected asynch IO creation from caServer::pvExistTest()"); + "- expected asynch IO status from caServer::pvExistTest()"); } // // otherwise we assume sync IO operation was initiated // - switch (pver) { + switch (pver.getStatus()) { case pverDoesNotExistHere: case pverAsyncCompletion: status = S_cas_success; break; case pverExistsHere: - status = this->searchResponse(*mp, retVal.getAppStat()); + status = this->searchResponse(*mp, pver); break; default: @@ -196,7 +194,7 @@ caStatus casDGClient::searchAction() // caStatus casDGClient::searchResponse() // caStatus casDGClient::searchResponse(const caHdr &msg, - const pvExistReturn retVal) + const pvExistReturn &retVal) { caStatus status; caHdr *search_reply; @@ -205,11 +203,11 @@ caStatus casDGClient::searchResponse(const caHdr &msg, // // normal search failure is ignored // - if (retVal==pverDoesNotExistHere) { + if (retVal.getStatus()==pverDoesNotExistHere) { return S_cas_success; } - if (retVal!=pverExistsHere) { + if (retVal.getStatus()!=pverExistsHere) { fprintf(stderr, "async exist completion with invalid return code \"pverAsynchCompletion\"?\n"); return S_cas_success; @@ -250,16 +248,42 @@ caStatus casDGClient::searchResponse(const caHdr &msg, return status; } + + *search_reply = msg; + search_reply->m_postsize = sizeof(*pMinorVersion); /* + * cid field is abused to carry the IP + * address in CA_V48 or higher + * (this allows a CA servers to serve + * as a directory service) + * * type field is abused to carry the IP * port number here CA_V44 or higher * (this allows multiple CA servers on one * host) */ - *search_reply = msg; - search_reply->m_postsize = sizeof(*pMinorVersion); - search_reply->m_cid = ~0U; - search_reply->m_type = this->pOutMsgIO->serverPortNumber(); + if (CA_V48(CA_PROTOCOL_VERSION,msg.m_count)) { + if (retVal.addrIsValid()) { + caNetAddr addr = retVal.getAddr(); + struct sockaddr_in ina = addr.getSockIP(); + search_reply->m_cid = ina.sin_addr.s_addr; + if (ina.sin_port==0u) { + search_reply->m_type = this->pOutMsgIO->serverPortNumber(); + } + else { + search_reply->m_type = ina.sin_port; + } + } + else { + search_reply->m_cid = ~0U; + search_reply->m_type = this->pOutMsgIO->serverPortNumber(); + } + } + else { + search_reply->m_cid = ~0U; + search_reply->m_type = this->pOutMsgIO->serverPortNumber(); + } + search_reply->m_count = 0ul; /* @@ -322,7 +346,7 @@ void casDGClient::sendBeacon(casDGIntfIO &io) // // send it to all addresses on the beacon list // - io.sendBeacon(buf, sizeof(msg), msg.m_available); + io.sendBeacon(buf, sizeof(msg), msg.m_available, msg.m_count); } // @@ -400,8 +424,9 @@ void casDGClient::processDG(casDGIntfIO &inMsgIO, casDGIntfIO &outMsgIO) // // casDGClient::asyncSearchResp() // -caStatus casDGClient::asyncSearchResponse(casDGIntfIO &outMsgIO, const caAddr &outAddr, - const caHdr &msg, const pvExistReturn retVal) +caStatus casDGClient::asyncSearchResponse( + casDGIntfIO &outMsgIO, const caNetAddr &outAddr, + const caHdr &msg, const pvExistReturn &retVal) { caStatus stat; @@ -425,7 +450,7 @@ caStatus casDGClient::asyncSearchResponse(casDGIntfIO &outMsgIO, const caAddr &o // casDGClient::xDGSend() // xSendStatus casDGClient::xDGSend (char *pBufIn, bufSizeT nBytesNeedToBeSent, - bufSizeT &nBytesSent, const caAddr &recipient) + bufSizeT &nBytesSent, const caNetAddr &recipient) { xSendStatus stat; @@ -447,7 +472,7 @@ xSendStatus casDGClient::xDGSend (char *pBufIn, bufSizeT nBytesNeedToBeSent, // casDGClient::xDGRecv() // xRecvStatus casDGClient::xDGRecv (char *pBufIn, bufSizeT nBytesToRecv, - bufSizeT &nByesRecv, caAddr &sender) + bufSizeT &nByesRecv, caNetAddr &sender) { xRecvStatus stat; @@ -489,7 +514,7 @@ unsigned casDGClient::getDebugLevel() const // // casDGClient::fetchRespAddr() // -caAddr casDGClient::fetchRespAddr() +caNetAddr casDGClient::fetchRespAddr() { return this->getRecipient(); } diff --git a/src/cas/generic/casInternal.h b/src/cas/generic/casInternal.h index 5fd7fccae..97ab03c21 100644 --- a/src/cas/generic/casInternal.h +++ b/src/cas/generic/casInternal.h @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.11 1997/04/10 19:34:10 jhill + * API changes + * * Revision 1.10 1997/01/10 21:17:55 jhill * code around gnu g++ inline bug when -O isnt used * @@ -87,6 +90,7 @@ private: class casChanDelEv : public casEvent { public: casChanDelEv(caResId idIn) : id(idIn) {} + ~casChanDelEv(); caStatus cbFunc(casEventSys &); private: caResId id; @@ -114,7 +118,7 @@ class ioBlocked : public tsDLNode { friend class ioBlockedList; public: ioBlocked (); - virtual ~ioBlocked ()=0; + virtual ~ioBlocked (); private: ioBlockedList *pList; virtual void ioBlockedSignal (); @@ -358,51 +362,6 @@ private: caStatus completionStatus; }; -union ca_addr; - -// -// casOpaqueAddr -// -// store address as an opaque array of bytes so that -// we dont drag the socket (or other IO specific) -// headers into the server tool. -// -// -// get() will assert fail if the init flag has not been -// set -// -class casOpaqueAddr -{ -public: - // - // casOpaqueAddr() - // - casOpaqueAddr(); - - // - // clear() - // - void clear(); - - inline int hasBeenInitialized() const; - inline casOpaqueAddr (const union ca_addr &addr); - inline void set (const union ca_addr &); - inline union ca_addr get () const; -private: - char opaqueAddr[16u]; // large enough for socket addresses - char init; - - // - // simple class that will assert fail if - // sizeof(opaqueAddr) < sizeof(caAddr) - // - class checkSize { - public: - checkSize(); - }; - static checkSize sizeChecker; -}; - class casDGIntfIO; // @@ -426,7 +385,7 @@ private: caHdr const msg; pvExistReturn retVal; casDGIntfIO * const pOutDGIntfIO; - const casOpaqueAddr dgOutAddr; + const caNetAddr dgOutAddr; }; // diff --git a/src/cas/generic/casMsgIO.cc b/src/cas/generic/casMsgIO.cc index 30ce06f40..07b12f6ef 100644 --- a/src/cas/generic/casMsgIO.cc +++ b/src/cas/generic/casMsgIO.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.4 1997/04/10 19:34:13 jhill + * API changes + * * Revision 1.3 1996/11/02 00:54:19 jhill * many improvements * @@ -41,9 +44,6 @@ * */ - - - #include"server.h" class casMsgIO { @@ -65,9 +65,9 @@ public: // xSendStatus xSend (char *pBuf, bufSizeT nBytesAvailableToSend, bufSizeT nBytesNeedToBeSent, bufSizeT &nBytesSent, - const caAddr &addr); + const caNetAddr &addr); xRecvStatus xRecv (char *pBuf, bufSizeT nBytesToRecv, - bufSizeT &nByesRecv, caAddr &addr); + bufSizeT &nByesRecv, caNetAddr &addr); virtual bufSizeT incommingBytesPresent() const; virtual casIOState state() const=0; @@ -93,9 +93,9 @@ private: xBlockingStatus blockingStatus; virtual xSendStatus osdSend (const char *pBuf, bufSizeT nBytesReq, - bufSizeT &nBytesActual, const caAddr &addr) =0; + bufSizeT &nBytesActual, const caNetAddr &addr) =0; virtual xRecvStatus osdRecv (char *pBuf, bufSizeT nBytesReq, - bufSizeT &nBytesActual, caAddr &addr) =0; + bufSizeT &nBytesActual, caNetAddr &addr) =0; virtual void osdShow (unsigned level) const = 0; virtual void xSetNonBlocking(); }; @@ -139,7 +139,7 @@ void casMsgIO::show(unsigned level) const // casMsgIO::xRecv() // xRecvStatus casMsgIO::xRecv(char *pBuf, bufSizeT nBytes, - bufSizeT &nActualBytes, caAddr &from) + bufSizeT &nActualBytes, caNetAddr &from) { xRecvStatus stat; @@ -155,7 +155,7 @@ xRecvStatus casMsgIO::xRecv(char *pBuf, bufSizeT nBytes, // xSendStatus casMsgIO::xSend(char *pBuf, bufSizeT nBytesAvailableToSend, bufSizeT nBytesNeedToBeSent, bufSizeT &nActualBytes, - const caAddr &to) + const caNetAddr &to) { xSendStatus stat; bufSizeT nActualBytesDelta; diff --git a/src/cas/generic/casStrmClient.cc b/src/cas/generic/casStrmClient.cc index 1ca9d3d4f..15fe738e6 100644 --- a/src/cas/generic/casStrmClient.cc +++ b/src/cas/generic/casStrmClient.cc @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.15 1997/04/10 19:34:18 jhill + * API changes + * * Revision 1.14 1996/12/12 18:56:27 jhill * doc * @@ -84,6 +87,7 @@ #include "inBufIL.h" // inBuf inline functions #include "outBufIL.h" // outBuf inline functions #include "gddApps.h" +#include "net_convert.h" // byte order conversion from libca VERSIONID(casStrmClientcc,"%W% %G%") @@ -349,6 +353,14 @@ caStatus casStrmClient::readResponse (casChannelI *pChan, const caHdr &msg, // gddMapDbr[msg.m_type].conv_dbr((reply+1), pDesc); +#ifdef CONVERSION_REQUIRED + /* use type as index into conversion jumptable */ + (* cac_dbr_cvrt[msg.m_type]) + ( reply + 1, + reply + 1, + TRUE, /* host -> net format */ + msg.m_count); +#endif // // force string message size to be the true size rounded to even // boundary @@ -483,6 +495,14 @@ caStatus casStrmClient::readNotifyResponse (casChannelI *, memset ((char *)(reply+1), '\0', size); } +#ifdef CONVERSION_REQUIRED + /* use type as index into conversion jumptable */ + (* cac_dbr_cvrt[msg.m_type]) + ( reply + 1, + reply + 1, + TRUE, /* host -> net format */ + msg.m_count); +#endif // // force string message size to be the true size rounded to even // boundary @@ -579,6 +599,14 @@ caStatus casStrmClient::monitorResponse (casChannelI *pChan, // gddMapDbr[msg.m_type].conv_dbr ((pReply+1), pDBRDD); +#ifdef CONVERSION_REQUIRED + /* use type as index into conversion jumptable */ + (* cac_dbr_cvrt[msg.m_type]) + ( pReply + 1, + pReply + 1, + TRUE, /* host -> net format */ + msg.m_count); +#endif // // force string message size to be the true size // @@ -1181,6 +1209,7 @@ caStatus casStrmClient::eventAddAction () gdd *pDD; caStatus status; casEventMask mask; + unsigned short caProtoMask; status = casStrmClient::verifyRequest (pciu); if (status != S_cas_validRequest) { @@ -1190,22 +1219,23 @@ caStatus casStrmClient::eventAddAction () // // place monitor mask in correct byte order // - pMonInfo->m_mask = ntohs (pMonInfo->m_mask); - - if (pMonInfo->m_mask&DBE_VALUE) { + caProtoMask = ntohs (pMonInfo->m_mask); + if (caProtoMask&DBE_VALUE) { mask |= this->getCAS().getAdapter()->valueEventMask; } - if (pMonInfo->m_mask&DBE_LOG) { + if (caProtoMask&DBE_LOG) { mask |= this->getCAS().getAdapter()->logEventMask; } - if (pMonInfo->m_mask&DBE_ALARM) { + if (caProtoMask&DBE_ALARM) { mask |= this->getCAS().getAdapter()->alarmEventMask; } if (mask.noEventsSelected()) { - this->sendErr(mp, ECA_BADMASK, "event add request"); + char errStr[40]; + sprintf(errStr, "event add req with mask=0X%X\n", caProtoMask); + this->sendErr(mp, ECA_BADMASK, errStr); return S_cas_success; } @@ -1513,6 +1543,15 @@ caStatus casStrmClient::write() return S_cas_badType; } +#ifdef CONVERSION_REQUIRED + /* use type as index into conversion jumptable */ + (* cac_dbr_cvrt[pHdr->m_type]) + ( this->ctx.getData(), + this->ctx.getData(), + FALSE, /* net -> host format */ + pHdr->m_count); +#endif + // // the PV state must not be modified during a transaction // diff --git a/src/cas/generic/casdef.h b/src/cas/generic/casdef.h index 847a7dd20..7cd87356e 100644 --- a/src/cas/generic/casdef.h +++ b/src/cas/generic/casdef.h @@ -30,6 +30,9 @@ * Modification Log: * ----------------- * $Log$ + * Revision 1.12 1997/04/10 19:34:19 jhill + * API changes + * * Revision 1.11 1997/01/09 22:24:46 jhill * eliminate MSVC++ warning resulting from passing *this to a base * @@ -112,7 +115,7 @@ // This eliminates a warning resulting from passing *this // to a base class during derived class construction. // -#ifdef WIN32 +#if defined(WIN32) # pragma warning (disable:4355) #endif @@ -173,6 +176,8 @@ typedef aitUint32 caStatus; #define S_casApp_undefined (M_casApp | 9) /*undefined value*/ #define S_casApp_postponeAsyncIO (M_casApp | 10) /*postpone asynchronous IO*/ +#include + // // pv exist test return // @@ -181,19 +186,79 @@ typedef aitUint32 caStatus; // to do so return pverDoesNotExistHere (and the client will // retry the request later). // -enum pvExistReturn {pverExistsHere, pverDoesNotExistHere, +enum pvExistReturnEnum {pverExistsHere, pverDoesNotExistHere, pverAsyncCompletion}; +class pvExistReturn { +public: + // + // most server tools will use this + // + pvExistReturn (pvExistReturnEnum s=pverDoesNotExistHere) : + status(s) {} + // + // directory service server tools + // will use this + // + // (see caNetAddr.h) + // + pvExistReturn (const caNetAddr &addressIn) : + status(pverExistsHere), address(addressIn) {} + + const pvExistReturn &operator = (pvExistReturnEnum rhs) + { + this->status = rhs; + this->address.clear(); + return *this; + } + const pvExistReturn &operator = (const caNetAddr &rhs) + { + this->status = pverExistsHere; + this->address = rhs; + return *this; + } + pvExistReturnEnum getStatus() const {return this->status;} + int addrIsValid() const {return this->address.isSock();} + caNetAddr getAddr() const {return this->address;} +private: + pvExistReturnEnum status; + caNetAddr address; +}; class casPV; class pvCreateReturn { public: - pvCreateReturn() - { this->pPV = NULL; this->stat = S_cas_badParameter; } pvCreateReturn(caStatus statIn) { this->pPV = NULL; this->stat = statIn; } pvCreateReturn(casPV &pv) { this->pPV = &pv; this->stat = S_casApp_success; } + + const pvCreateReturn &operator = (caStatus rhs) + { + this->pPV = NULL; + if (rhs == S_casApp_success) { + rhs = S_cas_badParameter; + } + this->stat = rhs; + return *this; + } + const pvCreateReturn &operator = (casPV &pvIn) + { + this->stat = S_casApp_success; + this->pPV = &pvIn; + return *this; + } + const pvCreateReturn &operator = (casPV *pPVIn) + { + if (pPVIn!=NULL) { + this->stat = S_casApp_success; + } + else { + this->stat = S_casApp_pvNotFound; + } + this->pPV = pPVIn; + return *this; + } const caStatus getStatus() const { return this->stat; } casPV *getPV() const { return this->pPV; } @@ -251,16 +316,14 @@ public: // return pverExistsHere; // server has PV // return pverDoesNotExistHere; // server does know of this PV // return pverAsynchCompletion; // deferred result - // return pverNoMemoryForAsyncOP; // unable to defer result // - // Return S_casApp_postponeAsyncIO if too many simultaneous - // asynchronous IO operations are pending aginst the server. - // The server library will retry the request whenever an - // asynchronous IO operation (create or exist) completes - // against the server. + // Return pverDoesNotExistHere if too many simultaneous + // asynchronous IO operations are pending against the server. + // The client library will retry the request at some time + // in the future. // virtual pvExistReturn pvExistTest (const casCtx &ctx, - const char *pPVAliasName) = 0; + const char *pPVAliasName); // // createPV() is called _every_ time that a PV is attached to @@ -281,19 +344,20 @@ public: // PV). // // example return from this procedure: - // return pvCreateReturn(*pPV); // success - // return pvCreateReturn(S_casApp_pvNotFound); // no PV by that name here - // return pvCreateReturn(S_casApp_noMemory); // no resource to create pv - // return pvCreateReturn(S_casApp_asyncCompletion); // deferred completion + // return pPV; // success (pass by pointer) + // return PV; // success (pass by ref) + // return S_casApp_pvNotFound; // no PV by that name here + // return S_casApp_noMemory; // no resource to create pv + // return S_casApp_asyncCompletion; // deferred completion // // Return S_casApp_postponeAsyncIO if too many simultaneous - // asynchronous IO operations are pending aginst the server. + // asynchronous IO operations are pending against the server. // The server library will retry the request whenever an // asynchronous IO operation (create or exist) completes // against the server. // virtual pvCreateReturn createPV (const casCtx &ctx, - const char *pPVAliasName) = 0; + const char *pPVAliasName); // // common event masks diff --git a/src/cas/generic/dgInBuf.cc b/src/cas/generic/dgInBuf.cc index 596df00cb..c9abfc594 100644 --- a/src/cas/generic/dgInBuf.cc +++ b/src/cas/generic/dgInBuf.cc @@ -1,7 +1,6 @@ #include "server.h" #include "inBufIL.h" -#include "casOpaqueAddrIL.h" // // this needs to be here (and not in dgInBufIL.h) if we @@ -30,7 +29,7 @@ dgInBuf::~dgInBuf() // int dgInBuf::hasAddress() const { - return this->from.hasBeenInitialized(); + return this->from.isSock(); } // @@ -39,12 +38,12 @@ int dgInBuf::hasAddress() const xRecvStatus dgInBuf::xRecv (char *pBufIn, bufSizeT nBytesToRecv, bufSizeT &nByesRecv) { - caAddr addr; + caNetAddr addr; xRecvStatus stat; stat = this->xDGRecv (pBufIn, nBytesToRecv, nByesRecv, addr); if (stat == xRecvOK) { - this->from.set(addr); + this->from = addr; } return stat; } @@ -52,8 +51,8 @@ xRecvStatus dgInBuf::xRecv (char *pBufIn, bufSizeT nBytesToRecv, // // dgInBuf::getSender() // -caAddr dgInBuf::getSender() const +caNetAddr dgInBuf::getSender() const { - return this->from.get(); + return this->from; } diff --git a/src/cas/generic/dgInBufIL.h b/src/cas/generic/dgInBufIL.h index 6832e6540..0533e6371 100644 --- a/src/cas/generic/dgInBufIL.h +++ b/src/cas/generic/dgInBufIL.h @@ -2,7 +2,6 @@ #ifndef dgInBufILh #define dgInBufILh -#include "casOpaqueAddrIL.h" #include "inBufIL.h" // diff --git a/src/cas/generic/dgOutBuf.cc b/src/cas/generic/dgOutBuf.cc index a4b8794ab..286b9b248 100644 --- a/src/cas/generic/dgOutBuf.cc +++ b/src/cas/generic/dgOutBuf.cc @@ -1,6 +1,5 @@ #include "server.h" -#include "casOpaqueAddrIL.h" #include "outBufIL.h" // @@ -31,8 +30,7 @@ xSendStatus dgOutBuf::xSend (char *pBufIn, bufSizeT &nBytesSent) { assert(nBytesAvailableToSend>=nBytesNeedToBeSent); - return xDGSend(pBufIn, nBytesAvailableToSend, nBytesSent, - this->to.get()); + return xDGSend(pBufIn, nBytesAvailableToSend, nBytesSent, this->to); } // @@ -53,9 +51,9 @@ void dgOutBuf::clear() // // dgOutBuf::setRecipient() // -void dgOutBuf::setRecipient(const caAddr &addr) +void dgOutBuf::setRecipient(const caNetAddr &addr) { - this->to.set(addr); + this->to = addr; } // @@ -64,8 +62,8 @@ void dgOutBuf::setRecipient(const caAddr &addr) // // dgOutBuf::getRecipient() // -caAddr dgOutBuf::getRecipient() +caNetAddr dgOutBuf::getRecipient() { - return this->to.get(); + return this->to; } diff --git a/src/cas/generic/dgOutBufIL.h b/src/cas/generic/dgOutBufIL.h index 1de0d166b..dbe4d8cc8 100644 --- a/src/cas/generic/dgOutBufIL.h +++ b/src/cas/generic/dgOutBufIL.h @@ -2,7 +2,6 @@ #ifndef dgOutBufILh #define dgOutBufILh -#include "casOpaqueAddrIL.h" #include "outBufIL.h" // diff --git a/src/cas/generic/server.h b/src/cas/generic/server.h index b9ee86b92..ca859165d 100644 --- a/src/cas/generic/server.h +++ b/src/cas/generic/server.h @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.16 1997/04/10 19:34:23 jhill + * API changes + * * Revision 1.15 1997/01/10 21:18:05 jhill * code around gnu g++ inline bug when -O isnt used * @@ -115,7 +118,6 @@ HDRVERSIONID(serverh, "%W% %G%") // // CAS // -#include "casAddr.h" #include "osiMutexCAS.h" // NOOP on single threaded OS void casVerifyFunc(const char *pFile, unsigned line, const char *pExp); void serverToolDebugFunc(const char *pFile, unsigned line, const char *pComment); @@ -335,15 +337,15 @@ public: int hasAddress() const; - caAddr getSender() const; + caNetAddr getSender() const; xRecvStatus xRecv (char *pBufIn, bufSizeT nBytesToRecv, bufSizeT &nByesRecv); virtual xRecvStatus xDGRecv (char *pBuf, bufSizeT nBytesToRecv, - bufSizeT &nByesRecv, caAddr &sender) = 0; + bufSizeT &nByesRecv, caNetAddr &sender) = 0; private: - casOpaqueAddr from; + caNetAddr from; }; // @@ -416,9 +418,9 @@ public: virtual ~dgOutBuf(); - caAddr getRecipient(); + caNetAddr getRecipient(); - void setRecipient(const caAddr &addr); + void setRecipient(const caNetAddr &addr); void clear(); @@ -426,9 +428,9 @@ public: bufSizeT nBytesNeedToBeSent, bufSizeT &nBytesSent); virtual xSendStatus xDGSend (char *pBuf, bufSizeT nBytesNeedToBeSent, - bufSizeT &nBytesSent, const caAddr &recipient) = 0; + bufSizeT &nBytesSent, const caNetAddr &recipient) = 0; private: - casOpaqueAddr to; + caNetAddr to; }; @@ -476,23 +478,27 @@ public: // one virtual function for each CA request type that has // asynchronous completion // - virtual caStatus asyncSearchResponse(casDGIntfIO &outMsgIO, - const caAddr &outAddr, const caHdr &, const pvExistReturn); - virtual caStatus createChanResponse(const caHdr &, const pvCreateReturn &); - virtual caStatus readResponse(casChannelI *, const caHdr &, - gdd *, const caStatus); - virtual caStatus readNotifyResponse(casChannelI *, const caHdr &, - gdd *, const caStatus); - virtual caStatus writeResponse(casChannelI *, const caHdr &, - const caStatus); - virtual caStatus writeNotifyResponse(casChannelI *, const caHdr &, - const caStatus); + virtual caStatus asyncSearchResponse( + casDGIntfIO &outMsgIO, const caNetAddr &outAddr, + const caHdr &, const pvExistReturn &); + virtual caStatus createChanResponse( + const caHdr &, const pvCreateReturn &); + virtual caStatus readResponse( + casChannelI *, const caHdr &, + gdd *, const caStatus); + virtual caStatus readNotifyResponse( + casChannelI *, const caHdr &, + gdd *, const caStatus); + virtual caStatus writeResponse( + casChannelI *, const caHdr &, const caStatus); + virtual caStatus writeNotifyResponse( + casChannelI *, const caHdr &, const caStatus); // // The following are only used with async IO for // DG clients // - virtual caAddr fetchRespAddr(); + virtual caNetAddr fetchRespAddr(); virtual casDGIntfIO* fetchOutIntf(); protected: casCtx ctx; @@ -774,12 +780,12 @@ private: // caStatus searchFailResponse(const caHdr *pMsg); - caStatus searchResponse(const caHdr &, const pvExistReturn); + caStatus searchResponse(const caHdr &, const pvExistReturn &); - caStatus asyncSearchResponse(casDGIntfIO &outMsgIO, - const caAddr &outAddr, const caHdr &msg, - const pvExistReturn); - caAddr fetchRespAddr(); + caStatus asyncSearchResponse( + casDGIntfIO &outMsgIO, const caNetAddr &outAddr, + const caHdr &msg, const pvExistReturn &); + caNetAddr fetchRespAddr(); casDGIntfIO* fetchOutIntf(); @@ -787,9 +793,9 @@ private: // IO depen // xRecvStatus xDGRecv (char *pBuf, bufSizeT nBytesToRecv, - bufSizeT &nByesRecv, caAddr &sender); + bufSizeT &nByesRecv, caNetAddr &sender); xSendStatus xDGSend (char *pBuf, bufSizeT nBytesNeedToBeSent, - bufSizeT &nBytesSent, const caAddr &recipient); + bufSizeT &nBytesSent, const caNetAddr &recipient); bufSizeT incommingBytesPresent() const; }; @@ -813,7 +819,7 @@ private: // casEventRegistry // class casEventRegistry : private resTable { - friend casEventMaskEntry; + friend class casEventMaskEntry; public: casEventRegistry(osiMutex &mutexIn) : mutex(mutexIn), allocator(0), hasBeenInitialized(0) {} @@ -842,24 +848,6 @@ private: class casClientMon; -// -// casPVExistReturn -// -// special return code for the server internal version of pvExistTest() -// -class casPVExistReturn { -public: - casPVExistReturn(pvExistReturn appIn) - {app=appIn; stat = S_cas_success; } - casPVExistReturn(caStatus statIn) - {app=pverDoesNotExistHere; stat = statIn; } - caStatus getStatus() const {return stat;} - pvExistReturn getAppStat() const {return app;} -private: - pvExistReturn app; - caStatus stat; -}; - // // caServerI // @@ -909,7 +897,6 @@ public: unsigned getDebugLevel() const { return debugLevel; } inline void setDebugLevel(unsigned debugLevelIn); - inline casPVExistReturn pvExistTest (const casCtx &ctx, const char *pPVName); osiTime getBeaconPeriod() const { return this->beaconPeriod; } @@ -932,7 +919,7 @@ public: inline aitBool ready(); - caStatus addAddr(const caAddr &caAddr, int autoBeaconAddr, + caStatus addAddr(const caNetAddr &addr, int autoBeaconAddr, int addConfigAddr); private: void advanceBeaconPeriod(); diff --git a/src/cas/generic/st/casIntfOS.cc b/src/cas/generic/st/casIntfOS.cc index 9114c068d..1788502e2 100644 --- a/src/cas/generic/st/casIntfOS.cc +++ b/src/cas/generic/st/casIntfOS.cc @@ -31,7 +31,7 @@ private: // // casIntfOS::init() // -caStatus casIntfOS::init(const caAddr &addrIn, casDGClient &dgClientIn, +caStatus casIntfOS::init(const caNetAddr &addrIn, casDGClient &dgClientIn, int autoBeaconAddr, int addConfigBeaconAddr) { caStatus stat; diff --git a/src/cas/generic/st/casOSD.h b/src/cas/generic/st/casOSD.h index 49723b00d..e69082c8f 100644 --- a/src/cas/generic/st/casOSD.h +++ b/src/cas/generic/st/casOSD.h @@ -7,6 +7,9 @@ // Some BSD calls have crept in here // // $Log$ +// Revision 1.2 1997/04/10 19:34:31 jhill +// API changes +// // Revision 1.1 1996/11/02 01:01:32 jhill // installed // @@ -83,7 +86,7 @@ class casIntfOS : public casIntfIO, public tsDLNode public: casIntfOS (caServerI &casIn) : cas (casIn), pRdReg (NULL) {} - caStatus init(const caAddr &addr, casDGClient &dgClientIn, + caStatus init(const caNetAddr &addr, casDGClient &dgClientIn, int autoBeaconAddr, int addConfigBeaconAddr); virtual ~casIntfOS(); diff --git a/src/cas/generic/st/ioBlocked.cc b/src/cas/generic/st/ioBlocked.cc index 9948af837..0608afcf9 100644 --- a/src/cas/generic/st/ioBlocked.cc +++ b/src/cas/generic/st/ioBlocked.cc @@ -7,6 +7,9 @@ // (for single threaded version of the server) // // $Log$ +// Revision 1.2 1997/04/10 19:34:32 jhill +// API changes +// // Revision 1.1 1996/11/02 01:01:34 jhill // installed // @@ -19,7 +22,7 @@ // -// ioBlocked::~ioBlocked() +// ioBlocked::ioBlocked() // ioBlocked::ioBlocked() : pList(NULL) diff --git a/src/cas/io/bsdSocket/caServerIO.cc b/src/cas/io/bsdSocket/caServerIO.cc index fac1a8bf0..aa4fbd188 100644 --- a/src/cas/io/bsdSocket/caServerIO.cc +++ b/src/cas/io/bsdSocket/caServerIO.cc @@ -5,6 +5,9 @@ // // // $Log$ +// Revision 1.4 1997/04/10 19:40:31 jhill +// API changes +// // Revision 1.3 1996/11/02 00:54:42 jhill // many improvements // @@ -20,6 +23,7 @@ #include "server.h" #include "sigPipeIgnore.h" +#include "addrList.h" static char *getToken(const char **ppString, char *pBuf, unsigned bufSIze); @@ -52,12 +56,12 @@ inline void caServerIO::staticInit() // caStatus caServerIO::init(caServerI &cas) { - char buf[64u]; - const char *pStr; + char buf[64u]; + const char *pStr; char *pToken; caStatus stat; unsigned short port; - caAddr addr; + struct sockaddr_in saddr; int autoBeaconAddr; caServerIO::staticInit(); @@ -75,9 +79,9 @@ caStatus caServerIO::init(caServerI &cas) port = caFetchPortConfig(&EPICS_CA_SERVER_PORT, CA_SERVER_PORT); } - memset((char *)&addr,0,sizeof(addr)); - addr.sa.sa_family = AF_INET; - addr.in.sin_port = ntohs (port); + memset((char *)&saddr,0,sizeof(saddr)); + saddr.sin_family = AF_INET; + saddr.sin_port = ntohs (port); pStr = envGetConfigParam(&EPICS_CA_AUTO_ADDR_LIST, sizeof(buf), buf); if (pStr) { @@ -106,8 +110,8 @@ caStatus caServerIO::init(caServerI &cas) int configAddrOnceFlag = TRUE; stat = S_cas_noInterface; while ( (pToken = getToken(&pStr, buf, sizeof(buf))) ) { - addr.in.sin_addr.s_addr = inet_addr(pToken); - if (addr.in.sin_addr.s_addr == ~0ul) { + saddr.sin_addr.s_addr = inet_addr(pToken); + if (saddr.sin_addr.s_addr == ~0ul) { ca_printf( "%s: Parsing '%s'\n", __FILE__, @@ -117,7 +121,7 @@ caStatus caServerIO::init(caServerI &cas) pToken); continue; } - stat = cas.addAddr(addr, autoBeaconAddr, configAddrOnceFlag); + stat = cas.addAddr(caNetAddr(saddr), autoBeaconAddr, configAddrOnceFlag); if (stat) { errMessage(stat, NULL); break; @@ -126,8 +130,8 @@ caStatus caServerIO::init(caServerI &cas) } } else { - addr.in.sin_addr.s_addr = INADDR_ANY; - stat = cas.addAddr(addr, autoBeaconAddr, TRUE); + saddr.sin_addr.s_addr = INADDR_ANY; + stat = cas.addAddr(caNetAddr(saddr), autoBeaconAddr, TRUE); if (stat) { errMessage(stat, NULL); } @@ -175,4 +179,3 @@ static char *getToken(const char **ppString, char *pBuf, unsigned bufSIze) } } - diff --git a/src/cas/io/bsdSocket/casDGIO.cc b/src/cas/io/bsdSocket/casDGIO.cc index 4d53bd45d..c3fefa2fd 100644 --- a/src/cas/io/bsdSocket/casDGIO.cc +++ b/src/cas/io/bsdSocket/casDGIO.cc @@ -38,8 +38,8 @@ void casDGIO::clientHostName (char *pBufIn, unsigned bufSizeIn) const { if (this->hasAddress()) { - const caAddr addr = this->getSender(); - ipAddrToA (&addr.in, pBufIn, bufSizeIn); + struct sockaddr_in addr = this->getSender(); + ipAddrToA (&addr, pBufIn, bufSizeIn); } else { if (bufSizeIn>=1u) { diff --git a/src/cas/io/bsdSocket/casDGIntfIO.cc b/src/cas/io/bsdSocket/casDGIntfIO.cc index 8a3770eca..e19e7bfe7 100644 --- a/src/cas/io/bsdSocket/casDGIntfIO.cc +++ b/src/cas/io/bsdSocket/casDGIntfIO.cc @@ -36,6 +36,7 @@ #include "server.h" #include "ipAddrToA.h" +#include "addrList.h" // // casDGIntfIO::casDGIntfIO() @@ -45,7 +46,8 @@ casDGIntfIO::casDGIntfIO(casDGClient &clientIn) : client(clientIn), sock(INVALID_SOCKET), sockState(casOffLine), - connectWithThisPort(0) + connectWithThisPort(0), + dgPort(0) { ellInit(&this->beaconAddrList); } @@ -53,16 +55,15 @@ casDGIntfIO::casDGIntfIO(casDGClient &clientIn) : // // casDGIntfIO::init() // -caStatus casDGIntfIO::init(const caAddr &addr, unsigned connectWithThisPortIn, +caStatus casDGIntfIO::init(const caNetAddr &addr, unsigned connectWithThisPortIn, int autoBeaconAddr, int addConfigBeaconAddr, int useBroadcastAddr, casDGIntfIO *pAltOutIn) { - int yes = TRUE; - caAddr serverAddr; - int status; - unsigned short serverPort; - unsigned short beaconPort; - ELLLIST BCastAddrList; + int yes = TRUE; + struct sockaddr_in serverAddr; + int status; + aitInt16 beaconPort; + ELLLIST BCastAddrList; if (pAltOutIn) { this->pAltOutIO = pAltOutIn; @@ -133,11 +134,11 @@ caStatus casDGIntfIO::init(const caAddr &addr, unsigned connectWithThisPortIn, // Fetch port configuration from EPICS environment variables // if (envGetConfigParamPtr(&EPICS_CAS_SERVER_PORT)) { - serverPort = caFetchPortConfig(&EPICS_CAS_SERVER_PORT, + this->dgPort = caFetchPortConfig(&EPICS_CAS_SERVER_PORT, CA_SERVER_PORT); } else { - serverPort = caFetchPortConfig(&EPICS_CA_SERVER_PORT, + this->dgPort = caFetchPortConfig(&EPICS_CA_SERVER_PORT, CA_SERVER_PORT); } beaconPort = caFetchPortConfig(&EPICS_CA_REPEATER_PORT, @@ -146,21 +147,21 @@ caStatus casDGIntfIO::init(const caAddr &addr, unsigned connectWithThisPortIn, /* * discover beacon addresses associated with this interface */ - serverAddr.in = addr.in; + serverAddr = addr; if (autoBeaconAddr || useBroadcastAddr) { ellInit(&BCastAddrList); caDiscoverInterfaces( &BCastAddrList, this->sock, beaconPort, - serverAddr.in.sin_addr); /* match addr */ + serverAddr.sin_addr); /* match addr */ if (useBroadcastAddr) { caAddrNode *pAddr; if (ellCount(&BCastAddrList)!=1) { return S_cas_noInterface; } pAddr = (caAddrNode *) ellFirst(&BCastAddrList); - serverAddr.in.sin_addr = pAddr->destAddr.in.sin_addr; + serverAddr.sin_addr = pAddr->destAddr.in.sin_addr; } if (autoBeaconAddr) { ellConcat(&this->beaconAddrList, &BCastAddrList); @@ -170,17 +171,17 @@ caStatus casDGIntfIO::init(const caAddr &addr, unsigned connectWithThisPortIn, } } - serverAddr.in.sin_port = htons (serverPort); + serverAddr.sin_port = htons (this->dgPort); status = bind( this->sock, - &serverAddr.sa, - sizeof (serverAddr.sa)); + (struct sockaddr *)&serverAddr, + sizeof (serverAddr)); if (status<0) { errPrintf(S_cas_bindFail, __FILE__, __LINE__, "- bind UDP IP addr=%s port=%u failed because %s", - inet_ntoa(serverAddr.in.sin_addr), - (unsigned) serverPort, + inet_ntoa(serverAddr.sin_addr), + (unsigned) this->dgPort, strerror(SOCKERRNO)); return S_cas_bindFail; } @@ -278,18 +279,19 @@ void casDGIntfIO::xSetNonBlocking() // casDGIntfIO::osdRecv() // xRecvStatus casDGIntfIO::osdRecv(char *pBuf, bufSizeT size, - bufSizeT &actualSize, caAddr &from) + bufSizeT &actualSize, caNetAddr &fromOut) { int status; int addrSize; + struct sockaddr from; if (this->sockState!=casOnLine) { return xRecvDisconnect; } - addrSize = sizeof(from.sa); + addrSize = sizeof(from); status = recvfrom(this->sock, pBuf, size, 0, - &from.sa, &addrSize); + &from, &addrSize); if (status<0) { if(SOCKERRNO == EWOULDBLOCK){ actualSize = 0u; @@ -303,6 +305,7 @@ xRecvStatus casDGIntfIO::osdRecv(char *pBuf, bufSizeT size, } } + fromOut = from; actualSize = (bufSizeT) status; return xRecvOK; } @@ -311,7 +314,7 @@ xRecvStatus casDGIntfIO::osdRecv(char *pBuf, bufSizeT size, // casDGIntfIO::osdSend() // xSendStatus casDGIntfIO::osdSend(const char *pBuf, bufSizeT size, - bufSizeT &actualSize, const caAddr &to) + bufSizeT &actualSize, const caNetAddr &to) { int status; int anerrno; @@ -328,8 +331,9 @@ xSendStatus casDGIntfIO::osdSend(const char *pBuf, bufSizeT size, // // (char *) cast below is for brain dead wrs prototype // + struct sockaddr dest = to; status = sendto(this->sock, (char *) pBuf, size, 0, - (sockaddr *) &to.sa, sizeof(to.sa)); + &dest, sizeof(dest)); if (status>0) { if (size != (unsigned) status) { ca_printf ("CAS: partial UDP msg discarded??\n"); @@ -360,7 +364,7 @@ xSendStatus casDGIntfIO::osdSend(const char *pBuf, bufSizeT size, // // casDGIntfIO::sendBeacon() // -void casDGIntfIO::sendBeacon(char &msg, unsigned length, aitUint32 &m_avail) +void casDGIntfIO::sendBeacon(char &msg, unsigned length, aitUint32 &m_ipa, aitUint16 &m_port) { caAddrNode *pAddr; int status; @@ -373,8 +377,8 @@ void casDGIntfIO::sendBeacon(char &msg, unsigned length, aitUint32 &m_avail) pAddr; pAddr = (caAddrNode *)ellNext(&pAddr->node)) { - m_avail = htonl(pAddr->srcAddr.in.sin_addr.s_addr); - + m_ipa = htonl(pAddr->srcAddr.in.sin_addr.s_addr); + m_port = htons(this->dgPort); status = sendto( this->sock, &msg, diff --git a/src/cas/io/bsdSocket/casIOD.h b/src/cas/io/bsdSocket/casIOD.h index 14811fd45..1c6be9794 100644 --- a/src/cas/io/bsdSocket/casIOD.h +++ b/src/cas/io/bsdSocket/casIOD.h @@ -7,6 +7,9 @@ // Some BSD calls have crept in here // // $Log$ +// Revision 1.7 1997/01/10 21:18:55 jhill +// code around gnu g++ inline bug when -O isnt used +// // Revision 1.6 1996/11/02 00:54:45 jhill // many improvements // @@ -30,9 +33,10 @@ #ifndef includeCASIODH #define includeCASIODH -void hostNameFromIPAddr (const caAddr *pAddr, - char *pBuf, unsigned bufSize); +#include "envDefs.h" +void hostNameFromIPAddr (const caNetAddr *pAddr, + char *pBuf, unsigned bufSize); class casDGClient; @@ -42,21 +46,21 @@ class casDGClient; class casDGIntfIO { public: casDGIntfIO (casDGClient &clientIn); - caStatus init(const caAddr &addr, unsigned connectWithThisPort, + caStatus init(const caNetAddr &addr, unsigned connectWithThisPort, int autoBeaconAddr=TRUE, int addConfigBeaconAddr=FALSE, int useBroadcastAddr=FALSE, casDGIntfIO *pAltOutIn=NULL); virtual ~casDGIntfIO(); int getFD() const; void xSetNonBlocking(); - void sendBeacon(char &msg, bufSizeT length, aitUint32 &m_avail); + void sendBeacon(char &msg, bufSizeT length, aitUint32 &m_ipa, aitUint16 &m_port); casIOState state() const; void clientHostName (char *pBuf, unsigned bufSize) const; xSendStatus osdSend (const char *pBuf, bufSizeT nBytesReq, - bufSizeT &nBytesActual, const caAddr &addr); + bufSizeT &nBytesActual, const caNetAddr &addr); xRecvStatus osdRecv (char *pBuf, bufSizeT nBytesReq, - bufSizeT &nBytesActual, caAddr &addr); + bufSizeT &nBytesActual, caNetAddr &addr); void osdShow (unsigned level) const; static bufSizeT optimumBufferSize (); @@ -78,10 +82,11 @@ private: SOCKET sock; casIOState sockState; aitInt16 connectWithThisPort; + aitInt16 dgPort; }; struct ioArgsToNewStreamIO { - caAddr addr; + caNetAddr addr; SOCKET sock; }; @@ -133,14 +138,14 @@ public: // unsigned serverPortNumber(); - const caAddr &getAddr() + const caNetAddr getAddr() { - return addr; + return caNetAddr(this->addr); } private: casIOState sockState; SOCKET sock; - caAddr addr; + struct sockaddr_in addr; xBlockingStatus blockingFlag; }; @@ -156,7 +161,7 @@ class casIntfIO { public: casIntfIO(); //constructor does not return status - caStatus init(const caAddr &addr, casDGClient &dgClientIn, + caStatus init(const caNetAddr &addr, casDGClient &dgClientIn, int autoBeaconAddr, int addConfigBeaconAddr); virtual ~casIntfIO(); void show(unsigned level) const; @@ -180,7 +185,7 @@ private: casDGIntfIO *pNormalUDP; // attached to this intf's addr casDGIntfIO *pBCastUDP; // attached to this intf's broadcast addr SOCKET sock; - caAddr addr; + struct sockaddr_in addr; }; // @@ -208,6 +213,7 @@ private: static inline void staticInit(); }; + // no additions below this line #endif // includeCASIODH diff --git a/src/cas/io/bsdSocket/casIntfIO.cc b/src/cas/io/bsdSocket/casIntfIO.cc index 75b8f2ef2..0195bee60 100644 --- a/src/cas/io/bsdSocket/casIntfIO.cc +++ b/src/cas/io/bsdSocket/casIntfIO.cc @@ -6,6 +6,9 @@ // // // $Log$ +// Revision 1.2 1997/04/10 19:40:33 jhill +// API changes +// // Revision 1.1 1996/11/02 01:01:41 jhill // installed // @@ -32,7 +35,7 @@ casIntfIO::casIntfIO() : // // casIntfIO::init() // -caStatus casIntfIO::init(const caAddr &addrIn, casDGClient &dgClientIn, +caStatus casIntfIO::init(const caNetAddr &addrIn, casDGClient &dgClientIn, int autoBeaconAddr, int addConfigBeaconAddr) { int yes = TRUE; @@ -63,10 +66,10 @@ caStatus casIntfIO::init(const caAddr &addrIn, casDGClient &dgClientIn, return S_cas_internal; } - this->addr = addrIn; + this->addr = addrIn.getSockIP(); status = bind( this->sock, - (sockaddr *) &this->addr.sa, + (sockaddr *) &this->addr, sizeof(this->addr)); if (status<0) { if (SOCKERRNO == EADDRINUSE) { @@ -75,25 +78,27 @@ caStatus casIntfIO::init(const caAddr &addrIn, casDGClient &dgClientIn, // (so the getsockname() call below will // work correctly) // - this->addr.in.sin_port = ntohs (0); + + this->addr.sin_port = ntohs (0); status = bind( this->sock, - &this->addr.sa, + (sockaddr *)&this->addr, sizeof(this->addr)); } if (status<0) { errPrintf(S_cas_bindFail, __FILE__, __LINE__, "- bind TCP IP addr=%s port=%u failed because %s", - inet_ntoa(this->addr.in.sin_addr), - ntohs(this->addr.in.sin_port), + inet_ntoa(this->addr.sin_addr), + ntohs(this->addr.sin_port), strerror(SOCKERRNO)); return S_cas_bindFail; } } addrSize = sizeof(this->addr); - status = getsockname(this->sock, &this->addr.sa, &addrSize); + status = getsockname(this->sock, + (struct sockaddr *)&this->addr, &addrSize); if (status) { ca_printf("CAS: getsockname() error %s\n", strerror(SOCKERRNO)); return S_cas_internal; @@ -103,7 +108,7 @@ caStatus casIntfIO::init(const caAddr &addrIn, casDGClient &dgClientIn, // be sure of this now so that we can fetch the IP // address and port number later // - assert (this->addr.sa.sa_family == AF_INET); + assert (this->addr.sin_family == AF_INET); status = listen(this->sock, caServerConnectPendQueueSize); if(status < 0) { @@ -119,7 +124,7 @@ caStatus casIntfIO::init(const caAddr &addrIn, casDGClient &dgClientIn, if (!this->pNormalUDP) { return S_cas_noMemory; } - stat = this->pNormalUDP->init(addr, this->portNumber(), + stat = this->pNormalUDP->init(this->addr, this->portNumber(), autoBeaconAddr, addConfigBeaconAddr); if (stat) { return stat; @@ -133,7 +138,7 @@ caStatus casIntfIO::init(const caAddr &addrIn, casDGClient &dgClientIn, // we will also need to bind to the broadcast address // for that interface (if it has one) // - if (this->addr.in.sin_addr.s_addr != INADDR_ANY) { + if (this->addr.sin_addr.s_addr != INADDR_ANY) { this->pBCastUDP = this->newDGIntfIO(dgClientIn); if (this->pBCastUDP) { stat = this->pBCastUDP->init(addr, this->portNumber(), @@ -181,13 +186,13 @@ casIntfIO::~casIntfIO() // casStreamOS *casIntfIO::newStreamClient(caServerI &cas) const { - caAddr newAddr; + struct sockaddr newAddr; SOCKET newSock; int length; casStreamOS *pOS; - length = sizeof(newAddr.sa); - newSock = accept(this->sock, &newAddr.sa, &length); + length = sizeof(newAddr); + newSock = accept(this->sock, &newAddr, &length); if (newSock==INVALID_SOCKET) { if (SOCKERRNO!=EWOULDBLOCK) { ca_printf( @@ -197,7 +202,7 @@ casStreamOS *casIntfIO::newStreamClient(caServerI &cas) const } return NULL; } - else if (sizeof(newAddr.sa)>(size_t)length) { + else if (sizeof(newAddr)>(size_t)length) { socket_close(newSock); ca_printf("CAS: accept returned bad address len?\n"); return NULL; @@ -252,7 +257,7 @@ void casIntfIO::show(unsigned level) const // unsigned casIntfIO::portNumber() const { - return ntohs(this->addr.in.sin_port); + return ntohs(this->addr.sin_port); } // diff --git a/src/cas/io/bsdSocket/casStreamIO.cc b/src/cas/io/bsdSocket/casStreamIO.cc index 7362d72c1..4d5b3f616 100644 --- a/src/cas/io/bsdSocket/casStreamIO.cc +++ b/src/cas/io/bsdSocket/casStreamIO.cc @@ -5,6 +5,9 @@ // // // $Log$ +// Revision 1.11 1997/05/01 19:59:09 jhill +// new header file for ipAddrToA() +// // Revision 1.10 1997/04/23 17:27:01 jhill // use matching buffer sizes // @@ -218,7 +221,7 @@ xRecvStatus casStreamIO::osdRecv(char *pInBuf, bufSizeT nBytes, break; default: - ipAddrToA(&this->addr.in, buf, sizeof(buf)); + ipAddrToA(&this->addr, buf, sizeof(buf)); ca_printf( "CAS: client %s disconnected because \"%s\"\n", buf, strerror(SOCKERRNO)); @@ -240,10 +243,10 @@ void casStreamIO::osdShow (unsigned level) const printf ("casStreamIO at %x\n", (unsigned) this); if (level>1u) { char buf[64]; - ipAddrToA(&this->addr.in, buf, sizeof(buf)); + ipAddrToA(&this->addr, buf, sizeof(buf)); printf ( "client=%s, port=%x\n", - buf, ntohs(this->addr.in.sin_port)); + buf, ntohs(this->addr.sin_port)); } } @@ -302,7 +305,7 @@ bufSizeT casStreamIO::incommingBytesPresent() const break; default: - ipAddrToA(&this->addr.in, buf, sizeof(buf)); + ipAddrToA(&this->addr, buf, sizeof(buf)); ca_printf( "CAS: FIONREAD for %s failed because \"%s\"\n", buf, strerror(SOCKERRNO)); @@ -323,7 +326,7 @@ bufSizeT casStreamIO::incommingBytesPresent() const // void casStreamIO::clientHostName (char *pInBuf, unsigned bufSizeIn) const { - ipAddrToA (&this->addr.in, pInBuf, bufSizeIn); + ipAddrToA (&this->addr, pInBuf, bufSizeIn); } // diff --git a/src/cas/os/vxWorks/casOSD.h b/src/cas/os/vxWorks/casOSD.h index fe0b0642b..dd27dd30d 100644 --- a/src/cas/os/vxWorks/casOSD.h +++ b/src/cas/os/vxWorks/casOSD.h @@ -7,6 +7,9 @@ // Some BSD calls have crept in here // // $Log$ +// Revision 1.3 1996/11/02 00:55:00 jhill +// many improvements +// // Revision 1.2 1996/09/16 18:27:10 jhill // vxWorks port changes // @@ -103,7 +106,7 @@ class casIntfOS : public casIntfIO, public tsDLNode public: casIntfOS (caServerI &casIn) : cas (casIn), pRdReg (NULL) {} - caStatus init(const caAddr &addr, casDGClient &dgClientIn, + caStatus init(const caNetAddr &addr, casDGClient &dgClientIn, int autoBeaconAddr, int addConfigBeaconAddr); ~casIntfOS();