sipxportlib  Version 3.3
OsNatDatagramSocket.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2004-2006 SIPfoundry Inc.
3 // Licensed by SIPfoundry under the LGPL license.
4 //
5 // Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
6 // Licensed to SIPfoundry under a Contributor Agreement.
7 //
8 // $$
10 
11 #ifndef _OsNatDatagramSocket_h_
12 #define _OsNatDatagramSocket_h_
13 
14 // SYSTEM INCLUDES
15 // APPLICATION INCLUDES
16 #include "os/OsNatSocketBaseImpl.h"
17 #include "os/OsDatagramSocket.h"
18 #include "os/OsMsgQ.h"
19 #include "os/OsTimer.h"
20 #include "os/OsQueuedEvent.h"
21 
22 // DEFINES
23 #define NAT_MSG_TYPE (OsMsg::USER_START + 1)
25 // MACROS
26 // EXTERNAL FUNCTIONS
27 // EXTERNAL VARIABLES
28 // CONSTANTS
29 // STRUCTS
30 // TYPEDEFS
31 // FORWARD DECLARATIONS
32 class NatMsg ;
33 class OsEvent ;
34 class OsNatAgentTask;
36 class OsNotification;
37 
38 
44 typedef enum
45 {
50 } NAT_STATUS ;
51 
52 
53 typedef enum
54 {
59 } NAT_BINDING;
60 
64 typedef struct
65 {
66  bool bEnabled ;
70  int mappedPort ;
72 } STUN_STATE ;
73 
74 
78 typedef struct
79 {
80  bool bEnabled ;
84  int relayPort ;
86 } TURN_STATE ;
87 
101 {
102 /* //////////////////////////// PUBLIC //////////////////////////////////// */
103 public:
104  friend class OsNatAgentTask ;
105 
106 /* ============================ CREATORS ================================== */
124  const char* remoteHostName,
126  const char* localHostName = NULL,
127  OsNotification* pNotification = NULL) ;
128 
132  virtual ~OsNatDatagramSocket();
133 
134 /* ============================ MANIPULATORS ============================== */
135 
136  virtual OsSocket* getSocket();
137 
141  virtual int read(char* buffer, int bufferLength) ;
142 
146  virtual int read(char* buffer, int bufferLength,
147  UtlString* ipAddress, int* port);
148 
152  virtual int read(char* buffer, int bufferLength,
153  struct in_addr* ipAddress, int* port);
154 
158  virtual int read(char* buffer, int bufferLength, long waitMilliseconds);
159 
160 
164  virtual int write(const char* buffer, int bufferLength);
165 
170  virtual int socketWrite(const char* buffer, int bufferLength,
171  const char* ipAddress, int port, PacketType packetType=UNKNOWN_PACKET);
172 
176  virtual int write(const char* buffer, int bufferLength,
177  const char* ipAddress, int port);
178 
182  virtual int write(const char* buffer, int bufferLength,
183  long waitMilliseconds);
184 
195  virtual void enableStun(const char* szStunServer,
196  int stunPort,
197  int iKeepAlive,
198  int stunOptions,
199  bool bReadFromSocket) ;
200 
205  virtual void disableStun() ;
206 
207 
219  virtual void enableTurn(const char* szTurnSever,
220  int turnPort,
221  int iKeepAlive,
222  const char* username,
223  const char* password,
224  bool bReadFromSocket) ;
225 
230  virtual void disableTurn() ;
231 
244  virtual bool waitForBinding(NAT_BINDING binding, bool bWaitUntilReady);
245 
257  virtual void enableTransparentReads(bool bEnable) ;
258 
259 
271  virtual void addAlternateDestination(const char* szAddress, int iPort, int priority) ;
272 
273 
279  virtual void setReadNotification(OsNotification* pNotification) ;
280 
281 
285  virtual void readyDestination(const char* szAddress, int iPort) ;
286 
297  virtual void setNotifier(OsNotification* pNotification) ;
298 
299  virtual UtlBoolean addCrLfKeepAlive(const char* szRemoteIp,
300  const int remotePort,
301  const int keepAliveSecs,
302  OsNatKeepaliveListener* pListener) ;
303 
304  virtual UtlBoolean removeCrLfKeepAlive(const char* szRemoteIp,
305  const int remotePort) ;
306 
307  virtual UtlBoolean addStunKeepAlive(const char* szRemoteIp,
308  const int remotePort,
309  const int keepAliveSecs,
310  OsNatKeepaliveListener* pListener) ;
311 
312  virtual UtlBoolean removeStunKeepAlive(const char* szRemoteIp,
313  const int remotePort) ;
314 
315 /* ============================ ACCESSORS ================================= */
316 
325  virtual UtlBoolean getMappedIp(UtlString* ip, int* port) ;
326 
327 
336  virtual UtlBoolean getRelayIp(UtlString* ip, int* port) ;
337 
341  virtual UtlBoolean getBestDestinationAddress(UtlString& address, int& iPort) ;
342 
346  virtual UtlBoolean applyDestinationAddress(const char* szAddress, int iPort) ;
347 
348  virtual void destroy();
349 
350 
351 
352 /* ============================ INQUIRY =================================== */
353 
354 
355 /* //////////////////////////// PROTECTED ///////////////////////////////// */
356 protected:
357 
364  void setStunAddress(const UtlString& address, const int iPort) ;
365 
366 
373  void setTurnAddress(const UtlString& address, const int iPort) ;
374 
375 
379  void markStunFailure() ;
380 
381 
385  void markStunSuccess(bool bAddressChanged) ;
386 
387 
391  void markTurnFailure() ;
392 
393 
397  void markTurnSuccess() ;
398 
399 
409  void evaluateDestinationAddress(const UtlString& address, int iPort, int priority) ;
410 
411  /* ICE Settings */
414  int miDestPort ;
416 /* //////////////////////////// PRIVATE /////////////////////////////////// */
417 private:
418  STUN_STATE mStunState ;
419  TURN_STATE mTurnState ;
422  /* Global Attributes */
423  OsNatAgentTask* mpNatAgent;
424  bool mbTransparentReads ;
425  OsNotification* mpNotification ;
426  bool mbNotified ;
427 };
428 
429 /* ============================ INLINE METHODS ============================ */
430 
431 
432 /* ///////////////////////// HELPER CLASSES /////////////////////////////// */
433 
434 
435 
436 #endif // _OsNatDatagramSocket_h_
437 
Definition: OsNatDatagramSocket.h:56
NAT_STATUS
Definition: OsNatDatagramSocket.h:44
virtual UtlBoolean removeCrLfKeepAlive(const char *szRemoteIp, const int remotePort)
Definition: OsNatDatagramSocket.cpp:453
Definition: OsSocket.h:79
UtlString mDestAddress
Definition: OsNatDatagramSocket.h:413
virtual UtlBoolean addStunKeepAlive(const char *szRemoteIp, const int remotePort, const int keepAliveSecs, OsNatKeepaliveListener *pListener)
Definition: OsNatDatagramSocket.cpp:459
void markTurnSuccess()
Definition: OsNatDatagramSocket.cpp:644
virtual void addAlternateDestination(const char *szAddress, int iPort, int priority)
Definition: OsNatDatagramSocket.cpp:558
Definition: OsNatDatagramSocket.h:48
void setTurnAddress(const UtlString &address, const int iPort)
Definition: OsNatDatagramSocket.cpp:598
Definition: OsNatDatagramSocket.h:78
void markStunSuccess(bool bAddressChanged)
Definition: OsNatDatagramSocket.cpp:606
virtual OsSocket * getSocket()
Definition: OsNatDatagramSocket.cpp:102
virtual void enableTransparentReads(bool bEnable)
Definition: OsNatDatagramSocket.cpp:432
virtual void disableStun()
Definition: OsNatDatagramSocket.cpp:329
virtual bool waitForBinding(NAT_BINDING binding, bool bWaitUntilReady)
Definition: OsNatDatagramSocket.cpp:389
Definition: OsNatSocketBaseImpl.h:25
PacketType
Definition: IStunSocket.h:27
virtual void setNotifier(OsNotification *pNotification)
Definition: OsNatDatagramSocket.cpp:581
virtual void readyDestination(const char *szAddress, int iPort)
Definition: OsNatDatagramSocket.cpp:572
virtual UtlBoolean addCrLfKeepAlive(const char *szRemoteIp, const int remotePort, const int keepAliveSecs, OsNatKeepaliveListener *pListener)
Definition: OsNatDatagramSocket.cpp:437
Definition: OsNotification.h:35
virtual int read(char *buffer, int bufferLength)
Definition: OsNatDatagramSocket.cpp:107
#define NULL
Definition: UtlDefs.h:29
int mappedPort
Definition: OsNatDatagramSocket.h:70
NAT_STATUS status
Definition: OsNatDatagramSocket.h:67
Definition: OsNatAgentTask.h:117
Definition: OsNatKeepaliveListener.h:97
int relayPort
Definition: OsNatDatagramSocket.h:84
void setStunAddress(const UtlString &address, const int iPort)
Definition: OsNatDatagramSocket.cpp:591
Definition: OsNatDatagramSocket.h:100
Definition: UtlString.h:48
Definition: OsNatDatagramSocket.h:46
NAT_BINDING
Definition: OsNatDatagramSocket.h:53
virtual void disableTurn()
Definition: OsNatDatagramSocket.cpp:379
Definition: OsNatDatagramSocket.h:55
virtual UtlBoolean getRelayIp(UtlString *ip, int *port)
Definition: OsNatDatagramSocket.cpp:521
virtual void destroy()
Definition: OsNatDatagramSocket.cpp:90
NAT_STATUS status
Definition: OsNatDatagramSocket.h:81
UtlString mappedAddress
Definition: OsNatDatagramSocket.h:69
virtual UtlBoolean applyDestinationAddress(const char *szAddress, int iPort)
Definition: OsNatDatagramSocket.cpp:702
UtlString relayAddress
Definition: OsNatDatagramSocket.h:83
Definition: OsDatagramSocket.h:37
int localHostPort
Definition: OsSocket.h:321
int miDestPort
Definition: OsNatDatagramSocket.h:414
virtual ~OsNatDatagramSocket()
Definition: OsNatDatagramSocket.cpp:85
void evaluateDestinationAddress(const UtlString &address, int iPort, int priority)
Definition: OsNatDatagramSocket.cpp:656
Definition: OsNatDatagramSocket.h:47
virtual void enableTurn(const char *szTurnSever, int turnPort, int iKeepAlive, const char *username, const char *password, bool bReadFromSocket)
Definition: OsNatDatagramSocket.cpp:339
virtual void setReadNotification(OsNotification *pNotification)
Definition: OsNatDatagramSocket.cpp:564
Events are used to synchronize a task with an ISR or between two tasks.
Definition: OsEvent.h:70
void markStunFailure()
Definition: OsNatDatagramSocket.cpp:631
virtual int socketWrite(const char *buffer, int bufferLength, const char *ipAddress, int port, PacketType packetType=UNKNOWN_PACKET)
Definition: OsNatDatagramSocket.cpp:228
Definition: OsNatDatagramSocket.h:57
bool bEnabled
Definition: OsNatDatagramSocket.h:66
int UtlBoolean
Definition: UtlDefs.h:41
Definition: OsNatDatagramSocket.h:64
OsNatDatagramSocket(int remoteHostPort, const char *remoteHostName, int localHostPort=PORT_DEFAULT, const char *localHostName=NULL, OsNotification *pNotification=NULL)
Definition: OsNatDatagramSocket.cpp:50
virtual int write(const char *buffer, int bufferLength)
Definition: OsNatDatagramSocket.cpp:239
virtual UtlBoolean getMappedIp(UtlString *ip, int *port)
Definition: OsNatDatagramSocket.cpp:485
int miDestPriority
Definition: OsNatDatagramSocket.h:412
void markTurnFailure()
Definition: OsNatDatagramSocket.cpp:650
Definition: OsNatDatagramSocket.h:58
int remoteHostPort
Definition: OsSocket.h:322
bool bEnabled
Definition: OsNatDatagramSocket.h:80
#define PORT_DEFAULT
Definition: OsDefs.h:180
Definition: NatMsg.h:16
virtual UtlBoolean getBestDestinationAddress(UtlString &address, int &iPort)
Definition: OsNatDatagramSocket.cpp:678
virtual UtlBoolean removeStunKeepAlive(const char *szRemoteIp, const int remotePort)
Definition: OsNatDatagramSocket.cpp:475
UtlString remoteHostName
Definition: OsSocket.h:325
virtual void enableStun(const char *szStunServer, int stunPort, int iKeepAlive, int stunOptions, bool bReadFromSocket)
Definition: OsNatDatagramSocket.cpp:287
UtlString localHostName
Definition: OsSocket.h:324
Definition: IStunSocket.h:29