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 #ifndef __OPAL_H323PDU_H
00307 #define __OPAL_H323PDU_H
00308
00309 #ifdef P_USE_PRAGMA
00310 #pragma interface
00311 #endif
00312
00313
00314 #include <ptlib/sockets.h>
00315 #include <h323/h323con.h>
00316 #include <h323/transaddr.h>
00317 #include <h323/q931.h>
00318 #include <h323/h235auth.h>
00319 #include <h323/h323trans.h>
00320 #include <rtp/rtp.h>
00321 #include <asn/h225.h>
00322 #include <asn/h245.h>
00323
00324
00325 class H323Connection;
00326 class H323TransportAddress;
00327 class H225_RAS;
00328 class OpalGloballyUniqueID;
00329
00330
00331 #define H225_PROTOCOL_VERSION 6
00332 #define H245_PROTOCOL_VERSION 13
00333
00334
00336
00339 class H323SignalPDU : public H225_H323_UserInformation
00340 {
00341 PCLASSINFO(H323SignalPDU, H225_H323_UserInformation);
00342
00343 public:
00348 H323SignalPDU();
00349
00352 H225_Setup_UUIE & BuildSetup(
00353 const H323Connection & connection,
00354 const H323TransportAddress & destAddr
00355 );
00356
00359 H225_CallProceeding_UUIE & BuildCallProceeding(
00360 const H323Connection & connection
00361 );
00362
00365 H225_Connect_UUIE & BuildConnect(
00366 const H323Connection & connection
00367 );
00368
00371 H225_Connect_UUIE & BuildConnect(
00372 const H323Connection & connection,
00373 const PIPSocket::Address & h245Address,
00374 WORD port
00375 );
00376
00379 H225_Alerting_UUIE & BuildAlerting(
00380 const H323Connection & connection
00381 );
00382
00385 H225_Information_UUIE & BuildInformation(
00386 const H323Connection & connection
00387 );
00388
00391 H225_ReleaseComplete_UUIE & BuildReleaseComplete(
00392 const H323Connection & connection
00393 );
00394
00397 H225_Facility_UUIE * BuildFacility(
00398 const H323Connection & connection,
00399 BOOL empty
00400 );
00401
00404 H225_Progress_UUIE & BuildProgress(
00405 const H323Connection & connection
00406 );
00407
00410 H225_Status_UUIE & BuildStatus(
00411 const H323Connection & connection
00412 );
00413
00416 H225_StatusInquiry_UUIE & BuildStatusInquiry(
00417 const H323Connection & connection
00418 );
00419
00422 H225_SetupAcknowledge_UUIE & BuildSetupAcknowledge(
00423 const H323Connection & connection
00424 );
00425
00428 H225_Notify_UUIE & BuildNotify(
00429 const H323Connection & connection
00430 );
00432
00433
00438 void PrintOn(
00439 ostream & strm
00440 ) const;
00441
00444 BOOL Read(
00445 H323Transport & transport
00446 );
00447
00450 BOOL Write(
00451 H323Transport & transport
00452 );
00453
00456 const Q931 & GetQ931() const { return q931pdu; }
00457
00460 Q931 & GetQ931() { return q931pdu; }
00461
00464 void SetQ931(const Q931 & _q931pdu) { q931pdu = _q931pdu; }
00465
00470 void BuildQ931();
00471
00476 PString GetSourceAliases(
00477 const H323Transport * transport = NULL
00478 ) const;
00479
00484 PString GetDestinationAlias(
00485 BOOL firstAliasOnly = FALSE
00486 ) const;
00487
00492 BOOL GetSourceE164(
00493 PString & number
00494 ) const;
00495
00500 BOOL GetDestinationE164(
00501 PString & number
00502 ) const;
00503
00507 unsigned GetDistinctiveRing() const;
00508
00513 void SetQ931Fields(
00514 const H323Connection & connection,
00515 BOOL insertPartyNumbers = FALSE,
00516 unsigned plan = 1,
00517 unsigned type = 0,
00518 int presentation = -1,
00519 int screening = -1
00520 );
00521
00522 protected:
00523
00524
00525 Q931 q931pdu;
00526 };
00527
00528
00530
00533 class H323ControlPDU : public H245_MultimediaSystemControlMessage
00534 {
00535 PCLASSINFO(H323ControlPDU, H245_MultimediaSystemControlMessage);
00536
00537 public:
00538 H245_RequestMessage & Build(H245_RequestMessage ::Choices request);
00539 H245_ResponseMessage & Build(H245_ResponseMessage ::Choices response);
00540 H245_CommandMessage & Build(H245_CommandMessage ::Choices command);
00541 H245_IndicationMessage & Build(H245_IndicationMessage::Choices indication);
00542
00543 H245_MasterSlaveDetermination & BuildMasterSlaveDetermination(
00544 unsigned terminalType,
00545 unsigned statusDeterminationNumber
00546 );
00547 H245_MasterSlaveDeterminationAck & BuildMasterSlaveDeterminationAck(
00548 BOOL isMaster
00549 );
00550 H245_MasterSlaveDeterminationReject & BuildMasterSlaveDeterminationReject(
00551 unsigned cause
00552 );
00553
00554 H245_TerminalCapabilitySet & BuildTerminalCapabilitySet(
00555 const H323Connection & connection,
00556 unsigned sequenceNumber,
00557 BOOL empty
00558 );
00559 H245_TerminalCapabilitySetAck & BuildTerminalCapabilitySetAck(
00560 unsigned sequenceNumber
00561 );
00562 H245_TerminalCapabilitySetReject & BuildTerminalCapabilitySetReject(
00563 unsigned sequenceNumber,
00564 unsigned cause
00565 );
00566
00567 H245_OpenLogicalChannel & BuildOpenLogicalChannel(
00568 unsigned forwardLogicalChannelNumber
00569 );
00570 H245_RequestChannelClose & BuildRequestChannelClose(
00571 unsigned channelNumber,
00572 unsigned reason
00573 );
00574 H245_CloseLogicalChannel & BuildCloseLogicalChannel(
00575 unsigned channelNumber
00576 );
00577 H245_OpenLogicalChannelAck & BuildOpenLogicalChannelAck(
00578 unsigned channelNumber
00579 );
00580 H245_OpenLogicalChannelReject & BuildOpenLogicalChannelReject(
00581 unsigned channelNumber,
00582 unsigned cause
00583 );
00584 H245_OpenLogicalChannelConfirm & BuildOpenLogicalChannelConfirm(
00585 unsigned channelNumber
00586 );
00587 H245_CloseLogicalChannelAck & BuildCloseLogicalChannelAck(
00588 unsigned channelNumber
00589 );
00590 H245_RequestChannelCloseAck & BuildRequestChannelCloseAck(
00591 unsigned channelNumber
00592 );
00593 H245_RequestChannelCloseReject & BuildRequestChannelCloseReject(
00594 unsigned channelNumber
00595 );
00596 H245_RequestChannelCloseRelease & BuildRequestChannelCloseRelease(
00597 unsigned channelNumber
00598 );
00599
00600 H245_RequestMode & BuildRequestMode(
00601 unsigned sequenceNumber
00602 );
00603 H245_RequestModeAck & BuildRequestModeAck(
00604 unsigned sequenceNumber,
00605 unsigned response
00606 );
00607 H245_RequestModeReject & BuildRequestModeReject(
00608 unsigned sequenceNumber,
00609 unsigned cause
00610 );
00611
00612 H245_RoundTripDelayRequest & BuildRoundTripDelayRequest(
00613 unsigned sequenceNumber
00614 );
00615 H245_RoundTripDelayResponse & BuildRoundTripDelayResponse(
00616 unsigned sequenceNumber
00617 );
00618
00619 H245_UserInputIndication & BuildUserInputIndication(
00620 const PString & value
00621 );
00622 H245_UserInputIndication & BuildUserInputIndication(
00623 char tone,
00624 unsigned duration,
00625 unsigned logicalChannel,
00626 unsigned rtpTimestamp
00627 );
00628
00629 H245_MiscellaneousCommand & BuildMiscellaneousCommand(
00630 unsigned channelNumber,
00631 unsigned type
00632 );
00633
00634 H245_FunctionNotUnderstood & BuildFunctionNotUnderstood(
00635 const H323ControlPDU & pdu
00636 );
00637
00638 H245_EndSessionCommand & BuildEndSessionCommand(
00639 unsigned reason
00640 );
00641 };
00642
00643
00645
00648 class H323RasPDU : public H225_RasMessage, public H323TransactionPDU
00649 {
00650 PCLASSINFO(H323RasPDU, H225_RasMessage);
00651
00652 public:
00653 H323RasPDU();
00654 H323RasPDU(
00655 const H235Authenticators & authenticators
00656 );
00657
00658
00659 virtual PObject * Clone() const;
00660
00661
00662 virtual PASN_Object & GetPDU();
00663 virtual PASN_Choice & GetChoice();
00664 virtual const PASN_Object & GetPDU() const;
00665 virtual const PASN_Choice & GetChoice() const;
00666 virtual unsigned GetSequenceNumber() const;
00667 virtual unsigned GetRequestInProgressDelay() const;
00668 #if PTRACING
00669 virtual const char * GetProtocolName() const;
00670 #endif
00671 virtual H323TransactionPDU * ClonePDU() const;
00672 virtual void DeletePDU();
00673
00674
00675 H225_GatekeeperRequest & BuildGatekeeperRequest(unsigned seqNum);
00676 H225_GatekeeperConfirm & BuildGatekeeperConfirm(unsigned seqNum);
00677 H225_GatekeeperReject & BuildGatekeeperReject(unsigned seqNum, unsigned reason = H225_GatekeeperRejectReason::e_undefinedReason);
00678 H225_RegistrationRequest & BuildRegistrationRequest(unsigned seqNum);
00679 H225_RegistrationConfirm & BuildRegistrationConfirm(unsigned seqNum);
00680 H225_RegistrationReject & BuildRegistrationReject(unsigned seqNum, unsigned reason = H225_RegistrationRejectReason::e_undefinedReason);
00681 H225_UnregistrationRequest & BuildUnregistrationRequest(unsigned seqNum);
00682 H225_UnregistrationConfirm & BuildUnregistrationConfirm(unsigned seqNum);
00683 H225_UnregistrationReject & BuildUnregistrationReject(unsigned seqNum, unsigned reason = H225_UnregRejectReason::e_undefinedReason);
00684 H225_LocationRequest & BuildLocationRequest(unsigned seqNum);
00685 H225_LocationConfirm & BuildLocationConfirm(unsigned seqNum);
00686 H225_LocationReject & BuildLocationReject(unsigned seqNum, unsigned reason = H225_LocationRejectReason::e_undefinedReason);
00687 H225_AdmissionRequest & BuildAdmissionRequest(unsigned seqNum);
00688 H225_AdmissionConfirm & BuildAdmissionConfirm(unsigned seqNum);
00689 H225_AdmissionReject & BuildAdmissionReject(unsigned seqNum, unsigned reason = H225_AdmissionRejectReason::e_undefinedReason);
00690 H225_DisengageRequest & BuildDisengageRequest(unsigned seqNum);
00691 H225_DisengageConfirm & BuildDisengageConfirm(unsigned seqNum);
00692 H225_DisengageReject & BuildDisengageReject(unsigned seqNum, unsigned reason = H225_DisengageRejectReason::e_securityDenial);
00693 H225_BandwidthRequest & BuildBandwidthRequest(unsigned seqNum);
00694 H225_BandwidthConfirm & BuildBandwidthConfirm(unsigned seqNum, unsigned bandwidth = 0);
00695 H225_BandwidthReject & BuildBandwidthReject(unsigned seqNum, unsigned reason = H225_BandRejectReason::e_undefinedReason);
00696 H225_InfoRequest & BuildInfoRequest(unsigned seqNum, unsigned callRef = 0, const OpalGloballyUniqueID * id = NULL);
00697 H225_InfoRequestResponse & BuildInfoRequestResponse(unsigned seqNum);
00698 H225_InfoRequestAck & BuildInfoRequestAck(unsigned seqNum);
00699 H225_InfoRequestNak & BuildInfoRequestNak(unsigned seqNum, unsigned reason = H225_InfoRequestNakReason::e_undefinedReason);
00700 H225_ServiceControlIndication& BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id = NULL);
00701 H225_ServiceControlResponse & BuildServiceControlResponse(unsigned seqNum);
00702 H225_UnknownMessageResponse & BuildUnknownMessageResponse(unsigned seqNum);
00703 H225_RequestInProgress & BuildRequestInProgress(unsigned seqNum, unsigned delay);
00704 };
00705
00706
00708
00709 void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases);
00710 void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00711 void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00712 void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias);
00713 void H323SetAliasAddress(const PString & name, H225_AliasAddress & alias, int tag = -1);
00714 PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases);
00715 PString H323GetAliasAddressString(const H225_AliasAddress & alias);
00716 PString H323GetAliasAddressE164(const H225_AliasAddress & alias);
00717 PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases);
00718
00719 H323Connection::CallEndReason H323TranslateToCallEndReason(
00720 Q931::CauseValues cause,
00721 const H225_ReleaseCompleteReason & reason
00722 );
00723 Q931::CauseValues H323TranslateFromCallEndReason(
00724 const H323Connection & connection,
00725 H225_ReleaseCompleteReason & rcReason
00726 );
00727
00728 void H323GetApplicationInfo(OpalProductInfo & info, const H225_VendorIdentifier & vendor);
00729
00730 BOOL H323SetRTPPacketization(
00731 H245_RTPPayloadType & rtpPacketization,
00732 const OpalMediaFormat & mediaFormat,
00733 RTP_DataFrame::PayloadTypes payloadType
00734 );
00735 BOOL H323GetRTPPacketization(
00736 OpalMediaFormat & mediaFormat,
00737 const H245_RTPPayloadType & rtpPacketization
00738 );
00739
00740 #if PTRACING
00741 void H323TraceDumpPDU(
00742 const char * proto,
00743 BOOL writing,
00744 const PBYTEArray & rawData,
00745 const PASN_Object & pdu,
00746 const PASN_Choice & tag1,
00747 unsigned seqNum
00748 );
00749 #else
00750 #define H323TraceDumpPDU(proto, writing, rawData, pdu, tag1, seqNum)
00751 #endif
00752
00753
00754 #endif // __OPAL_H323PDU_H
00755
00756