OPAL  Version 3.18.8
iax2con.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 OpalConnection 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_IAX2CON_H
29 #define OPAL_IAX2_IAX2CON_H
30 
31 #ifndef _PTLIB_H
32 #include <ptlib.h>
33 #endif
34 
35 #include <opal_config.h>
36 
37 #if OPAL_IAX2
38 
39 #include <opal/connection.h>
40 #include <rtp/jitter.h>
41 
42 #include <iax2/frame.h>
43 #include <iax2/iedata.h>
44 #include <iax2/processor.h>
45 #include <iax2/callprocessor.h>
46 #include <iax2/safestrings.h>
47 #include <iax2/sound.h>
48 
49 class IAX2EndPoint;
50 
51 
53 
60 {
61  PCLASSINFO(IAX2Connection, OpalConnection);
62 
63  public:
66 
70  OpalCall & call,
72  const PString & token,
73  void *userData,
74  const PString & remoteParty,
75  const PString & remotePartyName = PString::Empty()
76  );
77 
83 
87  void StartOperation();
88 
97  virtual bool IsNetworkConnection() const { return true; }
98 
106  virtual bool TransferConnection(
107  const PString & remoteParty
108  );
109 
128  virtual void OnReleased();
129 
141 
143  void EndCallNow(
144  CallEndReason reason = EndedByLocalUser
145  );
146 
148  void SendDtmf(const PString & dtmf);
149 
151  virtual PBoolean SendUserInputString(const PString & value );
152 
154  virtual PBoolean SendUserInputTone(char tone, unsigned duration );
155 
158 
167  virtual void AnsweringCall(
168  AnswerCallResponse response
169  );
170 
178  void OnConnected();
179 
191  virtual PBoolean SetConnected();
192 
207  void OnEstablished();
208 
220  PBoolean SetAlerting(
221  const PString & calleeName,
222  PBoolean withMedia
223  );
224 
233  const OpalMediaFormat & mediaFormat,
234  unsigned sessionID,
235  PBoolean isSource
236  );
237 
248  void SetCallToken(PString newToken);
249 
251  PString GetCallToken() { return iax2Processor.GetCallToken(); }
252 
256 
260  void PutSoundPacketToNetwork(PBYTEArray *sund);
261 
264  void ReceivedSoundPacketFromNetwork(IAX2Frame *soundFrame);
265 
270  PBoolean ReadSoundPacket(RTP_DataFrame & packet);
271 
274 
277 
279  const PTimeInterval & GetCallStartTick() { return iax2Processor.GetCallStartTick(); }
280 
285  void OnSetUp();
286 
287 
295  PBoolean SetUpConnection();
296 
297 
301  PINDEX GetSupportedCodecs();
302 
306  PINDEX GetPreferredCodec();
307 
310  void BuildRemoteCapabilityTable(unsigned int remoteCapability, unsigned int format);
311 
312 
320  unsigned int ChooseCodec();
321 
336  virtual bool HoldRemote(
337  bool placeOnHold
338  );
339 
344  virtual bool IsOnHold(
345  bool fromRemote
346  ) const;
347 
349  void RemoteHoldConnection();
350 
353 
360  void SetUserName(const PString & inUserName) { userName = inUserName; };
361 
363  PString GetUserName() const { return userName; };
364 
371  void SetPassword(const PString & inPassword) { password = inPassword; };
372 
374  PString GetPassword() const { return password; };
375 
376 
386  virtual PBoolean ForwardCall(
387  const PString & forwardParty
388  );
389 
393  void IncomingEthernetFrame (IAX2Frame *frame);
394 
398  //static PBoolean IsStatusQueryEthernetFrame(IAX2Frame *frame);
399 
402 
405  void ReportStatistics();
406 
407 
408  protected:
409 
411  PString userName;
412 
414  PString password;
415 
419 
422 
426 
430 
433 
435  PBoolean local_hold;
436 
438  PBoolean remote_hold;
439 
441 
445 
454 
455  friend class IAX2CallProcessor;
456 };
457 
458 
460 
461 
462 #endif // OPAL_IAX2
463 
464 #endif // OPAL_IAX2_IAX2CON_H
465 
466 /* The comment below is magic for those who use emacs to edit this file.
467  * With the comment below, the tab key does auto indent to 2 spaces.
468  *
469  * Local Variables:
470  * mode:c
471  * c-basic-offset:2
472  * End:
473  */
IAX2Remote & GetRemoteInfo()
Definition: iax2con.h:273
void PutSoundPacketToNetwork(PBYTEArray *sund)
void RemoteHoldConnection()
Definition: remote.h:223
PString GetCallToken()
Definition: iax2con.h:251
void SetCallToken(PString newToken)
virtual bool IsOnHold(bool fromRemote) const
PString GetCallToken()
void OnConnected()
OpalMediaFormatList remoteMediaFormats
Definition: iax2con.h:425
void OnEstablished()
Definition: iax2ep.h:100
Definition: remote.h:52
PBoolean SetAlerting(const PString &calleeName, PBoolean withMedia)
PString password
Definition: iax2con.h:414
virtual OpalMediaStream * CreateMediaStream(const OpalMediaFormat &mediaFormat, unsigned sessionID, PBoolean isSource)
Definition: iax2con.h:59
void ReportStatistics()
IAX2CallProcessor & iax2Processor
Definition: iax2con.h:432
IAX2SequenceNumbers & GetSequenceInfo()
Definition: iax2con.h:276
void SetUserName(const PString &inUserName)
Definition: iax2con.h:360
IAX2EndPoint & endpoint
Definition: iax2con.h:421
PBoolean remote_hold
Definition: iax2con.h:438
PBoolean IsCallTerminating()
Definition: callprocessor.h:148
Definition: callprocessor.h:53
void BuildRemoteCapabilityTable(unsigned int remoteCapability, unsigned int format)
void TransmitFrameToRemoteEndpoint(IAX2Frame *src)
virtual bool TransferConnection(const PString &remoteParty)
virtual PBoolean SetConnected()
unsigned int ChooseCodec()
PayloadTypes
Definition: rtp.h:556
void EndCallNow(CallEndReason reason=EndedByLocalUser)
const PTimeInterval & GetCallStartTick()
Definition: processor.h:177
Definition: mediafmt.h:112
PString userName
Definition: iax2con.h:411
void SetPassword(const PString &inPassword)
Definition: iax2con.h:371
const PTimeInterval & GetCallStartTick()
Definition: iax2con.h:279
Definition: rtp.h:540
Definition: jitter.h:51
Definition: mediafmt.h:806
PString GetUserName() const
Definition: iax2con.h:363
OpalMediaFormatList GetMediaFormats() const
Definition: iax2con.h:140
IAX2Remote & GetRemoteInfo()
Definition: processor.h:174
Definition: call.h:62
PBoolean ReadSoundPacket(RTP_DataFrame &packet)
RTP_DataFrame::PayloadTypes opalPayloadType
Definition: iax2con.h:453
virtual bool IsNetworkConnection() const
Definition: iax2con.h:97
void SendDtmf(const PString &dtmf)
PString GetPassword() const
Definition: iax2con.h:374
virtual void OnReleased()
PINDEX GetPreferredCodec()
void StartOperation()
void RemoteRetrieveConnection()
PBoolean IsCallTerminating()
Definition: iax2con.h:157
PBoolean SetUpConnection()
virtual PBoolean ForwardCall(const PString &forwardParty)
OpalMediaFormatList localMediaFormats
Definition: iax2con.h:429
IAX2EndPoint & GetEndPoint()
Definition: iax2con.h:401
OpalJitterBuffer * m_jitterBuffer
Definition: iax2con.h:444
Definition: mediastrm.h:110
virtual void AnsweringCall(AnswerCallResponse response)
PBoolean local_hold
Definition: iax2con.h:435
IAX2SequenceNumbers & GetSequenceInfo()
Definition: processor.h:144
Definition: connection.h:415
IAX2Connection(OpalCall &call, IAX2EndPoint &endpoint, const PString &token, void *userData, const PString &remoteParty, const PString &remotePartyName=PString::Empty())
virtual PBoolean SendUserInputTone(char tone, unsigned duration)
Definition: frame.h:71
virtual bool HoldRemote(bool placeOnHold)
virtual PBoolean SendUserInputString(const PString &value)
PINDEX GetSupportedCodecs()
void ReceivedSoundPacketFromNetwork(IAX2Frame *soundFrame)
void IncomingEthernetFrame(IAX2Frame *frame)