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 #ifndef __OPAL_H323PDU_H
00263 #define __OPAL_H323PDU_H
00264
00265 #ifdef P_USE_PRAGMA
00266 #pragma interface
00267 #endif
00268
00269
00270 #include <ptlib/sockets.h>
00271 #include "h323con.h"
00272 #include "transports.h"
00273 #include "q931.h"
00274 #include "h225.h"
00275 #include "h245.h"
00276 #include "h323trans.h"
00277
00278
00279 class H225_RAS;
00280
00281
00282 #define H225_PROTOCOL_VERSION 4
00283 #define H245_PROTOCOL_VERSION 11
00284
00285
00287
00290 class H323SignalPDU : public H225_H323_UserInformation
00291 {
00292 PCLASSINFO(H323SignalPDU, H225_H323_UserInformation);
00293
00294 public:
00299 H323SignalPDU();
00300
00303 H225_Setup_UUIE & BuildSetup(
00304 const H323Connection & connection,
00305 const H323TransportAddress & destAddr
00306 );
00307
00310 H225_CallProceeding_UUIE & BuildCallProceeding(
00311 const H323Connection & connection
00312 );
00313
00316 H225_Connect_UUIE & BuildConnect(
00317 const H323Connection & connection
00318 );
00319
00322 H225_Connect_UUIE & BuildConnect(
00323 const H323Connection & connection,
00324 const PIPSocket::Address & h245Address,
00325 WORD port
00326 );
00327
00330 H225_Alerting_UUIE & BuildAlerting(
00331 const H323Connection & connection
00332 );
00333
00336 H225_Information_UUIE & BuildInformation(
00337 const H323Connection & connection
00338 );
00339
00342 H225_ReleaseComplete_UUIE & BuildReleaseComplete(
00343 const H323Connection & connection
00344 );
00345
00348 H225_Facility_UUIE * BuildFacility(
00349 const H323Connection & connection,
00350 BOOL empty
00351 );
00352
00355 H225_Progress_UUIE & BuildProgress(
00356 const H323Connection & connection
00357 );
00358
00361 H225_Status_UUIE & BuildStatus(
00362 const H323Connection & connection
00363 );
00364
00367 H225_StatusInquiry_UUIE & BuildStatusInquiry(
00368 const H323Connection & connection
00369 );
00370
00373 H225_SetupAcknowledge_UUIE & BuildSetupAcknowledge(
00374 const H323Connection & connection
00375 );
00376
00379 H225_Notify_UUIE & BuildNotify(
00380 const H323Connection & connection
00381 );
00383
00384
00389 void PrintOn(
00390 ostream & strm
00391 ) const;
00392
00395 BOOL Read(
00396 H323Transport & transport
00397 );
00398
00401 BOOL Write(
00402 H323Transport & transport
00403 );
00404
00407 const Q931 & GetQ931() const { return q931pdu; }
00408
00411 Q931 & GetQ931() { return q931pdu; }
00412
00415 void SetQ931(const Q931 & _q931pdu) { q931pdu = _q931pdu; }
00416
00421 void BuildQ931();
00422
00427 PString GetSourceAliases(
00428 const H323Transport * transport = NULL
00429 ) const;
00430
00435 PString GetDestinationAlias(
00436 BOOL firstAliasOnly = FALSE
00437 ) const;
00438
00443 BOOL GetSourceE164(
00444 PString & number
00445 ) const;
00446
00451 BOOL GetDestinationE164(
00452 PString & number
00453 ) const;
00454
00458 unsigned GetDistinctiveRing() const;
00459
00464 void SetQ931Fields(
00465 const H323Connection & connection,
00466 BOOL insertPartyNumbers = FALSE,
00467 unsigned plan = 1,
00468 unsigned type = 0,
00469 int presentation = -1,
00470 int screening = -1
00471 );
00472
00473 protected:
00474
00475
00476 Q931 q931pdu;
00477 };
00478
00479
00481
00484 class H323ControlPDU : public H245_MultimediaSystemControlMessage
00485 {
00486 PCLASSINFO(H323ControlPDU, H245_MultimediaSystemControlMessage);
00487
00488 public:
00489 H245_RequestMessage & Build(H245_RequestMessage ::Choices request);
00490 H245_ResponseMessage & Build(H245_ResponseMessage ::Choices response);
00491 H245_CommandMessage & Build(H245_CommandMessage ::Choices command);
00492 H245_IndicationMessage & Build(H245_IndicationMessage::Choices indication);
00493
00494 H245_MasterSlaveDetermination & BuildMasterSlaveDetermination(
00495 unsigned terminalType,
00496 unsigned statusDeterminationNumber
00497 );
00498 H245_MasterSlaveDeterminationAck & BuildMasterSlaveDeterminationAck(
00499 BOOL isMaster
00500 );
00501 H245_MasterSlaveDeterminationReject & BuildMasterSlaveDeterminationReject(
00502 unsigned cause
00503 );
00504
00505 H245_TerminalCapabilitySet & BuildTerminalCapabilitySet(
00506 const H323Connection & connection,
00507 unsigned sequenceNumber,
00508 BOOL empty
00509 );
00510 H245_TerminalCapabilitySetAck & BuildTerminalCapabilitySetAck(
00511 unsigned sequenceNumber
00512 );
00513 H245_TerminalCapabilitySetReject & BuildTerminalCapabilitySetReject(
00514 unsigned sequenceNumber,
00515 unsigned cause
00516 );
00517
00518 H245_OpenLogicalChannel & BuildOpenLogicalChannel(
00519 unsigned forwardLogicalChannelNumber
00520 );
00521 H245_RequestChannelClose & BuildRequestChannelClose(
00522 unsigned channelNumber,
00523 unsigned reason
00524 );
00525 H245_CloseLogicalChannel & BuildCloseLogicalChannel(
00526 unsigned channelNumber
00527 );
00528 H245_OpenLogicalChannelAck & BuildOpenLogicalChannelAck(
00529 unsigned channelNumber
00530 );
00531 H245_OpenLogicalChannelReject & BuildOpenLogicalChannelReject(
00532 unsigned channelNumber,
00533 unsigned cause
00534 );
00535 H245_OpenLogicalChannelConfirm & BuildOpenLogicalChannelConfirm(
00536 unsigned channelNumber
00537 );
00538 H245_CloseLogicalChannelAck & BuildCloseLogicalChannelAck(
00539 unsigned channelNumber
00540 );
00541 H245_RequestChannelCloseAck & BuildRequestChannelCloseAck(
00542 unsigned channelNumber
00543 );
00544 H245_RequestChannelCloseReject & BuildRequestChannelCloseReject(
00545 unsigned channelNumber
00546 );
00547 H245_RequestChannelCloseRelease & BuildRequestChannelCloseRelease(
00548 unsigned channelNumber
00549 );
00550
00551 H245_RequestMode & BuildRequestMode(
00552 unsigned sequenceNumber
00553 );
00554 H245_RequestModeAck & BuildRequestModeAck(
00555 unsigned sequenceNumber,
00556 unsigned response
00557 );
00558 H245_RequestModeReject & BuildRequestModeReject(
00559 unsigned sequenceNumber,
00560 unsigned cause
00561 );
00562
00563 H245_RoundTripDelayRequest & BuildRoundTripDelayRequest(
00564 unsigned sequenceNumber
00565 );
00566 H245_RoundTripDelayResponse & BuildRoundTripDelayResponse(
00567 unsigned sequenceNumber
00568 );
00569
00570 H245_UserInputIndication & BuildUserInputIndication(
00571 const PString & value
00572 );
00573 H245_UserInputIndication & BuildUserInputIndication(
00574 char tone,
00575 unsigned duration,
00576 unsigned logicalChannel,
00577 unsigned rtpTimestamp
00578 );
00579
00580 H245_FunctionNotUnderstood & BuildFunctionNotUnderstood(
00581 const H323ControlPDU & pdu
00582 );
00583
00584 H245_EndSessionCommand & BuildEndSessionCommand(
00585 unsigned reason
00586 );
00587 };
00588
00589
00591
00594 class H323RasPDU : public H225_RasMessage, public H323TransactionPDU
00595 {
00596 PCLASSINFO(H323RasPDU, H225_RasMessage);
00597
00598 public:
00599 H323RasPDU();
00600 H323RasPDU(
00601 const H235Authenticators & authenticators
00602 );
00603
00604
00605 virtual PObject * Clone() const;
00606
00607
00608 virtual PASN_Object & GetPDU();
00609 virtual PASN_Choice & GetChoice();
00610 virtual const PASN_Object & GetPDU() const;
00611 virtual const PASN_Choice & GetChoice() const;
00612 virtual unsigned GetSequenceNumber() const;
00613 virtual unsigned GetRequestInProgressDelay() const;
00614 #if PTRACING
00615 virtual const char * GetProtocolName() const;
00616 #endif
00617 virtual H323TransactionPDU * ClonePDU() const;
00618 virtual void DeletePDU();
00619
00620
00621 H225_GatekeeperRequest & BuildGatekeeperRequest(unsigned seqNum);
00622 H225_GatekeeperConfirm & BuildGatekeeperConfirm(unsigned seqNum);
00623 H225_GatekeeperReject & BuildGatekeeperReject(unsigned seqNum, unsigned reason = H225_GatekeeperRejectReason::e_undefinedReason);
00624 H225_RegistrationRequest & BuildRegistrationRequest(unsigned seqNum);
00625 H225_RegistrationConfirm & BuildRegistrationConfirm(unsigned seqNum);
00626 H225_RegistrationReject & BuildRegistrationReject(unsigned seqNum, unsigned reason = H225_RegistrationRejectReason::e_undefinedReason);
00627 H225_UnregistrationRequest & BuildUnregistrationRequest(unsigned seqNum);
00628 H225_UnregistrationConfirm & BuildUnregistrationConfirm(unsigned seqNum);
00629 H225_UnregistrationReject & BuildUnregistrationReject(unsigned seqNum, unsigned reason = H225_UnregRejectReason::e_undefinedReason);
00630 H225_LocationRequest & BuildLocationRequest(unsigned seqNum);
00631 H225_LocationConfirm & BuildLocationConfirm(unsigned seqNum);
00632 H225_LocationReject & BuildLocationReject(unsigned seqNum, unsigned reason = H225_LocationRejectReason::e_undefinedReason);
00633 H225_AdmissionRequest & BuildAdmissionRequest(unsigned seqNum);
00634 H225_AdmissionConfirm & BuildAdmissionConfirm(unsigned seqNum);
00635 H225_AdmissionReject & BuildAdmissionReject(unsigned seqNum, unsigned reason = H225_AdmissionRejectReason::e_undefinedReason);
00636 H225_DisengageRequest & BuildDisengageRequest(unsigned seqNum);
00637 H225_DisengageConfirm & BuildDisengageConfirm(unsigned seqNum);
00638 H225_DisengageReject & BuildDisengageReject(unsigned seqNum, unsigned reason = H225_DisengageRejectReason::e_securityDenial);
00639 H225_BandwidthRequest & BuildBandwidthRequest(unsigned seqNum);
00640 H225_BandwidthConfirm & BuildBandwidthConfirm(unsigned seqNum, unsigned bandwidth = 0);
00641 H225_BandwidthReject & BuildBandwidthReject(unsigned seqNum, unsigned reason = H225_BandRejectReason::e_undefinedReason);
00642 H225_InfoRequest & BuildInfoRequest(unsigned seqNum, unsigned callRef = 0, const OpalGloballyUniqueID * id = NULL);
00643 H225_InfoRequestResponse & BuildInfoRequestResponse(unsigned seqNum);
00644 H225_InfoRequestAck & BuildInfoRequestAck(unsigned seqNum);
00645 H225_InfoRequestNak & BuildInfoRequestNak(unsigned seqNum, unsigned reason = H225_InfoRequestNakReason::e_undefinedReason);
00646 H225_ServiceControlIndication& BuildServiceControlIndication(unsigned seqNum, const OpalGloballyUniqueID * id = NULL);
00647 H225_ServiceControlResponse & BuildServiceControlResponse(unsigned seqNum);
00648 H225_UnknownMessageResponse & BuildUnknownMessageResponse(unsigned seqNum);
00649 H225_RequestInProgress & BuildRequestInProgress(unsigned seqNum, unsigned delay);
00650 };
00651
00652
00654
00655 void H323SetAliasAddresses(const H323TransportAddressArray & addresses, H225_ArrayOf_AliasAddress & aliases);
00656 void H323SetAliasAddresses(const PStringArray & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00657 void H323SetAliasAddresses(const PStringList & names, H225_ArrayOf_AliasAddress & aliases, int tag = -1);
00658 void H323SetAliasAddress(const H323TransportAddress & address, H225_AliasAddress & alias);
00659 void H323SetAliasAddress(const PString & name, H225_AliasAddress & alias, int tag = -1);
00660 PStringArray H323GetAliasAddressStrings(const H225_ArrayOf_AliasAddress & aliases);
00661 PString H323GetAliasAddressString(const H225_AliasAddress & alias);
00662 PString H323GetAliasAddressE164(const H225_AliasAddress & alias);
00663 PString H323GetAliasAddressE164(const H225_ArrayOf_AliasAddress & aliases);
00664
00665 H323Connection::CallEndReason H323TranslateToCallEndReason(
00666 Q931::CauseValues cause,
00667 const H225_ReleaseCompleteReason & reason
00668 );
00669 Q931::CauseValues H323TranslateFromCallEndReason(
00670 H323Connection::CallEndReason endReason,
00671 H225_ReleaseCompleteReason & reason
00672 );
00673 Q931::CauseValues H323TranslateFromCallEndReason(
00674 const H323Connection & connection,
00675 H225_ReleaseCompleteReason & rcReason
00676 );
00677
00678 PString H323GetApplicationInfo(const H225_VendorIdentifier & vendor);
00679
00680
00681 #if PTRACING
00682 void H323TraceDumpPDU(
00683 const char * proto,
00684 BOOL writing,
00685 const PBYTEArray & rawData,
00686 const PASN_Object & pdu,
00687 const PASN_Choice & tag1,
00688 unsigned seqNum,
00689 const H323TransportAddress & locAddr,
00690 const H323TransportAddress & remAddr
00691 );
00692 #else
00693 #define H323TraceDumpPDU(proto, writing, rawData, pdu, tag1, seqNum, locAddr, remAddr)
00694 #endif
00695
00696
00697 #endif // __OPAL_H323PDU_H
00698
00699