sipxportlib  Version 3.3
OsNatConnectionSocket.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // Copyright (C) 2005 Pingtel Corp.
4 //
5 // $$
7 
8 #ifndef _OsNatConnectionSocket_h_
9 #define _OsNatConnectionSocket_h_
10 
11 // SYSTEM INCLUDES
12 // APPLICATION INCLUDES
13 #include "os/OsConnectionSocket.h"
14 #include "os/OsNatDatagramSocket.h"
15 #include "os/OsMsgQ.h"
16 #include "os/OsTimer.h"
17 #include "os/OsQueuedEvent.h"
18 #include "os/OsRWMutex.h"
19 #include "os/OsNatSocketBaseImpl.h"
20 #include "utl/UtlHashMap.h"
21 
22 
23 // MACROS
24 // EXTERNAL FUNCTIONS
25 // EXTERNAL VARIABLES
26 // CONSTANTS
27 // STRUCTS
28 
29 // TYPEDEFS
30 // FORWARD DECLARATIONS
31 class NatMsg ;
32 class OsEvent ;
33 class OsNatAgentTask;
35 
36 
37 
51 {
52 /* //////////////////////////// PUBLIC //////////////////////////////////// */
53 public:
54  friend class OsNatAgentTask ;
55 
56 /* ============================ CREATORS ================================== */
57  OsNatConnectionSocket(int connectedSocketDescriptor,
58  const RtpTcpRoles role);
59 
60  OsNatConnectionSocket(const char* szLocalIp,
61  int connectedSocketDescriptor,
62  const RtpTcpRoles role);
63 
64  // Constructor
65  OsNatConnectionSocket(int serverPort,
66  const char* serverName,
67  UtlBoolean blockingConnect,
68  const char* localIp,
69  const bool bConnect,
70  const RtpTcpRoles role);
71 
75  virtual ~OsNatConnectionSocket();
76 
77 /* ============================ MANIPULATORS ============================== */
78 
79  virtual OsSocket* getSocket();
80 
81  virtual void setRole(const RtpTcpRoles role);
82  virtual const RtpTcpRoles getRole() const;
83 
87  virtual int read(char* buffer, int bufferLength) ;
88 
92  virtual int read(char* buffer, int bufferLength,
93  UtlString* ipAddress, int* port);
94 
98  virtual int read(char* buffer, int bufferLength,
99  struct in_addr* ipAddress, int* port);
100 
104  virtual int read(char* buffer, int bufferLength, long waitMilliseconds);
105 
106 
110  virtual int write(const char* buffer, int bufferLength);
111 
115  virtual int socketWrite(const char* buffer, int bufferLength,
116  const char* ipAddress, int port, PacketType packetType=UNKNOWN_PACKET);
117 
118 
122  virtual int write(const char* buffer, int bufferLength,
123  const char* ipAddress, int port);
124 
128  virtual int write(const char* buffer, int bufferLength,
129  long waitMilliseconds);
130 
141  virtual void enableStun(const char* szStunServer,
142  int stunPort,
143  int iKeepAlive,
144  int stunOptions,
145  bool bReadFromSocket) ;
146 
151  virtual void disableStun() ;
152 
153 
165  virtual void enableTurn(const char* szTurnSever,
166  int turnPort,
167  int iKeepAlive,
168  const char* username,
169  const char* password,
170  bool bReadFromSocket) ;
171 
176  virtual void disableTurn() ;
177 
178 
190  virtual void enableTransparentReads(bool bEnable) ;
191 
192 
204  virtual void addAlternateDestination(const char* szAddress, int iPort, int priority) ;
205 
209  virtual void readyDestination(const char* szAddress, int iPort) ;
210 
221  virtual void setNotifier(OsNotification* pNotification) ;
222 
223  virtual UtlBoolean addCrLfKeepAlive(const char* szRemoteIp,
224  const int remotePort,
225  const int keepAliveSecs,
226  OsNatKeepaliveListener* pListener) ;
227 
228  virtual UtlBoolean removeCrLfKeepAlive(const char* szRemoteIp,
229  const int remotePort) ;
230 
231  virtual UtlBoolean addStunKeepAlive(const char* szRemoteIp,
232  const int remotePort,
233  const int keepAliveSecs,
234  OsNatKeepaliveListener* pListener) ;
235 
236  virtual UtlBoolean removeStunKeepAlive(const char* szRemoteIp,
237  const int remotePort) ;
238 
239 /* ============================ ACCESSORS ================================= */
240 
249  virtual UtlBoolean getMappedIp(UtlString* ip, int* port) ;
250 
251 
260  virtual UtlBoolean getRelayIp(UtlString* ip, int* port) ;
261 
265  virtual UtlBoolean getBestDestinationAddress(UtlString& address, int& iPort) ;
266 
270  virtual UtlBoolean applyDestinationAddress(const char* szAddress, int iPort) ;
271 
272 
293  const char* frameBuffer(TURN_FRAMING_TYPE type,
294  const char* buffer,
295  const int bufferLength,
296  int& framedBufferLen);
297  virtual void destroy();
298 
299  virtual int clientConnect(const char* szServer, const int port);
300  virtual bool isClientConnected(const char* szServer, const int port);
301  virtual OsNatConnectionSocket* getClientConnection(const char* szServer, const int port);
302 
303 
304 /* ============================ INQUIRY =================================== */
305 
306 
307 /* //////////////////////////// PROTECTED ///////////////////////////////// */
308 protected:
313 
314  mutable OsRWMutex mRoleMutex;
315  mutable OsMutex mStreamHandlerMutex;
316 
323  void setStunAddress(const UtlString& address, const int iPort) ;
324 
325 
332  void setTurnAddress(const UtlString& address, const int iPort) ;
333 
334 
338  void markStunFailure() ;
339 
340 
344  void markStunSuccess(bool bAddressChanged) ;
345 
346 
350  void markTurnFailure() ;
351 
352 
356  void markTurnSuccess() ;
357 
358 
368  void evaluateDestinationAddress(const UtlString& address, int iPort, int priority) ;
369 
370 
371 
372  virtual void handleFramedStream( char* pData,
373  const int size,
374  const char* receivedIp,
375  const int port);
376 
377  virtual bool handleUnframedBuffer(const TURN_FRAMING_TYPE type,
378  const char* buff,
379  const int buffSize,
380  const char* receivedIp,
381  const int port);
382 
390 
391  void addClientConnection(const char* ipAddress, const int port, OsNatConnectionSocket* pClient);
392  UtlHashMap mClientConnectionSockets; // map of client connection sockets
393  // key = destination IP address
394  // value = OsNatConnectionSocket pointer
395 
396 
397 /* //////////////////////////// PRIVATE /////////////////////////////////// */
398 private:
399 
400  STUN_STATE mStunState ;
401  TURN_STATE mTurnState ;
404  /* Global Attributes */
405  OsNatAgentTask* mpNatAgent;
406  OsNotification* mpNotification ;
407  bool mbNotified ;
409  /* ICE Settings */
410  int miDestPriority ;
411  UtlString mDestAddress;
412  int miDestPort ;
414  char mszFragment[(MAX_RTP_BYTES + 4)];
415  int mFragmentSize;
416 };
417 
418 
419 #endif // _OsNatConnectionSocket_h_
420 
#define MAX_RTP_BYTES
Definition: IStunSocket.h:25
Definition: OsSocket.h:79
const char * frameBuffer(TURN_FRAMING_TYPE type, const char *buffer, const int bufferLength, int &framedBufferLen)
Definition: OsNatConnectionSocket.cpp:646
OsNatConnectionSocket(int connectedSocketDescriptor, const RtpTcpRoles role)
Definition: OsNatConnectionSocket.cpp:53
virtual void handleFramedStream(char *pData, const int size, const char *receivedIp, const int port)
Definition: OsNatConnectionSocket.cpp:676
virtual void setNotifier(OsNotification *pNotification)
Definition: OsNatConnectionSocket.cpp:503
virtual void disableTurn()
Definition: OsNatConnectionSocket.cpp:389
void evaluateDestinationAddress(const UtlString &address, int iPort, int priority)
Definition: OsNatConnectionSocket.cpp:580
virtual UtlBoolean getRelayIp(UtlString *ip, int *port)
Definition: OsNatConnectionSocket.cpp:451
Definition: OsNatDatagramSocket.h:78
virtual void readyDestination(const char *szAddress, int iPort)
Definition: OsNatConnectionSocket.cpp:494
virtual bool isClientConnected(const char *szServer, const int port)
Definition: OsNatConnectionSocket.cpp:806
virtual void enableTransparentReads(bool bEnable)
Definition: OsNatConnectionSocket.cpp:399
virtual UtlBoolean addStunKeepAlive(const char *szRemoteIp, const int remotePort, const int keepAliveSecs, OsNatKeepaliveListener *pListener)
Definition: OsNatConnectionSocket.cpp:420
Definition: OsNatSocketBaseImpl.h:25
virtual void enableStun(const char *szStunServer, int stunPort, int iKeepAlive, int stunOptions, bool bReadFromSocket)
Definition: OsNatConnectionSocket.cpp:327
virtual OsSocket * getSocket()
Definition: OsNatConnectionSocket.cpp:176
PacketType
Definition: IStunSocket.h:27
void setTurnAddress(const UtlString &address, const int iPort)
Definition: OsNatConnectionSocket.cpp:522
virtual UtlBoolean getBestDestinationAddress(UtlString &address, int &iPort)
Definition: OsNatConnectionSocket.cpp:602
Definition: OsNotification.h:35
void addClientConnection(const char *ipAddress, const int port, OsNatConnectionSocket *pClient)
Definition: OsNatConnectionSocket.cpp:783
virtual int read(char *buffer, int bufferLength)
Definition: OsNatConnectionSocket.cpp:181
virtual void addAlternateDestination(const char *szAddress, int iPort, int priority)
Definition: OsNatConnectionSocket.cpp:488
virtual void destroy()
Definition: OsNatConnectionSocket.cpp:161
Definition: OsNatAgentTask.h:117
virtual void disableStun()
Definition: OsNatConnectionSocket.cpp:333
Definition: OsNatKeepaliveListener.h:97
OsRWMutex mRoleMutex
Definition: OsNatConnectionSocket.h:314
virtual bool handleUnframedBuffer(const TURN_FRAMING_TYPE type, const char *buff, const int buffSize, const char *receivedIp, const int port)
Definition: OsNatConnectionSocket.cpp:754
bool mbTransparentReads
Definition: OsNatConnectionSocket.h:383
OsMutex mStreamHandlerMutex
Definition: OsNatConnectionSocket.h:315
virtual const RtpTcpRoles getRole() const
Definition: OsNatConnectionSocket.cpp:152
Definition: OsNatDatagramSocket.h:100
Definition: UtlString.h:48
virtual OsNatConnectionSocket * getClientConnection(const char *szServer, const int port)
Definition: OsNatConnectionSocket.cpp:817
TURN_FRAMING_TYPE
Definition: IStunSocket.h:59
OsNatDatagramSocket * mpDatagramSocket
Definition: OsNatConnectionSocket.h:389
virtual UtlBoolean applyDestinationAddress(const char *szAddress, int iPort)
Definition: OsNatConnectionSocket.cpp:626
int RtpTcpRoles
Definition: IStunSocket.h:54
void markTurnSuccess()
Definition: OsNatConnectionSocket.cpp:568
virtual int clientConnect(const char *szServer, const int port)
Definition: OsNatConnectionSocket.cpp:794
UtlHashMap mClientConnectionSockets
Definition: OsNatConnectionSocket.h:392
virtual UtlBoolean addCrLfKeepAlive(const char *szRemoteIp, const int remotePort, const int keepAliveSecs, OsNatKeepaliveListener *pListener)
Definition: OsNatConnectionSocket.cpp:404
virtual int socketWrite(const char *buffer, int bufferLength, const char *ipAddress, int port, PacketType packetType=UNKNOWN_PACKET)
Definition: OsNatConnectionSocket.cpp:275
virtual UtlBoolean getMappedIp(UtlString *ip, int *port)
Definition: OsNatConnectionSocket.cpp:440
Definition: UtlHashMap.h:46
Events are used to synchronize a task with an ISR or between two tasks.
Definition: OsEvent.h:70
Definition: OsNatConnectionSocket.h:50
virtual int write(const char *buffer, int bufferLength)
Definition: OsNatConnectionSocket.cpp:263
Definition: OsConnectionSocket.h:34
virtual UtlBoolean removeStunKeepAlive(const char *szRemoteIp, const int remotePort)
Definition: OsNatConnectionSocket.cpp:430
int UtlBoolean
Definition: UtlDefs.h:41
Definition: OsNatDatagramSocket.h:64
void markStunFailure()
Definition: OsNatConnectionSocket.cpp:555
void setStunAddress(const UtlString &address, const int iPort)
Definition: OsNatConnectionSocket.cpp:515
void markStunSuccess(bool bAddressChanged)
Definition: OsNatConnectionSocket.cpp:530
virtual void setRole(const RtpTcpRoles role)
Definition: OsNatConnectionSocket.cpp:146
virtual ~OsNatConnectionSocket()
Definition: OsNatConnectionSocket.cpp:140
void markTurnFailure()
Definition: OsNatConnectionSocket.cpp:574
virtual UtlBoolean removeCrLfKeepAlive(const char *szRemoteIp, const int remotePort)
Definition: OsNatConnectionSocket.cpp:414
Definition: NatMsg.h:16
virtual void enableTurn(const char *szTurnSever, int turnPort, int iKeepAlive, const char *username, const char *password, bool bReadFromSocket)
Definition: OsNatConnectionSocket.cpp:343
RtpTcpRoles mRole
Definition: OsNatConnectionSocket.h:312
Definition: IStunSocket.h:29