OPAL Version 3.10.2
|
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: 24879 $ 00027 * $Author: rjongbloed $ 00028 * $Date: 2010-11-16 21:56:23 -0600 (Tue, 16 Nov 2010) $ 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 void SetBearerCapabilities( 00158 const PString & caps 00159 ); 00160 00161 PBoolean GetBearerCapabilities( 00162 InformationTransferCapability & capability, 00163 unsigned & transferRate, 00164 unsigned * codingStandard = NULL, 00165 unsigned * userInfoLayer1 = NULL 00166 ); 00167 00168 enum CauseValues { 00169 UnknownCauseIE = 0, 00170 UnallocatedNumber = 1, 00171 NoRouteToNetwork = 2, 00172 NoRouteToDestination = 3, 00173 SendSpecialTone = 4, 00174 MisdialledTrunkPrefix = 5, 00175 ChannelUnacceptable = 6, 00176 NormalCallClearing = 16, 00177 UserBusy = 17, 00178 NoResponse = 18, 00179 NoAnswer = 19, 00180 SubscriberAbsent = 20, 00181 CallRejected = 21, 00182 NumberChanged = 22, 00183 Redirection = 23, 00184 ExchangeRoutingError = 25, 00185 NonSelectedUserClearing = 26, 00186 DestinationOutOfOrder = 27, 00187 InvalidNumberFormat = 28, 00188 FacilityRejected = 29, 00189 StatusEnquiryResponse = 30, 00190 NormalUnspecified = 31, 00191 NoCircuitChannelAvailable = 34, 00192 NetworkOutOfOrder = 38, 00193 TemporaryFailure = 41, 00194 Congestion = 42, 00195 RequestedCircuitNotAvailable = 44, 00196 ResourceUnavailable = 47, 00197 ServiceOptionNotAvailable = 63, 00198 InvalidCallReference = 81, 00199 ClearedRequestedCallIdentity = 86, 00200 IncompatibleDestination = 88, 00201 IENonExistantOrNotImplemented= 99, 00202 TimerExpiry = 102, 00203 ProtocolErrorUnspecified = 111, 00204 InterworkingUnspecified = 127, 00205 ErrorInCauseIE = 0x100 00206 }; 00207 friend ostream & operator<<(ostream & strm, CauseValues cause); 00208 00209 void SetCause( 00210 CauseValues value, 00211 unsigned standard = 0, 00212 unsigned location = 0 00213 ); 00214 CauseValues GetCause( 00215 unsigned * standard = NULL, 00216 unsigned * location = NULL 00217 ) const; 00218 00219 enum CallStates { 00220 CallState_Null = 0, 00221 CallState_CallInitiated = 1, 00222 CallState_OverlapSending = 2, 00223 CallState_OutgoingCallProceeding= 3, 00224 CallState_CallDelivered = 4, 00225 CallState_CallPresent = 6, 00226 CallState_CallReceived = 7, 00227 CallState_ConnectRequest = 8, 00228 CallState_IncomingCallProceeding= 9, 00229 CallState_Active = 10, 00230 CallState_DisconnectRequest = 11, 00231 CallState_DisconnectIndication = 12, 00232 CallState_SuspendRequest = 15, 00233 CallState_ResumeRequest = 17, 00234 CallState_ReleaseRequest = 19, 00235 CallState_OverlapReceiving = 25, 00236 CallState_ErrorInIE = 0x100 00237 }; 00238 void SetCallState( 00239 CallStates value, 00240 unsigned standard = 0 00241 ); 00242 CallStates GetCallState( 00243 unsigned * standard = NULL 00244 ) const; 00245 00246 enum SignalInfo { 00247 SignalDialToneOn, 00248 SignalRingBackToneOn, 00249 SignalInterceptToneOn, 00250 SignalNetworkCongestionToneOn, 00251 SignalBusyToneOn, 00252 SignalConfirmToneOn, 00253 SignalAnswerToneOn, 00254 SignalCallWaitingTone, 00255 SignalOffhookWarningTone, 00256 SignalPreemptionToneOn, 00257 SignalTonesOff = 0x3f, 00258 SignalAlertingPattern0 = 0x40, 00259 SignalAlertingPattern1, 00260 SignalAlertingPattern2, 00261 SignalAlertingPattern3, 00262 SignalAlertingPattern4, 00263 SignalAlertingPattern5, 00264 SignalAlertingPattern6, 00265 SignalAlertingPattern7, 00266 SignalAlertingOff = 0x4f, 00267 SignalErrorInIE = 0x100 00268 }; 00269 void SetSignalInfo(SignalInfo value); 00270 SignalInfo GetSignalInfo() const; 00271 00272 void SetKeypad(const PString & digits); 00273 PString GetKeypad() const; 00274 00275 enum ProgressIndication { 00276 ProgressNotEndToEndISDN = 1, // Call is not end-to-end ISDN; 00277 // further call progress information may be available in-band 00278 ProgressDestinationNonISDN = 2, // Destination address is non ISDN 00279 ProgressOriginNotISDN = 3, // Origination address is non ISDN 00280 ProgressReturnedToISDN = 4, // Call has returned to the ISDN 00281 ProgressServiceChange = 5, // Interworking has occurred and has 00282 // resulted in a telecommunication service change 00283 ProgressInbandInformationAvailable = 8 // In-band information or an appropriate pattern is now available. 00284 }; 00285 00286 void SetProgressIndicator( 00287 unsigned description, 00288 unsigned codingStandard = 0, 00289 unsigned location = 0 00290 ); 00291 PBoolean GetProgressIndicator( 00292 unsigned & description, 00293 unsigned * codingStandard = NULL, 00294 unsigned * location = NULL 00295 ) const; 00296 00297 void SetDisplayName(const PString & name); 00298 PString GetDisplayName() const; 00299 00300 enum NumberingPlanCodes { 00301 UnknownPlan = 0x00, 00302 ISDNPlan = 0x01, 00303 DataPlan = 0x03, 00304 TelexPlan = 0x04, 00305 NationalStandardPlan = 0x08, 00306 PrivatePlan = 0x09, 00307 ReservedPlan = 0x0f 00308 }; 00309 00310 enum TypeOfNumberCodes { 00311 UnknownType = 0x00, 00312 InternationalType = 0x01, 00313 NationalType = 0x02, 00314 NetworkSpecificType = 0x03, 00315 SubscriberType = 0x04, 00316 AbbreviatedType = 0x06, 00317 ReservedType = 0x07 00318 }; 00319 00320 void SetCallingPartyNumber( 00321 const PString & number, 00322 unsigned plan = 1, 00323 unsigned type = 0, 00324 int presentation = -1, 00325 int screening = -1 00326 ); 00327 PBoolean GetCallingPartyNumber( 00328 PString & number, 00329 unsigned * plan = NULL, 00330 unsigned * type = NULL, 00331 unsigned * presentation = NULL, 00332 unsigned * screening = NULL, 00333 unsigned defPresentation = 0, 00334 unsigned defScreening = 0 00335 ) const; 00336 00337 void SetCalledPartyNumber( 00338 const PString & number, 00339 unsigned plan = 1, 00340 unsigned type = 0 00341 ); 00342 PBoolean GetCalledPartyNumber( 00343 PString & number, 00344 unsigned * plan = NULL, 00345 unsigned * type = NULL 00346 ) const; 00347 00348 void SetRedirectingNumber( 00349 const PString & number, 00350 unsigned plan = 1, 00351 unsigned type = 0, 00352 int presentation = -1, 00353 int screening = -1, 00354 int reason = -1 00355 ); 00356 PBoolean GetRedirectingNumber( 00357 PString & number, 00358 unsigned * plan = NULL, 00359 unsigned * type = NULL, 00360 unsigned * presentation = NULL, 00361 unsigned * screening = NULL, 00362 unsigned * reason = NULL, 00363 unsigned defPresentation = 0, 00364 unsigned defScreening = 0, 00365 unsigned defReason =0 00366 ) const; 00367 00368 void SetConnectedNumber( 00369 const PString & number, 00370 unsigned plan = 1, 00371 unsigned type = 0, 00372 int presentation = -1, 00373 int screening = -1, 00374 int reason = -1 00375 ); 00376 PBoolean GetConnectedNumber( 00377 PString & number, 00378 unsigned * plan = NULL, 00379 unsigned * type = NULL, 00380 unsigned * presentation = NULL, 00381 unsigned * screening = NULL, 00382 unsigned * reason = NULL, 00383 unsigned defPresentation = 0, 00384 unsigned defScreening = 0, 00385 unsigned defReason =0 00386 ) const; 00387 00394 void SetChannelIdentification( 00395 unsigned interfaceType = 0, 00396 unsigned preferredOrExclusive = 0, 00397 int channelNumber = 1 00398 ); 00399 00402 PBoolean GetChannelIdentification( 00403 unsigned * interfaceType = NULL, 00404 unsigned * preferredOrExclusive = NULL, 00405 int * channelNumber = NULL 00406 ) const; 00407 00408 protected: 00409 unsigned callReference; 00410 PBoolean fromDestination; 00411 unsigned protocolDiscriminator; 00412 MsgTypes messageType; 00413 00414 PARRAY(InternalInformationElement, PBYTEArray); 00415 PDICTIONARY(InternalInformationElements, POrdinalKey, InternalInformationElement); 00416 InternalInformationElements informationElements; 00417 }; 00418 00419 00420 #endif // OPAL_H323_Q931_H 00421 00422