VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vlNetSocket.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992, 1997 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: vlNetSocket.h,v $ $Revision: 1.3.6.1 $ $State: Exp $
7 *********************************************************************/
8 #ifndef vlNetSocket_H_
9 #define vlNetSocket_H_
10 
15 
16 #include <vlutil/vlMachineTypes.h>
17 #include <vlutil/vlNetTypes.h>
18 #include "vlSocket.h"
19 #include <vlutil/vlUtil.h>
20 
21 struct sockaddr_in;
22 struct ifreq;
23 
24 #if defined(__solaris__) || defined(__sgi__)
25 #define DtRead ((DtU8) 0x01)
28 #define DtWrite ((DtU8) 0x02)
30 #define DtReadWrite (DtRead | DtWrite)
32 #define DtBindToDestAddr ((DtU8) 0x08)
35 #define DtQuiet ((DtU8) 0x10)
37 #else
38 #include <vlutil/vlInetSocket.h>
39 #endif
40 
41 #ifdef DtUSE_UTILITIES_NAMESPACE
42 namespace DtUSE_UTILITIES_NAMESPACE
43 {
44 #endif
45 
47 
48 DT_DLL_NETCOMPAT DtIpv4Addr DtInetAddrOfDevice( const char* device );
49 
50 DT_DLL_NETCOMPAT DtIpv4Addr DtNetMaskOfDevice( const char* device );
51 
53 
55 
60 {
64 };
65 
73 {
74 public:
75 
81  DtNetSocket(int port = DtDEFAULT_PORT, DtU8 flags = DtReadWrite, DtIpv4Addr devAddr = 0);
82 
88  DtNetSocket(int port, DtIpv4Addr destAddr, DtU8 flags, DtIpv4Addr devAddr = 0);
89 
92  DtNetSocket(char* dummy, int sockfd, DtU8 flags = DtReadWrite);
93 
95  virtual ~DtNetSocket();
96 
100  virtual int sendTo(caddr_t packet, size_t size, DtIpv4Addr addr);
101 
104  virtual int DtRecv(caddr_t* buffptr, int* status = NULL);
105 
108  virtual int DtRecv(caddr_t buff, size_t);
109 
111  virtual DtIpv4Addr lastSourceInetAddr();
112 
114  virtual void DtBecomeNonBlocking(void);
115 
116 
117 
120 
123  virtual void setBundling( int maxBundleSize, bool enableUnbundling,
124  int minPacketSize, int sizeOffset, int sizeLength, bool testDisHeader );
125 
127  virtual void setBundling( int maxBundleSize);
128 
133  virtual void setUnbundling(int onOff);
134  virtual int isUnbundling();
136 
141  virtual int minPacketSize();
142  virtual void setMinPacketSize( int size );
144 
149  virtual int sizeOffset();
150  virtual void setSizeOffset( int offset );
152 
157  virtual int sizeLength();
158  virtual void setSizeLength( int length );
160 
167  virtual bool testDisHeader();
168  virtual void enableDisHeaderTest( bool shouldTest );
170 
174  virtual int readFd();
175  virtual int writeFd();
176 
179  virtual bool isOk() const;
180 
184  virtual int listenToMulticastGroup(
185  DtIpv4Addr multicastAddr, DtIpv4Addr netInterface = DtUSE_DEFAULT_IP_ADDR );
186  virtual int dropMulticastGroup(
187  DtIpv4Addr multicastAddr, DtIpv4Addr netInterface = DtUSE_DEFAULT_IP_ADDR );
189 
191  virtual int setMcastTtl(int ttl);
192 
195  virtual void setMcastDevice(DtIpv4Addr devAddr);
196  virtual DtIpv4Addr mcastDevice() const;
198 
199  virtual void setFilterPort(const int& port);
200 
201  virtual void setSendPort(const int& port);
202 
203 public:
204 
206  static int isMulticastAddr(DtIpv4Addr addr);
207 
209  static int enableBroadcast(int sockfd);
210 
212  static void makeNonBlocking(int sockfd);
213 
215  static int makeReusable(int sockfd);
216 
219  static void setRetryOnSend(unsigned int numRetries, double waitPeriod);
220 
222  static DtIpv4Addr inetBroadcastOfDevice(const char *device = NULL);
223  static DtIpv4Addr inetAddrOfDevice(const char *device = NULL);
224  static DtIpv4Addr netMaskOfDevice(const char *device = NULL);
225  static DtIpv4Addr firstHostInetAddr();
226 
228  static void setInetAddr(sockaddr_in &s, u_long addr, int port);
229 
230 #ifdef _WIN32
231  static DtIpv4Addr envNetMask();
233 
236  static void netMaskFromReg(char* tszNetMask);
237 
239  static DtIpv4Addr systemNetMask();
240 #endif
241 
242 public:
243 
245 
246 protected:
247 
249  void init(int port, DtIpv4Addr dest_addr, DtU8 flags, DtIpv4Addr devAddr = 0);
250 
252  virtual int dataLeftInCurrentBundle();
253 
255  virtual int retrySendTo( caddr_t packet, size_t size, sockaddr_in& dest );
256 
261  virtual int recvWithStatus(caddr_t* buffptr, int* status);
262 
266  virtual int recvFromNet(caddr_t* buffptr);
267 
272  virtual int recvWithUnbundling(caddr_t* buffptr);
273 
275  int initSocket();
276 
279  int initWrite(DtIpv4Addr dest);
280 
282  int initRead(DtIpv4Addr dest);
283 
285  virtual int privateListenToMulticastGroup(DtIpv4Addr multicastAddr,
286  int on_init = 0, DtIpv4Addr netInterface = DtUSE_DEFAULT_IP_ADDR );
287 
292  virtual void findNextPacket();
293 
298  virtual unsigned int getNextPacketSize();
299 
301  virtual unsigned int currentHeaderMatchesFirstInBundle();
302 
303 protected:
304 
307  static ifreq* findIfr(
308  const char* device, int sock, ifconf* ifc);
309 
311  static DtIpv4Addr netMaskOfIfr(ifreq *ifr, int sock);
312  static DtIpv4Addr inetAddrOfIfr(ifreq *ifr, int sock);
313  static DtIpv4Addr inetBroadcastOfIfr(ifreq *ifr, int sock);
314  static bool capableOfIpBroadcast(ifreq* ifr, int sock);
315 
316 
317 protected:
318 
322  unsigned int mySourcePort;
323  char* myPktBuff;
331 
332  int sizeLeft;
333 
334 
340 
345 
346  bool myOkFlag;
347  sockaddr_in* destSockAddr;
348  sockaddr_in* sourceSockAddr;
350 
351 protected:
352 
353  static unsigned int theMaxSendRetries;
354  static double theSendRetryPeriod;
355 
356 protected:
357 
359  DtNetSocket(const DtNetSocket &);
360 
362  DtNetSocket &operator=(const DtNetSocket &);
363 
364 };
365 
366 inline void DtNetSocket::setBundling( int maxBundleSize)
367 {
368  DtSocket::setBundling(maxBundleSize);
369 }
370 
371 
372 #ifdef DtUSE_UTILITIES_NAMESPACE
373 }
374 #endif
375 
376 #endif
377 
int myFilterPort
Definition: vlNetSocket.h:320
DT_DLL_NETCOMPAT int DtIsMulticastAddr(DtIpv4Addr addr)
Definition: vlNetSocket.h:62
DtU8 myFlags
Definition: vlNetSocket.h:349
DtU32 DtIpv4Addr
Definition: vlUtil.h:245
This file contains the declaration of the DtInetSocket base class.
DtIpv4Addr myExtSockAddr
Definition: vlNetSocket.h:327
DtSocket provides a low level interface for packet I/O with VR-Link applications. ...
Definition: vlSocket.h:110
static double theSendRetryPeriod
Definition: vlNetSocket.h:354
int myUdpPort
Definition: vlNetSocket.h:319
void * myNextPacket
Definition: vlNetSocket.h:325
DtIpv4Addr myDevAddr
Definition: vlNetSocket.h:329
Definition: vlNetSocket.h:61
int firstExId
Definition: vlNetSocket.h:343
#define DtDEFAULT_PORT
Definition: vlSocket.h:49
sockaddr_in * destSockAddr
Definition: vlNetSocket.h:347
char * myPktBuff
Definition: vlNetSocket.h:323
int mySendPort
Definition: vlNetSocket.h:321
virtual void setBundling(int maxSize)
sockaddr_in * sourceSockAddr
Definition: vlNetSocket.h:348
int sizeLeft
Definition: vlNetSocket.h:332
int firstInBundle
Definition: vlNetSocket.h:342
const DtIpv4Addr DtUSE_DEFAULT_IP_ADDR
Definition: vlSocket.h:54
bool myTestingDisHeader
Definition: vlNetSocket.h:339
int myMaxPacketSize
Definition: vlNetSocket.h:338
unsigned char DtU8
An eight bit unsigned integer value.
Definition: vlMachineTypes.h:137
int myPktSizeLength
Definition: vlNetSocket.h:337
DtInitErrorAction
Possible values of DtNetSocket::initErrorAction, which determines what to do if socket initialization...
Definition: vlNetSocket.h:59
DT_DLL_NETCOMPAT DtIpv4Addr DtFirstHostInetAddr()
char * myUnbundleBuff
Definition: vlNetSocket.h:324
int myPktSizeOffset
Definition: vlNetSocket.h:336
This file declares DtSocket as well as several useful constents and helper classes.
Definition: vlNetSocket.h:63
DT_DLL_NETCOMPAT DtIpv4Addr DtInetBroadcastOfDevice(const char *device)
int myUnbundling
Definition: vlNetSocket.h:330
int myUsingExternalSocket
Definition: vlNetSocket.h:326
#define DtReadWrite
Marks the Socket as Read and Writable.
Definition: vlInetSocket.h:37
static DtInitErrorAction initErrorAction
Definition: vlNetSocket.h:244
int boundToDestAddr
Definition: vlNetSocket.h:341
int myPktMinSize
Definition: vlNetSocket.h:335
bool myOkFlag
Definition: vlNetSocket.h:346
static unsigned int theMaxSendRetries
Definition: vlNetSocket.h:353
DT_DLL_NETCOMPAT DtIpv4Addr DtNetMaskOfDevice(const char *device)
#define DT_DLL_NETCOMPAT
Definition: vlMachineTypes.h:111
provides basic Operating Independent Methods useful to a federate
virtual void setBundling(int maxBundleSize, bool enableUnbundling, int minPacketSize, int sizeOffset, int sizeLength, bool testDisHeader)
Set all bundling parameters Disables bundling if max.
DT_DLL_NETCOMPAT DtIpv4Addr DtInetAddrOfDevice(const char *device)
unsigned int mySourcePort
Definition: vlNetSocket.h:322
int firstProtocol
Definition: vlNetSocket.h:344
DtIpv4Addr myDestInetAddr
Definition: vlNetSocket.h:328
This file contains typedefs for machine dependant types.
A DtSocket that implements network sending and receiving function using IP/UDP broadcast, multicast or unicast.
Definition: vlNetSocket.h:72

Document ID: Generated on Mon Apr 25 03:39:01 EDT 2022 from SVN revision 242502
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)