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 #ifndef __OPAL_H323CON_H
00428 #define __OPAL_H323CON_H
00429
00430 #ifdef P_USE_PRAGMA
00431 #pragma interface
00432 #endif
00433
00434 #ifdef P_DTMF
00435 #include <ptclib/dtmf.h>
00436 #endif
00437
00438 #include "h323caps.h"
00439 #include "transports.h"
00440 #include "channels.h"
00441 #include "guid.h"
00442 #include "openh323buildopts.h"
00443 #include "h235auth.h"
00444
00445 #if H323_H224
00446 class OpalH224Handler;
00447 class OpalH281Handler;
00448 #endif
00449
00450 #ifdef H323_SIGNAL_AGGREGATE
00451 #include <ptclib/sockagg.h>
00452
00455 class H323AggregatedH2x5Handle : public PAggregatedHandle
00456 {
00457 PCLASSINFO(H323AggregatedH2x5Handle, PAggregatedHandle)
00458 public:
00459 H323AggregatedH2x5Handle(H323Transport & _transport, H323Connection & _connection);
00460 ~H323AggregatedH2x5Handle();
00461
00462 PAggregatorFDList_t GetFDs();
00463
00464 BOOL OnRead();
00465 virtual BOOL HandlePDU(BOOL ok, PBYTEArray & pdu) = 0;
00466 PTimeInterval GetTimeout()
00467 { return transport.GetReadTimeout(); }
00468
00469 protected:
00470 PAggregatorFD fd;
00471 H323Transport & transport;
00472 H323Connection & connection;
00473 PBYTEArray pduBuffer;
00474 PINDEX pduDataLen;
00475 };
00476
00477 #endif
00478
00479 #ifdef H323_H248
00480 #include "svcctrl.h"
00481 #endif
00482
00483
00484
00485
00486
00487
00488
00489 class PPER_Stream;
00490
00491 class H225_EndpointType;
00492 class H225_TransportAddress;
00493 class H225_ArrayOf_PASN_OctetString;
00494 class H225_ProtocolIdentifier;
00495 class H225_AdmissionRequest;
00496 class H225_AdmissionReject;
00497 class H225_AdmissionConfirm;
00498 class H225_InfoRequestResponse;
00499 class H225_DisengageRequest;
00500 class H225_FeatureSet;
00501 class H225_Setup_UUIE;
00502 class H225_ArrayOf_ServiceControlSession;
00503 class H225_ServiceControlSession_reason;
00504
00505 class H245_TerminalCapabilitySet;
00506 class H245_TerminalCapabilitySetReject;
00507 class H245_OpenLogicalChannel;
00508 class H245_OpenLogicalChannelAck;
00509 class H245_TransportAddress;
00510 class H245_UserInputIndication;
00511 class H245_RequestMode;
00512 class H245_RequestModeAck;
00513 class H245_RequestModeReject;
00514 class H245_ModeDescription;
00515 class H245_ArrayOf_ModeDescription;
00516 class H245_SendTerminalCapabilitySet;
00517 class H245_MultiplexCapability;
00518 class H245_FlowControlCommand;
00519 class H245_MiscellaneousCommand;
00520 class H245_MiscellaneousIndication;
00521 class H245_JitterIndication;
00522 class H245_ConferenceRequest;
00523 class H245_ConferenceResponse;
00524 class H245_ConferenceCommand;
00525 class H245_ConferenceIndication;
00526 class H245_GenericMessage;
00527 class H245_ArrayOf_GenericParameter;
00528
00529 class H323SignalPDU;
00530 class H323ControlPDU;
00531 class H323_RTP_UDP;
00532
00533 class H235Authenticators;
00534
00535 class H245NegMasterSlaveDetermination;
00536 class H245NegTerminalCapabilitySet;
00537 class H245NegLogicalChannels;
00538 class H245NegRequestMode;
00539 class H245NegRoundTripDelay;
00540
00541 #ifdef H323_H450
00542
00543 class H450xDispatcher;
00544 class H4502Handler;
00545 class H4503Handler;
00546 class H4504Handler;
00547 class H4506Handler;
00548 class H45011Handler;
00549
00550 #endif
00551
00552 #ifdef H323_T120
00553 class OpalT120Protocol;
00554 #endif
00555
00556 #ifdef H323_T38
00557 class OpalT38Protocol;
00558 #endif
00559
00560 #ifdef H323_H224
00561 class OpalH224Handler;
00562 class OpalH281Handler;
00563 #endif
00564
00565 class OpalRFC2833;
00566 class OpalRFC2833Info;
00567
00568 #ifdef H323_H460
00569 class H460_FeatureSet;
00570 #endif
00571
00572
00574
00582 class H323Connection : public PObject
00583 {
00584 PCLASSINFO(H323Connection, PObject);
00585
00586 friend class AggregatedH225Handle;
00587 friend class AggregatedH245Handle;
00588 public:
00591 enum Options {
00592 FastStartOptionDisable = 0x0001,
00593 FastStartOptionEnable = 0x0002,
00594 FastStartOptionMask = 0x0003,
00595
00596 H245TunnelingOptionDisable = 0x0004,
00597 H245TunnelingOptionEnable = 0x0008,
00598 H245TunnelingOptionMask = 0x000c,
00599
00600 H245inSetupOptionDisable = 0x0010,
00601 H245inSetupOptionEnable = 0x0020,
00602 H245inSetupOptionMask = 0x0030,
00603
00604 DetectInBandDTMFOptionDisable= 0x0040,
00605 DetectInBandDTMFOptionEnable = 0x0080,
00606 DetectInBandDTMFOptionMask = 0x00c0,
00607
00608 #ifdef H323_RTP_AGGREGATE
00609 RTPAggregationDisable = 0x0100,
00610 RTPAggregationEnable = 0x0200,
00611 RTPAggregationMask = 0x0300,
00612 #endif
00613
00614 #ifdef H323_SIGNAL_AGGREGATE
00615 SignallingAggregationDisable = 0x0400,
00616 SignallingAggregationEnable = 0x0800,
00617 SignallingAggregationMask = 0x0c00
00618 #endif
00619 };
00620
00623 H323Connection(
00624 H323EndPoint & endpoint,
00625 unsigned callReference,
00626 unsigned options = 0
00627 );
00628
00631 ~H323Connection();
00632
00642 BOOL Lock();
00643
00655 int TryLock();
00656
00662 void Unlock();
00663
00670 virtual void OnSendARQ(
00671 H225_AdmissionRequest & arq
00672 );
00673
00679 virtual void OnReceivedACF(
00680 const H225_AdmissionConfirm & acf
00681 );
00682
00688 virtual void OnReceivedARJ(
00689 const H225_AdmissionReject & arj
00690 );
00691
00698 virtual void OnSendIRR(
00699 H225_InfoRequestResponse & irr
00700 ) const;
00701
00708 virtual void OnSendDRQ(
00709 H225_DisengageRequest & drq
00710 ) const;
00711
00715 virtual void OnEstablished();
00716
00720 virtual void OnCleared();
00721
00728 BOOL IsConnected() const { return connectionState == HasExecutedSignalConnect || connectionState == EstablishedConnection; }
00729
00735 BOOL IsEstablished() const { return connectionState == EstablishedConnection; }
00736
00741 enum CallEndReason {
00742 EndedByLocalUser,
00743 EndedByNoAccept,
00744 EndedByAnswerDenied,
00745 EndedByRemoteUser,
00746 EndedByRefusal,
00747 EndedByNoAnswer,
00748 EndedByCallerAbort,
00749 EndedByTransportFail,
00750 EndedByConnectFail,
00751 EndedByGatekeeper,
00752 EndedByNoUser,
00753 EndedByNoBandwidth,
00754 EndedByCapabilityExchange,
00755 EndedByCallForwarded,
00756 EndedBySecurityDenial,
00757 EndedByLocalBusy,
00758 EndedByLocalCongestion,
00759 EndedByRemoteBusy,
00760 EndedByRemoteCongestion,
00761 EndedByUnreachable,
00762 EndedByNoEndPoint,
00763 EndedByHostOffline,
00764 EndedByTemporaryFailure,
00765 EndedByQ931Cause,
00766 EndedByDurationLimit,
00767 EndedByInvalidConferenceID,
00768 EndedByOSPRefusal,
00769 EndedByInvalidNumberFormat,
00770 EndedByUnspecifiedProtocolError,
00771 EndedByNoFeatureSupport,
00772 NumCallEndReasons
00773 };
00774 #if PTRACING
00775 friend ostream & operator<<(ostream & o, CallEndReason r);
00776 #endif
00777
00786 CallEndReason GetCallEndReason() const { return callEndReason; }
00787
00792 virtual void SetCallEndReason(
00793 CallEndReason reason,
00794 PSyncPoint * sync = NULL
00795 );
00796
00802 virtual BOOL ClearCall(
00803 CallEndReason reason = EndedByLocalUser
00804 );
00805
00808 virtual BOOL ClearCallSynchronous(
00809 PSyncPoint * sync,
00810 CallEndReason reason = EndedByLocalUser
00811 );
00812
00821 virtual void CleanUpOnCallEnd();
00823
00824
00829 virtual void AttachSignalChannel(
00830 const PString & token,
00831 H323Transport * channel,
00832 BOOL answeringCall
00833 );
00834
00837 BOOL WriteSignalPDU(
00838 H323SignalPDU & pdu
00839 );
00840
00844 virtual void HandleSignallingChannel();
00845
00849 virtual BOOL HandleReceivedSignalPDU(BOOL readStatus, H323SignalPDU & pdu);
00850
00854 virtual BOOL HandleReceivedControlPDU(BOOL readStatus, PPER_Stream & strm);
00855
00859 virtual BOOL HandleSignalPDU(
00860 H323SignalPDU & pdu
00861 );
00862
00866 virtual void HandleTunnelPDU(
00867 H323SignalPDU * txPDU
00868 );
00869
00877 virtual BOOL OnReceivedSignalSetup(
00878 const H323SignalPDU & pdu
00879 );
00880
00887 virtual BOOL OnReceivedSignalSetupAck(
00888 const H323SignalPDU & pdu
00889 );
00890
00897 virtual BOOL OnReceivedSignalInformation(
00898 const H323SignalPDU & pdu
00899 );
00900
00909 virtual BOOL OnReceivedCallProceeding(
00910 const H323SignalPDU & pdu
00911 );
00912
00921 virtual BOOL OnReceivedProgress(
00922 const H323SignalPDU & pdu
00923 );
00924
00931 virtual BOOL OnReceivedAlerting(
00932 const H323SignalPDU & pdu
00933 );
00934
00943 virtual BOOL OnReceivedSignalConnect(
00944 const H323SignalPDU & pdu
00945 );
00946
00955 virtual BOOL OnReceivedFacility(
00956 const H323SignalPDU & pdu
00957 );
00958
00965 virtual BOOL OnReceivedSignalNotify(
00966 const H323SignalPDU & pdu
00967 );
00968
00975 virtual BOOL OnReceivedSignalStatus(
00976 const H323SignalPDU & pdu
00977 );
00978
00985 virtual BOOL OnReceivedStatusEnquiry(
00986 const H323SignalPDU & pdu
00987 );
00988
00993 virtual void OnReceivedReleaseComplete(
00994 const H323SignalPDU & pdu
00995 );
00996
01003 virtual BOOL OnUnknownSignalPDU(
01004 const H323SignalPDU & pdu
01005 );
01006
01018 virtual BOOL OnIncomingCall(
01019 const H323SignalPDU & setupPDU,
01020 H323SignalPDU & alertingPDU
01021 );
01022 virtual BOOL OnIncomingCall(
01023 const H323SignalPDU & setupPDU,
01024 H323SignalPDU & alertingPDU,
01025 CallEndReason & reason
01026 );
01027
01037 virtual BOOL ForwardCall(
01038 const PString & forwardParty
01039 );
01040
01041 #ifdef H323_H450
01042
01047 void TransferCall(
01048 const PString & remoteParty,
01049 const PString & callIdentity = PString::Empty()
01051 );
01052
01057 void ConsultationTransfer(
01058 const PString & primaryCallToken
01059 );
01060
01063 virtual void OnReceivedInitiateReturnError();
01064
01071 virtual void HandleConsultationTransfer(
01072 const PString & callIdentity,
01074 H323Connection & incoming
01075 );
01076
01079 BOOL IsTransferringCall() const;
01080
01083 BOOL IsTransferredCall() const;
01084
01089 virtual void HandleTransferCall(
01090 const PString & token,
01091 const PString & identity
01092 );
01093
01098 int GetCallTransferInvokeId();
01099
01107 virtual void HandleCallTransferFailure(
01108 const int returnError
01109 );
01110
01115 void SetAssociatedCallToken(
01116 const PString & token
01117 );
01118
01123 virtual void OnConsultationTransferSuccess(
01124 H323Connection & secondaryCall
01125 );
01126
01131 virtual void SetCallLinkage(
01132 H225_AdmissionRequest & arq
01133 );
01134
01139 virtual void GetCallLinkage(
01140 const H225_AdmissionRequest & arq
01141 );
01142
01148 BOOL GetRedirectingNumber(
01149 PString &originalCalledNr,
01150 PString &lastDivertingNr,
01151 int &divCounter,
01152 int &originaldivReason,
01153 int &divReason);
01154
01159 void HoldCall(
01160 BOOL localHold
01161 );
01162
01168 void RetrieveCall();
01169
01176 void SetHoldMedia(
01177 PChannel * audioChannel
01178 );
01179
01186 void SetVideoHoldMedia(
01187 PChannel * videoChannel
01188 );
01189
01193 virtual PChannel * OnCallHold(BOOL IsEncoder,
01194 unsigned sessionId,
01195 unsigned bufferSize,
01196 PChannel * channel);
01197
01201 virtual PChannel * OnCallRetrieve(BOOL IsEncoder,
01202 unsigned sessionId,
01203 unsigned bufferSize,
01204 PChannel * channel);
01205
01208 BOOL IsMediaOnHold() const;
01209
01212 BOOL IsLocalHold() const;
01213
01216 BOOL IsRemoteHold() const;
01217
01220 BOOL IsCallOnHold() const;
01221
01226 virtual void IntrudeCall(
01227 unsigned capabilityLevel
01228 );
01229
01234 virtual void HandleIntrudeCall(
01235 const PString & token,
01236 const PString & identity
01237 );
01238
01244 void SetCallIntrusion() { isCallIntrusion = TRUE; }
01245
01246 BOOL IsCallIntrusion() { return isCallIntrusion; }
01247
01250 unsigned GetLocalCallIntrusionProtectionLevel() { return callIntrusionProtectionLevel; }
01251
01255 virtual BOOL GetRemoteCallIntrusionProtectionLevel(
01256 const PString & callToken,
01257 unsigned callIntrusionProtectionLevel
01258 );
01259
01260 virtual void SetIntrusionImpending();
01261
01262 virtual void SetForcedReleaseAccepted();
01263
01264 virtual void SetIntrusionNotAuthorized();
01265
01272 void SendCallWaitingIndication(
01273 const unsigned nbOfAddWaitingCalls = 0
01274 );
01275
01276 #endif // H323_H450
01277
01278 enum AnswerCallResponse {
01279 AnswerCallNow,
01280 AnswerCallDenied,
01281 AnswerCallPending,
01282 AnswerCallDeferred,
01283 AnswerCallAlertWithMedia,
01284 AnswerCallDeferredWithMedia,
01285 AnswerCallDeniedByInvalidCID,
01286 NumAnswerCallResponses
01287 };
01288 #if PTRACING
01289 friend ostream & operator<<(ostream & o, AnswerCallResponse s);
01290 #endif
01291
01318 virtual AnswerCallResponse OnAnswerCall(
01319 const PString & callerName,
01320 const H323SignalPDU & setupPDU,
01321 H323SignalPDU & connectPDU
01322 );
01323
01334 void AnsweringCall(
01335 AnswerCallResponse response
01336 );
01337
01348 virtual CallEndReason SendSignalSetup(
01349 const PString & alias,
01350 const H323TransportAddress & address
01351 );
01352
01364 virtual BOOL OnSendSignalSetup(
01365 H323SignalPDU & setupPDU
01366 );
01367
01376 virtual BOOL OnSendCallProceeding(
01377 H323SignalPDU & callProceedingPDU
01378 );
01379
01391 virtual BOOL OnSendReleaseComplete(
01392 H323SignalPDU & releaseCompletePDU
01393 );
01394
01405 virtual BOOL OnAlerting(
01406 const H323SignalPDU & alertingPDU,
01407 const PString & user
01408 );
01409
01424 virtual BOOL OnInsufficientDigits();
01425
01438 virtual void SendMoreDigits(
01439 const PString & digits
01440 );
01441
01451 virtual BOOL OnOutgoingCall(
01452 const H323SignalPDU & connectPDU
01453 );
01454
01466 virtual BOOL SendFastStartAcknowledge(
01467 H225_ArrayOf_PASN_OctetString & array
01468 );
01469
01481 virtual BOOL HandleFastStartAcknowledge(
01482 const H225_ArrayOf_PASN_OctetString & array
01483 );
01484
01492 virtual BOOL StartControlChannel();
01493
01505 virtual BOOL StartControlChannel(
01506 const H225_TransportAddress & h245Address
01507 );
01509
01516 BOOL WriteControlPDU(
01517 const H323ControlPDU & pdu
01518 );
01519
01522 virtual BOOL StartControlNegotiations(
01523 BOOL renegotiate = FALSE
01524 );
01525
01528 virtual void HandleControlChannel();
01529
01536 virtual BOOL HandleControlData(
01537 PPER_Stream & strm
01538 );
01539
01546 virtual BOOL HandleControlPDU(
01547 const H323ControlPDU & pdu
01548 );
01549
01559 virtual BOOL OnUnknownControlPDU(
01560 const H323ControlPDU & pdu
01561 );
01562
01566 virtual BOOL OnH245Request(
01567 const H323ControlPDU & pdu
01568 );
01569
01573 virtual BOOL OnH245Response(
01574 const H323ControlPDU & pdu
01575 );
01576
01580 virtual BOOL OnH245Command(
01581 const H323ControlPDU & pdu
01582 );
01583
01587 virtual BOOL OnH245Indication(
01588 const H323ControlPDU & pdu
01589 );
01590
01593 virtual BOOL OnH245_SendTerminalCapabilitySet(
01594 const H245_SendTerminalCapabilitySet & pdu
01595 );
01596
01601 virtual BOOL OnH245_FlowControlCommand(
01602 const H245_FlowControlCommand & pdu
01603 );
01604
01609 virtual BOOL OnH245_MiscellaneousCommand(
01610 const H245_MiscellaneousCommand & pdu
01611 );
01612
01617 virtual BOOL OnH245_MiscellaneousIndication(
01618 const H245_MiscellaneousIndication & pdu
01619 );
01620
01625 virtual BOOL OnH245_JitterIndication(
01626 const H245_JitterIndication & pdu
01627 );
01628
01631 enum ControlProtocolErrors {
01632 e_MasterSlaveDetermination,
01633 e_CapabilityExchange,
01634 e_LogicalChannel,
01635 e_ModeRequest,
01636 e_RoundTripDelay
01637 };
01638
01650 virtual BOOL OnControlProtocolError(
01651 ControlProtocolErrors errorSource,
01652 const void * errorData = NULL
01653 );
01654
01662 virtual void OnSendCapabilitySet(
01663 H245_TerminalCapabilitySet & pdu
01664 );
01665
01677 virtual BOOL OnReceivedCapabilitySet(
01678 const H323Capabilities & remoteCaps,
01679 const H245_MultiplexCapability * muxCap,
01680 H245_TerminalCapabilitySetReject & reject
01681 );
01682
01685 virtual void SendCapabilitySet(
01686 BOOL empty
01687 );
01688
01697 virtual void OnSetLocalCapabilities();
01698
01701 BOOL IsH245Master() const;
01702
01705 void StartRoundTripDelay();
01706
01709 PTimeInterval GetRoundTripDelay() const;
01711
01751 virtual void OnSelectLogicalChannels();
01752
01755 virtual void SelectDefaultLogicalChannel(
01756 unsigned sessionID
01757 );
01758
01762 virtual void SelectFastStartChannels(
01763 unsigned sessionID,
01764 BOOL transmitter,
01765 BOOL receiver
01766 );
01767
01770 void DisableFastStart();
01771
01786 virtual BOOL OpenLogicalChannel(
01787 const H323Capability & capability,
01788 unsigned sessionID,
01789 H323Channel::Directions dir
01790 );
01791
01801 virtual BOOL OnOpenLogicalChannel(
01802 const H245_OpenLogicalChannel & openPDU,
01803 H245_OpenLogicalChannelAck & ackPDU,
01804 unsigned & errorCode
01805 );
01806
01814 virtual BOOL OnConflictingLogicalChannel(
01815 H323Channel & channel
01816 );
01817
01822 virtual H323Channel * CreateLogicalChannel(
01823 const H245_OpenLogicalChannel & open,
01824 BOOL startingFast,
01825 unsigned & errorCode
01826 );
01827
01863 virtual H323Channel * CreateRealTimeLogicalChannel(
01864 const H323Capability & capability,
01865 H323Channel::Directions dir,
01866 unsigned sessionID,
01867 const H245_H2250LogicalChannelParameters * param,
01869 RTP_QOS * rtpqos = NULL
01870 );
01871
01882 virtual BOOL OnCreateLogicalChannel(
01883 const H323Capability & capability,
01884 H323Channel::Directions dir,
01885 unsigned & errorCode
01886 );
01887
01892 virtual BOOL OnStartLogicalChannel(
01893 H323Channel & channel
01894 );
01895
01896 #ifndef NO_H323_AUDIO_CODECS
01897
01903 virtual BOOL OpenAudioChannel(
01904 BOOL isEncoding,
01905 unsigned bufferSize,
01906 H323AudioCodec & codec
01907 );
01908 #endif
01909
01910 #ifndef NO_H323_VIDEO
01911
01917 virtual BOOL OpenVideoChannel(
01918 BOOL isEncoding,
01919 H323VideoCodec & codec
01920 );
01921
01922 #ifdef H323_H239
01923
01927 virtual BOOL OpenExtendedVideoSession(
01928 unsigned role,
01929 H323ChannelNumber & channelnum
01930 );
01931
01935 virtual void OnReceivedExtendedVideoSession(
01936 unsigned ,
01937 const H323ChannelNumber &
01938 ) const {};
01939
01943 virtual void CloseExtendedVideoSession(
01944 const H323ChannelNumber & num
01945 );
01946
01953 virtual BOOL OpenExtendedVideoChannel(
01954 BOOL isEncoding,
01955 H323VideoCodec & codec
01956 );
01957
01958 #endif // H323_H239
01959
01960 #endif // NO_H323_VIDEO
01961
01964 virtual void CloseLogicalChannel(
01965 unsigned number,
01966 BOOL fromRemote
01967 );
01968
01971 virtual void CloseLogicalChannelNumber(
01972 const H323ChannelNumber & number
01973 );
01974
01977 virtual void CloseAllLogicalChannels(
01978 BOOL fromRemote
01979 );
01980
01986 virtual void OnClosedLogicalChannel(
01987 const H323Channel & channel
01988 );
01989
01998 virtual BOOL OnClosingLogicalChannel(
01999 H323Channel & channel
02000 );
02001
02010 virtual void OnLogicalChannelFlowControl(
02011 H323Channel * channel,
02012 long bitRateRestriction
02013 );
02014
02023 virtual void OnLogicalChannelJitter(
02024 H323Channel * channel,
02025 DWORD jitter,
02026 int skippedFrameCount,
02027 int additionalBuffer
02028 );
02029
02032 void SendLogicalChannelMiscCommand(
02033 H323Channel & channel,
02034 unsigned command
02035 );
02036
02040 H323Channel * GetLogicalChannel(
02041 unsigned number,
02042 BOOL fromRemote
02043 ) const;
02044
02050 H323Channel * FindChannel(
02051 unsigned sessionId,
02052 BOOL fromRemote
02053 ) const;
02055
02062 unsigned GetBandwidthUsed() const;
02063
02069 BOOL UseBandwidth(
02070 unsigned bandwidth,
02071 BOOL removing
02072 );
02073
02076 unsigned GetBandwidthAvailable() const { return bandwidthAvailable; }
02077
02082 BOOL SetBandwidthAvailable(
02083 unsigned newBandwidth,
02084 BOOL force = FALSE
02085 );
02087
02090 enum SendUserInputModes {
02091 SendUserInputAsQ931,
02092 SendUserInputAsString,
02093 SendUserInputAsTone,
02094 SendUserInputAsInlineRFC2833,
02095 SendUserInputAsSeparateRFC2833,
02096 #ifdef H323_H249
02097 SendUserInputAsNavigation,
02098 SendUserInputAsSoftkey,
02099 SendUserInputAsPointDevice,
02100 SendUserInputAsModal,
02101 #endif
02102 NumSendUserInputModes
02103 };
02104 #if PTRACING
02105 friend ostream & operator<<(ostream & o, SendUserInputModes m);
02106 #endif
02107
02110 void SetSendUserInputMode(SendUserInputModes mode);
02111
02114 SendUserInputModes GetSendUserInputMode() const { return sendUserInputMode; }
02115
02121 SendUserInputModes GetRealSendUserInputMode() const;
02122
02136 virtual void SendUserInput(
02137 const PString & value
02138 );
02139
02146 virtual void OnUserInputString(
02147 const PString & value
02148 );
02149
02174 virtual void SendUserInputTone(
02175 char tone,
02176 unsigned duration = 0,
02177 unsigned logicalChannel = 0,
02178 unsigned rtpTimestamp = 0
02179 );
02180
02185 virtual void OnUserInputTone(
02186 char tone,
02187 unsigned duration,
02188 unsigned logicalChannel,
02189 unsigned rtpTimestamp
02190 );
02191
02195 void SendUserInputHookFlash(
02196 int duration = 500
02197 ) { SendUserInputTone('!', duration); }
02198
02205 virtual void SendUserInputIndicationQ931(
02206 const PString & value
02207 );
02208
02215 virtual void SendUserInputIndicationString(
02216 const PString & value
02217 );
02218
02223 virtual void SendUserInputIndicationTone(
02224 char tone,
02225 unsigned duration = 0,
02226 unsigned logicalChannel = 0,
02227 unsigned rtpTimestamp = 0
02228 );
02229
02230 #ifdef H323_H249
02231
02235 virtual void SendUserInputIndicationNavigate(
02236 H323_UserInputCapability::NavigateKeyID keyID
02237 );
02238
02242 virtual void OnUserInputIndicationNavigate(
02243 const H245_ArrayOf_GenericParameter & contents
02244 );
02245
02249 virtual void SendUserInputIndicationSoftkey(
02250 unsigned key,
02251 const PString & keyName = PString()
02252 );
02253
02254 virtual void OnUserInputIndicationSoftkey(
02255 const H245_ArrayOf_GenericParameter & contents
02256 );
02257
02261 virtual void SendUserInputIndicationPointDevice(
02262 unsigned x,
02263 unsigned y,
02264 unsigned button=0,
02265 unsigned buttonstate=0,
02266 unsigned clickcount=0
02267 );
02268
02269 virtual void OnUserInputIndicationPointDevice(
02270 const H245_ArrayOf_GenericParameter & contents
02271 );
02272
02276 virtual void SendUserInputIndicationModal();
02277
02278 virtual void OnUserInputIndicationModal(
02279 const H245_ArrayOf_GenericParameter & contents
02280 );
02281
02282 #endif
02283
02284
02293 virtual void SendUserInputIndication(
02294 const H245_UserInputIndication & pdu
02295 );
02296
02301 virtual void OnUserInputIndication(
02302 const H245_UserInputIndication & pdu
02303 );
02305
02311 virtual RTP_Session * GetSession(
02312 unsigned sessionID
02313 ) const;
02314
02318 virtual H323_RTP_Session * GetSessionCallbacks(
02319 unsigned sessionID
02320 ) const;
02321
02331 virtual RTP_Session * UseSession(
02332 unsigned sessionID,
02333 const H245_TransportAddress & pdu,
02334 H323Channel::Directions dir,
02335 RTP_QOS * rtpqos = NULL
02336 );
02337
02341 virtual void ReleaseSession(
02342 unsigned sessionID
02343 );
02344
02349 virtual BOOL OnReceiveRTPAltInformation(H323_RTP_UDP & rtp,
02350 const H245_ArrayOf_GenericInformation & alternate) const;
02351
02356 virtual BOOL OnSendingRTPAltInformation(const H323_RTP_UDP & rtp,
02357 H245_ArrayOf_GenericInformation & alternate) const;
02358
02359
02367 virtual void OnRTPStatistics(
02368 const RTP_Session & session
02369 ) const;
02370
02377 virtual void OnRTPFinalStatistics(
02378 const RTP_Session & session
02379 ) const;
02380
02384 virtual PString GetSessionCodecNames(
02385 unsigned sessionID
02386 ) const;
02387
02390 BOOL IsBehindNAT() const
02391 { return remoteIsNAT; }
02392
02395 void SetRemoteNAT()
02396 { remoteIsNAT = TRUE; }
02397
02400 BOOL HasNATSupport() const
02401 { return NATsupport; }
02402
02405 void DisableNATSupport()
02406 { NATsupport = FALSE; remoteIsNAT = FALSE; }
02407
02411 void SetSameNAT() { sameNAT = TRUE; };
02412
02415 BOOL isSameNAT() { return sameNAT; };
02416
02422 virtual void SetEndpointTypeInfo(H225_EndpointType & info) const;
02423
02425
02443 virtual BOOL RequestModeChange(
02444 const PString & newModes
02445 );
02446
02454 virtual BOOL RequestModeChange(
02455 const H245_ArrayOf_ModeDescription & newModes
02456 );
02457
02460 virtual BOOL OnRequestModeChange(
02461 const H245_RequestMode & pdu,
02462 H245_RequestModeAck & ack,
02463 H245_RequestModeReject & reject,
02464 PINDEX & selectedMode
02465 );
02466
02473 virtual void OnModeChanged(
02474 const H245_ModeDescription & newMode
02475 );
02476
02481 virtual void OnAcceptModeChange(
02482 const H245_RequestModeAck & pdu
02483 );
02484
02489 virtual void OnRefusedModeChange(
02490 const H245_RequestModeReject * pdu
02491 );
02493
02494 #ifdef H323_T120
02495
02509 virtual OpalT120Protocol * CreateT120ProtocolHandler();
02510 #endif
02511
02512 #ifdef H323_T38
02513
02525 virtual OpalT38Protocol * CreateT38ProtocolHandler();
02526
02529 virtual BOOL RequestModeChangeT38(
02530 const char * capabilityNames = "T.38\nT38FaxUDP"
02531 );
02532 #endif
02533
02534 #ifdef H323_H224
02535
02547 virtual OpalH224Handler *CreateH224ProtocolHandler(unsigned sessionID);
02548
02558 virtual OpalH281Handler *CreateH281ProtocolHandler(OpalH224Handler & h224Handler);
02559 #endif
02560
02570 virtual BOOL GetAdmissionRequestAuthentication(
02571 const H225_AdmissionRequest & arq,
02572 H235Authenticators & authenticators
02573 );
02575
02580 H323EndPoint & GetEndPoint() const { return endpoint; }
02581
02584 BOOL HadAnsweredCall() const { return callAnswered; }
02585
02588 BOOL IsGatekeeperRouted() const { return gatekeeperRouted; }
02589
02593 unsigned GetQ931Cause() const { return q931Cause; }
02594
02598 void SetQ931Cause(unsigned v) { q931Cause = v; }
02599
02604 unsigned GetDistinctiveRing() const { return distinctiveRing; }
02605
02612 void SetDistinctiveRing(unsigned pattern) { distinctiveRing = pattern&7; }
02613
02616 const PString & GetCallToken() const { return callToken; }
02617
02620 unsigned GetCallReference() const { return callReference; }
02621
02624 const OpalGloballyUniqueID & GetCallIdentifier() const { return callIdentifier; }
02625
02628 const OpalGloballyUniqueID & GetConferenceIdentifier() const { return conferenceIdentifier; }
02629
02632 const PString & GetLocalPartyName() const { return localPartyName; }
02633
02636 void SetLocalPartyName(const PString & name);
02637
02640 void SetDisplayName(const PString & name) { localDisplayName = name; }
02641
02644 const PString GetDisplayName() const { return localDisplayName; }
02645
02646 const PStringList & GetLocalAliasNames() const { return localAliasNames; }
02647
02654 virtual const PString & GetRemotePartyName() const { return remotePartyName; }
02655
02660 const PString & GetRemotePartyNumber() const { return remotePartyNumber; }
02661
02668 const PString & GetRemotePartyAddress() const { return remotePartyAddress; }
02669
02672 const PStringArray & GetRemotePartyAliases() const { return remoteAliasNames; }
02673
02676 void SetRemotePartyInfo(
02677 const H323SignalPDU & pdu
02678 );
02679
02691 const PString & GetRemoteApplication() const { return remoteApplication; }
02692
02695 void SetRemoteApplication(
02696 const H225_EndpointType & pdu
02697 );
02698
02701 const H323Capabilities & GetLocalCapabilities() const { return localCapabilities; }
02702
02705 const H323Capabilities & GetRemoteCapabilities() const { return remoteCapabilities; }
02706
02709 unsigned GetRemoteMaxAudioDelayJitter() const { return remoteMaxAudioDelayJitter; }
02710
02713 const H323Transport * GetSignallingChannel() const { return signallingChannel; }
02714
02717 unsigned GetSignallingVersion() const { return h225version; }
02718
02721 const H323Transport & GetControlChannel() const;
02722
02725 unsigned GetControlVersion() const { return h245version; }
02726
02729 PTime GetSetupUpTime() const { return setupTime; }
02730
02733 PTime GetAlertingTime() const { return alertingTime; }
02734
02738 PTime GetConnectionStartTime() const { return connectedTime; }
02739
02742 PTime GetConnectionEndTime() const { return callEndTime; }
02743
02746 PTime GetReverseMediaOpenTime() const { return reverseMediaOpenTime; }
02747
02751 unsigned GetMinAudioJitterDelay() const { return minAudioJitterDelay; }
02752
02756 unsigned GetMaxAudioJitterDelay() const { return maxAudioJitterDelay; }
02757
02760 void SetAudioJitterDelay(
02761 unsigned minDelay,
02762 unsigned maxDelay
02763 );
02764
02767 unsigned GetUUIEsRequested() const { return uuiesRequested; }
02768
02771 void SetUUIEsRequested(unsigned mask) { uuiesRequested = mask; }
02772
02775 const PString GetGkAccessTokenOID() const { return gkAccessTokenOID; }
02776
02779 void SetGkAccessTokenOID(const PString & oid) { gkAccessTokenOID = oid; }
02780
02783 const PBYTEArray & GetGkAccessTokenData() const { return gkAccessTokenData; }
02784
02787 void SetDestExtraCallInfo(
02788 const PString & info
02789 ) { destExtraCallInfo = info; }
02790
02793 void SetRemoteCallWaiting(const unsigned value) { remoteCallWaiting = value; }
02794
02800 const int GetRemoteCallWaiting() const { return remoteCallWaiting; }
02801
02806 void SetEnforcedDurationLimit(
02807 unsigned seconds
02808 );
02809
02810 #ifdef H323_H460
02811
02813 void DisableFeatures();
02814 #endif
02815
02816 virtual BOOL OnSendFeatureSet(unsigned, H225_FeatureSet &) const;
02817
02818 virtual void OnReceiveFeatureSet(unsigned, const H225_FeatureSet &) const;
02819
02821
02822 #ifndef DISABLE_CALLAUTH
02823
02827 const H235Authenticators & GetEPAuthenticators() const;
02828
02833 virtual void SetAuthenticationConnection();
02834
02839 virtual BOOL OnCallAuthentication(const PString & username,
02840 PString & password);
02841
02846 virtual BOOL OnEPAuthenticationFailed(H235Authenticator::ValidationResult result) const;
02847
02851 virtual void OnAuthenticationFinalise(unsigned pdu,PBYTEArray & rawData);
02852
02855 BOOL HasAuthentication() const
02856 { return hasAuthentication; }
02857
02860 BOOL HasAuthenticationFailed()
02861 { return AuthenticationFailed; };
02863 #endif
02864
02865 #ifdef H323_H248
02866
02870 BOOL OnSendServiceControlSessions(
02871 H225_ArrayOf_ServiceControlSession & serviceControl,
02872 H225_ServiceControlSession_reason reason
02873 ) const;
02874
02877 void OnReceiveServiceControlSessions(
02878 const H225_ArrayOf_ServiceControlSession & serviceControl
02879 );
02880
02883 virtual void OnReceiveServiceControl(const PString & amount,
02884 BOOL credit,
02885 const unsigned & timelimit,
02886 const PString & url,
02887 const PString & ldapURL,
02888 const PString & baseDN
02889 );
02890
02893 virtual BOOL OnSendServiceControl(PString & amount,
02894 BOOL credit,
02895 unsigned & timelimit,
02896 PString & url
02897 ) const;
02899 #endif
02900
02905 virtual void DisableH245inSETUP();
02906
02909 virtual void SetNonCallConnection();
02910
02911 #ifdef H323_H460
02912
02914 virtual H460_FeatureSet * GetFeatureSet();
02915 #endif
02916
02917
02918 enum ReleaseSequence {
02919 ReleaseSequenceUnknown,
02920 ReleaseSequence_Local,
02921 ReleaseSequence_Remote
02922 };
02923
02924 ReleaseSequence GetReleaseSequence() const
02925 { return releaseSequence; }
02926
02927 virtual BOOL OnHandleConferenceRequest(const H245_ConferenceRequest &)
02928 { return FALSE; }
02929
02930 virtual BOOL OnHandleConferenceResponse(const H245_ConferenceResponse &)
02931 { return FALSE; }
02932
02933 virtual BOOL OnHandleConferenceCommand(const H245_ConferenceCommand &)
02934 { return FALSE; }
02935
02936 virtual BOOL OnHandleConferenceIndication(const H245_ConferenceIndication &)
02937 { return FALSE; }
02938
02939 enum h245MessageType {
02940 h245request,
02941 h245response,
02942 h245command,
02943 h245indication
02944 };
02945
02946 virtual BOOL OnHandleH245GenericMessage(h245MessageType, const H245_GenericMessage &)
02947 { return FALSE; }
02948
02949 #ifdef H323_H230
02950
02952 BOOL OpenConferenceControlSession(
02953 BOOL & chairControl,
02954 BOOL & extControls
02955 );
02956
02957
02958 #endif
02959
02960 protected:
02966 virtual void InternalEstablishedConnectionCheck();
02967 BOOL DecodeFastStartCaps(const H225_ArrayOf_PASN_OctetString & fastStartCaps);
02968 BOOL InternalEndSessionCheck(PPER_Stream & strm);
02969 void SetRemoteVersions(const H225_ProtocolIdentifier & id);
02970 void MonitorCallStatus();
02971 PDECLARE_NOTIFIER(OpalRFC2833Info, H323Connection, OnUserInputInlineRFC2833);
02972 PDECLARE_NOTIFIER(H323Codec::FilterInfo, H323Connection, OnUserInputInBandDTMF);
02973
02974 H323EndPoint & endpoint;
02975 PSyncPoint * endSync;
02976
02977 int remoteCallWaiting;
02978 BOOL callAnswered;
02979 BOOL gatekeeperRouted;
02980 unsigned distinctiveRing;
02981 PString callToken;
02982 unsigned callReference;
02983 OpalGloballyUniqueID callIdentifier;
02984 OpalGloballyUniqueID conferenceIdentifier;
02985
02986 PStringList localAliasNames;
02987 PString localPartyName;
02988 PString localDisplayName;
02989 H323Capabilities localCapabilities;
02990 PString remotePartyName;
02991 PString remotePartyNumber;
02992 PString remotePartyAddress;
02993 PStringArray remoteAliasNames;
02994 PString destExtraCallInfo;
02995 PString remoteApplication;
02996 H323Capabilities remoteCapabilities;
02997 unsigned remoteMaxAudioDelayJitter;
02998 PTimer roundTripDelayTimer;
02999 unsigned minAudioJitterDelay;
03000 unsigned maxAudioJitterDelay;
03001 unsigned bandwidthAvailable;
03002 unsigned uuiesRequested;
03003 PString gkAccessTokenOID;
03004 PBYTEArray gkAccessTokenData;
03005 BOOL addAccessTokenToSetup;
03006 SendUserInputModes sendUserInputMode;
03007
03008 H323Transport * signallingChannel;
03009 H323Transport * controlChannel;
03010 BOOL h245Tunneling;
03011 H323SignalPDU * h245TunnelRxPDU;
03012 H323SignalPDU * h245TunnelTxPDU;
03013 H323SignalPDU * alertingPDU;
03014 H323SignalPDU * connectPDU;
03015
03016 enum ConnectionStates {
03017 NoConnectionActive,
03018 AwaitingGatekeeperAdmission,
03019 AwaitingTransportConnect,
03020 AwaitingSignalConnect,
03021 AwaitingLocalAnswer,
03022 HasExecutedSignalConnect,
03023 EstablishedConnection,
03024 ShuttingDownConnection,
03025 NumConnectionStates
03026 } connectionState;
03027
03028 PTime setupTime;
03029 PTime alertingTime;
03030 PTime connectedTime;
03031 PTime callEndTime;
03032 PTime reverseMediaOpenTime;
03033 CallEndReason callEndReason;
03034 unsigned q931Cause;
03035 ReleaseSequence releaseSequence;
03036
03037 unsigned h225version;
03038 unsigned h245version;
03039 BOOL h245versionSet;
03040 BOOL doH245inSETUP;
03041 BOOL lastPDUWasH245inSETUP;
03042 BOOL detectInBandDTMF;
03043 BOOL mustSendDRQ;
03044 BOOL mediaWaitForConnect;
03045 BOOL transmitterSidePaused;
03046 BOOL earlyStart;
03047
03048 #ifdef H323_T120
03049 BOOL startT120;
03050 #endif
03051
03052 #ifdef H323_T38
03053 PString t38ModeChangeCapabilities;
03054 #endif
03055
03056 #ifdef H323_H224
03057 BOOL startH224;
03058 #endif
03059
03060 PSyncPoint digitsWaitFlag;
03061 BOOL endSessionNeeded;
03062 BOOL endSessionSent;
03063 PSyncPoint endSessionReceived;
03064 PTimer enforcedDurationLimit;
03065
03066 #ifdef H323_H450
03067
03068 PChannel * holdAudioMediaChannel;
03069 PChannel * holdVideoMediaChannel;
03070 BOOL isConsultationTransfer;
03071
03073 BOOL isCallIntrusion;
03074 unsigned callIntrusionProtectionLevel;
03075 #endif
03076
03077 RTP_SessionManager rtpSessions;
03078
03079 enum FastStartStates {
03080 FastStartDisabled,
03081 FastStartInitiate,
03082 FastStartResponse,
03083 FastStartAcknowledged,
03084 NumFastStartStates
03085 };
03086 FastStartStates fastStartState;
03087 H323LogicalChannelList fastStartChannels;
03088
03089 #if PTRACING
03090 static const char * const ConnectionStatesNames[NumConnectionStates];
03091 friend ostream & operator<<(ostream & o, ConnectionStates s) { return o << ConnectionStatesNames[s]; }
03092 static const char * const FastStartStateNames[NumFastStartStates];
03093 friend ostream & operator<<(ostream & o, FastStartStates s) { return o << FastStartStateNames[s]; }
03094 #endif
03095
03096
03097
03098
03099 H245NegMasterSlaveDetermination * masterSlaveDeterminationProcedure;
03100 H245NegTerminalCapabilitySet * capabilityExchangeProcedure;
03101 H245NegLogicalChannels * logicalChannels;
03102 H245NegRequestMode * requestModeProcedure;
03103 H245NegRoundTripDelay * roundTripDelayProcedure;
03104
03105 #ifdef H323_H450
03106 H450xDispatcher * h450dispatcher;
03107 H4502Handler * h4502handler;
03108 H4503Handler * h4503handler;
03109 H4504Handler * h4504handler;
03110 H4506Handler * h4506handler;
03111 H45011Handler * h45011handler;
03112 #endif
03113
03114 OpalRFC2833 * rfc2833handler;
03115
03116 #ifdef H323_T120
03117 OpalT120Protocol * t120handler;
03118 #endif
03119
03120 #ifdef H323_T38
03121 OpalT38Protocol * t38handler;
03122 #endif
03123
03124 #ifdef H323_H224
03125 OpalH224Handler * h224handler;
03126 OpalH281Handler * h281handler;
03127 #endif
03128
03129 #ifdef P_DTMF
03130
03131
03132 PDTMFDecoder dtmfDecoder;
03133 #endif
03134
03135
03136 BOOL remoteIsNAT;
03137 BOOL NATsupport;
03138 BOOL sameNAT;
03139
03140 #ifndef DISABLE_CALLAUTH
03141 BOOL AuthenticationFailed;
03142 BOOL hasAuthentication;
03143 const H235Authenticators EPAuthenticators;
03144 #endif
03145
03146 #ifdef H323_AEC
03147 PAec * aec;
03148 #endif
03149
03150 BOOL IsNonCallConnection;
03151
03152 private:
03153 PChannel * SwapHoldMediaChannels(PChannel * newChannel,unsigned sessionId);
03154
03155 PTimedMutex outerMutex;
03156 PMutex innerMutex;
03157
03158 public:
03159 BOOL StartHandleControlChannel();
03160 void EndHandleControlChannel();
03161
03162 #ifdef H323_RTP_AGGREGATE
03163 private:
03164 BOOL useRTPAggregation;
03165 #endif
03166
03167 #ifdef H323_SIGNAL_AGGREGATE
03168 public:
03169 void AggregateSignalChannel(H323Transport * transport);
03170 void AggregateControlChannel(H323Transport * transport);
03171 protected:
03172 BOOL useSignallingAggregation;
03173 H323AggregatedH2x5Handle * signalAggregator;
03174 H323AggregatedH2x5Handle * controlAggregator;
03175 #endif
03176
03177 #ifdef H323_H248
03178 PDictionary<POrdinalKey, H323ServiceControlSession> serviceControlSessions;
03179 #endif
03180
03181 #ifdef H323_H460
03182 BOOL disableH460;
03183 H460_FeatureSet & features;
03184 #endif
03185
03186 #ifdef H323_H224
03187 OpalH224Handler * h224Handler;
03188 #endif
03189 };
03190
03191
03192 PLIST(H323ConnectionList, H323Connection);
03193 PDICTIONARY(H323ConnectionDict, PString, H323Connection);
03194 PDICTIONARY(H323CallIdentityDict, PString, H323Connection);
03195
03196
03197 #endif // __OPAL_H323CON_H
03198
03199