00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef OPAL_IAX2_IAX2CON_H
00033 #define OPAL_IAX2_IAX2CON_H
00034
00035 #ifndef _PTLIB_H
00036 #include <ptlib.h>
00037 #endif
00038
00039 #include <opal/buildopts.h>
00040
00041 #if OPAL_IAX2
00042
00043 #include <opal/connection.h>
00044 #include <rtp/jitter.h>
00045
00046 #include <iax2/frame.h>
00047 #include <iax2/iedata.h>
00048 #include <iax2/processor.h>
00049 #include <iax2/callprocessor.h>
00050 #include <iax2/safestrings.h>
00051 #include <iax2/sound.h>
00052
00053 class IAX2EndPoint;
00054
00055
00057
00063 class IAX2Connection : public OpalConnection
00064 {
00065 PCLASSINFO(IAX2Connection, OpalConnection);
00066
00067 public:
00070
00073 IAX2Connection(
00074 OpalCall & call,
00075 IAX2EndPoint & endpoint,
00076 const PString & token,
00077 void *userData,
00078 const PString & remoteParty,
00079 const PString & remotePartyName = PString::Empty()
00080 );
00081
00085 ~IAX2Connection();
00087
00091 void StartOperation();
00092
00101 virtual bool IsNetworkConnection() const { return true; }
00102
00110 virtual bool TransferConnection(
00111 const PString & remoteParty
00112 );
00113
00132 virtual void OnReleased();
00133
00144 OpalMediaFormatList GetMediaFormats() const { return remoteMediaFormats; }
00145
00147 void EndCallNow(
00148 CallEndReason reason = EndedByLocalUser
00149 );
00150
00151 OpalConnection::SendUserInputModes GetRealSendUserInputMode() const;
00152
00154 void SendDtmf(const PString & dtmf);
00155
00157 virtual PBoolean SendUserInputString(const PString & value );
00158
00160 virtual PBoolean SendUserInputTone(char tone, unsigned duration );
00161
00163 PBoolean IsCallTerminating() { return iax2Processor.IsCallTerminating(); }
00164
00173 virtual void AnsweringCall(
00174 AnswerCallResponse response
00175 );
00176
00184 void OnConnected();
00185
00197 virtual PBoolean SetConnected();
00198
00213 void OnEstablished();
00214
00229 virtual void Release( CallEndReason reason = EndedByLocalUser
00230 );
00231
00243 PBoolean SetAlerting(
00244 const PString & calleeName,
00245 PBoolean withMedia
00246 );
00247
00255 virtual OpalMediaStream * CreateMediaStream(
00256 const OpalMediaFormat & mediaFormat,
00257 unsigned sessionID,
00258 PBoolean isSource
00259 );
00260
00271 void SetCallToken(PString newToken);
00272
00274 PString GetCallToken() { return iax2Processor.GetCallToken(); }
00275
00278 void TransmitFrameToRemoteEndpoint(IAX2Frame *src);
00279
00283 void PutSoundPacketToNetwork(PBYTEArray *sund);
00284
00287 void ReceivedSoundPacketFromNetwork(IAX2Frame *soundFrame);
00288
00293 PBoolean ReadSoundPacket(RTP_DataFrame & packet);
00294
00296 IAX2Remote & GetRemoteInfo() { return iax2Processor.GetRemoteInfo(); }
00297
00299 IAX2SequenceNumbers & GetSequenceInfo() { return iax2Processor.GetSequenceInfo(); }
00300
00302 const PTimeInterval & GetCallStartTick() { return iax2Processor.GetCallStartTick(); }
00303
00308 void OnSetUp();
00309
00310
00318 PBoolean SetUpConnection();
00319
00320
00324 PINDEX GetSupportedCodecs();
00325
00329 PINDEX GetPreferredCodec();
00330
00333 void BuildRemoteCapabilityTable(unsigned int remoteCapability, unsigned int format);
00334
00335
00343 unsigned int ChooseCodec();
00344
00349 virtual bool IsConnectionOnHold(
00350 bool fromRemote
00351 );
00352
00354 virtual bool RetrieveConnection();
00355
00357 virtual bool HoldConnection();
00358
00360 void RemoteHoldConnection();
00361
00363 void RemoteRetrieveConnection();
00364
00371 void SetUserName(PString & inUserName) { userName = inUserName; };
00372
00374 PString GetUserName() const { return userName; };
00375
00382 void SetPassword(PString & inPassword) { password = inPassword; };
00383
00385 PString GetPassword() const { return password; };
00386
00387
00397 virtual PBoolean ForwardCall(
00398 const PString & forwardParty
00399 );
00400
00404 void IncomingEthernetFrame (IAX2Frame *frame);
00405
00409
00410
00412 IAX2EndPoint & GetEndPoint() { return endpoint; }
00413
00416 void ReportStatistics();
00417
00418
00419 protected:
00420
00422 PString userName;
00423
00425 PString password;
00426
00430
00432 IAX2EndPoint &endpoint;
00433
00436 OpalMediaFormatList remoteMediaFormats;
00437
00440 OpalMediaFormatList localMediaFormats;
00441
00443 IAX2CallProcessor & iax2Processor;
00444
00446 PBoolean local_hold;
00447
00449 PBoolean remote_hold;
00450
00452
00455 OpalJitterBuffer jitterBuffer;
00456
00464 RTP_DataFrame::PayloadTypes opalPayloadType;
00465
00466 friend class IAX2CallProcessor;
00467 };
00468
00469
00471
00472
00473 #endif // OPAL_IAX2
00474
00475 #endif // OPAL_IAX2_IAX2CON_H
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485