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
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407 #ifndef __OPAL_H323CON_H
00408 #define __OPAL_H323CON_H
00409
00410 #ifdef P_USE_PRAGMA
00411 #pragma interface
00412 #endif
00413
00414
00415 #include <opal/connection.h>
00416 #include <opal/guid.h>
00417 #include <opal/buildopts.h>
00418 #include <h323/h323caps.h>
00419 #include <ptclib/dtmf.h>
00420
00421
00422
00423
00424
00425
00426
00427 class PPER_Stream;
00428 class PASN_OctetString;
00429
00430 class H225_EndpointType;
00431 class H225_TransportAddress;
00432 class H225_ArrayOf_PASN_OctetString;
00433 class H225_ProtocolIdentifier;
00434 class H225_AdmissionRequest;
00435
00436 class H245_TerminalCapabilitySet;
00437 class H245_TerminalCapabilitySetReject;
00438 class H245_OpenLogicalChannel;
00439 class H245_OpenLogicalChannelAck;
00440 class H245_TransportAddress;
00441 class H245_UserInputIndication;
00442 class H245_RequestMode;
00443 class H245_RequestModeAck;
00444 class H245_RequestModeReject;
00445 class H245_ModeDescription;
00446 class H245_ArrayOf_ModeDescription;
00447 class H245_SendTerminalCapabilitySet;
00448 class H245_MultiplexCapability;
00449 class H245_FlowControlCommand;
00450 class H245_MiscellaneousCommand;
00451 class H245_MiscellaneousIndication;
00452 class H245_JitterIndication;
00453
00454 class H323SignalPDU;
00455 class H323ControlPDU;
00456 class H323EndPoint;
00457 class H323TransportAddress;
00458
00459 class H235Authenticators;
00460
00461 class H245NegMasterSlaveDetermination;
00462 class H245NegTerminalCapabilitySet;
00463 class H245NegLogicalChannels;
00464 class H245NegRequestMode;
00465 class H245NegRoundTripDelay;
00466
00467 class H450xDispatcher;
00468 class H4502Handler;
00469 class H4504Handler;
00470 class H4506Handler;
00471 class H45011Handler;
00472
00473 class OpalCall;
00474
00475
00477
00484 class H323Connection : public OpalConnection
00485 {
00486 PCLASSINFO(H323Connection, OpalConnection);
00487
00488 public:
00491 enum Options {
00492 FastStartOptionDisable = 0x0001,
00493 FastStartOptionEnable = 0x0002,
00494 FastStartOptionMask = 0x0003,
00495
00496 H245TunnelingOptionDisable = 0x0004,
00497 H245TunnelingOptionEnable = 0x0008,
00498 H245TunnelingOptionMask = 0x000c,
00499
00500 H245inSetupOptionDisable = 0x0010,
00501 H245inSetupOptionEnable = 0x0020,
00502 H245inSetupOptionMask = 0x0030,
00503
00504 DetectInBandDTMFOptionDisable= 0x0040,
00505 DetectInBandDTMFOptionEnable = 0x0080,
00506 DetectInBandDTMFOptionMask = 0x00c0,
00507 };
00508
00511 H323Connection(
00512 OpalCall & call,
00513 H323EndPoint & endpoint,
00514 const PString & token,
00515 const PString & alias,
00516 const H323TransportAddress & address,
00517 unsigned options = 0
00518 );
00519
00522 ~H323Connection();
00524
00533 virtual BOOL SetUpConnection();
00534
00544 virtual BOOL SetAlerting(
00545 const PString & calleeName,
00546 BOOL withMedia
00547 );
00548
00553 virtual BOOL SetConnected();
00554
00561 virtual void OnSendARQ(
00562 H225_AdmissionRequest & arq
00563 );
00564
00568 virtual void OnEstablished();
00569
00587 virtual void OnReleased();
00588
00593 virtual PString GetDestinationAddress();
00594
00602 virtual OpalMediaFormatList GetMediaFormats() const;
00603
00606 virtual BOOL OpenSourceMediaStream(
00607 const OpalMediaFormatList & mediaFormats,
00608 unsigned sessionID
00609 );
00610
00625 virtual OpalMediaStream * CreateMediaStream(
00626 const OpalMediaFormat & mediaFormat,
00627 unsigned sessionID,
00628 BOOL isSource
00629 );
00630
00635 virtual BOOL IsMediaBypassPossible(
00636 unsigned sessionID
00637 ) const;
00638
00643 virtual BOOL GetMediaInformation(
00644 unsigned sessionID,
00645 MediaInformation & info
00646 ) const;
00648
00654 virtual void OnCleared();
00655
00661 BOOL IsEstablished() const { return connectionState == EstablishedConnection; }
00662
00671 virtual void CleanUpOnCallEnd();
00673
00674
00679 void AttachSignalChannel(
00680 const PString & token,
00681 H323Transport * channel,
00682 BOOL answeringCall
00683 );
00684
00687 BOOL WriteSignalPDU(
00688 H323SignalPDU & pdu
00689 );
00690
00694 virtual void HandleSignallingChannel();
00695
00699 virtual BOOL HandleSignalPDU(
00700 H323SignalPDU & pdu
00701 );
00702
00706 virtual void HandleTunnelPDU(
00707 H323SignalPDU * txPDU
00708 );
00709
00717 virtual BOOL OnReceivedSignalSetup(
00718 const H323SignalPDU & pdu
00719 );
00720
00727 virtual BOOL OnReceivedSignalSetupAck(
00728 const H323SignalPDU & pdu
00729 );
00730
00737 virtual BOOL OnReceivedSignalInformation(
00738 const H323SignalPDU & pdu
00739 );
00740
00749 virtual BOOL OnReceivedCallProceeding(
00750 const H323SignalPDU & pdu
00751 );
00752
00761 virtual BOOL OnReceivedProgress(
00762 const H323SignalPDU & pdu
00763 );
00764
00771 virtual BOOL OnReceivedAlerting(
00772 const H323SignalPDU & pdu
00773 );
00774
00783 virtual BOOL OnReceivedSignalConnect(
00784 const H323SignalPDU & pdu
00785 );
00786
00795 virtual BOOL OnReceivedFacility(
00796 const H323SignalPDU & pdu
00797 );
00798
00805 virtual BOOL OnReceivedSignalNotify(
00806 const H323SignalPDU & pdu
00807 );
00808
00815 virtual BOOL OnReceivedSignalStatus(
00816 const H323SignalPDU & pdu
00817 );
00818
00825 virtual BOOL OnReceivedStatusEnquiry(
00826 const H323SignalPDU & pdu
00827 );
00828
00833 virtual void OnReceivedReleaseComplete(
00834 const H323SignalPDU & pdu
00835 );
00836
00843 virtual BOOL OnUnknownSignalPDU(
00844 const H323SignalPDU & pdu
00845 );
00846
00858 virtual BOOL OnIncomingCall(
00859 const H323SignalPDU & setupPDU,
00860 H323SignalPDU & alertingPDU
00861 );
00862
00872 virtual BOOL ForwardCall(
00873 const PString & forwardParty
00874 );
00875
00880 void TransferCall(
00881 const PString & remoteParty,
00882 const PString & callIdentity = PString::Empty()
00884 );
00885
00890 void ConsultationTransfer(
00891 const PString & primaryCallToken
00892 );
00893
00900 virtual void HandleConsultationTransfer(
00901 const PString & callIdentity,
00903 H323Connection & incoming
00904 );
00905
00908 BOOL IsTransferringCall() const;
00909
00912 BOOL IsTransferredCall() const;
00913
00918 virtual void HandleTransferCall(
00919 const PString & token,
00920 const PString & identity
00921 );
00922
00927 int GetCallTransferInvokeId();
00928
00936 virtual void HandleCallTransferFailure(
00937 const int returnError
00938 );
00939
00944 void SetAssociatedCallToken(
00945 const PString & token
00946 );
00947
00952 virtual void OnConsultationTransferSuccess(
00953 H323Connection & secondaryCall
00954 );
00955
00959 virtual void TransferConnection(
00960 const PString & remoteParty,
00961 const PString & callIdentity = PString::Empty()
00962 );
00963
00967 virtual void HoldConnection();
00968
00973 virtual void RetrieveConnection();
00974
00978 virtual BOOL IsConnectionOnHold();
00979
00984 void HoldCall(
00985 BOOL localHold
00986 );
00987
00993 void RetrieveCall();
00994
01001 void SetHoldMedia(
01002 PChannel * audioChannel
01003 );
01004
01007 BOOL IsMediaOnHold() const;
01008
01011 BOOL IsLocalHold() const;
01012
01015 BOOL IsRemoteHold() const;
01016
01019 BOOL IsCallOnHold() const;
01020
01025 virtual void IntrudeCall(
01026 unsigned capabilityLevel
01027 );
01028
01033 virtual void HandleIntrudeCall(
01034 const PString & token,
01035 const PString & identity
01036 );
01037
01043 void SetCallIntrusion() { isCallIntrusion = TRUE; }
01044
01045 BOOL IsCallIntrusion() { return isCallIntrusion; }
01046
01049 unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; }
01050
01054 virtual BOOL GetRemoteCallIntrusionProtectionLevel(
01055 const PString & callToken,
01056 unsigned callIntrusionProtectionLevel
01057 );
01058
01059 virtual void SetIntrusionImpending();
01060
01061 virtual void SetForcedReleaseAccepted();
01062
01063 virtual void SetIntrusionNotAuthorized();
01064
01071 void SendCallWaitingIndication(
01072 const unsigned nbOfAddWaitingCalls = 0
01073 );
01074
01101 virtual AnswerCallResponse OnAnswerCall(
01102 const PString & callerName,
01103 const H323SignalPDU & setupPDU,
01104 H323SignalPDU & connectPDU
01105 );
01106 virtual AnswerCallResponse OnAnswerCall(
01107 const PString & callerName
01108 );
01109
01120 void AnsweringCall(
01121 AnswerCallResponse response
01122 );
01123
01134 virtual CallEndReason SendSignalSetup(
01135 const PString & alias,
01136 const H323TransportAddress & address
01137 );
01138
01150 virtual BOOL OnSendSignalSetup(
01151 H323SignalPDU & setupPDU
01152 );
01153
01162 virtual BOOL OnSendCallProceeding(
01163 H323SignalPDU & callProceedingPDU
01164 );
01165
01177 virtual BOOL OnSendReleaseComplete(
01178 H323SignalPDU & releaseCompletePDU
01179 );
01180
01191 virtual BOOL OnAlerting(
01192 const H323SignalPDU & alertingPDU,
01193 const PString & user
01194 );
01195
01210 virtual BOOL OnInsufficientDigits();
01211
01224 virtual void SendMoreDigits(
01225 const PString & digits
01226 );
01227
01237 virtual BOOL OnOutgoingCall(
01238 const H323SignalPDU & connectPDU
01239 );
01240
01252 virtual BOOL SendFastStartAcknowledge(
01253 H225_ArrayOf_PASN_OctetString & array
01254 );
01255
01267 virtual BOOL HandleFastStartAcknowledge(
01268 const H225_ArrayOf_PASN_OctetString & array
01269 );
01271
01285 virtual BOOL CreateOutgoingControlChannel(
01286 const H225_TransportAddress & h245Address
01287 );
01288
01301 virtual BOOL CreateIncomingControlChannel(
01302 H225_TransportAddress & h245Address
01303 );
01304
01309 BOOL WriteControlPDU(
01310 const H323ControlPDU & pdu
01311 );
01312
01315 BOOL StartControlNegotiations();
01316
01319 virtual void HandleControlChannel();
01320
01327 virtual BOOL HandleControlData(
01328 PPER_Stream & strm
01329 );
01330
01337 virtual BOOL HandleControlPDU(
01338 const H323ControlPDU & pdu
01339 );
01340
01350 virtual BOOL OnUnknownControlPDU(
01351 const H323ControlPDU & pdu
01352 );
01353
01357 virtual BOOL OnH245Request(
01358 const H323ControlPDU & pdu
01359 );
01360
01364 virtual BOOL OnH245Response(
01365 const H323ControlPDU & pdu
01366 );
01367
01371 virtual BOOL OnH245Command(
01372 const H323ControlPDU & pdu
01373 );
01374
01378 virtual BOOL OnH245Indication(
01379 const H323ControlPDU & pdu
01380 );
01381
01384 virtual BOOL OnH245_SendTerminalCapabilitySet(
01385 const H245_SendTerminalCapabilitySet & pdu
01386 );
01387
01392 virtual BOOL OnH245_FlowControlCommand(
01393 const H245_FlowControlCommand & pdu
01394 );
01395
01400 virtual BOOL OnH245_MiscellaneousCommand(
01401 const H245_MiscellaneousCommand & pdu
01402 );
01403
01408 virtual BOOL OnH245_MiscellaneousIndication(
01409 const H245_MiscellaneousIndication & pdu
01410 );
01411
01416 virtual BOOL OnH245_JitterIndication(
01417 const H245_JitterIndication & pdu
01418 );
01419
01422 enum ControlProtocolErrors {
01423 e_MasterSlaveDetermination,
01424 e_CapabilityExchange,
01425 e_LogicalChannel,
01426 e_ModeRequest,
01427 e_RoundTripDelay
01428 };
01429
01441 virtual BOOL OnControlProtocolError(
01442 ControlProtocolErrors errorSource,
01443 const void * errorData = NULL
01444 );
01445
01453 virtual void OnSendCapabilitySet(
01454 H245_TerminalCapabilitySet & pdu
01455 );
01456
01468 virtual BOOL OnReceivedCapabilitySet(
01469 const H323Capabilities & remoteCaps,
01470 const H245_MultiplexCapability * muxCap,
01471 H245_TerminalCapabilitySetReject & reject
01472 );
01473
01476 virtual void SendCapabilitySet(
01477 BOOL empty
01478 );
01479
01488 virtual void OnSetLocalCapabilities();
01489
01492 BOOL IsH245Master() const;
01493
01496 void StartRoundTripDelay();
01497
01500 PTimeInterval GetRoundTripDelay() const;
01502
01542 virtual void OnSelectLogicalChannels();
01543
01546 virtual void SelectDefaultLogicalChannel(
01547 unsigned sessionID
01548 );
01549
01553 virtual void SelectFastStartChannels(
01554 unsigned sessionID,
01555 BOOL transmitter,
01556 BOOL receiver
01557 );
01558
01562 virtual void StartFastStartChannel(
01563 unsigned sessionID,
01564 H323Channel::Directions direction
01565 );
01566
01581 virtual BOOL OpenLogicalChannel(
01582 const H323Capability & capability,
01583 unsigned sessionID,
01584 H323Channel::Directions dir
01585 );
01586
01596 virtual BOOL OnOpenLogicalChannel(
01597 const H245_OpenLogicalChannel & openPDU,
01598 H245_OpenLogicalChannelAck & ackPDU,
01599 unsigned & errorCode
01600 );
01601
01609 virtual BOOL OnConflictingLogicalChannel(
01610 H323Channel & channel
01611 );
01612
01617 virtual H323Channel * CreateLogicalChannel(
01618 const H245_OpenLogicalChannel & open,
01619 BOOL startingFast,
01620 unsigned & errorCode
01621 );
01622
01657 virtual H323Channel * CreateRealTimeLogicalChannel(
01658 const H323Capability & capability,
01659 H323Channel::Directions dir,
01660 unsigned sessionID,
01661 const H245_H2250LogicalChannelParameters * param,
01663 RTP_QOS * rtpqos = NULL
01664 );
01665
01676 virtual BOOL OnCreateLogicalChannel(
01677 const H323Capability & capability,
01678 H323Channel::Directions dir,
01679 unsigned & errorCode
01680 );
01681
01686 virtual BOOL OnStartLogicalChannel(
01687 H323Channel & channel
01688 );
01689
01692 virtual void CloseLogicalChannel(
01693 unsigned number,
01694 BOOL fromRemote
01695 );
01696
01699 virtual void CloseLogicalChannelNumber(
01700 const H323ChannelNumber & number
01701 );
01702
01705 virtual void CloseAllLogicalChannels(
01706 BOOL fromRemote
01707 );
01708
01714 virtual void OnClosedLogicalChannel(
01715 const H323Channel & channel
01716 );
01717
01726 virtual BOOL OnClosingLogicalChannel(
01727 H323Channel & channel
01728 );
01729
01738 virtual void OnLogicalChannelFlowControl(
01739 H323Channel * channel,
01740 long bitRateRestriction
01741 );
01742
01751 virtual void OnLogicalChannelJitter(
01752 H323Channel * channel,
01753 DWORD jitter,
01754 int skippedFrameCount,
01755 int additionalBuffer
01756 );
01757
01761 H323Channel * GetLogicalChannel(
01762 unsigned number,
01763 BOOL fromRemote
01764 ) const;
01765
01771 H323Channel * FindChannel(
01772 unsigned sessionId,
01773 BOOL fromRemote
01774 ) const;
01776
01783 virtual BOOL SetBandwidthAvailable(
01784 unsigned newBandwidth,
01785 BOOL force = FALSE
01786 );
01787
01792 virtual unsigned GetBandwidthUsed() const;
01794
01797 enum SendUserInputModes {
01798 SendUserInputAsQ931,
01799 SendUserInputAsString,
01800 SendUserInputAsTone,
01801 SendUserInputAsInlineRFC2833,
01802 SendUserInputAsSeparateRFC2833,
01803 NumSendUserInputModes
01804 };
01805 #if PTRACING
01806 friend ostream & operator<<(ostream & o, SendUserInputModes m);
01807 #endif
01808
01811 void SetSendUserInputMode(SendUserInputModes mode);
01812
01815 SendUserInputModes GetSendUserInputMode() const { return sendUserInputMode; }
01816
01822 SendUserInputModes GetRealSendUserInputMode() const;
01823
01837 virtual BOOL SendUserInputString(
01838 const PString & value
01839 );
01840
01865 virtual BOOL SendUserInputTone(
01866 char tone,
01867 unsigned duration = 0
01868 );
01869
01876 virtual BOOL SendUserInputIndicationQ931(
01877 const PString & value
01878 );
01879
01886 virtual BOOL SendUserInputIndicationString(
01887 const PString & value
01888 );
01889
01894 virtual BOOL SendUserInputIndicationTone(
01895 char tone,
01896 unsigned duration = 0,
01897 unsigned logicalChannel = 0,
01898 unsigned rtpTimestamp = 0
01899 );
01900
01909 virtual BOOL SendUserInputIndication(
01910 const H245_UserInputIndication & pdu
01911 );
01912
01917 virtual void OnUserInputIndication(
01918 const H245_UserInputIndication & pdu
01919 );
01921
01927 virtual RTP_Session * GetSession(
01928 unsigned sessionID
01929 ) const;
01930
01934 virtual H323_RTP_Session * GetSessionCallbacks(
01935 unsigned sessionID
01936 ) const;
01937
01947 virtual RTP_Session * UseSession(
01948 const OpalTransport & transport,
01949 unsigned sessionID,
01950 RTP_QOS * rtpqos = NULL
01951 );
01952
01956 virtual void ReleaseSession(
01957 unsigned sessionID
01958 );
01959
01967 virtual void OnRTPStatistics(
01968 const RTP_Session & session
01969 ) const;
01970
01974 virtual PString GetSessionCodecNames(
01975 unsigned sessionID
01976 ) const;
01977
01980 BOOL IsBehindNAT() const
01981 { return remoteIsNAT; }
01983
02001 virtual BOOL RequestModeChange(
02002 const PString & newModes
02003 );
02004
02012 virtual BOOL RequestModeChange(
02013 const H245_ArrayOf_ModeDescription & newModes
02014 );
02015
02018 virtual BOOL OnRequestModeChange(
02019 const H245_RequestMode & pdu,
02020 H245_RequestModeAck & ack,
02021 H245_RequestModeReject & reject,
02022 PINDEX & selectedMode
02023 );
02024
02031 virtual void OnModeChanged(
02032 const H245_ModeDescription & newMode
02033 );
02034
02039 virtual void OnAcceptModeChange(
02040 const H245_RequestModeAck & pdu
02041 );
02042
02047 virtual void OnRefusedModeChange(
02048 const H245_RequestModeReject * pdu
02049 );
02051
02056 virtual BOOL RequestModeChangeT38(
02057 const char * capabilityNames = "T.38\nT38FaxUDP"
02058 );
02059
02069 virtual BOOL GetAdmissionRequestAuthentication(
02070 const H225_AdmissionRequest & arq,
02071 H235Authenticators & authenticators
02072 );
02074
02079 H323EndPoint & GetEndPoint() const { return endpoint; }
02080
02083 BOOL HadAnsweredCall() const { return !originating; }
02084
02087 BOOL IsGatekeeperRouted() const { return gatekeeperRouted; }
02088
02092 unsigned GetQ931Cause() const { return q931Cause; }
02093
02097 void SetQ931Cause(unsigned v) { q931Cause = v; }
02098
02103 unsigned GetDistinctiveRing() const { return distinctiveRing; }
02104
02111 void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
02112
02116 const PString & GetCallToken() const { return GetToken(); }
02117
02120 unsigned GetCallReference() const { return callReference; }
02121
02125 inline const OpalGloballyUniqueID & GetCallIdentifier() const
02126 { return GetIdentifier(); }
02127
02130 const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; }
02131
02134 void SetLocalPartyName(const PString & name);
02135
02138 const PStringList & GetLocalAliasNames() const { return localAliasNames; }
02139
02142 void SetRemotePartyInfo(
02143 const H323SignalPDU & pdu
02144 );
02145
02148 void SetRemoteApplication(
02149 const H225_EndpointType & pdu
02150 );
02151
02156 const PString GetRemotePartyCallbackURL() const;
02157
02160 const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; }
02161
02164 const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; }
02165
02168 unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; }
02169
02172 const H323Transport * GetSignallingChannel() const { return signallingChannel; }
02173
02176 unsigned GetSignallingVersion() const { return h225version; }
02177
02180 const H323Transport & GetControlChannel() const;
02181
02184 OpalTransport & GetTransport() const;
02185
02188 unsigned GetControlVersion() const { return h245version; }
02189
02192 unsigned GetUUIEsRequested() const { return uuiesRequested; }
02193
02196 void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
02197
02200 const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
02201
02204 void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
02205
02208 const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
02209
02212 void SetDestExtraCallInfo(
02213 const PString & info
02214 ) { destExtraCallInfo = info; }
02215
02218 void SetRemotCallWaiting(const unsigned value) { remoteCallWaiting = value; }
02219
02225 const int GetRemoteCallWaiting() const { return remoteCallWaiting; }
02226
02231 void SetEnforcedDurationLimit(
02232 unsigned seconds
02233 );
02235
02236
02237 protected:
02243 virtual void InternalEstablishedConnectionCheck();
02244 BOOL InternalEndSessionCheck(PPER_Stream & strm);
02245 void SetRemoteVersions(const H225_ProtocolIdentifier & id);
02246 void MonitorCallStatus();
02247 PDECLARE_NOTIFIER(PThread, H323Connection, StartOutgoing);
02248 PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
02249 PDECLARE_NOTIFIER(PThread, H323Connection, NewIncomingControlChannel);
02250
02251
02252 H323EndPoint & endpoint;
02253
02254 int remoteCallWaiting;
02255 BOOL gatekeeperRouted;
02256 unsigned distinctiveRing;
02257 unsigned callReference;
02258 OpalGloballyUniqueID conferenceIdentifier;
02259
02260 PString localDestinationAddress;
02261 PStringList localAliasNames;
02262 H323Capabilities localCapabilities;
02263 PString destExtraCallInfo;
02264 H323Capabilities remoteCapabilities;
02265 unsigned remoteMaxAudioDelayJitter;
02266 PTimer roundTripDelayTimer;
02267 WORD maxAudioDelayJitter;
02268 unsigned uuiesRequested;
02269 PString gkAccessTokenOID;
02270 PBYTEArray gkAccessTokenData;
02271 BOOL addAccessTokenToSetup;
02272 SendUserInputModes sendUserInputMode;
02273 BOOL alertDone;
02274
02275 H323Transport * signallingChannel;
02276 H323Transport * controlChannel;
02277 OpalListener * controlListener;
02278 BOOL h245Tunneling;
02279 H323SignalPDU * h245TunnelRxPDU;
02280 H323SignalPDU * h245TunnelTxPDU;
02281 H323SignalPDU * alertingPDU;
02282 H323SignalPDU * connectPDU;
02283
02284 enum ConnectionStates {
02285 NoConnectionActive,
02286 AwaitingGatekeeperAdmission,
02287 AwaitingTransportConnect,
02288 AwaitingSignalConnect,
02289 AwaitingLocalAnswer,
02290 HasExecutedSignalConnect,
02291 EstablishedConnection,
02292 ShuttingDownConnection,
02293 NumConnectionStates
02294 } connectionState;
02295
02296 unsigned q931Cause;
02297
02298 unsigned h225version;
02299 unsigned h245version;
02300 BOOL h245versionSet;
02301 BOOL doH245inSETUP;
02302 BOOL lastPDUWasH245inSETUP;
02303
02304 BOOL mustSendDRQ;
02305 BOOL mediaWaitForConnect;
02306 BOOL transmitterSidePaused;
02307 BOOL earlyStart;
02308 BOOL startT120;
02309 PString t38ModeChangeCapabilities;
02310 PSyncPoint digitsWaitFlag;
02311 BOOL endSessionNeeded;
02312 PSyncPoint endSessionReceived;
02313 PTimer enforcedDurationLimit;
02314
02315
02316 PChannel * holdMediaChannel;
02317 BOOL isConsultationTransfer;
02318
02320 BOOL isCallIntrusion;
02321 unsigned callIntrusionProtectionLevel;
02322
02323 enum FastStartStates {
02324 FastStartDisabled,
02325 FastStartInitiate,
02326 FastStartResponse,
02327 FastStartAcknowledged,
02328 NumFastStartStates
02329 };
02330 FastStartStates fastStartState;
02331 H323LogicalChannelList fastStartChannels;
02332 OpalMediaStream * transmitterMediaStream;
02333
02334 #if PTRACING
02335 static const char * const ConnectionStatesNames[NumConnectionStates];
02336 friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << ConnectionStatesNames[s]; }
02337 static const char * const FastStartStateNames[NumFastStartStates];
02338 friend ostream & operator<<(ostream & o, FastStartStates s) { return o << FastStartStateNames[s]; }
02339 #endif
02340
02341
02342
02343
02344 H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure;
02345 H245NegTerminalCapabilitySet * capabilityExchangeProcedure;
02346 H245NegLogicalChannels * logicalChannels;
02347 H245NegRequestMode * requestModeProcedure;
02348 H245NegRoundTripDelay * roundTripDelayProcedure;
02349
02350 H450xDispatcher * h450dispatcher;
02351 H4502Handler * h4502handler;
02352 H4504Handler * h4504handler;
02353 H4506Handler * h4506handler;
02354 H45011Handler * h45011handler;
02355
02356
02357 BOOL remoteIsNAT;
02358
02359 private:
02360 PChannel * SwapHoldMediaChannels(PChannel * newChannel);
02361 };
02362
02363
02364 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
02365
02366
02367 #endif // __OPAL_H323CON_H
02368
02369