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
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495 #ifndef __OPAL_H323CON_H
00496 #define __OPAL_H323CON_H
00497
00498 #ifdef P_USE_PRAGMA
00499 #pragma interface
00500 #endif
00501
00502
00503 #include <opal/connection.h>
00504 #include <opal/guid.h>
00505 #include <opal/buildopts.h>
00506 #include <h323/h323caps.h>
00507 #include <ptclib/dtmf.h>
00508
00509
00510
00511
00512
00513
00514
00515 class PPER_Stream;
00516 class PASN_OctetString;
00517
00518 class H225_EndpointType;
00519 class H225_TransportAddress;
00520 class H225_ArrayOf_PASN_OctetString;
00521 class H225_ProtocolIdentifier;
00522 class H225_AdmissionRequest;
00523 class H225_FeatureSet;
00524
00525 class H245_TerminalCapabilitySet;
00526 class H245_TerminalCapabilitySetReject;
00527 class H245_OpenLogicalChannel;
00528 class H245_OpenLogicalChannelAck;
00529 class H245_TransportAddress;
00530 class H245_UserInputIndication;
00531 class H245_RequestMode;
00532 class H245_RequestModeAck;
00533 class H245_RequestModeReject;
00534 class H245_ModeDescription;
00535 class H245_ArrayOf_ModeDescription;
00536 class H245_SendTerminalCapabilitySet;
00537 class H245_MultiplexCapability;
00538 class H245_FlowControlCommand;
00539 class H245_MiscellaneousCommand;
00540 class H245_MiscellaneousIndication;
00541 class H245_JitterIndication;
00542
00543 class H323SignalPDU;
00544 class H323ControlPDU;
00545 class H323EndPoint;
00546 class H323TransportAddress;
00547
00548 class H235Authenticators;
00549
00550 class H245NegMasterSlaveDetermination;
00551 class H245NegTerminalCapabilitySet;
00552 class H245NegLogicalChannels;
00553 class H245NegRequestMode;
00554 class H245NegRoundTripDelay;
00555
00556 class H450xDispatcher;
00557 class H4502Handler;
00558 class H4504Handler;
00559 class H4506Handler;
00560 class H4507Handler;
00561 class H45011Handler;
00562
00563 class OpalCall;
00564
00565 #ifdef H323_H460
00566 class H460_FeatureSet;
00567 #endif
00568
00569
00571
00578 class H323Connection : public OpalConnection
00579 {
00580 PCLASSINFO(H323Connection, OpalConnection);
00581
00582 public:
00587 H323Connection(
00588 OpalCall & call,
00589 H323EndPoint & endpoint,
00590 const PString & token,
00591 const PString & alias,
00592 const H323TransportAddress & address,
00593 unsigned options = 0,
00594 OpalConnection::StringOptions * stringOptions = NULL
00595 );
00596
00599 ~H323Connection();
00601
00610 virtual BOOL SetUpConnection();
00611
00621 virtual BOOL SetAlerting(
00622 const PString & calleeName,
00623 BOOL withMedia
00624 );
00625
00630 virtual BOOL SetConnected();
00631
00638 virtual void OnSendARQ(
00639 H225_AdmissionRequest & arq
00640 );
00641
00642
00647 virtual BOOL SetProgressed();
00648
00652 virtual void OnEstablished();
00653
00671 virtual void OnReleased();
00672
00677 virtual PString GetDestinationAddress();
00678
00686 virtual OpalMediaFormatList GetMediaFormats() const;
00687
00690 virtual BOOL OpenSourceMediaStream(
00691 const OpalMediaFormatList & mediaFormats,
00692 unsigned sessionID
00693 );
00694
00709 virtual OpalMediaStream * CreateMediaStream(
00710 const OpalMediaFormat & mediaFormat,
00711 unsigned sessionID,
00712 BOOL isSource
00713 );
00714
00717 void OnPatchMediaStream(BOOL isSource, OpalMediaPatch & patch);
00718
00723 virtual BOOL IsMediaBypassPossible(
00724 unsigned sessionID
00725 ) const;
00726
00731 virtual BOOL GetMediaInformation(
00732 unsigned sessionID,
00733 MediaInformation & info
00734 ) const;
00736
00742 virtual void OnCleared();
00743
00749 BOOL IsEstablished() const { return connectionState == EstablishedConnection; }
00750
00759 virtual void CleanUpOnCallEnd();
00761
00762
00767 void AttachSignalChannel(
00768 const PString & token,
00769 H323Transport * channel,
00770 BOOL answeringCall
00771 );
00772
00775 BOOL WriteSignalPDU(
00776 H323SignalPDU & pdu
00777 );
00778
00782 virtual void HandleSignallingChannel();
00783
00787 virtual BOOL HandleSignalPDU(
00788 H323SignalPDU & pdu
00789 );
00790
00794 virtual void HandleTunnelPDU(
00795 H323SignalPDU * txPDU
00796 );
00797
00805 virtual BOOL OnReceivedSignalSetup(
00806 const H323SignalPDU & pdu
00807 );
00808
00815 virtual BOOL OnReceivedSignalSetupAck(
00816 const H323SignalPDU & pdu
00817 );
00818
00825 virtual BOOL OnReceivedSignalInformation(
00826 const H323SignalPDU & pdu
00827 );
00828
00837 virtual BOOL OnReceivedCallProceeding(
00838 const H323SignalPDU & pdu
00839 );
00840
00849 virtual BOOL OnReceivedProgress(
00850 const H323SignalPDU & pdu
00851 );
00852
00859 virtual BOOL OnReceivedAlerting(
00860 const H323SignalPDU & pdu
00861 );
00862
00871 virtual BOOL OnReceivedSignalConnect(
00872 const H323SignalPDU & pdu
00873 );
00874
00883 virtual BOOL OnReceivedFacility(
00884 const H323SignalPDU & pdu
00885 );
00886
00893 virtual BOOL OnReceivedSignalNotify(
00894 const H323SignalPDU & pdu
00895 );
00896
00903 virtual BOOL OnReceivedSignalStatus(
00904 const H323SignalPDU & pdu
00905 );
00906
00913 virtual BOOL OnReceivedStatusEnquiry(
00914 const H323SignalPDU & pdu
00915 );
00916
00921 virtual void OnReceivedReleaseComplete(
00922 const H323SignalPDU & pdu
00923 );
00924
00931 virtual BOOL OnUnknownSignalPDU(
00932 const H323SignalPDU & pdu
00933 );
00934
00946 virtual BOOL OnIncomingCall(
00947 const H323SignalPDU & setupPDU,
00948 H323SignalPDU & alertingPDU
00949 );
00950
00960 virtual BOOL ForwardCall(
00961 const PString & forwardParty
00962 );
00963
00964 #if OPAL_H450
00965
00970 void TransferCall(
00971 const PString & remoteParty,
00972 const PString & callIdentity = PString::Empty()
00974 );
00975
00980 void ConsultationTransfer(
00981 const PString & primaryCallToken
00982 );
00983
00990 virtual void HandleConsultationTransfer(
00991 const PString & callIdentity,
00993 H323Connection & incoming
00994 );
00995
00998 BOOL IsTransferringCall() const;
00999
01002 BOOL IsTransferredCall() const;
01003
01008 virtual void HandleTransferCall(
01009 const PString & token,
01010 const PString & identity
01011 );
01012
01017 int GetCallTransferInvokeId();
01018
01026 virtual void HandleCallTransferFailure(
01027 const int returnError
01028 );
01029
01034 void SetAssociatedCallToken(
01035 const PString & token
01036 );
01037
01042 virtual void OnConsultationTransferSuccess(
01043 H323Connection & secondaryCall
01044 );
01045
01049 virtual void TransferConnection(
01050 const PString & remoteParty,
01051 const PString & callIdentity = PString::Empty()
01052 );
01053
01057 virtual void HoldConnection();
01058
01063 virtual void RetrieveConnection();
01064
01068 virtual BOOL IsConnectionOnHold();
01069
01074 void HoldCall(
01075 BOOL localHold
01076 );
01077
01083 void RetrieveCall();
01084
01091 void SetHoldMedia(
01092 PChannel * audioChannel
01093 );
01094
01097 BOOL IsMediaOnHold() const;
01098
01101 BOOL IsLocalHold() const;
01102
01105 BOOL IsRemoteHold() const;
01106
01109 BOOL IsCallOnHold() const;
01110
01115 virtual void IntrudeCall(
01116 unsigned capabilityLevel
01117 );
01118
01123 virtual void HandleIntrudeCall(
01124 const PString & token,
01125 const PString & identity
01126 );
01127
01133 void SetCallIntrusion() { isCallIntrusion = TRUE; }
01134
01135 BOOL IsCallIntrusion() { return isCallIntrusion; }
01136
01139 unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; }
01140
01144 virtual BOOL GetRemoteCallIntrusionProtectionLevel(
01145 const PString & callToken,
01146 unsigned callIntrusionProtectionLevel
01147 );
01148
01149 virtual void SetIntrusionImpending();
01150
01151 virtual void SetForcedReleaseAccepted();
01152
01153 virtual void SetIntrusionNotAuthorized();
01154
01161 void SendCallWaitingIndication(
01162 const unsigned nbOfAddWaitingCalls = 0
01163 );
01164
01165 #endif
01166
01193 virtual AnswerCallResponse OnAnswerCall(
01194 const PString & callerName,
01195 const H323SignalPDU & setupPDU,
01196 H323SignalPDU & connectPDU,
01197 H323SignalPDU & progressPDU
01198 );
01199
01200 virtual AnswerCallResponse OnAnswerCall(
01201 const PString & callerName
01202 );
01203
01214 void AnsweringCall(
01215 AnswerCallResponse response
01216 );
01217
01228 virtual CallEndReason SendSignalSetup(
01229 const PString & alias,
01230 const H323TransportAddress & address
01231 );
01232
01244 virtual BOOL OnSendSignalSetup(
01245 H323SignalPDU & setupPDU
01246 );
01247
01256 virtual BOOL OnSendCallProceeding(
01257 H323SignalPDU & callProceedingPDU
01258 );
01259
01271 virtual BOOL OnSendReleaseComplete(
01272 H323SignalPDU & releaseCompletePDU
01273 );
01274
01285 virtual BOOL OnAlerting(
01286 const H323SignalPDU & alertingPDU,
01287 const PString & user
01288 );
01289
01304 virtual BOOL OnInsufficientDigits();
01305
01318 virtual void SendMoreDigits(
01319 const PString & digits
01320 );
01321
01331 virtual BOOL OnOutgoingCall(
01332 const H323SignalPDU & connectPDU
01333 );
01334
01346 virtual BOOL SendFastStartAcknowledge(
01347 H225_ArrayOf_PASN_OctetString & array
01348 );
01349
01361 virtual BOOL HandleFastStartAcknowledge(
01362 const H225_ArrayOf_PASN_OctetString & array
01363 );
01365
01379 virtual BOOL CreateOutgoingControlChannel(
01380 const H225_TransportAddress & h245Address
01381 );
01382
01395 virtual BOOL CreateIncomingControlChannel(
01396 H225_TransportAddress & h245Address
01397 );
01398
01403 virtual BOOL WriteControlPDU(
01404 const H323ControlPDU & pdu
01405 );
01406
01409 virtual BOOL StartControlNegotiations();
01410
01413 virtual void HandleControlChannel();
01414
01421 virtual BOOL HandleControlData(
01422 PPER_Stream & strm
01423 );
01424
01431 virtual BOOL HandleControlPDU(
01432 const H323ControlPDU & pdu
01433 );
01434
01444 virtual BOOL OnUnknownControlPDU(
01445 const H323ControlPDU & pdu
01446 );
01447
01451 virtual BOOL OnH245Request(
01452 const H323ControlPDU & pdu
01453 );
01454
01458 virtual BOOL OnH245Response(
01459 const H323ControlPDU & pdu
01460 );
01461
01465 virtual BOOL OnH245Command(
01466 const H323ControlPDU & pdu
01467 );
01468
01472 virtual BOOL OnH245Indication(
01473 const H323ControlPDU & pdu
01474 );
01475
01478 virtual BOOL OnH245_SendTerminalCapabilitySet(
01479 const H245_SendTerminalCapabilitySet & pdu
01480 );
01481
01486 virtual BOOL OnH245_FlowControlCommand(
01487 const H245_FlowControlCommand & pdu
01488 );
01489
01494 virtual BOOL OnH245_MiscellaneousCommand(
01495 const H245_MiscellaneousCommand & pdu
01496 );
01497
01502 virtual BOOL OnH245_MiscellaneousIndication(
01503 const H245_MiscellaneousIndication & pdu
01504 );
01505
01510 virtual BOOL OnH245_JitterIndication(
01511 const H245_JitterIndication & pdu
01512 );
01513
01516 enum ControlProtocolErrors {
01517 e_MasterSlaveDetermination,
01518 e_CapabilityExchange,
01519 e_LogicalChannel,
01520 e_ModeRequest,
01521 e_RoundTripDelay
01522 };
01523
01535 virtual BOOL OnControlProtocolError(
01536 ControlProtocolErrors errorSource,
01537 const void * errorData = NULL
01538 );
01539
01547 virtual void OnSendCapabilitySet(
01548 H245_TerminalCapabilitySet & pdu
01549 );
01550
01562 virtual BOOL OnReceivedCapabilitySet(
01563 const H323Capabilities & remoteCaps,
01564 const H245_MultiplexCapability * muxCap,
01565 H245_TerminalCapabilitySetReject & reject
01566 );
01567
01570 virtual void SendCapabilitySet(
01571 BOOL empty
01572 );
01573
01582 virtual void OnSetLocalCapabilities();
01583
01586 BOOL IsH245Master() const;
01587
01590 void StartRoundTripDelay();
01591
01594 PTimeInterval GetRoundTripDelay() const;
01596
01636 virtual void OnSelectLogicalChannels();
01637
01640 virtual void SelectDefaultLogicalChannel(
01641 unsigned sessionID
01642 );
01643
01647 virtual void SelectFastStartChannels(
01648 unsigned sessionID,
01649 BOOL transmitter,
01650 BOOL receiver
01651 );
01652
01656 virtual void StartFastStartChannel(
01657 unsigned sessionID,
01658 H323Channel::Directions direction
01659 );
01660
01675 virtual BOOL OpenLogicalChannel(
01676 const H323Capability & capability,
01677 unsigned sessionID,
01678 H323Channel::Directions dir
01679 );
01680
01690 virtual BOOL OnOpenLogicalChannel(
01691 const H245_OpenLogicalChannel & openPDU,
01692 H245_OpenLogicalChannelAck & ackPDU,
01693 unsigned & errorCode
01694 );
01695
01703 virtual BOOL OnConflictingLogicalChannel(
01704 H323Channel & channel
01705 );
01706
01711 virtual H323Channel * CreateLogicalChannel(
01712 const H245_OpenLogicalChannel & open,
01713 BOOL startingFast,
01714 unsigned & errorCode
01715 );
01716
01751 virtual H323Channel * CreateRealTimeLogicalChannel(
01752 const H323Capability & capability,
01753 H323Channel::Directions dir,
01754 unsigned sessionID,
01755 const H245_H2250LogicalChannelParameters * param,
01757 RTP_QOS * rtpqos = NULL
01758 );
01759
01770 virtual BOOL OnCreateLogicalChannel(
01771 const H323Capability & capability,
01772 H323Channel::Directions dir,
01773 unsigned & errorCode
01774 );
01775
01780 virtual BOOL OnStartLogicalChannel(
01781 H323Channel & channel
01782 );
01783
01786 virtual void CloseLogicalChannel(
01787 unsigned number,
01788 BOOL fromRemote
01789 );
01790
01793 virtual void CloseLogicalChannelNumber(
01794 const H323ChannelNumber & number
01795 );
01796
01799 virtual void CloseAllLogicalChannels(
01800 BOOL fromRemote
01801 );
01802
01808 virtual void OnClosedLogicalChannel(
01809 const H323Channel & channel
01810 );
01811
01820 virtual BOOL OnClosingLogicalChannel(
01821 H323Channel & channel
01822 );
01823
01832 virtual void OnLogicalChannelFlowControl(
01833 H323Channel * channel,
01834 long bitRateRestriction
01835 );
01836
01845 virtual void OnLogicalChannelJitter(
01846 H323Channel * channel,
01847 DWORD jitter,
01848 int skippedFrameCount,
01849 int additionalBuffer
01850 );
01851
01855 H323Channel * GetLogicalChannel(
01856 unsigned number,
01857 BOOL fromRemote
01858 ) const;
01859
01865 H323Channel * FindChannel(
01866 unsigned sessionId,
01867 BOOL fromRemote
01868 ) const;
01870
01877 virtual BOOL SetBandwidthAvailable(
01878 unsigned newBandwidth,
01879 BOOL force = FALSE
01880 );
01881
01886 virtual unsigned GetBandwidthUsed() const;
01888
01896 virtual SendUserInputModes GetRealSendUserInputMode() const;
01897
01911 virtual BOOL SendUserInputString(
01912 const PString & value
01913 );
01914
01939 virtual BOOL SendUserInputTone(
01940 char tone,
01941 unsigned duration = 0
01942 );
01943
01950 virtual BOOL SendUserInputIndicationQ931(
01951 const PString & value
01952 );
01953
01960 virtual BOOL SendUserInputIndicationString(
01961 const PString & value
01962 );
01963
01968 virtual BOOL SendUserInputIndicationTone(
01969 char tone,
01970 unsigned duration = 0,
01971 unsigned logicalChannel = 0,
01972 unsigned rtpTimestamp = 0
01973 );
01974
01983 virtual BOOL SendUserInputIndication(
01984 const H245_UserInputIndication & pdu
01985 );
01986
01991 virtual void OnUserInputIndication(
01992 const H245_UserInputIndication & pdu
01993 );
01995
02001 virtual H323_RTP_Session * GetSessionCallbacks(
02002 unsigned sessionID
02003 ) const;
02004
02014 virtual RTP_Session * UseSession(
02015 const OpalTransport & transport,
02016 unsigned sessionID,
02017 RTP_QOS * rtpqos = NULL
02018 );
02019
02023 virtual void ReleaseSession(
02024 unsigned sessionID
02025 );
02026
02034 virtual void OnRTPStatistics(
02035 const RTP_Session & session
02036 ) const;
02037
02041 virtual PString GetSessionCodecNames(
02042 unsigned sessionID
02043 ) const;
02044
02046
02064 virtual BOOL RequestModeChange(
02065 const PString & newModes
02066 );
02067
02075 virtual BOOL RequestModeChange(
02076 const H245_ArrayOf_ModeDescription & newModes
02077 );
02078
02081 virtual BOOL OnRequestModeChange(
02082 const H245_RequestMode & pdu,
02083 H245_RequestModeAck & ack,
02084 H245_RequestModeReject & reject,
02085 PINDEX & selectedMode
02086 );
02087
02094 virtual void OnModeChanged(
02095 const H245_ModeDescription & newMode
02096 );
02097
02102 virtual void OnAcceptModeChange(
02103 const H245_RequestModeAck & pdu
02104 );
02105
02110 virtual void OnRefusedModeChange(
02111 const H245_RequestModeReject * pdu
02112 );
02114
02119 virtual BOOL RequestModeChangeT38(
02120 const char * capabilityNames = "T.38\nT38FaxUDP"
02121 );
02122
02132 virtual BOOL GetAdmissionRequestAuthentication(
02133 const H225_AdmissionRequest & arq,
02134 H235Authenticators & authenticators
02135 );
02137
02142 H323EndPoint & GetEndPoint() const { return endpoint; }
02143
02146 BOOL HadAnsweredCall() const { return !originating; }
02147
02150 BOOL IsGatekeeperRouted() const { return gatekeeperRouted; }
02151
02156 unsigned GetDistinctiveRing() const { return distinctiveRing; }
02157
02164 void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
02165
02169 const PString & GetCallToken() const { return GetToken(); }
02170
02173 unsigned GetCallReference() const { return callReference; }
02174
02178 inline const OpalGloballyUniqueID & GetCallIdentifier() const
02179 { return GetIdentifier(); }
02180
02183 const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; }
02184
02187 void SetLocalPartyName(const PString & name);
02188
02191 const PStringList & GetLocalAliasNames() const { return localAliasNames; }
02192
02195 virtual void SetRemotePartyInfo(
02196 const H323SignalPDU & pdu
02197 );
02198
02201 void SetRemoteApplication(
02202 const H225_EndpointType & pdu
02203 );
02204
02209 const PString GetRemotePartyCallbackURL() const;
02210
02213 const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; }
02214
02217 const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; }
02218
02221 unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; }
02222
02225 const H323Transport * GetSignallingChannel() const { return signallingChannel; }
02226
02229 unsigned GetSignallingVersion() const { return h225version; }
02230
02233 const H323Transport & GetControlChannel() const;
02234
02237 OpalTransport & GetTransport() const;
02238
02241 unsigned GetControlVersion() const { return h245version; }
02242
02245 unsigned GetUUIEsRequested() const { return uuiesRequested; }
02246
02249 void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
02250
02253 const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
02254
02257 void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
02258
02261 const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
02262
02265 void SetDestExtraCallInfo(
02266 const PString & info
02267 ) { destExtraCallInfo = info; }
02268
02271 void SetRemotCallWaiting(const unsigned value) { remoteCallWaiting = value; }
02272
02278 const int GetRemoteCallWaiting() const { return remoteCallWaiting; }
02279
02284 void SetEnforcedDurationLimit(
02285 unsigned seconds
02286 );
02288
02289 virtual BOOL OnSendFeatureSet(unsigned, H225_FeatureSet &) const;
02290
02291 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const;
02292
02293 #if H323_H460
02294
02296 virtual H460_FeatureSet * GetFeatureSet();
02297 #endif
02298
02299
02304 #if OPAL_H450
02305 H4507Handler& getH4507handler(){return *h4507handler;}
02306 #endif
02307
02308 virtual BOOL OnOpenIncomingMediaChannels();
02309
02310 protected:
02316 virtual void InternalEstablishedConnectionCheck();
02317 BOOL InternalEndSessionCheck(PPER_Stream & strm);
02318 void SetRemoteVersions(const H225_ProtocolIdentifier & id);
02319 void MonitorCallStatus();
02320 PDECLARE_NOTIFIER(PThread, H323Connection, StartOutgoing);
02321 PDECLARE_NOTIFIER(PThread, H323Connection, NewOutgoingControlChannel);
02322 PDECLARE_NOTIFIER(PThread, H323Connection, NewIncomingControlChannel);
02323
02324 H323EndPoint & endpoint;
02325
02326 int remoteCallWaiting;
02327 BOOL gatekeeperRouted;
02328 unsigned distinctiveRing;
02329 unsigned callReference;
02330 OpalGloballyUniqueID conferenceIdentifier;
02331
02332 PString localDestinationAddress;
02333 PStringList localAliasNames;
02334 H323Capabilities localCapabilities;
02335 PString destExtraCallInfo;
02336 H323Capabilities remoteCapabilities;
02337 unsigned remoteMaxAudioDelayJitter;
02338 PTimer roundTripDelayTimer;
02339 WORD maxAudioDelayJitter;
02340 unsigned uuiesRequested;
02341 PString gkAccessTokenOID;
02342 PBYTEArray gkAccessTokenData;
02343 BOOL addAccessTokenToSetup;
02344 BOOL alertDone;
02345
02346 H323Transport * signallingChannel;
02347 H323Transport * controlChannel;
02348 OpalListener * controlListener;
02349 BOOL h245Tunneling;
02350 H323SignalPDU * h245TunnelRxPDU;
02351 H323SignalPDU * h245TunnelTxPDU;
02352 H323SignalPDU * setupPDU;
02353 H323SignalPDU * alertingPDU;
02354 H323SignalPDU * connectPDU;
02355 H323SignalPDU * progressPDU;
02356
02357 enum ConnectionStates {
02358 NoConnectionActive,
02359 AwaitingGatekeeperAdmission,
02360 AwaitingTransportConnect,
02361 AwaitingSignalConnect,
02362 AwaitingLocalAnswer,
02363 HasExecutedSignalConnect,
02364 EstablishedConnection,
02365 ShuttingDownConnection,
02366 NumConnectionStates
02367 } connectionState;
02368
02369 unsigned h225version;
02370 unsigned h245version;
02371 BOOL h245versionSet;
02372 BOOL doH245inSETUP;
02373 BOOL lastPDUWasH245inSETUP;
02374
02375 BOOL mustSendDRQ;
02376 BOOL mediaWaitForConnect;
02377 BOOL transmitterSidePaused;
02378 BOOL earlyStart;
02379 #if OPAL_T120
02380 BOOL startT120;
02381 #endif
02382 #if OPAL_H224
02383 BOOL startH224;
02384 #endif
02385 PString t38ModeChangeCapabilities;
02386 PSyncPoint digitsWaitFlag;
02387 BOOL endSessionNeeded;
02388 PSyncPoint endSessionReceived;
02389 PTimer enforcedDurationLimit;
02390
02391
02392 PChannel * holdMediaChannel;
02393 BOOL isConsultationTransfer;
02394
02396 BOOL isCallIntrusion;
02397 unsigned callIntrusionProtectionLevel;
02398
02399 enum FastStartStates {
02400 FastStartDisabled,
02401 FastStartInitiate,
02402 FastStartResponse,
02403 FastStartAcknowledged,
02404 NumFastStartStates
02405 };
02406 FastStartStates fastStartState;
02407 H323LogicalChannelList fastStartChannels;
02408 OpalMediaStream * transmitterMediaStream;
02409
02410 #if PTRACING
02411 static const char * GetConnectionStatesName(ConnectionStates s);
02412 friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << GetConnectionStatesName(s); }
02413 static const char * GetFastStartStateName(FastStartStates s);
02414 friend ostream & operator<<(ostream & o, FastStartStates s) { return o << GetFastStartStateName(s); }
02415 #endif
02416
02417
02418
02419
02420 H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure;
02421 H245NegTerminalCapabilitySet * capabilityExchangeProcedure;
02422 H245NegLogicalChannels * logicalChannels;
02423 H245NegRequestMode * requestModeProcedure;
02424 H245NegRoundTripDelay * roundTripDelayProcedure;
02425
02426 #if OPAL_H450
02427 H450xDispatcher * h450dispatcher;
02428 H4502Handler * h4502handler;
02429 H4504Handler * h4504handler;
02430 H4506Handler * h4506handler;
02431 H4507Handler * h4507handler;
02432 H45011Handler * h45011handler;
02433 #endif
02434
02435 #ifdef H323_H460
02436 H460_FeatureSet & features;
02437 #endif
02438
02439 virtual OpalMediaStream * InternalCreateMediaStream(const OpalMediaFormat & mediaFormat, unsigned sessionID, BOOL isSource);
02440
02441 private:
02442 PChannel * SwapHoldMediaChannels(PChannel * newChannel);
02443 };
02444
02445
02446 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
02447
02448
02449 #endif // __OPAL_H323CON_H
02450
02451