q931.h

Go to the documentation of this file.
00001 /*
00002  * q931.h
00003  *
00004  * Q.931 protocol handler
00005  *
00006  * Open H323 Library
00007  *
00008  * Copyright (c) 1998-2001 Equivalence Pty. Ltd.
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open H323 Library.
00021  *
00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
00023  *
00024  * Contributor(s): ______________________________________.
00025  *
00026  * $Revision: 21283 $
00027  * $Author: rjongbloed $
00028  * $Date: 2008-10-11 07:10:58 +0000 (Sat, 11 Oct 2008) $
00029  */
00030 
00031 #ifndef OPAL_H323_Q931_H
00032 #define OPAL_H323_Q931_H
00033 
00034 #ifdef P_USE_PRAGMA
00035 #pragma interface
00036 #endif
00037 
00038 #include <opal/buildopts.h>
00039 
00041 
00044 class Q931 : public PObject
00045 {
00046   PCLASSINFO(Q931, PObject)
00047   public:
00048     enum MsgTypes {
00049       NationalEscapeMsg  = 0x00,
00050       AlertingMsg        = 0x01,
00051       CallProceedingMsg  = 0x02,
00052       ConnectMsg         = 0x07,
00053       ConnectAckMsg      = 0x0f,
00054       ProgressMsg        = 0x03,
00055       SetupMsg           = 0x05,
00056       SetupAckMsg        = 0x0d,
00057       ResumeMsg          = 0x26,
00058       ResumeAckMsg       = 0x2e,
00059       ResumeRejectMsg    = 0x22,
00060       SuspendMsg         = 0x25,
00061       SuspendAckMsg      = 0x2d,
00062       SuspendRejectMsg   = 0x21,
00063       UserInformationMsg = 0x20,
00064       DisconnectMsg      = 0x45,
00065       ReleaseMsg         = 0x4d,
00066       ReleaseCompleteMsg = 0x5a,
00067       RestartMsg         = 0x46,
00068       RestartAckMsg      = 0x4e,
00069       SegmentMsg         = 0x60,
00070       CongestionCtrlMsg  = 0x79,
00071       InformationMsg     = 0x7b,
00072       NotifyMsg          = 0x6e,
00073       StatusMsg          = 0x7d,
00074       StatusEnquiryMsg   = 0x75,
00075       FacilityMsg        = 0x62
00076     };
00077 
00078     Q931();
00079     Q931(const Q931 & other);
00080     Q931 & operator=(const Q931 & other);
00081 
00082     void BuildFacility(int callRef, PBoolean fromDest);
00083     void BuildInformation(int callRef, PBoolean fromDest);
00084     void BuildProgress(
00085       int callRef,
00086       PBoolean fromDest,
00087       unsigned description,
00088       unsigned codingStandard = 0,
00089       unsigned location = 0
00090     );
00091     void BuildNotify(int callRef, PBoolean fromDest);
00092     void BuildCallProceeding(int callRef);
00093     void BuildSetupAcknowledge(int callRef);
00094     void BuildAlerting(int callRef);
00095     void BuildSetup(int callRef = -1);
00096     void BuildConnect(int callRef);
00097     void BuildStatus(int callRef, PBoolean fromDest);
00098     void BuildStatusEnquiry(int callRef, PBoolean fromDest);
00099     void BuildReleaseComplete(int callRef, PBoolean fromDest);
00100 
00101     PBoolean Decode(const PBYTEArray & data);
00102     PBoolean Encode(PBYTEArray & data) const;
00103 
00104     void PrintOn(ostream & strm) const;
00105     PString GetMessageTypeName() const;
00106 
00107     static unsigned GenerateCallReference();
00108     unsigned GetCallReference() const { return callReference; }
00109     PBoolean IsFromDestination() const { return fromDestination; }
00110     MsgTypes GetMessageType() const { return messageType; }
00111 
00112     enum InformationElementCodes {
00113       BearerCapabilityIE      = 0x04,
00114       CauseIE                 = 0x08,
00115       ChannelIdentificationIE = 0x18,
00116       FacilityIE              = 0x1c,
00117       ProgressIndicatorIE     = 0x1e,
00118       CallStateIE             = 0x14,
00119       DisplayIE               = 0x28,
00120       KeypadIE                = 0x2c,
00121       SignalIE                = 0x34,
00122       ConnectedNumberIE       = 0x4c,
00123       CallingPartyNumberIE    = 0x6c,
00124       CalledPartyNumberIE     = 0x70,
00125       RedirectingNumberIE     = 0x74,
00126       UserUserIE              = 0x7e
00127     };
00128     friend ostream & operator<<(ostream & strm, InformationElementCodes ie);
00129 
00130     PBoolean HasIE(InformationElementCodes ie) const;
00131     PBYTEArray GetIE(
00132       InformationElementCodes ie,
00133       PINDEX idx = 0 // Index of duplicate IE entry
00134     ) const;
00135     void SetIE(
00136       InformationElementCodes ie,
00137       const PBYTEArray & userData,
00138       bool append = FALSE
00139     );
00140     void RemoveIE(InformationElementCodes ie);
00141 
00142     enum InformationTransferCapability {
00143       TransferSpeech,
00144       TransferUnrestrictedDigital = 8,
00145       TransferRestrictedDigital = 9,
00146       Transfer3_1kHzAudio = 16,
00147       TrasnferUnrestrictedDigitalWithTones = 17,
00148       TransferVideo = 24
00149     };
00150 
00151     void SetBearerCapabilities(
00152       InformationTransferCapability capability,
00153       unsigned transferRate,        
00154       unsigned codingStandard = 0,  
00155       unsigned userInfoLayer1 = 5   
00156     );
00157 
00158     PBoolean GetBearerCapabilities(
00159       InformationTransferCapability & capability,
00160       unsigned & transferRate,        
00161       unsigned * codingStandard = NULL,
00162       unsigned * userInfoLayer1 = NULL
00163     );
00164 
00165     enum CauseValues {
00166       UnknownCauseIE               =  0,
00167       UnallocatedNumber            =  1,
00168       NoRouteToNetwork             =  2,
00169       NoRouteToDestination         =  3,
00170       SendSpecialTone              =  4,
00171       MisdialledTrunkPrefix        =  5,
00172       ChannelUnacceptable          =  6,
00173       NormalCallClearing           = 16,
00174       UserBusy                     = 17,
00175       NoResponse                   = 18,
00176       NoAnswer                     = 19,
00177       SubscriberAbsent             = 20,
00178       CallRejected                 = 21,
00179       NumberChanged                = 22,
00180       Redirection                  = 23,
00181       ExchangeRoutingError         = 25,
00182       NonSelectedUserClearing      = 26,
00183       DestinationOutOfOrder        = 27,
00184       InvalidNumberFormat          = 28,
00185       FacilityRejected             = 29,
00186       StatusEnquiryResponse        = 30,
00187       NormalUnspecified            = 31,
00188       NoCircuitChannelAvailable    = 34,
00189       NetworkOutOfOrder            = 38,
00190       TemporaryFailure             = 41,
00191       Congestion                   = 42,
00192       RequestedCircuitNotAvailable = 44,
00193       ResourceUnavailable          = 47,
00194       ServiceOptionNotAvailable    = 63,
00195       InvalidCallReference         = 81,
00196       ClearedRequestedCallIdentity = 86,
00197       IncompatibleDestination      = 88,
00198       IENonExistantOrNotImplemented= 99,
00199       TimerExpiry                  = 102,
00200       ProtocolErrorUnspecified     = 111,
00201       InterworkingUnspecified      = 127,
00202       ErrorInCauseIE               = 0x100
00203     };
00204     friend ostream & operator<<(ostream & strm, CauseValues cause);
00205 
00206     void SetCause(
00207       CauseValues value,
00208       unsigned standard = 0,  
00209       unsigned location = 0   
00210     );
00211     CauseValues GetCause(
00212       unsigned * standard = NULL,  
00213       unsigned * location = NULL   
00214     ) const;
00215 
00216     enum CallStates {
00217       CallState_Null                  = 0,
00218       CallState_CallInitiated         = 1,
00219       CallState_OverlapSending        = 2,
00220       CallState_OutgoingCallProceeding= 3,
00221       CallState_CallDelivered         = 4,
00222       CallState_CallPresent           = 6,
00223       CallState_CallReceived          = 7,
00224       CallState_ConnectRequest        = 8,
00225       CallState_IncomingCallProceeding= 9,
00226       CallState_Active                = 10,
00227       CallState_DisconnectRequest     = 11,
00228       CallState_DisconnectIndication  = 12,
00229       CallState_SuspendRequest        = 15,
00230       CallState_ResumeRequest         = 17,
00231       CallState_ReleaseRequest        = 19,
00232       CallState_OverlapReceiving      = 25,
00233       CallState_ErrorInIE             = 0x100
00234     };
00235     void SetCallState(
00236       CallStates value,
00237       unsigned standard = 0  
00238     );
00239     CallStates GetCallState(
00240       unsigned * standard = NULL  
00241     ) const;
00242 
00243     enum SignalInfo {
00244       SignalDialToneOn,
00245       SignalRingBackToneOn,
00246       SignalInterceptToneOn,
00247       SignalNetworkCongestionToneOn,
00248       SignalBusyToneOn,
00249       SignalConfirmToneOn,
00250       SignalAnswerToneOn,
00251       SignalCallWaitingTone,
00252       SignalOffhookWarningTone,
00253       SignalPreemptionToneOn,
00254       SignalTonesOff = 0x3f,
00255       SignalAlertingPattern0 = 0x40,
00256       SignalAlertingPattern1,
00257       SignalAlertingPattern2,
00258       SignalAlertingPattern3,
00259       SignalAlertingPattern4,
00260       SignalAlertingPattern5,
00261       SignalAlertingPattern6,
00262       SignalAlertingPattern7,
00263       SignalAlertingOff = 0x4f,
00264       SignalErrorInIE = 0x100
00265     };
00266     void SetSignalInfo(SignalInfo value);
00267     SignalInfo GetSignalInfo() const;
00268 
00269     void SetKeypad(const PString & digits);
00270     PString GetKeypad() const;
00271 
00272     enum ProgressIndication {
00273        ProgressNotEndToEndISDN      = 1,      // Call is not end-to-end ISDN; 
00274                                               // further call progress information may be available in-band  
00275        ProgressDestinationNonISDN   = 2,      // Destination address is non ISDN  
00276        ProgressOriginNotISDN        = 3,      // Origination address is non ISDN  
00277        ProgressReturnedToISDN       = 4,      // Call has returned to the ISDN 
00278        ProgressServiceChange        = 5,      // Interworking has occurred and has 
00279                                               // resulted in a telecommunication service change
00280        ProgressInbandInformationAvailable = 8 // In-band information or an appropriate pattern is now available.   
00281     };
00282 
00283     void SetProgressIndicator(
00284       unsigned description,
00285       unsigned codingStandard = 0,
00286       unsigned location = 0
00287     );
00288     PBoolean GetProgressIndicator(
00289       unsigned & description,
00290       unsigned * codingStandard = NULL,
00291       unsigned * location = NULL
00292     ) const;
00293 
00294     void SetDisplayName(const PString & name);
00295     PString GetDisplayName() const;
00296 
00297     enum NumberingPlanCodes {
00298       UnknownPlan          = 0x00,
00299       ISDNPlan             = 0x01,
00300       DataPlan             = 0x03,
00301       TelexPlan            = 0x04,
00302       NationalStandardPlan = 0x08,
00303       PrivatePlan          = 0x09,
00304       ReservedPlan         = 0x0f
00305     };
00306 
00307     enum TypeOfNumberCodes {
00308       UnknownType          = 0x00,
00309       InternationalType    = 0x01,
00310       NationalType         = 0x02,
00311       NetworkSpecificType  = 0x03,
00312       SubscriberType       = 0x04,
00313       AbbreviatedType      = 0x06,
00314       ReservedType         = 0x07
00315     };
00316 
00317     void SetCallingPartyNumber(
00318       const PString & number, 
00319       unsigned plan = 1,      
00320       unsigned type = 0,      
00321       int presentation = -1,  
00322       int screening = -1      
00323     );
00324     PBoolean GetCallingPartyNumber(
00325       PString & number,               
00326       unsigned * plan = NULL,         
00327       unsigned * type = NULL,         
00328       unsigned * presentation = NULL, 
00329       unsigned * screening = NULL,    
00330       unsigned defPresentation = 0,   
00331       unsigned defScreening = 0       
00332     ) const;
00333 
00334     void SetCalledPartyNumber(
00335       const PString & number, 
00336       unsigned plan = 1,      
00337       unsigned type = 0       
00338     );
00339     PBoolean GetCalledPartyNumber(
00340       PString & number,       
00341       unsigned * plan = NULL, 
00342       unsigned * type = NULL  
00343     ) const;
00344 
00345     void SetRedirectingNumber(
00346       const PString & number, 
00347       unsigned plan = 1,      
00348       unsigned type = 0,      
00349       int presentation = -1,  
00350       int screening = -1,     
00351       int reason = -1         
00352     );
00353     PBoolean GetRedirectingNumber(
00354       PString & number,               
00355       unsigned * plan = NULL,         
00356       unsigned * type = NULL,         
00357       unsigned * presentation = NULL, 
00358       unsigned * screening = NULL,    
00359       unsigned * reason = NULL,       
00360       unsigned defPresentation = 0,   
00361       unsigned defScreening = 0,      
00362       unsigned defReason =0           
00363     ) const;
00364 
00365     void SetConnectedNumber(
00366       const PString & number, 
00367       unsigned plan = 1,      
00368       unsigned type = 0,      
00369       int presentation = -1,  
00370       int screening = -1,     
00371       int reason = -1         
00372     );
00373     PBoolean GetConnectedNumber(
00374       PString & number,               
00375       unsigned * plan = NULL,         
00376       unsigned * type = NULL,         
00377       unsigned * presentation = NULL, 
00378       unsigned * screening = NULL,    
00379       unsigned * reason = NULL,       
00380       unsigned defPresentation = 0,   
00381       unsigned defScreening = 0,      
00382       unsigned defReason =0           
00383     ) const;
00384 
00391     void SetChannelIdentification(
00392       unsigned interfaceType = 0,        
00393       unsigned preferredOrExclusive = 0, 
00394       int      channelNumber = 1         
00395     );
00396 
00399     PBoolean GetChannelIdentification(
00400       unsigned * interfaceType = NULL,        
00401       unsigned * preferredOrExclusive = NULL, 
00402       int      * channelNumber = NULL         
00403     ) const;
00404 
00405   protected:
00406     unsigned callReference;
00407     PBoolean fromDestination;
00408     unsigned protocolDiscriminator;
00409     MsgTypes messageType;
00410 
00411     PARRAY(InternalInformationElement, PBYTEArray);
00412     PDICTIONARY(InternalInformationElements, POrdinalKey, InternalInformationElement);
00413     InternalInformationElements informationElements;
00414 };
00415 
00416 
00417 #endif // OPAL_H323_Q931_H
00418 
00419 

Generated on Mon Feb 23 02:01:38 2009 for OPAL by  doxygen 1.5.1