OPAL  Version 3.18.8
iax2ep.h
Go to the documentation of this file.
1 /*
2  *
3  * Inter Asterisk Exchange 2
4  *
5  * Open Phone Abstraction Library (OPAL)
6  *
7  * Describes the IAX2 extension of the OpalEndpoint class.
8  *
9  * Copyright (c) 2005 Indranet Technologies Ltd.
10  *
11  * The contents of this file are subject to the Mozilla Public License
12  * Version 1.0 (the "License"); you may not use this file except in
13  * compliance with the License. You may obtain a copy of the License at
14  * http://www.mozilla.org/MPL/
15  *
16  * Software distributed under the License is distributed on an "AS IS"
17  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
18  * the License for the specific language governing rights and limitations
19  * under the License.
20  *
21  * The Original Code is Open Phone Abstraction Library.
22  *
23  * The Initial Developer of the Original Code is Indranet Technologies Ltd.
24  *
25  * The author of this code is Derek J Smithies
26  */
27 
28 #ifndef OPAL_IAX2_IAX2EP_H
29 #define OPAL_IAX2_IAX2EP_H
30 
31 #ifndef _PTLIB_H
32 #include <ptlib.h>
33 #endif
34 
35 #ifdef P_USE_PRAGMA
36 #pragma interface
37 #endif
38 
39 #include <opal_config.h>
40 
41 #if OPAL_IAX2
42 
43 #include <opal/endpoint.h>
44 #include <iax2/iax2con.h>
45 #include <iax2/processor.h>
46 #include <iax2/regprocessor.h>
47 #include <iax2/specialprocessor.h>
48 
49 class IAX2Receiver;
50 class IAX2Transmit;
51 class IAX2Processor;
52 
56 class IAX2IncomingEthernetFrames : public PThread
57 {
58  PCLASSINFO(IAX2IncomingEthernetFrames, PThread);
59 public:
60 
65 
68 
71  /*The method which gets everythig to happen */
72  virtual void Main();
73 
75  void Assign(IAX2EndPoint *ep);
76 
79  void ProcessList() { activate.Signal(); }
80 
82  void Terminate();
83 
85  protected:
88 
90  PSyncPoint activate;
91 
93  PBoolean keepGoing;
94 };
95 
96 
97 
98 
101 {
102  PCLASSINFO(IAX2EndPoint, OpalEndPoint);
103  public:
104  enum { DefaultUdpPort = 4569 };
105 
109  IAX2EndPoint(
110  OpalManager & manager
111  );
112 
114  ~IAX2EndPoint();
116 
122  virtual PString GetDefaultTransport() const;
123 
126  virtual WORD GetDefaultSignalPort() const;
127 
128 
158  virtual PSafePtr<OpalConnection> MakeConnection(
159  OpalCall & call,
160  const PString & party,
161  void * userData = NULL,
162  unsigned int options = 0,
163  OpalConnection::StringOptions * stringOptions = NULL
164  );
165 
170  OpalCall & call,
171  const PString & token,
172  void * userData,
173  const PString & remoteParty,
174  const PString & remotePartyName = PString::Empty()
175  );
177 
182  PBoolean Initialise();
183 
185  virtual void IncomingEthernetFrame (IAX2Frame *frame);
186 
192  PBoolean ConectionForFrameIsAlive(IAX2Frame *f);
193 
200  PINDEX NextSrcCallNumber(IAX2Processor * processor);
201 
205 
207  WORD ListenPortNumber() { return 4569; }
208 
211 
214 
216  PString GetLocalUserName() { return m_localUserName; }
217 
219  PString GetLocalNumber() { return m_localNumber; }
220 
222  void SetLocalUserName(PString newValue);
223 
225  void SetLocalNumber(PString newValue);
226 
228  PString & GetPassword() { return m_password; }
229 
231  void SetPassword(PString newValue);
232 
240 
243 
245  void StartRinging(PString remoteCaller);
246 
259  IAX2Frame *f
260  );
261 
267  void OnEstablished(
268  OpalConnection & con
269  );
270 
276  virtual void OnReleased(
277  OpalConnection & connection
278  );
279 
289  virtual OpalMediaFormatList GetMediaFormats() const;
290 
293 
295  PINDEX GetPreferredCodec(OpalMediaFormatList & list);
296 
299  void GetCodecLengths(PINDEX src, PINDEX &compressedBytes, PINDEX &duration);
300 
308  userIndex = 1,
311  portIndex = 4,
315  };
316 
323  static PStringArray DissectRemoteParty(const PString & other);
324 
329 
332  void ReportTransmitterLists(PString & answer, bool getFullReport = false);
333 
336 
342  void Register(
343  const PString & host,
344  const PString & username,
345  const PString & password = PString::Empty(),
346  PINDEX requestedRefreshTime = 60
347  );
348 
351  };
352 
355  virtual void OnRegistered(
356  const PString & host,
357  const PString & userName,
358  PBoolean isFailure,
360 
363  void Unregister(
364  const PString & host,
365  const PString & username);
366 
369  };
370 
375  virtual void OnUnregistered(
376  const PString & host,
377  const PString & userName,
378  PBoolean isFailure,
380 
381 
383  PBoolean IsRegistered(const PString & host, const PString & username);
384 
386  PINDEX GetRegistrationsCount();
387 
389  PString BuildUrl(
390  const PString & host,
391  const PString & userName = PString::Empty(),
392  const PString & extension = PString::Empty(),
393  const PString & context = PString::Empty(),
394  const PString & transport = PString::Empty()
395  );
396 
398  PBoolean InitialisedOK() { return (transmitter != NULL) && (receiver != NULL); }
399 
403  { return m_packetsReadFromEthernet.GetSize() > 0; }
405 
406  protected:
414 
418 
420  PUDPSocket *m_sock;
421 
424 
426  PDECLARE_MUTEX(m_callNumbLock);
427 
430 
433 
435  PString m_localNumber;
436 
438  PString m_password;
439 
442 
444  PDECLARE_MUTEX(m_statusQueryMutex);
445 
449 
458 
467  PBoolean ProcessFrameInConnection(IAX2Frame *f, const PString & token);
468 
476 
489  PStringToString m_tokenTable;
490 
494  PReadWriteMutex m_mutexTokenTable;
495 
498  atomic<uint32_t> m_callsEstablished;
499 
502 
504  PDECLARE_MUTEX(m_regProcessorsMutex);
505 
510  PArrayObjects m_regProcessors;
511 
512 };
513 
514 
515 #endif // OPAL_IAX2
516 
517 #endif // OPAL_IAX2_IAX2EP_H
518 
519 /* The comment below is magic for those who use emacs to edit this file.
520  * With the comment below, the tab key does auto indent to 2 spaces.
521  *
522  * Local Variables:
523  * mode:c
524  * c-basic-offset:2
525  * End:
526  */
527 
IAX2RemoteAddressFields
Definition: iax2ep.h:306
OpalMediaFormatList localMediaFormats
Definition: iax2ep.h:501
virtual OpalMediaFormatList GetMediaFormats() const
Definition: manager.h:150
PBoolean keepGoing
Definition: iax2ep.h:93
Definition: endpoint.h:65
PINDEX GetPreferredCodec(OpalMediaFormatList &list)
PString m_localNumber
Definition: iax2ep.h:435
void SetLocalUserName(PString newValue)
virtual void OnUnregistered(const PString &host, const PString &userName, PBoolean isFailure, UnregisteredError reason=UnregisteredFailureUnknown)
void Assign(IAX2EndPoint *ep)
Definition: frame.h:1149
void Unregister(const PString &host, const PString &username)
Definition: iax2ep.h:311
Definition: iax2ep.h:100
virtual void OnRegistered(const PString &host, const PString &userName, PBoolean isFailure, RegisteredError reason=RegisteredFailureUnknown)
IAX2IncomingEthernetFrames m_incomingFrameHandler
Definition: iax2ep.h:413
PTime m_callStartTime
Definition: iax2ep.h:429
virtual IAX2Connection * CreateConnection(OpalCall &call, const PString &token, void *userData, const PString &remoteParty, const PString &remotePartyName=PString::Empty())
PReadWriteMutex m_mutexTokenTable
Definition: iax2ep.h:494
PArrayObjects m_regProcessors
Definition: iax2ep.h:510
void Register(const PString &host, const PString &username, const PString &password=PString::Empty(), PINDEX requestedRefreshTime=60)
Definition: iax2con.h:59
PString m_localUserName
Definition: iax2ep.h:432
atomic< uint32_t > m_callsEstablished
Definition: iax2ep.h:498
PBoolean IsRegistered(const PString &host, const PString &username)
Definition: transmit.h:59
void ReportStoredConnections()
PBoolean InitialisedOK()
Definition: iax2ep.h:398
Definition: specialprocessor.h:52
PBoolean ProcessInMatchingConnection(IAX2Frame *f)
PUDPSocket * m_sock
Definition: iax2ep.h:420
Definition: iax2ep.h:104
WORD ListenPortNumber()
Definition: iax2ep.h:207
Definition: iax2ep.h:312
void ProcessReceivedEthernetFrames()
PBoolean EthernetFramesToBeProcessed()
Definition: iax2ep.h:402
virtual void IncomingEthernetFrame(IAX2Frame *frame)
PStringToString m_tokenTable
Definition: iax2ep.h:489
void SetPassword(PString newValue)
static PStringArray DissectRemoteParty(const PString &other)
void SetLocalNumber(PString newValue)
PString GetLocalUserName()
Definition: iax2ep.h:216
PBoolean ConectionForFrameIsAlive(IAX2Frame *f)
void OnEstablished(OpalConnection &con)
IAX2Transmit * transmitter
Definition: iax2ep.h:210
Definition: mediafmt.h:112
PBoolean ProcessInConnectionTestAll(IAX2Frame *f)
Definition: connection.h:530
void ProcessList()
Definition: iax2ep.h:79
PSyncPoint activate
Definition: iax2ep.h:90
PINDEX NextSrcCallNumber(IAX2Processor *processor)
RegisteredError
Definition: iax2ep.h:349
Definition: iax2ep.h:56
Definition: iax2ep.h:314
Definition: call.h:62
PBoolean ProcessFrameInConnection(IAX2Frame *f, const PString &token)
PDECLARE_MUTEX(m_callNumbLock)
~IAX2IncomingEthernetFrames()
Definition: iax2ep.h:67
void GetCodecLengths(PINDEX src, PINDEX &compressedBytes, PINDEX &duration)
Definition: iax2ep.h:307
PINDEX GetSupportedCodecs(OpalMediaFormatList &list)
Definition: iax2ep.h:310
IAX2FrameList m_packetsReadFromEthernet
Definition: iax2ep.h:417
virtual void OnReleased(OpalConnection &connection)
Definition: processor.h:132
IAX2EndPoint * endpoint
Definition: iax2ep.h:87
void ReportTransmitterLists(PString &answer, bool getFullReport=false)
PString m_password
Definition: iax2ep.h:438
IAX2SpecialProcessor * specialPacketHandler
Definition: iax2ep.h:448
virtual PString GetDefaultTransport() const
Definition: iax2ep.h:309
PINDEX m_statusQueryCounter
Definition: iax2ep.h:441
PString BuildUrl(const PString &host, const PString &userName=PString::Empty(), const PString &extension=PString::Empty(), const PString &context=PString::Empty(), const PString &transport=PString::Empty())
Definition: iax2ep.h:313
Definition: connection.h:415
PString & GetPassword()
Definition: iax2ep.h:228
void CopyLocalMediaFormats(OpalMediaFormatList &list)
void StartRinging(PString remoteCaller)
PString GetLocalNumber()
Definition: iax2ep.h:219
PINDEX GetRegistrationsCount()
virtual WORD GetDefaultSignalPort() const
Definition: frame.h:71
PBoolean Initialise()
IAX2Receiver * receiver
Definition: iax2ep.h:213
PBoolean ConnectionForFrameIsAlive(IAX2Frame *f)
void NewIncomingConnection(IAX2Frame *f)
Definition: receiver.h:56
IAX2EndPoint(OpalManager &manager)
int m_callnumbs
Definition: iax2ep.h:423
PINDEX GetOutSequenceNumberForStatusQuery()
virtual PSafePtr< OpalConnection > MakeConnection(OpalCall &call, const PString &party, void *userData=NULL, unsigned int options=0, OpalConnection::StringOptions *stringOptions=NULL)
Definition: iax2ep.h:308
UnregisteredError
Definition: iax2ep.h:367