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 #ifndef __OPAL_H323PDU_H
00291 #define __OPAL_H323PDU_H
00292
00293 #ifdef P_USE_PRAGMA
00294 #pragma interface
00295 #endif
00296
00297
00298 #include <ptlib/sockets.h>
00299 #include "h323con.h"
00300 #include "transports.h"
00301 #include "q931.h"
00302 #include "h225.h"
00303 #include "h245.h"
00304 #include "h323trans.h"
00305
00306
00307 class H225_RAS;
00308
00309
00310 #define H225_PROTOCOL_VERSION 6
00311 #define H245_PROTOCOL_VERSION 13
00312
00313
00315
00318 class H323SignalPDU : public H225_H323_UserInformation
00319 {
00320 PCLASSINFO(H323SignalPDU, H225_H323_UserInformation);
00321
00322 public:
00327 H323SignalPDU();
00328
00331 H225_Setup_UUIE & BuildSetup(
00332 const H323Connection & connection,
00333 const H323TransportAddress & destAddr
00334 );
00335
00338 H225_CallProceeding_UUIE & BuildCallProceeding(
00339 const H323Connection & connection
00340 );
00341
00344 H225_Connect_UUIE & BuildConnect(
00345 const H323Connection & connection
00346 );
00347
00350 H225_Connect_UUIE & BuildConnect(
00351 const H323Connection & connection,
00352 const PIPSocket::Address & h245Address,
00353 WORD port
00354 );
00355
00358 H225_Alerting_UUIE & BuildAlerting(
00359 const H323Connection & connection
00360 );
00361
00364 H225_Information_UUIE & BuildInformation(
00365 const H323Connection & connection
00366 );
00367
00370 H225_ReleaseComplete_UUIE & BuildReleaseComplete(
00371 const H323Connection & connection
00372 );
00373
00376 H225_Facility_UUIE * BuildFacility(
00377 const H323Connection & connection,
00378 BOOL empty,
00379 unsigned reason = H225_FacilityReason::e_undefinedReason
00380 );
00381
00384 H225_Progress_UUIE & BuildProgress(
00385 const H323Connection & connection
00386 );
00387
00390 H225_Status_UUIE & BuildStatus(
00391 const H323Connection & connection
00392 );
00393
00396 H225_StatusInquiry_UUIE & BuildStatusInquiry(
00397 const H323Connection & connection
00398 );
00399
00402 H225_SetupAcknowledge_UUIE & BuildSetupAcknowledge(
00403 const H323Connection & connection
00404 );
00405
00408 H225_Notify_UUIE & BuildNotify(
00409 const H323Connection & connection
00410 );
00412
00413
00418 void PrintOn(
00419 ostream & strm
00420 ) const;
00421
00424 BOOL Read(
00425 H323Transport & transport
00426 );
00427
00430 BOOL ProcessReadData(
00431 H323Transport & transport,
00432 const PBYTEArray & rawData
00433 );
00434
00437 BOOL Write(
00438 H323Transport & transport,
00439 H323Connection & connection
00440 );
00441
00444 const Q931 & GetQ931() const { return q931pdu; }
00445
00448 Q931 & GetQ931() { return q931pdu; }
00449
00452 void SetQ931(const Q931 & _q931pdu) { q931pdu = _q931pdu; }
00453
00458 void BuildQ931();
00459
00464 PString GetSourceAliases(
00465 const H323Transport * transport = NULL
00466 ) const;
00467
00468
00472 PStringArray GetSourceAliasNames() const;
00473
00478 PString GetSourceURL() 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 #ifdef H323_H460
00523
00527 void InsertH460Setup(const H323Connection & connection, H225_Setup_UUIE & setup);
00528 #endif
00529
00530 #ifndef DISABLE_CALLAUTH
00531
00535 void InsertCryptoTokensSetup(const H323Connection & connection, H225_Setup_UUIE & setup);
00536 #endif
00537
00538
00539 protected:
00540
00541
00542 Q931 q931pdu;
00543 };
00544
00545
00547
00550 class H323ControlPDU : public H245_MultimediaSystemControlMessage
00551 {
00552 PCLASSINFO(H323ControlPDU, H245_MultimediaSystemControlMessage);
00553
00554 public:
00555 H245_RequestMessage & Build(H245_RequestMessage ::Choices request);
00556 H245_ResponseMessage & Build(H245_ResponseMessage ::Choices response);
00557 H245_CommandMessage & Build(H245_CommandMessage ::Choices command);
00558 H245_IndicationMessage & Build(H245_IndicationMessage::Choices indication);
00559
00560 H245_MasterSlaveDetermination & BuildMasterSlaveDetermination(
00561 unsigned terminalType,
00562 unsigned statusDeterminationNumber
00563 );
00564 H245_MasterSlaveDeterminationAck & BuildMasterSlaveDeterminationAck(
00565 BOOL isMaster
00566 );
00567 H245_MasterSlaveDeterminationReject & BuildMasterSlaveDeterminationReject(
00568 unsigned cause
00569 );
00570
00571 H245_TerminalCapabilitySet & BuildTerminalCapabilitySet(
00572 const H323Connection & connection,
00573 unsigned sequenceNumber,
00574 BOOL empty
00575 );
00576 H245_TerminalCapabilitySetAck & BuildTerminalCapabilitySetAck(
00577 unsigned sequenceNumber
00578 );
00579 H245_TerminalCapabilitySetReject & BuildTerminalCapabilitySetReject(
00580 unsigned sequenceNumber,
00581 unsigned cause
00582 );
00583
00584 H245_OpenLogicalChannel & BuildOpenLogicalChannel(
00585 unsigned forwardLogicalChannelNumber
00586 );
00587 H245_RequestChannelClose & BuildRequestChannelClose(
00588 unsigned channelNumber,
00589 unsigned reason
00590 );
00591 H245_CloseLogicalChannel & BuildCloseLogicalChannel(
00592 unsigned channelNumber
00593 );
00594 H245_OpenLogicalChannelAck & BuildOpenLogicalChannelAck(
00595 unsigned channelNumber
00596 );
00597 H245_OpenLogicalChannelReject & BuildOpenLogicalChannelReject(
00598 unsigned channelNumber,
00599 unsigned cause
00600 );
00601 H245_OpenLogicalChannelConfirm & BuildOpenLogicalChannelConfirm(
00602 unsigned channelNumber
00603 );
00604 H245_CloseLogicalChannelAck & BuildCloseLogicalChannelAck(
00605 unsigned channelNumber
00606 );
00607 H245_RequestChannelCloseAck & BuildRequestChannelCloseAck(
00608 unsigned channelNumber
00609 );
00610 H245_RequestChannelCloseReject & BuildRequestChannelCloseReject(
00611 unsigned channelNumber
00612 );
00613 H245_RequestChannelCloseRelease & BuildRequestChannelCloseRelease(
00614 unsigned channelNumber
00615 );
00616
00617 H245_RequestMode & BuildRequestMode(
00618 unsigned sequenceNumber
00619 );
00620 H245_RequestModeAck & BuildRequestModeAck(
00621 unsigned sequenceNumber,
00622 unsigned response
00623 );
00624 H245_RequestModeReject & BuildRequestModeReject(
00625 unsigned sequenceNumber,
00626 unsigned cause
00627 );
00628
00629 H245_RoundTripDelayRequest & BuildRoundTripDelayRequest(
00630 unsigned sequenceNumber
00631 );
00632 H245_RoundTripDelayResponse & BuildRoundTripDelayResponse(
00633 unsigned sequenceNumber
00634 );
00635
00636 H245_UserInputIndication & BuildUserInputIndication(
00637 const PString & value
00638 );
00639 H245_UserInputIndication & BuildUserInputIndication(
00640 char tone,
00641 unsigned duration,
00642 unsigned logicalChannel,
00643 unsigned rtpTimestamp
00644 );
00645
00646 H245_FunctionNotUnderstood & BuildFunctionNotUnderstood(
00647 const H323ControlPDU & pdu
00648 );
00649
00650 H245_EndSessionCommand & BuildEndSessionCommand(
00651 unsigned reason
00652 );
00653 };
00654
00655
00657
00660 class H323RasPDU : public H225_RasMessage, public H323TransactionPDU
00661 {
00662 PCLASSINFO(H323RasPDU, H225_RasMessage);
00663
00664 public:
00665 H323RasPDU();
00666 H323RasPDU(
00667 const H235Authenticators & authenticators
00668 );
00669
00670
00671 virtual PObject * Clone() const;
00672
00673
00674 virtual PASN_Object & GetPDU();
00675 virtual PASN_Choice & GetChoice();
00676 virtual const PASN_Object & GetPDU() const;
00677 virtual const PASN_Choice & GetChoice() const;
00678 virtual unsigned GetSequenceNumber() const;
00679 virtual unsigned GetRequestInProgressDelay() const;
00680 #if PTRACING
00681 virtual const char * GetProtocolName() const;
00682 #endif
00683 virtual H323TransactionPDU * ClonePDU() const;
00684 virtual void DeletePDU();
00685
00686
00687 H225_GatekeeperRequest & BuildGatekeeperRequest(unsigned seqNum);
00688 H225_GatekeeperConfirm & BuildGatekeeperConfirm(unsigned seqNum);
00689 H225_GatekeeperReject & BuildGatekeeperReject(unsigned seqNum, unsigned reason = H225_GatekeeperRejectReason::e_undefinedReason);
00690 H225_RegistrationRequest & BuildRegistrationRequest(unsigned seqNum);
00691 H225_RegistrationConfirm & BuildRegistrationConfirm(unsigned seqNum);
00692 H225_RegistrationReject & BuildRegistrationReject(unsigned seqNum, unsigned reason = H225_RegistrationRejectReason::e_undefinedReason);
00693 H225_UnregistrationRequest & BuildUnregistrationRequest(unsigned seqNum);
00694 H225_UnregistrationConfirm & BuildUnregistrationConfirm(unsigned seqNum);
00695 H225_UnregistrationReject & BuildUnregistrationReject(unsigned seqNum, unsigned reason = H225_UnregRejectReason::e_undefinedReason);
00696 H225_LocationRequest & BuildLocationRequest(unsigned seqNum);
00697 H225_LocationConfirm & BuildLocationConfirm(unsigned seqNum);
00698 H225_LocationReject & BuildLocationReject(unsigned seqNum, unsigned reason = H225_LocationRejectReason::e_undefinedReason);
00699 H225_AdmissionRequest & BuildAdmissionRequest(unsigned seqNum);
00700 H225_AdmissionConfirm & BuildAdmissionConfirm(unsigned seqNum);
00701 H225_AdmissionReject & BuildAdmissionReject(unsigned seqNum, unsigned reason = H225_AdmissionRejectReason::e_undefinedReason);
00702 H225_DisengageRequest & BuildDisengageRequest(unsigned seqNum);
00703 H225_DisengageConfirm & BuildDisengageConfirm(unsigned seqNum);
00704 H225_DisengageReject & BuildDisengageReject(unsigned seqNum, unsigned reason = H225_DisengageRejectReason::e_securityDenial);
00705 H225_BandwidthRequest & BuildBandwidthRequest(unsigned seqNum);
00706 H225_BandwidthConfirm & BuildBandwidthConfirm(unsigned seqNum, unsigned bandwidth = 0);
00707 H225_BandwidthReject & BuildBandwidthReject(unsigned seqNum, unsigned reason = H225_BandRejectReason::e_undefinedReason);
00708 H225_InfoRequest & BuildInfoRequest(unsigned seqNum, unsigned callRef = 0, const OpalGloballyUniqueID * id = NULL);
00709 H225_InfoRequestResponse & BuildInfoRequestResponse(unsigned seqNum);
00710 H225_InfoRequestAck & BuildInfoRequestAck(unsigned seqNum);
00711 H225_InfoRequestNak & BuildInfoRequestNak(unsigned seqNum, unsigned reason = H225_InfoRequestNakReason::e_undefinedReason);
00712 H225_ServiceControlIndication& BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id = NULL);
00713 H225_ServiceControlResponse & BuildServiceControlResponse(unsigned seqNum);
00714 H225_UnknownMessageResponse & BuildUnknownMessageResponse(unsigned seqNum);
00715 H225_RequestInProgress & BuildRequestInProgress(unsigned seqNum, unsigned delay);
00716 };
00717
00718
00720
00721 void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases);
00722 void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00723 void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00724 void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias);
00725 void H323SetAliasAddress(const PString & name, H225_AliasAddress & alias, int tag = -1);
00726 PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases);
00727 PString H323GetAliasAddressString(const H225_AliasAddress & alias);
00728 PString H323GetAliasAddressE164(const H225_AliasAddress & alias);
00729 PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases);
00730
00731 H323Connection::CallEndReason H323TranslateToCallEndReason(
00732 Q931::CauseValues cause,
00733 const H225_ReleaseCompleteReason & reason
00734 );
00735 Q931::CauseValues H323TranslateFromCallEndReason(
00736 H323Connection::CallEndReason endReason,
00737 H225_ReleaseCompleteReason & reason
00738 );
00739 Q931::CauseValues H323TranslateFromCallEndReason(
00740 const H323Connection & connection,
00741 H225_ReleaseCompleteReason & rcReason
00742 );
00743
00744 PString H323GetApplicationInfo(const H225_VendorIdentifier & vendor);
00745
00746 BOOL H323SetRTPPacketization(
00747 H245_RTPPayloadType & rtpPacketization,
00748 const OpalMediaFormat & mediaFormat,
00749 RTP_DataFrame::PayloadTypes payloadType
00750 );
00751 BOOL H323GetRTPPacketization(
00752 OpalMediaFormat & mediaFormat,
00753 const H245_RTPPayloadType & rtpPacketization
00754 );
00755
00756 #if PTRACING
00757 void H323TraceDumpPDU(
00758 const char * proto,
00759 BOOL writing,
00760 const PBYTEArray & rawData,
00761 const PASN_Object & pdu,
00762 const PASN_Choice & tag1,
00763 unsigned seqNum,
00764 const H323TransportAddress & locAddr,
00765 const H323TransportAddress & remAddr
00766 );
00767 #else
00768 #define H323TraceDumpPDU(proto, writing, rawData, pdu, tag1, seqNum, locAddr, remAddr)
00769 #endif
00770
00771
00772 #endif // __OPAL_H323PDU_H
00773
00774