11 #ifndef DtDisExerciseConn_H_
12 #define DtDisExerciseConn_H_
34 class DtDisObjectManager;
57 typedef int (*DtPredicate)(
DtPdu *pdu,
void *arg);
61 DtNET_READ_SUCCESS =0,
62 DtNET_READ_NO_PACKETS =1,
63 DtNET_READ_BAD_PACKET =2,
64 DtNET_READ_SERVER_MSG =3,
65 DtNET_READ_SIZE_MISMATCH =4
69 DtPROCESS_PDU_SUCCESS =0,
70 DtPROCESS_PDU_WRONG_EXID =5,
71 DtPROCESS_PDU_NO_PDU =6,
72 DtNET_READ_FILTERED_PACKET =7
83 enum InitializationStatus {
85 DtCOULD_NOT_CREATE_SOCKET =1
101 int site_id,
int application_num,
102 InitializationStatus* status = 0,
bool use_async_io =
false,
103 bool useIpv6 =
false,
bool suppressSelfReflect =
false);
108 int site_id,
int application_num, InitializationStatus* status = 0,
109 bool use_async_io =
false,
bool suppressSelfReflect =
false);
114 int site_id,
int application_num, InitializationStatus* status = 0);
133 virtual void addPduCallback(
DtPduKind pduKind, DtPduCallbackFcn fcn,
void *usr);
138 virtual void removePduCallback(
DtPduKind pduKind, DtPduCallbackFcn fcn,
void *usr);
145 virtual int drainInput(
DtTime timeout=-1,
int nReadPerTimeCheck=100);
149 virtual int readAndProcess(
void);
154 virtual int processPdu(
DtPdu *pdu);
160 virtual DtPdu *netRead(
int *retCode = 0);
167 virtual void addInterestInPduKind(
DtPduKind kind);
174 virtual void subtractInterestInPduKind(
DtPduKind kind);
180 virtual DtPduKind readUntil(DtPredicate predicate,
void *arg,
185 virtual void addInterestInMcastAddr(
const DtInetAddr& addr);
189 virtual void subtractInterestInMcastAddr(
const DtInetAddr& addr);
228 virtual bool addDestination(
const DtInetAddr& destination,
DtU16 port=0);
236 virtual bool removeDestination(
const DtInetAddr& destination,
DtU16 port=0);
239 virtual void setExerciseId(
int exercise_id);
259 virtual DtPduFactory *pduFactory();
266 virtual void setPduFactory(DtPduFactory* fact);
269 virtual void enableFiltering();
272 virtual void disableFiltering();
283 virtual void setTimeStampType(
int relOrAbs);
286 virtual DtDisObjectManager* disObjectManager();
294 static const int nSizeMismatchComplain;
302 virtual DtTime currentTimeForStamping();
305 void init0(
int port,
int exerId,
int siteId,
int applNum,
306 InitializationStatus* status,
bool async_io,
bool useIpv6,
307 bool suppressSelfReflect);
310 void init0(
DtInetSocket* s,
int exerId,
int siteId,
int applNum,
311 InitializationStatus* status);
313 virtual void setRemoteEndpoint(
const DtInetAddr& addr,
int port );
317 int exerId,
int siteId,
int applNum, InitializationStatus* status);
320 bool useAsyncIo,
DtInetDevice* device,
bool suppressSelfReflect);
326 DtPduCallbackManager myPduCbMgr;
327 int pduInterest[DtMAX_PDU_KINDS + 1];
328 void zeroPduInterestList();
332 DtPduFactory* myPduFact;
333 DtPduFactory* myDfltPduFact;
336 DtDisObjectManager* myDisObjectManager;
342 char* myPacketBuffer;
348 int ap, InitializationStatus* status,
bool use_async_io,
bool useIpv6,
349 bool suppressSelfReflect)
355 , myEndpointReceivedFrom()
357 init0(po, ex, si, ap, status, use_async_io, useIpv6, suppressSelfReflect);
362 int ap, InitializationStatus* status)
368 , myEndpointReceivedFrom()
370 init0(so, ex, si, ap, status);
373 inline int DtExerciseConn::readAndProcess()
376 DtPdu *pdu = netRead(&result);
377 if (result == DtNET_READ_SUCCESS)
379 result = processPdu(pdu);
393 inline DtPduFactory *DtExerciseConn::pduFactory()
403 inline DtDisObjectManager* DtExerciseConn::disObjectManager()
405 return myDisObjectManager;