MAK RTIspy API Documentation for HLA 1516
forwarderPort.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2005 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 /*******************************************************************************
6 ** $RCSfile: forwarderPort.h,v $ $Revision: 1.18 $ $State: Exp $
7 *******************************************************************************/
10 
11 #ifndef DtForwarderPort_H_
12 #define DtForwarderPort_H_
13 
14 #include "routeMap.h"
15 #include "rtiMsConfig.h"
16 #include "rtiVersion.h"
17 
18 #include <vlutil/vlConfig.h>
19 #include <vlutil/vlUtil.h>
20 #include <vlutil/vlSelectParamW.h>
21 #include <vlutil/vlFedTarget.h>
22 #include <vlutil/vlInetAddr.h>
23 #include <map>
24 #include <vector>
25 #include <algorithm>
26 
27 class DtRIDParameters;
28 class DtRouteMap;
29 class DtTcpMsgSocket;
30 
36 {
37 public:
38 
40  typedef DtForwarderPort* (*DtForwarderPortCreatorFcn)( const DtRIDParameters*,
41  const DtBoost::shared_ptr<DtRouteMap>,
42  const MAKRti::DtInetAddr&, int, const MAKRti::DtInetAddr& );
43 
45  {
46  caddr_t msg;
47  int length;
48  MAKRti::DtTransportType transport;
49  };
50 
54  typedef std::vector<DtTcpMsgSocket*> DtSocketList;
55  typedef std::set<DtTcpMsgSocket*> DtSocketSet;
56  typedef std::pair< DtInetAddrAndPort, DtForwarderMsg > DtAddressMsgPair;
57  typedef std::pair<DtTcpMsgSocket*, DtForwarderMsg> DtSockMsgPair;
58  typedef std::map< DtInetAddrAndPort, DtTcpMsgSocket* > DtAddrToConnMap;
59  typedef std::map<DtInetAddrAndPort, MAKRti::DtString> DtConnAndNameMap;
60 
61  typedef int (*DtConnectionChangeCb)(const MAKRti::DtString&, unsigned int,
62  const DtInetAddrAndPort&, void*);
63  typedef void (*DtFederateAddedCb)(const MAKRti::DtString&,
64  const MAKRti::DtString&, const MAKRti::DtString&, unsigned int,
65  unsigned int, const DtInetAddrAndPort&, const MAKRti::DtString&,
66  unsigned int, const MAKRti::DtString&, const MAKRti::DtString&,
67  DtHlaVersionId, void*);
68  typedef void (*DtFederateRemovedCb)(const MAKRti::DtString&,
69  const MAKRti::DtString&, unsigned int, unsigned int,
70  const DtInetAddrAndPort&, void*);
71  typedef void (*DtPortReadyCb)(unsigned long, void*);
72  typedef int (*DtExecAddChangeCb)(const MAKRti::DtString&, unsigned int,
73  const DtInetAddrAndPort&, const MAKRti::DtString&, bool, void*);
74  typedef int (*DtExecRemovedChangeCb)(const MAKRti::DtString&, unsigned int,
75  const DtInetAddrAndPort&, void*);
76  typedef int (*DtSocketQueueCb)(unsigned int, int, void*);
77  typedef void (*DtWaitingForFwsCb)(const DtConnAndNameMap&,
78  const DtConnAndNameMap&, void*);
79  typedef void (*DtNotWaitingForFwsCb)(void*);
80  typedef std::vector< std::pair< DtConnectionChangeCb, void* > > DtCallbackList;
81  typedef std::vector< std::pair< DtFederateAddedCb, void* > > DtFederateAddedCallbackList;
82  typedef std::vector< std::pair< DtFederateRemovedCb, void* > > DtFederateRemovedCallbackList;
83  typedef std::vector< std::pair< DtPortReadyCb, void*> > DtPortReadyCallbackList;
84  typedef std::vector< std::pair< DtExecAddChangeCb, void* > > DtExecAddedCallbackList;
85  typedef std::vector< std::pair< DtExecRemovedChangeCb, void* > > DtExecRemovedCallbackList;
86  typedef std::vector< std::pair< DtSocketQueueCb, void* > > DtSocketQueueCallbackList;
87  typedef std::vector< std::pair< DtWaitingForFwsCb, void* > > DtWaitingForFwsCallbackList;
88  typedef std::vector< std::pair< DtNotWaitingForFwsCb, void* > > DtNotWaitingForFwsCallbackList;
89 
90 protected:
91  DtForwarderPort( const DtRIDParameters* params, DtBoost::shared_ptr<DtRouteMap> routes,
92  MAKRti::DtInetAddr host, int forwarderPort, MAKRti::DtInetAddr addnlConnection ) :
93  myParams( params ), myRoutes( routes ), myAddress( host ), myOk( true ),
94  myPortToUse(forwarderPort), myAdditionalAddrToConnectTo(addnlConnection)
95  {}
96 
97 public:
98  virtual ~DtForwarderPort() {};
99 
101  virtual bool isOk() const { return myOk; }
102 
104  virtual bool isReady() const = 0;
105 
107  virtual DtAddressMsgPair getNextMsg() = 0;
108 
110  virtual void sendByTransport( const DtForwarderMsg& msg ) const = 0;
111 
113  virtual void sendToAllReliable( const DtForwarderMsg& msg ) const = 0;
114 
117  virtual void sendToListReliable( const DtForwarderMsg& msg,
118  const DtRouteMap::DtAddressPortList& destinations ) const = 0;
119 
121  virtual inline bool flush();
122 
124  virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams ) = 0;
125 
127  virtual void updateRoutes() = 0;
128 
131  virtual int checkConnectionStatus( const DtInetAddrAndPort* target = 0 ) = 0;
132 
134  virtual void clearNeededConnections() = 0;
135 
137  virtual unsigned int abortPendingConnections() = 0;
138 
140  virtual unsigned int pendingConnectionsAborted() = 0;
141 
143  virtual DtAddressPortList connections() const = 0;
144 
146  virtual void listenToMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ) = 0;
147  virtual void dropMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ) = 0;
148 
150  virtual bool updateFederateConnectionId( unsigned long orig,
151  unsigned long final ) = 0;
152 
154  virtual inline void addConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr );
155  virtual inline void removeConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr );
156 
158  virtual inline void addConnectionLostCb( DtConnectionChangeCb callback, void* usr );
159  virtual inline void removeConnectionLostCb( DtConnectionChangeCb callback, void* usr );
160 
161  virtual inline void addForwarderPortReadyCb( DtPortReadyCb callback, void* usr );
162  virtual inline void removeForwarderPortReadyCb( DtPortReadyCb callback, void* usr );
163 
164  virtual inline void addFederateJoinedCb( DtFederateAddedCb callback, void* usr );
165  virtual inline void removeFederateJoinedCb( DtFederateAddedCb callback, void* usr );
166 
167  virtual inline void addFederateResignedCb( DtFederateRemovedCb callback, void* usr );
168  virtual inline void removeFederateResignedCb( DtFederateRemovedCb callback, void* usr );
169 
171  virtual inline void addSocketQueueCb( DtSocketQueueCb callback, void* usr );
172  virtual inline void removeSocketQueueCb( DtSocketQueueCb callback, void* usr );
173 
176  virtual inline void addWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr);
177  virtual inline void removeWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr);
178 
181  virtual inline void addNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr);
182  virtual inline void removeNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr);
183 
184  virtual inline void addExecConnectionEstablishedCb(
185  DtExecAddChangeCb callback, void* usr);
186  virtual inline void removeExecConnectionEstablishedCb(
187  DtExecAddChangeCb callback, void * usr);
188 
189  virtual inline void addExecDisconnectedCb(
190  DtExecRemovedChangeCb callback, void* usr);
191  virtual inline void removeExecDisconnectedCb(
192  DtExecRemovedChangeCb callback, void* usr);
193 
194  virtual int execConnected( const MAKRti::DtString& connName,
195  unsigned int connID, const DtInetAddrAndPort& addr, const MAKRti::DtString& hostName,
196  bool fullyCompliant);
197  virtual int execDisconnected( const MAKRti::DtString& connName,
198  unsigned int connID, const DtInetAddrAndPort& addr );
199 
200  virtual int socketQueueStatus( unsigned int connId, int connQueueStatus );
201 
202  virtual void forwarderNodeIsReady(unsigned long id);
203 
207  virtual void waitingForForwarderConnections(const DtConnAndNameMap& allNeededFws,
208  const DtConnAndNameMap& stillNeededFws);
209 
210  virtual void notWaitingForForwarderConnections();
211 
212 
217  virtual void setForwarderId(unsigned long id);
218 
219 protected:
220 
222  virtual inline int connectionEstablished( const MAKRti::DtString& connName,
223  unsigned int connID, const DtInetAddrAndPort& addr );
224  virtual inline int connectionLost( const MAKRti::DtString& connName,
225  unsigned int connID, const DtInetAddrAndPort& addr );
226 
227  static int connectionEstablished( const MAKRti::DtString& connName,
228  unsigned int connID, const DtInetAddrAndPort& addr, void* usr );
229  static int connectionLost( const MAKRti::DtString& connName,
230  unsigned int connID, const DtInetAddrAndPort& addr, void* usr );
231 
232  virtual void federateResigned( const MAKRti::DtString& connName,
233  const MAKRti::DtString& connType,unsigned int connID,
234  unsigned int fedHandle, const DtInetAddrAndPort& addr );
235  virtual void federateJoined( const MAKRti::DtString& connName,
236  const MAKRti::DtString& connType,
237  const MAKRti::DtString& federationName, unsigned int connID,
238  unsigned int fedHandle, const DtInetAddrAndPort& addr,
239  const MAKRti::DtString& hostName, unsigned int processId,
240  const MAKRti::DtString& processName,
241  const MAKRti::DtString& commandArgs, DtHlaVersionId hlaVersion );
242 
243  static void federateJoined( const MAKRti::DtString& connName,
244  const MAKRti::DtString& connType,
245  const MAKRti::DtString& federationName, unsigned int connID,
246  unsigned int fedHandle, const DtInetAddrAndPort& addr,
247  const MAKRti::DtString& hostName, unsigned int processId,
248  const MAKRti::DtString& processName, const MAKRti::DtString& commandArgs,
249  DtHlaVersionId hlaVersion, void* usr);
250  static void federateResigned( const MAKRti::DtString& connName,
251  const MAKRti::DtString& connType,unsigned int connID,
252  unsigned int fedHandle, const DtInetAddrAndPort& addr, void* usr);
253 
254  static int execConnected( const MAKRti::DtString& connName,
255  unsigned int connID, const DtInetAddrAndPort& addr,
256  const MAKRti::DtString& hostName, bool fullyCompliant, void* usr);
257  static int execDisconnected( const MAKRti::DtString& connName,
258  unsigned int connID, const DtInetAddrAndPort& addr, void* usr);
259 
260  static int socketQueueStatus( unsigned int connId, int connQueueStatus,
261  void* usr );
262 
263  static void forwarderNodeIsReady( unsigned long id, void* usr);
264 
265 protected:
266 
268  DtBoost::shared_ptr<DtRouteMap> myRoutes;
269  const MAKRti::DtInetAddr myAddress;
270  bool myOk;
271 
273  MAKRti::DtInetAddr myAdditionalAddrToConnectTo;
274 
285 };
286 
288 {
289  return false;
290 }
291 
292 
293 inline void DtForwarderPort::setForwarderId(unsigned long id)
294 {
295  // Do nothing.
296  return;
297 }
298 
299 inline void DtForwarderPort::addConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr )
300 {
302  std::pair<DtConnectionChangeCb, void*> cbPair( callback, usr );
303  DtCallbackList::iterator pos = std::find( myConnectionEstablishedCbs.begin(),
304  myConnectionEstablishedCbs.end(), cbPair);
305  if ( pos == myConnectionEstablishedCbs.end() )
306  {
307  myConnectionEstablishedCbs.push_back( cbPair );
308  }
309 }
310 
311 inline void DtForwarderPort::removeConnectionEstablishedCb( DtConnectionChangeCb callback, void* usr )
312 {
313  DtCallbackList::iterator pos = std::find( myConnectionEstablishedCbs.begin(),
314  myConnectionEstablishedCbs.end(), std::make_pair( callback, usr ));
315  if ( pos != myConnectionEstablishedCbs.end() ) myConnectionEstablishedCbs.erase( pos );
316 }
317 
318 
319 inline int DtForwarderPort::connectionEstablished( const MAKRti::DtString& connName,
320  unsigned int connID,
321  const DtInetAddrAndPort& addr )
322 {
323  int retVal = 0;
324  for ( DtCallbackList::iterator iter = myConnectionEstablishedCbs.begin();
325  iter != myConnectionEstablishedCbs.end(); ++iter )
326  {
327  if (-1 == ( *iter->first )( connName, connID, addr, iter->second ))
328  {
329  retVal = -1;
330  }
331  }
332  return retVal;
333 }
334 
335 
336 inline void DtForwarderPort::addConnectionLostCb( DtConnectionChangeCb callback, void* usr )
337 {
339  std::pair<DtConnectionChangeCb, void*> cbPair( callback, usr );
340  DtCallbackList::iterator pos = std::find( myConnectionLostCbs.begin(),
341  myConnectionLostCbs.end(), cbPair);
342  if ( pos == myConnectionLostCbs.end() )
343  {
344  myConnectionLostCbs.push_back( cbPair );
345  }
346 }
347 
348 inline void DtForwarderPort::removeConnectionLostCb( DtConnectionChangeCb callback, void* usr )
349 {
350  DtCallbackList::iterator pos = std::find( myConnectionLostCbs.begin(),
351  myConnectionLostCbs.end(), std::make_pair( callback, usr ));
352  if ( pos != myConnectionLostCbs.end() ) myConnectionLostCbs.erase( pos );
353 }
354 
355 inline int DtForwarderPort::connectionLost( const MAKRti::DtString& connName,
356  unsigned int connID,
357  const DtInetAddrAndPort& addr )
358 {
359  int retVal(0);
360  for ( DtCallbackList::iterator iter = myConnectionLostCbs.begin();
361  iter != myConnectionLostCbs.end(); ++iter )
362  {
363  if ( -1 == ( *iter->first )( connName, connID, addr, iter->second ) )
364  {
365  retVal = -1;
366  }
367  }
368  return retVal;
369 }
370 
371 
372 
373 inline void DtForwarderPort::addFederateResignedCb( DtFederateRemovedCb callback, void* usr )
374 {
376  std::pair<DtFederateRemovedCb, void*> cbPair( callback, usr );
377  DtFederateRemovedCallbackList::iterator pos = std::find( myFederateResignedCbs.begin(),
378  myFederateResignedCbs.end(), cbPair);
379  if ( pos == myFederateResignedCbs.end() )
380  {
381  myFederateResignedCbs.push_back( cbPair );
382  }
383 }
384 
385 inline void DtForwarderPort::removeFederateResignedCb( DtFederateRemovedCb callback, void* usr )
386 {
387  DtFederateRemovedCallbackList::iterator pos = std::find( myFederateResignedCbs.begin(),
388  myFederateResignedCbs.end(), std::make_pair( callback, usr ));
389  if ( pos != myFederateResignedCbs.end() ) myFederateResignedCbs.erase( pos );
390 }
391 
392 inline void DtForwarderPort::addSocketQueueCb( DtSocketQueueCb callback, void* usr )
393 {
395  std::pair< DtSocketQueueCb, void* > cbPair( callback, usr );
396 
397  DtSocketQueueCallbackList::iterator pos = std::find( mySocketQueueCbs.begin(),
398  mySocketQueueCbs.end(), cbPair );
399 
400  if( pos == mySocketQueueCbs.end() )
401  mySocketQueueCbs.push_back( cbPair );
402 }
403 
404 inline void DtForwarderPort::removeSocketQueueCb( DtSocketQueueCb callback, void* usr )
405 {
406  DtSocketQueueCallbackList::iterator pos = std::find( mySocketQueueCbs.begin(),
407  mySocketQueueCbs.end(), std::make_pair( callback, usr ));
408 
409  if( pos != mySocketQueueCbs.end() )
410  mySocketQueueCbs.erase( pos );
411 }
412 
413 inline void DtForwarderPort::federateResigned( const MAKRti::DtString& connName, const MAKRti::DtString& connType, unsigned int connID,
414  unsigned int fedHandle, const DtInetAddrAndPort& addr )
415 {
416  for ( DtFederateRemovedCallbackList::iterator iter = myFederateResignedCbs.begin();
417  iter != myFederateResignedCbs.end(); ++iter )
418  {
419  ( *iter->first )( connName, connType, connID, fedHandle, addr, iter->second );
420  }
421 }
422 
423 inline void DtForwarderPort::federateResigned(const MAKRti::DtString& connName, const MAKRti::DtString& connType, unsigned int connID,
424  unsigned int fedHandle, const DtInetAddrAndPort& addr, void* usr)
425 {
426  ((DtForwarderPort*)usr)->federateResigned(connName, connType, connID, fedHandle, addr);
427 }
428 
429 inline void DtForwarderPort::addForwarderPortReadyCb( DtPortReadyCb callback, void* usr )
430 {
432  std::pair<DtPortReadyCb, void*> cbPair( callback, usr );
433  DtPortReadyCallbackList::iterator pos = std::find( myPortReadyCbs.begin(),
434  myPortReadyCbs.end(), cbPair);
435  if ( pos == myPortReadyCbs.end() )
436  {
437  myPortReadyCbs.push_back( cbPair );
438  }
439 }
440 
441 inline void DtForwarderPort::removeForwarderPortReadyCb( DtPortReadyCb callback, void* usr )
442 {
443  DtPortReadyCallbackList::iterator pos = std::find( myPortReadyCbs.begin(),
444  myPortReadyCbs.end(), std::make_pair( callback, usr ));
445  if ( pos != myPortReadyCbs.end() ) myPortReadyCbs.erase( pos );
446 }
447 
448 
449 inline void DtForwarderPort::forwarderNodeIsReady(unsigned long id, void* usr)
450 {
451  return (static_cast<DtForwarderPort*>(usr))->forwarderNodeIsReady(id);
452 }
453 
454 inline void DtForwarderPort::forwarderNodeIsReady(unsigned long id)
455 {
456  for ( DtPortReadyCallbackList::iterator iter = myPortReadyCbs.begin();
457  iter != myPortReadyCbs.end(); ++iter )
458  {
459  ( *iter->first )( id, iter->second);
460  }
461 }
462 
463 
464 
465 inline void DtForwarderPort::addFederateJoinedCb( DtFederateAddedCb callback, void* usr )
466 {
468  std::pair<DtFederateAddedCb, void*> cbPair( callback, usr );
469  DtFederateAddedCallbackList::iterator pos = std::find( myFederateJoinedCbs.begin(),
470  myFederateJoinedCbs.end(), cbPair);
471  if ( pos == myFederateJoinedCbs.end() )
472  {
473  myFederateJoinedCbs.push_back( cbPair );
474  }
475 }
476 
477 inline void DtForwarderPort::removeFederateJoinedCb( DtFederateAddedCb callback, void* usr )
478 {
479  DtFederateAddedCallbackList::iterator pos = std::find( myFederateJoinedCbs.begin(),
480  myFederateJoinedCbs.end(), std::make_pair( callback, usr ));
481  if ( pos != myFederateJoinedCbs.end() ) myFederateJoinedCbs.erase( pos );
482 }
483 
484 inline void DtForwarderPort::federateJoined(const MAKRti::DtString& connName,
485  const MAKRti::DtString& connType,
486  const MAKRti::DtString& federationName,
487  unsigned int connID,
488  unsigned int fedHandle,
489  const DtInetAddrAndPort& addr,
490  const MAKRti::DtString& hostName,
491  unsigned int processId,
492  const MAKRti::DtString& processName,
493  const MAKRti::DtString& commandArgs,
494  DtHlaVersionId hlaVersion )
495 {
496  for ( DtFederateAddedCallbackList::iterator iter = myFederateJoinedCbs.begin();
497  iter != myFederateJoinedCbs.end(); ++iter )
498  {
499  ( *iter->first )( connName, connType, federationName, connID, fedHandle,
500  addr, hostName, processId, processName, commandArgs, hlaVersion,
501  iter->second );
502  }
503 }
504 
505 inline void DtForwarderPort::federateJoined(const MAKRti::DtString& connName,
506  const MAKRti::DtString& connType,
507  const MAKRti::DtString& federationName,
508  unsigned int connID,
509  unsigned int fedHandle,
510  const DtInetAddrAndPort& addr,
511  const MAKRti::DtString& hostName,
512  unsigned int processId,
513  const MAKRti::DtString& processName,
514  const MAKRti::DtString& commandArgs,
515  DtHlaVersionId hlaVersion,
516  void* usr)
517 {
518  ((DtForwarderPort*)usr)->federateJoined(connName, connType, federationName,
519  connID, fedHandle, addr, hostName, processId, processName, commandArgs,
520  hlaVersion);
521 }
522 
523 
524 inline int DtForwarderPort::connectionEstablished( const MAKRti::DtString& connName,
525  unsigned int connID,
526  const DtInetAddrAndPort& addr,
527  void* usr )
528 {
529  return ((DtForwarderPort*)usr)->connectionEstablished(connName, connID, addr);
530 }
531 
532 inline int DtForwarderPort::connectionLost( const MAKRti::DtString& connName,
533  unsigned int connID,
534  const DtInetAddrAndPort& addr,
535  void* usr )
536 {
537  return ((DtForwarderPort*)usr)->connectionLost(connName, connID, addr);
538 }
539 
540 
541 
542 inline void DtForwarderPort::addExecConnectionEstablishedCb( DtExecAddChangeCb callback, void* usr )
543 {
545  std::pair<DtExecAddChangeCb, void*> cbPair( callback, usr );
546  DtExecAddedCallbackList::iterator pos = std::find( myExecConnectedCbs.begin(),
547  myExecConnectedCbs.end(), cbPair);
548  if ( pos == myExecConnectedCbs.end() )
549  {
550  myExecConnectedCbs.push_back( cbPair );
551  }
552 }
553 
554 inline void DtForwarderPort::removeExecConnectionEstablishedCb( DtExecAddChangeCb callback, void* usr )
555 {
556  DtExecAddedCallbackList::iterator pos = std::find( myExecConnectedCbs.begin(),
557  myExecConnectedCbs.end(), std::make_pair( callback, usr ));
558  if ( pos != myExecConnectedCbs.end() )
559  {
560  myExecConnectedCbs.erase( pos );
561  }
562 }
563 
564 inline int DtForwarderPort::execConnected( const MAKRti::DtString& connName,
565  unsigned int connID,
566  const DtInetAddrAndPort& addr,
567  const MAKRti::DtString& hostName,
568  bool fullyCompliant, void* usr)
569 {
570  return ((DtForwarderPort*)usr)->execConnected(connName, connID, addr, hostName, fullyCompliant);
571 }
572 
573 inline int DtForwarderPort::execConnected( const MAKRti::DtString& connName,
574  unsigned int connID,
575  const DtInetAddrAndPort& addr,
576  const MAKRti::DtString& hostName,
577  bool fullyCompliant )
578 {
579  int retVal = 0;
580  for ( DtExecAddedCallbackList::iterator iter = myExecConnectedCbs.begin();
581  iter != myExecConnectedCbs.end(); ++iter )
582  {
583  if ( -1 == ( *iter->first )( connName, connID, addr, hostName, fullyCompliant, iter->second ) )
584  {
585  retVal = -1;
586  }
587  }
588  return retVal;
589 }
590 
591 
592 inline void DtForwarderPort::addExecDisconnectedCb( DtExecRemovedChangeCb callback, void* usr )
593 {
595  std::pair<DtExecRemovedChangeCb, void*> cbPair( callback, usr );
596  DtExecRemovedCallbackList::iterator pos = std::find( myExecDisconnectedCbs.begin(),
597  myExecDisconnectedCbs.end(), cbPair);
598  if ( pos == myExecDisconnectedCbs.end() )
599  {
600  myExecDisconnectedCbs.push_back( cbPair );
601  }
602 }
603 
604 inline void DtForwarderPort::removeExecDisconnectedCb( DtExecRemovedChangeCb callback, void* usr )
605 {
606  DtExecRemovedCallbackList::iterator pos = std::find( myExecDisconnectedCbs.begin(),
607  myExecDisconnectedCbs.end(), std::make_pair( callback, usr ));
608  if ( pos != myExecDisconnectedCbs.end() )
609  {
610  myExecDisconnectedCbs.erase( pos );
611  }
612 }
613 
614 inline int DtForwarderPort::execDisconnected(const MAKRti::DtString& connName,
615  unsigned int connID, const DtInetAddrAndPort& addr, void* usr)
616 {
617  return ((DtForwarderPort*)usr)->execDisconnected(connName, connID, addr);
618 }
619 
620 inline int DtForwarderPort::execDisconnected( const MAKRti::DtString& connName,
621  unsigned int connID, const DtInetAddrAndPort& addr)
622 {
623  int retVal = 0;
624  for ( DtExecRemovedCallbackList::iterator iter = myExecDisconnectedCbs.begin();
625  iter != myExecDisconnectedCbs.end(); ++iter )
626  {
627  if ( -1 == ( *iter->first )( connName, connID, addr, iter->second ) )
628  {
629  retVal = -1;
630  }
631  }
632  return retVal;
633 }
634 
635 inline void DtForwarderPort::addWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr)
636 {
638  std::pair< DtWaitingForFwsCb, void* > cbPair( callback, usr );
639 
640  DtWaitingForFwsCallbackList::iterator pos = std::find( myWaitingForFwsCbs.begin(),
641  myWaitingForFwsCbs.end(), cbPair );
642 
643  if( pos == myWaitingForFwsCbs.end() )
644  {
645  myWaitingForFwsCbs.push_back( cbPair );
646  }
647 }
648 
649 inline void DtForwarderPort::removeWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback, void* usr)
650 {
651  DtWaitingForFwsCallbackList::iterator pos = std::find( myWaitingForFwsCbs.begin(),
652  myWaitingForFwsCbs.end(), std::make_pair( callback, usr ));
653 
654  if( pos != myWaitingForFwsCbs.end() )
655  {
656  myWaitingForFwsCbs.erase( pos );
657  }
658 }
659 
661  const DtConnAndNameMap& stillNeededFws)
662 {
663  for ( DtWaitingForFwsCallbackList::iterator iter = myWaitingForFwsCbs.begin();
664  iter != myWaitingForFwsCbs.end(); ++iter )
665  {
666  ( *iter->first )( allNeededFws, stillNeededFws, iter->second );
667  }
668 }
669 
670 inline void DtForwarderPort::addNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr)
671 {
673  std::pair< DtNotWaitingForFwsCb, void* > cbPair( callback, usr );
674 
675  DtNotWaitingForFwsCallbackList::iterator pos = std::find( myNotWaitingForFwsCbs.begin(),
676  myNotWaitingForFwsCbs.end(), cbPair );
677 
678  if( pos == myNotWaitingForFwsCbs.end() )
679  {
680  myNotWaitingForFwsCbs.push_back( cbPair );
681  }
682 }
683 
684 inline void DtForwarderPort::removeNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback, void* usr)
685 {
686  DtNotWaitingForFwsCallbackList::iterator pos = std::find( myNotWaitingForFwsCbs.begin(),
687  myNotWaitingForFwsCbs.end(), std::make_pair( callback, usr ));
688 
689  if( pos != myNotWaitingForFwsCbs.end() )
690  {
691  myNotWaitingForFwsCbs.erase( pos );
692  }
693 }
694 
696 {
697  for ( DtNotWaitingForFwsCallbackList::iterator iter = myNotWaitingForFwsCbs.begin();
698  iter != myNotWaitingForFwsCbs.end(); ++iter )
699  {
700  ( *iter->first )( iter->second );
701  }
702 }
703 
704 inline int DtForwarderPort::socketQueueStatus( unsigned int connId, int connQueueStatus, void* usr )
705 {
706  return ((DtForwarderPort*)usr)->socketQueueStatus( connId, connQueueStatus );
707 }
708 
709 inline int DtForwarderPort::socketQueueStatus( unsigned int connId, int connQueueStatus )
710 {
711  int retVal = 0;
712 
713  for( DtSocketQueueCallbackList::iterator iter = mySocketQueueCbs.begin();
714  iter != mySocketQueueCbs.end(); ++iter )
715  {
716  if( -1 == ( *iter->first )( connId, connQueueStatus, iter->second ) )
717  {
718  retVal = -1;
719  }
720  }
721 
722  return retVal;
723 }
724 
725 
726 #endif
727 
728 

Document ID: Generated on Fri Mar 14 19:08:55 EDT 2014 from SVN revision 137085
Copyright © 2005-2014 VT MÄK Inc. All Rights Reserved (www.mak.com)