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 #define Q931PRIVATE
00058
00059 #include "5ESS.h"
00060
00061 extern L3INT Q931L4HeaderSpace;
00062 extern struct Q931MessageIE *ATT5ESSMessageIEs;
00063
00064
00065
00066
00067
00068 static L3INT ATT5ESSProc0x07TE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT iFrom);
00069 static L3INT ATT5ESSProc0x0fTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT iFrom);
00070
00071
00072 void ATT5ESSCreateTE(struct Q931Dialect *dlct)
00073 {
00074 Q931DialectSetName(dlct, "5ESS TE");
00075
00076
00077
00078
00079 Q931DialectSetFlag(dlct, 0);
00080
00081
00082
00083
00084 Q931DialectAddCodeset(dlct, Q931_CODESET_0);
00085 Q931DialectAddCodeset(dlct, Q931_CODESET_6);
00086 Q931DialectAddCodeset(dlct, Q931_CODESET_7);
00087
00088
00089
00090
00091 Q931DialectSetMesProc(dlct, Q931mes_ALERTING, Q931ProcAlertingTE, Q931Umes_Generic, Q931Pmes_Generic);
00092 Q931DialectSetMesProc(dlct, Q931mes_CALL_PROCEEDING, Q931ProcCallProceedingTE, Q931Umes_Generic, Q931Pmes_Generic);
00093 Q931DialectSetMesProc(dlct, Q931mes_CONNECT, ATT5ESSProc0x0fTE, Q931Umes_Generic, Q931Pmes_Generic);
00094 Q931DialectSetMesProc(dlct, Q931mes_CONNECT_ACKNOWLEDGE, ATT5ESSProc0x07TE, Q931Umes_Generic, Q931Pmes_Generic);
00095 Q931DialectSetMesProc(dlct, Q931mes_PROGRESS, Q931ProcProgressTE, Q931Umes_Generic, Q931Pmes_Generic);
00096 Q931DialectSetMesProc(dlct, Q931mes_SETUP, Q931ProcSetupTE, Q931Umes_Generic, Q931Pmes_Generic);
00097 #if 0
00098 Q931DialectSetMesProc(dlct, Q931mes_SETUP_ACKNOWLEDGE, Q931ProcSetupAckTE, Q931Umes_Generic, Q931Pmes_Generic);
00099 Q931DialectSetMesProc(dlct, Q931mes_RESUME, Q931ProcResumeTE, Q931Umes_Generic, Q931Pmes_Generic);
00100 Q931DialectSetMesProc(dlct, Q931mes_RESUME_ACKNOWLEDGE, Q931ProcResumeAckTE, Q931Umes_Generic, Q931Pmes_Generic);
00101 Q931DialectSetMesProc(dlct, Q931mes_RESUME_REJECT, Q931ProcResumeRejectTE, Q931Umes_Generic, Q931Pmes_Generic);
00102 Q931DialectSetMesProc(dlct, Q931mes_SUSPEND, Q931ProcSuspendTE, Q931Umes_Generic, Q931Pmes_Generic);
00103 Q931DialectSetMesProc(dlct, Q931mes_SUSPEND_ACKNOWLEDGE, Q931ProcSuspendAckTE, Q931Umes_Generic, Q931Pmes_Generic);
00104 Q931DialectSetMesProc(dlct, Q931mes_SUSPEND_REJECT, Q931ProcSuspendRejectTE, Q931Umes_Generic, Q931Pmes_Generic);
00105 #endif
00106 Q931DialectSetMesProc(dlct, Q931mes_USER_INFORMATION, Q931ProcUserInformationTE, Q931Umes_Generic, Q931Pmes_Generic);
00107 Q931DialectSetMesProc(dlct, Q931mes_DISCONNECT, Q931ProcDisconnectTE, Q931Umes_Generic, Q931Pmes_Generic);
00108 Q931DialectSetMesProc(dlct, Q931mes_RELEASE, Q931ProcReleaseTE, Q931Umes_Generic, Q931Pmes_Generic);
00109 Q931DialectSetMesProc(dlct, Q931mes_RELEASE_COMPLETE, Q931ProcReleaseCompleteTE, Q931Umes_Generic, Q931Pmes_Generic);
00110 Q931DialectSetMesProc(dlct, Q931mes_RESTART, Q931ProcRestartTE, Q931Umes_Generic, Q931Pmes_Generic);
00111 Q931DialectSetMesProc(dlct, Q931mes_RESTART_ACKNOWLEDGE, Q931ProcRestartAckTE, Q931Umes_Generic, Q931Pmes_Generic);
00112 Q931DialectSetMesProc(dlct, Q931mes_CONGESTION_CONTROL, Q931ProcCongestionControlTE, Q931Umes_Generic, Q931Pmes_Generic);
00113 #if 0
00114 Q931DialectSetMesProc(dlct, Q931mes_INFORMATION, Q931ProcInformationTE, Q931Umes_Generic, Q931Pmes_Generic);
00115 Q931DialectSetMesProc(dlct, Q931mes_NOTIFY, Q931ProcNotifyTE, Q931Umes_Generic, Q931Pmes_Generic);
00116 #endif
00117 Q931DialectSetMesProc(dlct, Q931mes_STATUS, Q931ProcStatusTE, Q931Umes_Generic, Q931Pmes_Generic);
00118 Q931DialectSetMesProc(dlct, Q931mes_STATUS_ENQUIRY, Q931ProcStatusEnquiryTE, Q931Umes_Generic, Q931Pmes_Generic);
00119 Q931DialectSetMesProc(dlct, Q931mes_SEGMENT, Q931ProcSegmentTE, Q931Umes_Generic, Q931Pmes_Generic);
00120
00121 Q931DialectSetMesProc(dlct, Q932mes_FACILITY, Q932ProcFacilityTE, Q932Umes_Facility, Q932Pmes_Facility);
00122 Q931DialectSetMesProc(dlct, Q932mes_HOLD, Q932ProcHoldTE, Q932Umes_Hold, Q932Pmes_Hold);
00123 Q931DialectSetMesProc(dlct, Q932mes_HOLD_ACKNOWLEDGE, Q932ProcHoldAckTE, Q932Umes_HoldAck, Q932Pmes_HoldAck);
00124 Q931DialectSetMesProc(dlct, Q932mes_HOLD_REJECT, Q932ProcHoldRejectTE, Q932Umes_HoldReject, Q932Pmes_HoldReject);
00125 Q931DialectSetMesProc(dlct, Q932mes_REGISTER, Q932ProcRegisterTE, Q932Umes_Register, Q932Pmes_Register);
00126 Q931DialectSetMesProc(dlct, Q932mes_RETRIEVE, Q932ProcRetrieveTE, Q932Umes_Retrieve, Q932Pmes_Retrieve);
00127 Q931DialectSetMesProc(dlct, Q932mes_RETRIEVE_ACKNOWLEDGE, Q932ProcRetrieveAckTE, Q932Umes_RetrieveAck, Q932Pmes_RetrieveAck);
00128 Q931DialectSetMesProc(dlct, Q932mes_RETRIEVE_REJECT, Q932ProcRetrieveRejectTE, Q932Umes_RetrieveReject, Q932Pmes_RetrieveReject);
00129
00130
00131
00132
00133 Q931DialectSetUnknownMesProc(dlct, Q931ProcUnknownMessage);
00134 Q931DialectSetInvalidMesProc(dlct, Q931ProcUnexpectedMessage);
00135
00136
00137
00138
00139
00140 Q931DialectSetIEProc(dlct, Q931ie_SEGMENTED_MESSAGE, Q931Pie_Segment, Q931Uie_Segment);
00141 Q931DialectSetIEProc(dlct, Q931ie_BEARER_CAPABILITY, Q931Pie_BearerCap, Q931Uie_BearerCap);
00142 Q931DialectSetIEProc(dlct, Q931ie_CAUSE, Q931Pie_Cause, Q931Uie_Cause);
00143 Q931DialectSetIEProc(dlct, Q931ie_CALL_IDENTITY, Q931Pie_CallID, Q931Uie_CallID);
00144 Q931DialectSetIEProc(dlct, Q931ie_CALL_STATE, Q931Pie_CallState, Q931Uie_CallState);
00145 Q931DialectSetIEProc(dlct, Q931ie_CHANGE_STATUS, Q931Pie_ChangeStatus, Q931Uie_ChangeStatus);
00146 Q931DialectSetIEProc(dlct, Q931ie_CHANNEL_IDENTIFICATION, Q931Pie_ChanID, Q931Uie_ChanID);
00147 Q931DialectSetIEProc(dlct, Q931ie_PROGRESS_INDICATOR, Q931Pie_ProgInd, Q931Uie_ProgInd);
00148 Q931DialectSetIEProc(dlct, Q931ie_NETWORK_SPECIFIC_FACILITIES, Q931Pie_NetFac, Q931Uie_NetFac);
00149 Q931DialectSetIEProc(dlct, Q931ie_NOTIFICATION_INDICATOR, Q931Pie_NotifInd, Q931Uie_NotifInd);
00150 Q931DialectSetIEProc(dlct, Q931ie_DISPLAY, Q931Pie_Display, Q931Uie_Display);
00151 Q931DialectSetIEProc(dlct, Q931ie_DATETIME, Q931Pie_DateTime, Q931Uie_DateTime);
00152 Q931DialectSetIEProc(dlct, Q931ie_KEYPAD_FACILITY, Q931Pie_KeypadFac, Q931Uie_KeypadFac);
00153 Q931DialectSetIEProc(dlct, Q931ie_SIGNAL, Q931Pie_Signal, Q931Uie_Signal);
00154 Q931DialectSetIEProc(dlct, Q931ie_TRANSIT_DELAY_SELECTION_AND_IND, Q931Pie_TransNetSel, Q931Uie_TransNetSel);
00155 Q931DialectSetIEProc(dlct, Q931ie_CALLING_PARTY_NUMBER, Q931Pie_CallingNum, Q931Uie_CallingNum);
00156 Q931DialectSetIEProc(dlct, Q931ie_CALLING_PARTY_SUBADDRESS, Q931Pie_CallingSub, Q931Uie_CallingSub);
00157 Q931DialectSetIEProc(dlct, Q931ie_CALLED_PARTY_NUMBER, Q931Pie_CalledNum, Q931Uie_CalledNum);
00158 Q931DialectSetIEProc(dlct, Q931ie_CALLED_PARTY_SUBADDRESS, Q931Pie_CalledSub, Q931Uie_CalledSub);
00159 Q931DialectSetIEProc(dlct, Q931ie_TRANSIT_NETWORK_SELECTION, Q931Pie_TransNetSel, Q931Uie_TransNetSel);
00160 Q931DialectSetIEProc(dlct, Q931ie_RESTART_INDICATOR, Q931Pie_RestartInd, Q931Uie_RestartInd);
00161 Q931DialectSetIEProc(dlct, Q931ie_LOW_LAYER_COMPATIBILITY, Q931Pie_LLComp, Q931Uie_LLComp);
00162 Q931DialectSetIEProc(dlct, Q931ie_HIGH_LAYER_COMPATIBILITY, Q931Pie_HLComp, Q931Uie_HLComp);
00163 Q931DialectSetIEProc(dlct, Q931ie_USER_USER, Q931Pie_UserUser, Q931Uie_UserUser);
00164 Q931DialectSetIEProc(dlct, Q931ie_GENERIC_DIGITS, Q931Pie_GenericDigits, Q931Uie_GenericDigits);
00165
00166 Q931DialectSetIEProc(dlct, Q931ie_CONNECTED_NUMBER, Q931Pie_Generic, Q931Uie_Generic);
00167 Q931DialectSetIEProc(dlct, Q931ie_FACILITY, Q931Pie_Generic, Q931Uie_Generic);
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 Q931DialectSetMesIEMap(dlct, ATT5ESSMessageIEs);
00178 }
00179
00180
00181
00182
00183
00184
00185 static L3INT ATT5ESSProc0x0fTE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT iFrom)
00186 {
00187 Q931mes_Header *pMes = (Q931mes_Header *)&buf[Q931L4HeaderSpace];
00188 L3INT ret = Q931E_NO_ERROR;
00189
00190 switch (pMes->ProtDisc) {
00191 case 8:
00192 return Q931ProcConnectAckTE(pTrunk, buf, iFrom);
00193
00194 case 3:
00195 if (iFrom == 4) {
00196
00197 ret = Q931Tx32Data(pTrunk, 0, buf, pMes->Size);
00198 }
00199 else if (iFrom == 2) {
00200
00201 ret = Q931Tx34(pTrunk, buf, pMes->Size);
00202
00203 if (Q931TrunkIsSetFlag(pTrunk, Q931_TFLAG_AUTO_SERVICE_ACK)) {
00204 Q931Log(pTrunk, Q931_LOG_DEBUG, "autoServiceAck is on, responding to Service Req from network...\n");
00205 Q931AckService(pTrunk, buf);
00206 }
00207 }
00208 return ret;
00209
00210 default:
00211 break;
00212 }
00213 return Q931E_NO_ERROR;
00214 }
00215
00216
00217
00218
00219
00220
00221 static L3INT ATT5ESSProc0x07TE(Q931_TrunkInfo_t *pTrunk, L3UCHAR * buf, L3INT iFrom)
00222 {
00223 Q931mes_Header *pMes = (Q931mes_Header *)&buf[Q931L4HeaderSpace];
00224 L3INT ret = Q931E_NO_ERROR;
00225
00226 switch (pMes->ProtDisc) {
00227 case 8:
00228 return Q931ProcConnectTE(pTrunk, buf, iFrom);
00229
00230 case 3:
00231 if (iFrom == 4) {
00232
00233 ret = Q931Tx32Data(pTrunk, 0, buf, pMes->Size);
00234 }
00235 else if (iFrom == 2) {
00236
00237 ret = Q931Tx34(pTrunk, buf, pMes->Size);
00238 }
00239 return ret;
00240
00241 default:
00242 break;
00243 }
00244 return Q931E_NO_ERROR;
00245 }