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 #ifndef __OPAL_H323PDU_H
00278 #define __OPAL_H323PDU_H
00279
00280 #ifdef P_USE_PRAGMA
00281 #pragma interface
00282 #endif
00283
00284
00285 #include <ptlib/sockets.h>
00286 #include "h323con.h"
00287 #include "transports.h"
00288 #include "q931.h"
00289 #include "h225.h"
00290 #include "h245.h"
00291 #include "h323trans.h"
00292
00293
00294 class H225_RAS;
00295
00296
00297 #define H225_PROTOCOL_VERSION 6
00298 #define H245_PROTOCOL_VERSION 13
00299
00300
00302
00305 class H323SignalPDU : public H225_H323_UserInformation
00306 {
00307 PCLASSINFO(H323SignalPDU, H225_H323_UserInformation);
00308
00309 public:
00314 H323SignalPDU();
00315
00318 H225_Setup_UUIE & BuildSetup(
00319 const H323Connection & connection,
00320 const H323TransportAddress & destAddr
00321 );
00322
00325 H225_CallProceeding_UUIE & BuildCallProceeding(
00326 const H323Connection & connection
00327 );
00328
00331 H225_Connect_UUIE & BuildConnect(
00332 const H323Connection & connection
00333 );
00334
00337 H225_Connect_UUIE & BuildConnect(
00338 const H323Connection & connection,
00339 const PIPSocket::Address & h245Address,
00340 WORD port
00341 );
00342
00345 H225_Alerting_UUIE & BuildAlerting(
00346 const H323Connection & connection
00347 );
00348
00351 H225_Information_UUIE & BuildInformation(
00352 const H323Connection & connection
00353 );
00354
00357 H225_ReleaseComplete_UUIE & BuildReleaseComplete(
00358 const H323Connection & connection
00359 );
00360
00363 H225_Facility_UUIE * BuildFacility(
00364 const H323Connection & connection,
00365 BOOL empty
00366 );
00367
00370 H225_Progress_UUIE & BuildProgress(
00371 const H323Connection & connection
00372 );
00373
00376 H225_Status_UUIE & BuildStatus(
00377 const H323Connection & connection
00378 );
00379
00382 H225_StatusInquiry_UUIE & BuildStatusInquiry(
00383 const H323Connection & connection
00384 );
00385
00388 H225_SetupAcknowledge_UUIE & BuildSetupAcknowledge(
00389 const H323Connection & connection
00390 );
00391
00394 H225_Notify_UUIE & BuildNotify(
00395 const H323Connection & connection
00396 );
00398
00399
00404 void PrintOn(
00405 ostream & strm
00406 ) const;
00407
00410 BOOL Read(
00411 H323Transport & transport
00412 );
00413
00416 BOOL ProcessReadData(
00417 H323Transport & transport,
00418 const PBYTEArray & rawData
00419 );
00420
00423 BOOL Write(
00424 H323Transport & transport,
00425 H323Connection & connection
00426 );
00427
00430 const Q931 & GetQ931() const { return q931pdu; }
00431
00434 Q931 & GetQ931() { return q931pdu; }
00435
00438 void SetQ931(const Q931 & _q931pdu) { q931pdu = _q931pdu; }
00439
00444 void BuildQ931();
00445
00450 PString GetSourceAliases(
00451 const H323Transport * transport = NULL
00452 ) const;
00453
00454
00459 PString GetSourceURL() const;
00460
00465 PString GetDestinationAlias(
00466 BOOL firstAliasOnly = FALSE
00467 ) const;
00468
00473 BOOL GetSourceE164(
00474 PString & number
00475 ) const;
00476
00481 BOOL GetDestinationE164(
00482 PString & number
00483 ) const;
00484
00488 unsigned GetDistinctiveRing() const;
00489
00494 void SetQ931Fields(
00495 const H323Connection & connection,
00496 BOOL insertPartyNumbers = FALSE,
00497 unsigned plan = 1,
00498 unsigned type = 0,
00499 int presentation = -1,
00500 int screening = -1
00501 );
00502
00503 protected:
00504
00505
00506 Q931 q931pdu;
00507 };
00508
00509
00511
00514 class H323ControlPDU : public H245_MultimediaSystemControlMessage
00515 {
00516 PCLASSINFO(H323ControlPDU, H245_MultimediaSystemControlMessage);
00517
00518 public:
00519 H245_RequestMessage & Build(H245_RequestMessage ::Choices request);
00520 H245_ResponseMessage & Build(H245_ResponseMessage ::Choices response);
00521 H245_CommandMessage & Build(H245_CommandMessage ::Choices command);
00522 H245_IndicationMessage & Build(H245_IndicationMessage::Choices indication);
00523
00524 H245_MasterSlaveDetermination & BuildMasterSlaveDetermination(
00525 unsigned terminalType,
00526 unsigned statusDeterminationNumber
00527 );
00528 H245_MasterSlaveDeterminationAck & BuildMasterSlaveDeterminationAck(
00529 BOOL isMaster
00530 );
00531 H245_MasterSlaveDeterminationReject & BuildMasterSlaveDeterminationReject(
00532 unsigned cause
00533 );
00534
00535 H245_TerminalCapabilitySet & BuildTerminalCapabilitySet(
00536 const H323Connection & connection,
00537 unsigned sequenceNumber,
00538 BOOL empty
00539 );
00540 H245_TerminalCapabilitySetAck & BuildTerminalCapabilitySetAck(
00541 unsigned sequenceNumber
00542 );
00543 H245_TerminalCapabilitySetReject & BuildTerminalCapabilitySetReject(
00544 unsigned sequenceNumber,
00545 unsigned cause
00546 );
00547
00548 H245_OpenLogicalChannel & BuildOpenLogicalChannel(
00549 unsigned forwardLogicalChannelNumber
00550 );
00551 H245_RequestChannelClose & BuildRequestChannelClose(
00552 unsigned channelNumber,
00553 unsigned reason
00554 );
00555 H245_CloseLogicalChannel & BuildCloseLogicalChannel(
00556 unsigned channelNumber
00557 );
00558 H245_OpenLogicalChannelAck & BuildOpenLogicalChannelAck(
00559 unsigned channelNumber
00560 );
00561 H245_OpenLogicalChannelReject & BuildOpenLogicalChannelReject(
00562 unsigned channelNumber,
00563 unsigned cause
00564 );
00565 H245_OpenLogicalChannelConfirm & BuildOpenLogicalChannelConfirm(
00566 unsigned channelNumber
00567 );
00568 H245_CloseLogicalChannelAck & BuildCloseLogicalChannelAck(
00569 unsigned channelNumber
00570 );
00571 H245_RequestChannelCloseAck & BuildRequestChannelCloseAck(
00572 unsigned channelNumber
00573 );
00574 H245_RequestChannelCloseReject & BuildRequestChannelCloseReject(
00575 unsigned channelNumber
00576 );
00577 H245_RequestChannelCloseRelease & BuildRequestChannelCloseRelease(
00578 unsigned channelNumber
00579 );
00580
00581 H245_RequestMode & BuildRequestMode(
00582 unsigned sequenceNumber
00583 );
00584 H245_RequestModeAck & BuildRequestModeAck(
00585 unsigned sequenceNumber,
00586 unsigned response
00587 );
00588 H245_RequestModeReject & BuildRequestModeReject(
00589 unsigned sequenceNumber,
00590 unsigned cause
00591 );
00592
00593 H245_RoundTripDelayRequest & BuildRoundTripDelayRequest(
00594 unsigned sequenceNumber
00595 );
00596 H245_RoundTripDelayResponse & BuildRoundTripDelayResponse(
00597 unsigned sequenceNumber
00598 );
00599
00600 H245_UserInputIndication & BuildUserInputIndication(
00601 const PString & value
00602 );
00603 H245_UserInputIndication & BuildUserInputIndication(
00604 char tone,
00605 unsigned duration,
00606 unsigned logicalChannel,
00607 unsigned rtpTimestamp
00608 );
00609
00610 H245_FunctionNotUnderstood & BuildFunctionNotUnderstood(
00611 const H323ControlPDU & pdu
00612 );
00613
00614 H245_EndSessionCommand & BuildEndSessionCommand(
00615 unsigned reason
00616 );
00617 };
00618
00619
00621
00624 class H323RasPDU : public H225_RasMessage, public H323TransactionPDU
00625 {
00626 PCLASSINFO(H323RasPDU, H225_RasMessage);
00627
00628 public:
00629 H323RasPDU();
00630 H323RasPDU(
00631 const H235Authenticators & authenticators
00632 );
00633
00634
00635 virtual PObject * Clone() const;
00636
00637
00638 virtual PASN_Object & GetPDU();
00639 virtual PASN_Choice & GetChoice();
00640 virtual const PASN_Object & GetPDU() const;
00641 virtual const PASN_Choice & GetChoice() const;
00642 virtual unsigned GetSequenceNumber() const;
00643 virtual unsigned GetRequestInProgressDelay() const;
00644 #if PTRACING
00645 virtual const char * GetProtocolName() const;
00646 #endif
00647 virtual H323TransactionPDU * ClonePDU() const;
00648 virtual void DeletePDU();
00649
00650
00651 H225_GatekeeperRequest & BuildGatekeeperRequest(unsigned seqNum);
00652 H225_GatekeeperConfirm & BuildGatekeeperConfirm(unsigned seqNum);
00653 H225_GatekeeperReject & BuildGatekeeperReject(unsigned seqNum, unsigned reason = H225_GatekeeperRejectReason::e_undefinedReason);
00654 H225_RegistrationRequest & BuildRegistrationRequest(unsigned seqNum);
00655 H225_RegistrationConfirm & BuildRegistrationConfirm(unsigned seqNum);
00656 H225_RegistrationReject & BuildRegistrationReject(unsigned seqNum, unsigned reason = H225_RegistrationRejectReason::e_undefinedReason);
00657 H225_UnregistrationRequest & BuildUnregistrationRequest(unsigned seqNum);
00658 H225_UnregistrationConfirm & BuildUnregistrationConfirm(unsigned seqNum);
00659 H225_UnregistrationReject & BuildUnregistrationReject(unsigned seqNum, unsigned reason = H225_UnregRejectReason::e_undefinedReason);
00660 H225_LocationRequest & BuildLocationRequest(unsigned seqNum);
00661 H225_LocationConfirm & BuildLocationConfirm(unsigned seqNum);
00662 H225_LocationReject & BuildLocationReject(unsigned seqNum, unsigned reason = H225_LocationRejectReason::e_undefinedReason);
00663 H225_AdmissionRequest & BuildAdmissionRequest(unsigned seqNum);
00664 H225_AdmissionConfirm & BuildAdmissionConfirm(unsigned seqNum);
00665 H225_AdmissionReject & BuildAdmissionReject(unsigned seqNum, unsigned reason = H225_AdmissionRejectReason::e_undefinedReason);
00666 H225_DisengageRequest & BuildDisengageRequest(unsigned seqNum);
00667 H225_DisengageConfirm & BuildDisengageConfirm(unsigned seqNum);
00668 H225_DisengageReject & BuildDisengageReject(unsigned seqNum, unsigned reason = H225_DisengageRejectReason::e_securityDenial);
00669 H225_BandwidthRequest & BuildBandwidthRequest(unsigned seqNum);
00670 H225_BandwidthConfirm & BuildBandwidthConfirm(unsigned seqNum, unsigned bandwidth = 0);
00671 H225_BandwidthReject & BuildBandwidthReject(unsigned seqNum, unsigned reason = H225_BandRejectReason::e_undefinedReason);
00672 H225_InfoRequest & BuildInfoRequest(unsigned seqNum, unsigned callRef = 0, const OpalGloballyUniqueID * id = NULL);
00673 H225_InfoRequestResponse & BuildInfoRequestResponse(unsigned seqNum);
00674 H225_InfoRequestAck & BuildInfoRequestAck(unsigned seqNum);
00675 H225_InfoRequestNak & BuildInfoRequestNak(unsigned seqNum, unsigned reason = H225_InfoRequestNakReason::e_undefinedReason);
00676 H225_ServiceControlIndication& BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id = NULL);
00677 H225_ServiceControlResponse & BuildServiceControlResponse(unsigned seqNum);
00678 H225_UnknownMessageResponse & BuildUnknownMessageResponse(unsigned seqNum);
00679 H225_RequestInProgress & BuildRequestInProgress(unsigned seqNum, unsigned delay);
00680 };
00681
00682
00684
00685 void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases);
00686 void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00687 void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00688 void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias);
00689 void H323SetAliasAddress(const PString & name, H225_AliasAddress & alias, int tag = -1);
00690 PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases);
00691 PString H323GetAliasAddressString(const H225_AliasAddress & alias);
00692 PString H323GetAliasAddressE164(const H225_AliasAddress & alias);
00693 PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases);
00694
00695 H323Connection::CallEndReason H323TranslateToCallEndReason(
00696 Q931::CauseValues cause,
00697 const H225_ReleaseCompleteReason & reason
00698 );
00699 Q931::CauseValues H323TranslateFromCallEndReason(
00700 H323Connection::CallEndReason endReason,
00701 H225_ReleaseCompleteReason & reason
00702 );
00703 Q931::CauseValues H323TranslateFromCallEndReason(
00704 const H323Connection & connection,
00705 H225_ReleaseCompleteReason & rcReason
00706 );
00707
00708 PString H323GetApplicationInfo(const H225_VendorIdentifier & vendor);
00709
00710
00711 #if PTRACING
00712 void H323TraceDumpPDU(
00713 const char * proto,
00714 BOOL writing,
00715 const PBYTEArray & rawData,
00716 const PASN_Object & pdu,
00717 const PASN_Choice & tag1,
00718 unsigned seqNum,
00719 const H323TransportAddress & locAddr,
00720 const H323TransportAddress & remAddr
00721 );
00722 #else
00723 #define H323TraceDumpPDU(proto, writing, rawData, pdu, tag1, seqNum, locAddr, remAddr)
00724 #endif
00725
00726
00727 #endif // __OPAL_H323PDU_H
00728
00729