34 class DtDisObjectManager;
39 class DtPduDecoderFactory;
40 class DtPduEncoderFactory;
48 typedef DtPdu* (*DtPduInterceptFcn)(
DtPdu* pdu,
int *retCode);
63 typedef int (*DtPredicate)(
DtPdu *pdu,
void *arg);
67 DtNET_READ_SUCCESS =0,
68 DtNET_READ_NO_PACKETS =1,
69 DtNET_READ_BAD_PACKET =2,
70 DtNET_READ_SERVER_MSG =3,
71 DtNET_READ_SIZE_MISMATCH =4
75 DtPROCESS_PDU_SUCCESS =0,
76 DtPROCESS_PDU_WRONG_EXID =5,
77 DtPROCESS_PDU_NO_PDU =6,
78 DtNET_READ_FILTERED_PACKET =7
89 enum InitializationStatus {
91 DtCOULD_NOT_CREATE_SOCKET =1
107 int site_id,
int application_num,
108 InitializationStatus* status = 0,
bool use_async_io =
false,
109 bool useIpv6 =
false,
bool suppressSelfReflect =
false);
114 int site_id,
int application_num, InitializationStatus* status = 0,
115 bool use_async_io =
false,
bool suppressSelfReflect =
false);
120 int site_id,
int application_num, InitializationStatus* status = 0);
139 virtual void addPduCallback(
DtPduKind pduKind, DtPduCallbackFcn fcn,
void *usr);
144 virtual void removePduCallback(
DtPduKind pduKind, DtPduCallbackFcn fcn,
void *usr);
151 virtual int drainInput(
DtTime timeout=-1,
int nReadPerTimeCheck=100);
155 virtual int readAndProcess(
void);
160 virtual int processPdu(
DtPdu *pdu);
166 virtual DtPdu *netRead(
int *retCode = 0);
173 virtual void addInterestInPduKind(
DtPduKind kind);
180 virtual void subtractInterestInPduKind(
DtPduKind kind);
186 virtual DtPduKind readUntil(DtPredicate predicate,
void *arg,
191 virtual void addInterestInMcastAddr(
const DtInetAddr& addr);
195 virtual void subtractInterestInMcastAddr(
const DtInetAddr& addr);
234 virtual bool addDestination(
const DtInetAddr& destination,
DtU16 port=0);
242 virtual bool removeDestination(
const DtInetAddr& destination,
DtU16 port=0);
245 virtual void setExerciseId(
int exercise_id);
265 virtual DtPduFactory *pduFactory();
270 virtual DtPduEncoderFactory* pduEncoderFactory();
275 virtual DtPduDecoderFactory* pduDecoderFactory();
282 virtual void setPduFactory(DtPduFactory* fact);
285 virtual void enableFiltering();
288 virtual void disableFiltering();
299 virtual void setTimeStampType(
int relOrAbs);
302 virtual DtDisObjectManager* disObjectManager();
312 void setRelativeTimeRatio(
float ratio);
313 float relativeTimeRatio();
316 void setPduInterceptor(DtPduInterceptFcn interceptor);
317 DtPduInterceptFcn pduInterceptor()
const;
329 static const int nSizeMismatchComplain;
337 virtual DtTime currentTimeForStamping();
340 void init0(
int port,
int exerId,
int siteId,
int applNum,
341 InitializationStatus* status,
bool async_io,
bool useIpv6,
342 bool suppressSelfReflect);
345 void init0(
DtInetSocket* s,
int exerId,
int siteId,
int applNum,
346 InitializationStatus* status);
348 virtual void setRemoteEndpoint(
const DtInetAddr& addr,
int port );
352 int exerId,
int siteId,
int applNum, InitializationStatus* status);
355 bool useAsyncIo,
DtInetDevice* device,
bool suppressSelfReflect);
361 DtPduCallbackManager myPduCbMgr;
362 int pduInterest[DtMAX_PDU_KINDS + 1];
363 void zeroPduInterestList();
367 DtPduFactory* myPduFact;
368 DtPduFactory* myDfltPduFact;
369 DtPduEncoderFactory* myPduEncFact;
370 DtPduDecoderFactory* myPduDecFact;
373 DtDisObjectManager* myDisObjectManager;
375 DtPduInterceptFcn myPduInterceptor;
381 char* myPacketBuffer;
385 float myRelativeTimeRatio;
393 int ap, InitializationStatus* status,
bool use_async_io,
bool useIpv6,
394 bool suppressSelfReflect)
400 , myEndpointReceivedFrom()
401 , myOwnershipHandler(0)
402 , myPduInterceptor(0)
405 init0(po, ex, si, ap, status, use_async_io, useIpv6, suppressSelfReflect);
410 int ap, InitializationStatus* status)
416 , myEndpointReceivedFrom()
417 , myOwnershipHandler(0)
418 , myPduInterceptor(0)
421 init0(so, ex, si, ap, status);
424 inline int DtExerciseConn::readAndProcess()
427 DtPdu *pdu = netRead(&result);
428 if (result == DtNET_READ_SUCCESS)
430 result = processPdu(pdu);
444 inline DtPduFactory *DtExerciseConn::pduFactory()
450 inline DtPduEncoderFactory *DtExerciseConn::pduEncoderFactory()
456 inline DtPduDecoderFactory *DtExerciseConn::pduDecoderFactory()
467 inline DtDisObjectManager* DtExerciseConn::disObjectManager()
469 return myDisObjectManager;