![]() |
MAK RTIspy API Documentation for HLA Evolved
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: forwarderPort.h,v $ $Revision: 1.18 $ $State: Exp $ 00007 *******************************************************************************/ 00010 00011 #ifndef DtForwarderPort_H_ 00012 #define DtForwarderPort_H_ 00013 00014 #include "routeMap.h" 00015 #include "rtiMsConfig.h" 00016 #include "rtiVersion.h" 00017 00018 #include <vlutil/vlConfig.h> 00019 #include <vlutil/vlUtil.h> 00020 #include <vlutil/vlSelectParamW.h> 00021 #include <vlutil/vlFedTarget.h> 00022 #include <vlutil/vlInetAddr.h> 00023 #include <map> 00024 #include <vector> 00025 #include <algorithm> 00026 00027 class DtRIDParameters; 00028 class DtRouteMap; 00029 class DtTcpMsgSocket; 00030 00035 class DT_DLL_FORWARDER DtForwarderPort 00036 { 00037 public: 00038 00040 typedef DtForwarderPort* (*DtForwarderPortCreatorFcn)( const DtRIDParameters*, 00041 const DtBoost::shared_ptr<DtRouteMap>, 00042 const MAKRti::DtInetAddr&, int, const MAKRti::DtInetAddr& ); 00043 00044 struct DtForwarderMsg 00045 { 00046 caddr_t msg; 00047 unsigned int length; 00048 MAKRti::DtTransportType transport; 00049 }; 00050 00051 typedef DtRouteMap::DtAddressPortList DtAddressPortList; 00052 typedef DtRouteMap::DtAddressList DtAddressList; 00053 typedef DtRouteMap::DtInterfaceAddrSet DtInterfaceAddrSet; 00054 typedef std::vector<DtTcpMsgSocket*> DtSocketList; 00055 typedef std::set<DtTcpMsgSocket*> DtSocketSet; 00056 typedef std::pair< DtInetAddrAndPort, DtForwarderMsg > DtAddressMsgPair; 00057 typedef std::pair<DtTcpMsgSocket*, DtForwarderMsg> DtSockMsgPair; 00058 typedef std::map< DtInetAddrAndPort, DtTcpMsgSocket* > DtAddrToConnMap; 00059 typedef std::map<DtInetAddrAndPort, MAKRti::DtString> DtConnAndNameMap; 00060 00061 typedef int (*DtConnectionChangeCb)(const MAKRti::DtString&, unsigned int, 00062 const DtInetAddrAndPort&, void*); 00063 typedef void (*DtFederateAddedCb)(const MAKRti::DtString&, 00064 const MAKRti::DtString&, const MAKRti::DtString&, unsigned int, 00065 unsigned int, const DtInetAddrAndPort&, const MAKRti::DtString&, 00066 unsigned int, const MAKRti::DtString&, const MAKRti::DtString&, 00067 DtHlaVersionId, void*); 00068 typedef void (*DtFederateRemovedCb)(const MAKRti::DtString&, 00069 const MAKRti::DtString&, unsigned int, unsigned int, 00070 const DtInetAddrAndPort&, void*); 00071 typedef void (*DtPortReadyCb)(unsigned long, void*); 00072 typedef int (*DtExecAddChangeCb)(const MAKRti::DtString&, unsigned int, 00073 const DtInetAddrAndPort&, const MAKRti::DtString&, bool, void*); 00074 typedef int (*DtExecRemovedChangeCb)(const MAKRti::DtString&, unsigned int, 00075 const DtInetAddrAndPort&, void*); 00076 typedef int (*DtSocketQueueCb)(unsigned int, int, void*); 00077 typedef void (*DtWaitingForFwsCb)(const DtConnAndNameMap&, 00078 const DtConnAndNameMap&, void*); 00079 typedef void (*DtNotWaitingForFwsCb)(void*); 00080 typedef std::vector< std::pair< DtConnectionChangeCb, void* > > DtCallbackList; 00081 typedef std::vector< std::pair< DtFederateAddedCb, void* > > DtFederateAddedCallbackList; 00082 typedef std::vector< std::pair< DtFederateRemovedCb, void* > > DtFederateRemovedCallbackList; 00083 typedef std::vector< std::pair< DtPortReadyCb, void*> > DtPortReadyCallbackList; 00084 typedef std::vector< std::pair< DtExecAddChangeCb, void* > > DtExecAddedCallbackList; 00085 typedef std::vector< std::pair< DtExecRemovedChangeCb, void* > > DtExecRemovedCallbackList; 00086 typedef std::vector< std::pair< DtSocketQueueCb, void* > > DtSocketQueueCallbackList; 00087 typedef std::vector< std::pair< DtWaitingForFwsCb, void* > > DtWaitingForFwsCallbackList; 00088 typedef std::vector< std::pair< DtNotWaitingForFwsCb, void* > > DtNotWaitingForFwsCallbackList; 00089 00090 protected: 00091 DtForwarderPort( const DtRIDParameters* params, DtBoost::shared_ptr<DtRouteMap> routes, 00092 MAKRti::DtInetAddr host, int forwarderPort, MAKRti::DtInetAddr addnlConnection ) : 00093 myParams( params ), myRoutes( routes ), myAddress( host ), myOk( true ), 00094 myPortToUse(forwarderPort), myAdditionalAddrToConnectTo(addnlConnection) 00095 {} 00096 00097 public: 00098 virtual ~DtForwarderPort() {}; 00099 00101 virtual bool isOk() const { return myOk; } 00102 00104 virtual bool isReady() const = 0; 00105 00107 virtual DtAddressMsgPair getNextMsg() = 0; 00108 00110 virtual void sendByTransport( const DtForwarderMsg& msg ) const = 0; 00111 00113 virtual void sendToAllReliable( const DtForwarderMsg& msg ) const = 0; 00114 00117 virtual void sendToListReliable( const DtForwarderMsg& msg, 00118 const DtRouteMap::DtAddressPortList& destinations ) const = 0; 00119 00121 virtual inline bool flush(); 00122 00124 virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams ) = 0; 00125 00127 virtual void updateRoutes() = 0; 00128 00131 virtual int checkConnectionStatus( const DtInetAddrAndPort* target = 0 ) = 0; 00132 00134 virtual void clearNeededConnections() = 0; 00135 00137 virtual unsigned int abortPendingConnections() = 0; 00138 00140 virtual unsigned int pendingConnectionsAborted() = 0; 00141 00143 virtual DtAddressPortList connections() const = 0; 00144 00146 virtual void listenToMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ) = 0; 00147 virtual void dropMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ) = 0; 00148 00150 virtual bool updateFederateConnectionId( unsigned long orig, 00151 unsigned long final ) = 0; 00152 00154 virtual inline void addConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr ); 00155 virtual inline void removeConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr ); 00156 00158 virtual inline void addConnectionLostCb( DtConnectionChangeCb callback, void* usr ); 00159 virtual inline void removeConnectionLostCb( DtConnectionChangeCb callback, void* usr ); 00160 00161 virtual inline void addForwarderPortReadyCb( DtPortReadyCb callback, void* usr ); 00162 virtual inline void removeForwarderPortReadyCb( DtPortReadyCb callback, void* usr ); 00163 00164 virtual inline void addFederateJoinedCb( DtFederateAddedCb callback, void* usr ); 00165 virtual inline void removeFederateJoinedCb( DtFederateAddedCb callback, void* usr ); 00166 00167 virtual inline void addFederateResignedCb( DtFederateRemovedCb callback, void* usr ); 00168 virtual inline void removeFederateResignedCb( DtFederateRemovedCb callback, void* usr ); 00169 00171 virtual inline void addSocketQueueCb( DtSocketQueueCb callback, void* usr ); 00172 virtual inline void removeSocketQueueCb( DtSocketQueueCb callback, void* usr ); 00173 00176 virtual inline void addWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr); 00177 virtual inline void removeWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr); 00178 00181 virtual inline void addNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr); 00182 virtual inline void removeNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr); 00183 00184 virtual inline void addExecConnectionEstablishedCb( 00185 DtExecAddChangeCb callback, void* usr); 00186 virtual inline void removeExecConnectionEstablishedCb( 00187 DtExecAddChangeCb callback, void * usr); 00188 00189 virtual inline void addExecDisconnectedCb( 00190 DtExecRemovedChangeCb callback, void* usr); 00191 virtual inline void removeExecDisconnectedCb( 00192 DtExecRemovedChangeCb callback, void* usr); 00193 00194 virtual int execConnected( const MAKRti::DtString& connName, 00195 unsigned int connID, const DtInetAddrAndPort& addr, const MAKRti::DtString& hostName, 00196 bool fullyCompliant); 00197 virtual int execDisconnected( const MAKRti::DtString& connName, 00198 unsigned int connID, const DtInetAddrAndPort& addr ); 00199 00200 virtual int socketQueueStatus( unsigned int connId, int connQueueStatus ); 00201 00202 virtual void forwarderNodeIsReady(unsigned long id); 00203 00207 virtual void waitingForForwarderConnections(const DtConnAndNameMap& allNeededFws, 00208 const DtConnAndNameMap& stillNeededFws); 00209 00210 virtual void notWaitingForForwarderConnections(); 00211 00212 00217 virtual void setForwarderId(unsigned long id); 00218 00219 protected: 00220 00222 virtual inline int connectionEstablished( const MAKRti::DtString& connName, 00223 unsigned int connID, const DtInetAddrAndPort& addr ); 00224 virtual inline int connectionLost( const MAKRti::DtString& connName, 00225 unsigned int connID, const DtInetAddrAndPort& addr ); 00226 00227 static int connectionEstablished( const MAKRti::DtString& connName, 00228 unsigned int connID, const DtInetAddrAndPort& addr, void* usr ); 00229 static int connectionLost( const MAKRti::DtString& connName, 00230 unsigned int connID, const DtInetAddrAndPort& addr, void* usr ); 00231 00232 virtual void federateResigned( const MAKRti::DtString& connName, 00233 const MAKRti::DtString& connType,unsigned int connID, 00234 unsigned int fedHandle, const DtInetAddrAndPort& addr ); 00235 virtual void federateJoined( const MAKRti::DtString& connName, 00236 const MAKRti::DtString& connType, 00237 const MAKRti::DtString& federationName, unsigned int connID, 00238 unsigned int fedHandle, const DtInetAddrAndPort& addr, 00239 const MAKRti::DtString& hostName, unsigned int processId, 00240 const MAKRti::DtString& processName, 00241 const MAKRti::DtString& commandArgs, DtHlaVersionId hlaVersion ); 00242 00243 static void federateJoined( const MAKRti::DtString& connName, 00244 const MAKRti::DtString& connType, 00245 const MAKRti::DtString& federationName, unsigned int connID, 00246 unsigned int fedHandle, const DtInetAddrAndPort& addr, 00247 const MAKRti::DtString& hostName, unsigned int processId, 00248 const MAKRti::DtString& processName, const MAKRti::DtString& commandArgs, 00249 DtHlaVersionId hlaVersion, void* usr); 00250 static void federateResigned( const MAKRti::DtString& connName, 00251 const MAKRti::DtString& connType,unsigned int connID, 00252 unsigned int fedHandle, const DtInetAddrAndPort& addr, void* usr); 00253 00254 static int execConnected( const MAKRti::DtString& connName, 00255 unsigned int connID, const DtInetAddrAndPort& addr, 00256 const MAKRti::DtString& hostName, bool fullyCompliant, void* usr); 00257 static int execDisconnected( const MAKRti::DtString& connName, 00258 unsigned int connID, const DtInetAddrAndPort& addr, void* usr); 00259 00260 static int socketQueueStatus( unsigned int connId, int connQueueStatus, 00261 void* usr ); 00262 00263 static void forwarderNodeIsReady( unsigned long id, void* usr); 00264 00265 protected: 00266 00267 const DtRIDParameters* myParams; 00268 DtBoost::shared_ptr<DtRouteMap> myRoutes; 00269 const MAKRti::DtInetAddr myAddress; 00270 bool myOk; 00271 00272 int myPortToUse; 00273 MAKRti::DtInetAddr myAdditionalAddrToConnectTo; 00274 00275 DtCallbackList myConnectionEstablishedCbs; 00276 DtCallbackList myConnectionLostCbs; 00277 DtFederateAddedCallbackList myFederateJoinedCbs; 00278 DtFederateRemovedCallbackList myFederateResignedCbs; 00279 DtPortReadyCallbackList myPortReadyCbs; 00280 DtExecAddedCallbackList myExecConnectedCbs; 00281 DtExecRemovedCallbackList myExecDisconnectedCbs; 00282 DtSocketQueueCallbackList mySocketQueueCbs; 00283 DtWaitingForFwsCallbackList myWaitingForFwsCbs; 00284 DtNotWaitingForFwsCallbackList myNotWaitingForFwsCbs; 00285 }; 00286 00287 inline bool DtForwarderPort::flush() 00288 { 00289 return false; 00290 } 00291 00292 00293 inline void DtForwarderPort::setForwarderId(unsigned long id) 00294 { 00295 // Do nothing. 00296 return; 00297 } 00298 00299 inline void DtForwarderPort::addConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr ) 00300 { 00302 std::pair<DtConnectionChangeCb, void*> cbPair( callback, usr ); 00303 DtCallbackList::iterator pos = std::find( myConnectionEstablishedCbs.begin(), 00304 myConnectionEstablishedCbs.end(), cbPair); 00305 if ( pos == myConnectionEstablishedCbs.end() ) 00306 { 00307 myConnectionEstablishedCbs.push_back( cbPair ); 00308 } 00309 } 00310 00311 inline void DtForwarderPort::removeConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr ) 00312 { 00313 DtCallbackList::iterator pos = std::find( myConnectionEstablishedCbs.begin(), 00314 myConnectionEstablishedCbs.end(), std::make_pair( callback, usr )); 00315 if ( pos != myConnectionEstablishedCbs.end() ) myConnectionEstablishedCbs.erase( pos ); 00316 } 00317 00318 00319 inline int DtForwarderPort::connectionEstablished( const MAKRti::DtString& connName, 00320 unsigned int connID, 00321 const DtInetAddrAndPort& addr ) 00322 { 00323 int retVal = 0; 00324 for ( DtCallbackList::iterator iter = myConnectionEstablishedCbs.begin(); 00325 iter != myConnectionEstablishedCbs.end(); ++iter ) 00326 { 00327 if (-1 == ( *iter->first )( connName, connID, addr, iter->second )) 00328 { 00329 retVal = -1; 00330 } 00331 } 00332 return retVal; 00333 } 00334 00335 00336 inline void DtForwarderPort::addConnectionLostCb( DtConnectionChangeCb callback, void* usr ) 00337 { 00339 std::pair<DtConnectionChangeCb, void*> cbPair( callback, usr ); 00340 DtCallbackList::iterator pos = std::find( myConnectionLostCbs.begin(), 00341 myConnectionLostCbs.end(), cbPair); 00342 if ( pos == myConnectionLostCbs.end() ) 00343 { 00344 myConnectionLostCbs.push_back( cbPair ); 00345 } 00346 } 00347 00348 inline void DtForwarderPort::removeConnectionLostCb( DtConnectionChangeCb callback, void* usr ) 00349 { 00350 DtCallbackList::iterator pos = std::find( myConnectionLostCbs.begin(), 00351 myConnectionLostCbs.end(), std::make_pair( callback, usr )); 00352 if ( pos != myConnectionLostCbs.end() ) myConnectionLostCbs.erase( pos ); 00353 } 00354 00355 inline int DtForwarderPort::connectionLost( const MAKRti::DtString& connName, 00356 unsigned int connID, 00357 const DtInetAddrAndPort& addr ) 00358 { 00359 int retVal(0); 00360 for ( DtCallbackList::iterator iter = myConnectionLostCbs.begin(); 00361 iter != myConnectionLostCbs.end(); ++iter ) 00362 { 00363 if ( -1 == ( *iter->first )( connName, connID, addr, iter->second ) ) 00364 { 00365 retVal = -1; 00366 } 00367 } 00368 return retVal; 00369 } 00370 00371 00372 00373 inline void DtForwarderPort::addFederateResignedCb( DtFederateRemovedCb callback, void* usr ) 00374 { 00376 std::pair<DtFederateRemovedCb, void*> cbPair( callback, usr ); 00377 DtFederateRemovedCallbackList::iterator pos = std::find( myFederateResignedCbs.begin(), 00378 myFederateResignedCbs.end(), cbPair); 00379 if ( pos == myFederateResignedCbs.end() ) 00380 { 00381 myFederateResignedCbs.push_back( cbPair ); 00382 } 00383 } 00384 00385 inline void DtForwarderPort::removeFederateResignedCb( DtFederateRemovedCb callback, void* usr ) 00386 { 00387 DtFederateRemovedCallbackList::iterator pos = std::find( myFederateResignedCbs.begin(), 00388 myFederateResignedCbs.end(), std::make_pair( callback, usr )); 00389 if ( pos != myFederateResignedCbs.end() ) myFederateResignedCbs.erase( pos ); 00390 } 00391 00392 inline void DtForwarderPort::addSocketQueueCb( DtSocketQueueCb callback, void* usr ) 00393 { 00395 std::pair< DtSocketQueueCb, void* > cbPair( callback, usr ); 00396 00397 DtSocketQueueCallbackList::iterator pos = std::find( mySocketQueueCbs.begin(), 00398 mySocketQueueCbs.end(), cbPair ); 00399 00400 if( pos == mySocketQueueCbs.end() ) 00401 mySocketQueueCbs.push_back( cbPair ); 00402 } 00403 00404 inline void DtForwarderPort::removeSocketQueueCb( DtSocketQueueCb callback, void* usr ) 00405 { 00406 DtSocketQueueCallbackList::iterator pos = std::find( mySocketQueueCbs.begin(), 00407 mySocketQueueCbs.end(), std::make_pair( callback, usr )); 00408 00409 if( pos != mySocketQueueCbs.end() ) 00410 mySocketQueueCbs.erase( pos ); 00411 } 00412 00413 inline void DtForwarderPort::federateResigned( const MAKRti::DtString& connName, const MAKRti::DtString& connType, unsigned int connID, 00414 unsigned int fedHandle, const DtInetAddrAndPort& addr ) 00415 { 00416 for ( DtFederateRemovedCallbackList::iterator iter = myFederateResignedCbs.begin(); 00417 iter != myFederateResignedCbs.end(); ++iter ) 00418 { 00419 ( *iter->first )( connName, connType, connID, fedHandle, addr, iter->second ); 00420 } 00421 } 00422 00423 inline void DtForwarderPort::federateResigned(const MAKRti::DtString& connName, const MAKRti::DtString& connType, unsigned int connID, 00424 unsigned int fedHandle, const DtInetAddrAndPort& addr, void* usr) 00425 { 00426 ((DtForwarderPort*)usr)->federateResigned(connName, connType, connID, fedHandle, addr); 00427 } 00428 00429 inline void DtForwarderPort::addForwarderPortReadyCb( DtPortReadyCb callback, void* usr ) 00430 { 00432 std::pair<DtPortReadyCb, void*> cbPair( callback, usr ); 00433 DtPortReadyCallbackList::iterator pos = std::find( myPortReadyCbs.begin(), 00434 myPortReadyCbs.end(), cbPair); 00435 if ( pos == myPortReadyCbs.end() ) 00436 { 00437 myPortReadyCbs.push_back( cbPair ); 00438 } 00439 } 00440 00441 inline void DtForwarderPort::removeForwarderPortReadyCb( DtPortReadyCb callback, void* usr ) 00442 { 00443 DtPortReadyCallbackList::iterator pos = std::find( myPortReadyCbs.begin(), 00444 myPortReadyCbs.end(), std::make_pair( callback, usr )); 00445 if ( pos != myPortReadyCbs.end() ) myPortReadyCbs.erase( pos ); 00446 } 00447 00448 00449 inline void DtForwarderPort::forwarderNodeIsReady(unsigned long id, void* usr) 00450 { 00451 return (static_cast<DtForwarderPort*>(usr))->forwarderNodeIsReady(id); 00452 } 00453 00454 inline void DtForwarderPort::forwarderNodeIsReady(unsigned long id) 00455 { 00456 for ( DtPortReadyCallbackList::iterator iter = myPortReadyCbs.begin(); 00457 iter != myPortReadyCbs.end(); ++iter ) 00458 { 00459 ( *iter->first )( id, iter->second); 00460 } 00461 } 00462 00463 00464 00465 inline void DtForwarderPort::addFederateJoinedCb( DtFederateAddedCb callback, void* usr ) 00466 { 00468 std::pair<DtFederateAddedCb, void*> cbPair( callback, usr ); 00469 DtFederateAddedCallbackList::iterator pos = std::find( myFederateJoinedCbs.begin(), 00470 myFederateJoinedCbs.end(), cbPair); 00471 if ( pos == myFederateJoinedCbs.end() ) 00472 { 00473 myFederateJoinedCbs.push_back( cbPair ); 00474 } 00475 } 00476 00477 inline void DtForwarderPort::removeFederateJoinedCb( DtFederateAddedCb callback, void* usr ) 00478 { 00479 DtFederateAddedCallbackList::iterator pos = std::find( myFederateJoinedCbs.begin(), 00480 myFederateJoinedCbs.end(), std::make_pair( callback, usr )); 00481 if ( pos != myFederateJoinedCbs.end() ) myFederateJoinedCbs.erase( pos ); 00482 } 00483 00484 inline void DtForwarderPort::federateJoined(const MAKRti::DtString& connName, 00485 const MAKRti::DtString& connType, 00486 const MAKRti::DtString& federationName, 00487 unsigned int connID, 00488 unsigned int fedHandle, 00489 const DtInetAddrAndPort& addr, 00490 const MAKRti::DtString& hostName, 00491 unsigned int processId, 00492 const MAKRti::DtString& processName, 00493 const MAKRti::DtString& commandArgs, 00494 DtHlaVersionId hlaVersion ) 00495 { 00496 for ( DtFederateAddedCallbackList::iterator iter = myFederateJoinedCbs.begin(); 00497 iter != myFederateJoinedCbs.end(); ++iter ) 00498 { 00499 ( *iter->first )( connName, connType, federationName, connID, fedHandle, 00500 addr, hostName, processId, processName, commandArgs, hlaVersion, 00501 iter->second ); 00502 } 00503 } 00504 00505 inline void DtForwarderPort::federateJoined(const MAKRti::DtString& connName, 00506 const MAKRti::DtString& connType, 00507 const MAKRti::DtString& federationName, 00508 unsigned int connID, 00509 unsigned int fedHandle, 00510 const DtInetAddrAndPort& addr, 00511 const MAKRti::DtString& hostName, 00512 unsigned int processId, 00513 const MAKRti::DtString& processName, 00514 const MAKRti::DtString& commandArgs, 00515 DtHlaVersionId hlaVersion, 00516 void* usr) 00517 { 00518 ((DtForwarderPort*)usr)->federateJoined(connName, connType, federationName, 00519 connID, fedHandle, addr, hostName, processId, processName, commandArgs, 00520 hlaVersion); 00521 } 00522 00523 00524 inline int DtForwarderPort::connectionEstablished( const MAKRti::DtString& connName, 00525 unsigned int connID, 00526 const DtInetAddrAndPort& addr, 00527 void* usr ) 00528 { 00529 return ((DtForwarderPort*)usr)->connectionEstablished(connName, connID, addr); 00530 } 00531 00532 inline int DtForwarderPort::connectionLost( const MAKRti::DtString& connName, 00533 unsigned int connID, 00534 const DtInetAddrAndPort& addr, 00535 void* usr ) 00536 { 00537 return ((DtForwarderPort*)usr)->connectionLost(connName, connID, addr); 00538 } 00539 00540 00541 00542 inline void DtForwarderPort::addExecConnectionEstablishedCb( DtExecAddChangeCb callback, void* usr ) 00543 { 00545 std::pair<DtExecAddChangeCb, void*> cbPair( callback, usr ); 00546 DtExecAddedCallbackList::iterator pos = std::find( myExecConnectedCbs.begin(), 00547 myExecConnectedCbs.end(), cbPair); 00548 if ( pos == myExecConnectedCbs.end() ) 00549 { 00550 myExecConnectedCbs.push_back( cbPair ); 00551 } 00552 } 00553 00554 inline void DtForwarderPort::removeExecConnectionEstablishedCb( DtExecAddChangeCb callback, void* usr ) 00555 { 00556 DtExecAddedCallbackList::iterator pos = std::find( myExecConnectedCbs.begin(), 00557 myExecConnectedCbs.end(), std::make_pair( callback, usr )); 00558 if ( pos != myExecConnectedCbs.end() ) 00559 { 00560 myExecConnectedCbs.erase( pos ); 00561 } 00562 } 00563 00564 inline int DtForwarderPort::execConnected( const MAKRti::DtString& connName, 00565 unsigned int connID, 00566 const DtInetAddrAndPort& addr, 00567 const MAKRti::DtString& hostName, 00568 bool fullyCompliant, void* usr) 00569 { 00570 return ((DtForwarderPort*)usr)->execConnected(connName, connID, addr, hostName, fullyCompliant); 00571 } 00572 00573 inline int DtForwarderPort::execConnected( const MAKRti::DtString& connName, 00574 unsigned int connID, 00575 const DtInetAddrAndPort& addr, 00576 const MAKRti::DtString& hostName, 00577 bool fullyCompliant ) 00578 { 00579 int retVal = 0; 00580 for ( DtExecAddedCallbackList::iterator iter = myExecConnectedCbs.begin(); 00581 iter != myExecConnectedCbs.end(); ++iter ) 00582 { 00583 if ( -1 == ( *iter->first )( connName, connID, addr, hostName, fullyCompliant, iter->second ) ) 00584 { 00585 retVal = -1; 00586 } 00587 } 00588 return retVal; 00589 } 00590 00591 00592 inline void DtForwarderPort::addExecDisconnectedCb( DtExecRemovedChangeCb callback, void* usr ) 00593 { 00595 std::pair<DtExecRemovedChangeCb, void*> cbPair( callback, usr ); 00596 DtExecRemovedCallbackList::iterator pos = std::find( myExecDisconnectedCbs.begin(), 00597 myExecDisconnectedCbs.end(), cbPair); 00598 if ( pos == myExecDisconnectedCbs.end() ) 00599 { 00600 myExecDisconnectedCbs.push_back( cbPair ); 00601 } 00602 } 00603 00604 inline void DtForwarderPort::removeExecDisconnectedCb( DtExecRemovedChangeCb callback, void* usr ) 00605 { 00606 DtExecRemovedCallbackList::iterator pos = std::find( myExecDisconnectedCbs.begin(), 00607 myExecDisconnectedCbs.end(), std::make_pair( callback, usr )); 00608 if ( pos != myExecDisconnectedCbs.end() ) 00609 { 00610 myExecDisconnectedCbs.erase( pos ); 00611 } 00612 } 00613 00614 inline int DtForwarderPort::execDisconnected(const MAKRti::DtString& connName, 00615 unsigned int connID, const DtInetAddrAndPort& addr, void* usr) 00616 { 00617 return ((DtForwarderPort*)usr)->execDisconnected(connName, connID, addr); 00618 } 00619 00620 inline int DtForwarderPort::execDisconnected( const MAKRti::DtString& connName, 00621 unsigned int connID, const DtInetAddrAndPort& addr) 00622 { 00623 int retVal = 0; 00624 for ( DtExecRemovedCallbackList::iterator iter = myExecDisconnectedCbs.begin(); 00625 iter != myExecDisconnectedCbs.end(); ++iter ) 00626 { 00627 if ( -1 == ( *iter->first )( connName, connID, addr, iter->second ) ) 00628 { 00629 retVal = -1; 00630 } 00631 } 00632 return retVal; 00633 } 00634 00635 inline void DtForwarderPort::addWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr) 00636 { 00638 std::pair< DtWaitingForFwsCb, void* > cbPair( callback, usr ); 00639 00640 DtWaitingForFwsCallbackList::iterator pos = std::find( myWaitingForFwsCbs.begin(), 00641 myWaitingForFwsCbs.end(), cbPair ); 00642 00643 if( pos == myWaitingForFwsCbs.end() ) 00644 { 00645 myWaitingForFwsCbs.push_back( cbPair ); 00646 } 00647 } 00648 00649 inline void DtForwarderPort::removeWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr) 00650 { 00651 DtWaitingForFwsCallbackList::iterator pos = std::find( myWaitingForFwsCbs.begin(), 00652 myWaitingForFwsCbs.end(), std::make_pair( callback, usr )); 00653 00654 if( pos != myWaitingForFwsCbs.end() ) 00655 { 00656 myWaitingForFwsCbs.erase( pos ); 00657 } 00658 } 00659 00660 inline void DtForwarderPort::waitingForForwarderConnections(const DtConnAndNameMap& allNeededFws, 00661 const DtConnAndNameMap& stillNeededFws) 00662 { 00663 for ( DtWaitingForFwsCallbackList::iterator iter = myWaitingForFwsCbs.begin(); 00664 iter != myWaitingForFwsCbs.end(); ++iter ) 00665 { 00666 ( *iter->first )( allNeededFws, stillNeededFws, iter->second ); 00667 } 00668 } 00669 00670 inline void DtForwarderPort::addNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr) 00671 { 00673 std::pair< DtNotWaitingForFwsCb, void* > cbPair( callback, usr ); 00674 00675 DtNotWaitingForFwsCallbackList::iterator pos = std::find( myNotWaitingForFwsCbs.begin(), 00676 myNotWaitingForFwsCbs.end(), cbPair ); 00677 00678 if( pos == myNotWaitingForFwsCbs.end() ) 00679 { 00680 myNotWaitingForFwsCbs.push_back( cbPair ); 00681 } 00682 } 00683 00684 inline void DtForwarderPort::removeNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr) 00685 { 00686 DtNotWaitingForFwsCallbackList::iterator pos = std::find( myNotWaitingForFwsCbs.begin(), 00687 myNotWaitingForFwsCbs.end(), std::make_pair( callback, usr )); 00688 00689 if( pos != myNotWaitingForFwsCbs.end() ) 00690 { 00691 myNotWaitingForFwsCbs.erase( pos ); 00692 } 00693 } 00694 00695 inline void DtForwarderPort::notWaitingForForwarderConnections() 00696 { 00697 for ( DtNotWaitingForFwsCallbackList::iterator iter = myNotWaitingForFwsCbs.begin(); 00698 iter != myNotWaitingForFwsCbs.end(); ++iter ) 00699 { 00700 ( *iter->first )( iter->second ); 00701 } 00702 } 00703 00704 inline int DtForwarderPort::socketQueueStatus( unsigned int connId, int connQueueStatus, void* usr ) 00705 { 00706 return ((DtForwarderPort*)usr)->socketQueueStatus( connId, connQueueStatus ); 00707 } 00708 00709 inline int DtForwarderPort::socketQueueStatus( unsigned int connId, int connQueueStatus ) 00710 { 00711 int retVal = 0; 00712 00713 for( DtSocketQueueCallbackList::iterator iter = mySocketQueueCbs.begin(); 00714 iter != mySocketQueueCbs.end(); ++iter ) 00715 { 00716 if( -1 == ( *iter->first )( connId, connQueueStatus, iter->second ) ) 00717 { 00718 retVal = -1; 00719 } 00720 } 00721 00722 return retVal; 00723 } 00724 00725 00726 #endif //! DtForwarderPort_H_ 00727 00728