MAK RTIspy API Documentation for HLA Evolved
forwarderPort.h
Go to the documentation of this file.
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 

Document ID: Generated on Thu Jun 14 14:15:04 EDT 2012 from SVN revision 116116
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)