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 #ifndef _Q931_NL
00108 #define _Q931_NL
00109
00110 #include <string.h>
00111
00112
00113
00114
00115
00116
00117 #if 0
00118 #define Q931_ENUM_NAMES(_NAME, _STRINGS) static const char * _NAME [] = { _STRINGS , NULL };
00119 #define Q931_STR2ENUM_P(_FUNC1, _FUNC2, _TYPE) _TYPE _FUNC1 (const char *name); const char * _FUNC2 (_TYPE type);
00120 #define Q931_STR2ENUM(_FUNC1, _FUNC2, _TYPE, _STRINGS, _MAX) \
00121 _TYPE _FUNC1 (const char *name) \
00122 { \
00123 int i; \
00124 _TYPE t = _MAX ; \
00125 \
00126 for (i = 0; i < _MAX ; i++) { \
00127 if (!strcasecmp(name, _STRINGS[i])) { \
00128 t = (_TYPE) i; \
00129 break; \
00130 } \
00131 } \
00132 \
00133 return t; \
00134 } \
00135 const char * _FUNC2 (_TYPE type) \
00136 { \
00137 if (type > _MAX) { \
00138 type = _MAX; \
00139 } \
00140 return _STRINGS[(int)type]; \
00141 } \
00142 #endif
00143
00144
00145
00146
00147
00148
00149
00150 typedef enum {
00151 Q931E_NO_ERROR = 0,
00152
00153 Q931E_UNKNOWN_MESSAGE = -3001,
00154 Q931E_ILLEGAL_IE = -3002,
00155 Q931E_UNKNOWN_IE = -3003,
00156 Q931E_BEARERCAP = -3004,
00157 Q931E_HLCOMP = -3005,
00158 Q931E_LLCOMP = -3006,
00159 Q931E_INTERNAL = -3007,
00160 Q931E_MISSING_CB = -3008,
00161 Q931E_UNEXPECTED_MESSAGE = -3009,
00162 Q931E_ILLEGAL_MESSAGE = -3010,
00163 Q931E_TOMANYCALLS = -3011,
00164 Q931E_INVALID_CRV = -3012,
00165 Q931E_CALLID = -3013,
00166 Q931E_CALLSTATE = -3014,
00167 Q931E_CALLEDSUB = -3015,
00168 Q931E_CALLEDNUM = -3016,
00169 Q931E_CALLINGNUM = -3017,
00170 Q931E_CALLINGSUB = -3018,
00171 Q931E_CAUSE = -3019,
00172 Q931E_CHANID = -3020,
00173 Q931E_DATETIME = -3021,
00174 Q931E_DISPLAY = -3022,
00175 Q931E_KEYPADFAC = -3023,
00176 Q931E_NETFAC = -3024,
00177 Q931E_NOTIFIND = -3025,
00178 Q931E_PROGIND = -3026,
00179 Q931E_RESTARTIND = -3027,
00180 Q931E_SEGMENT = -3028,
00181 Q931E_SIGNAL = -3029,
00182 Q931E_GENERIC_DIGITS = -3030,
00183 Q931E_MANDATORY_IE_MISSING = -3031,
00184 Q931E_UNRECOGNIZED_MESSAGE = -3032,
00185 } q931_error_t;
00186
00187
00188
00189 const char *q931_error_to_name(q931_error_t error);
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203 #define L3CHAR char
00204 #define L3UCHAR unsigned char
00205 #define L3USHORT unsigned short
00206 #define L3UINT unsigned int
00207 #define L3INT int
00208 #define L3ULONG unsigned long
00209 #define L3BOOL char
00210
00211 #define L3TRUE 1
00212 #define L3FALSE 0
00213
00214
00215
00216
00217
00218
00219
00220 typedef L3USHORT ie;
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239 #define Q931_LOGBUFSIZE 1024
00240
00241 #define Q931L4BUF 1000
00242
00243 #define Q931L2BUF 300
00244
00245 #define Q931MAXTRUNKS 4
00246
00247
00248
00249 #define Q931MAXCHPERTRUNK 32
00250
00251
00252
00253
00254 #define Q931MAXCALLPERTRUNK (Q931MAXCHPERTRUNK * 2)
00255
00256
00257
00258
00259
00260 #define Q931_IS_BRI(x) ((x)->TrunkType == Q931_TrType_BRI || (x)->TrunkType == Q931_TrType_BRI_PTMP)
00261 #define Q931_IS_PRI(x) (!Q931_IS_BRI(x))
00262
00263 #define Q931_IS_PTP(x) ((x)->TrunkType != Q931_TrType_BRI_PTMP)
00264 #define Q931_IS_PTMP(X) ((x)->TrunkType == Q931_TrType_BRI_PTMP)
00265
00266 #define Q931_BRI_MAX_CRV 127
00267 #define Q931_PRI_MAX_CRV 32767
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290 #define Q931MAXDLCT 8
00291
00292
00293
00294 #define Q931MAXMES 128
00295 #define Q931MAXIE 255
00296 #define Q931MAXUSEDIE 50
00297 #define Q931MAXCODESETS 7
00298 #define Q931MAXSTATE 100
00299 #define Q931MAXTIMER 25
00300
00301
00302
00303
00304
00305
00306
00307
00308 #define Q931mes_ALERTING 0x01
00309 #define Q931mes_CALL_PROCEEDING 0x02
00310 #define Q931mes_CONNECT 0x07
00311 #define Q931mes_CONNECT_ACKNOWLEDGE 0x0f
00312 #define Q931mes_PROGRESS 0x03
00313 #define Q931mes_SETUP 0x05
00314 #define Q931mes_SETUP_ACKNOWLEDGE 0x0d
00315 #define Q931mes_RESUME 0x26
00316 #define Q931mes_RESUME_ACKNOWLEDGE 0x2e
00317 #define Q931mes_RESUME_REJECT 0x22
00318 #define Q931mes_SUSPEND 0x25
00319 #define Q931mes_SUSPEND_ACKNOWLEDGE 0x2d
00320 #define Q931mes_SUSPEND_REJECT 0x21
00321 #define Q931mes_USER_INFORMATION 0x20
00322 #define Q931mes_DISCONNECT 0x45
00323 #define Q931mes_RELEASE 0x4d
00324 #define Q931mes_RELEASE_COMPLETE 0x5a
00325 #define Q931mes_RESTART 0x46
00326 #define Q931mes_RESTART_ACKNOWLEDGE 0x4e
00327 #define Q931mes_CONGESTION_CONTROL 0x79
00328 #define Q931mes_INFORMATION 0x7b
00329 #define Q931mes_NOTIFY 0x6e
00330 #define Q931mes_STATUS 0x7d
00331 #define Q931mes_STATUS_ENQUIRY 0x75
00332 #define Q931mes_SEGMENT 0x60
00333 #define Q931mes_FACILITY 0x62
00334
00335
00336 #define Q931mes_SERVICE 0x0f
00337 #define Q931mes_SERVICE_ACKNOWLEDGE 0x07
00338
00339 #define Q931mes_FACILITY_ACKNOWLEDGE 0x6a
00340 #define Q931mes_FACILITY_REJECT 0x72
00341 #define Q931mes_REGISTER 0x64
00342
00343 #ifdef Q931PRIVATE
00344
00347 enum {
00348 Q931_IEF_NONE = 0,
00349 Q931_IEF_MANDATORY = (1 << 0),
00351
00352
00353
00354 Q931_IEF_TO_NET = (1 << 14),
00355 Q931_IEF_TO_USER = (1 << 15),
00356 };
00357
00358 enum {
00359
00360
00361
00362 Q931_IE_CODESET_0 = (1 << 0),
00363 Q931_IE_CODESET_1 = (1 << 1),
00364 Q931_IE_CODESET_2 = (1 << 2),
00365 Q931_IE_CODESET_3 = (1 << 3),
00366 Q931_IE_CODESET_4 = (1 << 4),
00367 Q931_IE_CODESET_5 = (1 << 5),
00368 Q931_IE_CODESET_6 = (1 << 6),
00369 Q931_IE_CODESET_7 = (1 << 7),
00370 };
00371
00372 #define Q931_IEF_TO_BOTH (Q931_IEF_TO_NET | Q931_IEF_TO_USER)
00373 #define Q931_IE_CODESET_ALL (Q931_IE_CODESET_0 | Q931_IE_CODESET_1 | Q931_IE_CODESET_2 | Q931_IE_CODESET_3 | Q931_IE_CODESET_4 | Q931_IE_CODESET_5 | Q931_IE_CODESET_6 | Q931_IE_CODESET_7)
00374
00375
00376
00377
00378 struct Q931MessageIEEntry {
00379 L3UCHAR id;
00380 L3UCHAR minsize;
00381 L3UCHAR maxsize;
00382 L3UCHAR codeset;
00383 L3INT flags;
00384 };
00385
00386 struct Q931MessageIE {
00387 L3UCHAR id;
00388 L3UCHAR protdisc;
00389 struct Q931MessageIEEntry ies[Q931MAXIE];
00390 };
00391
00392
00398 enum {
00399 MSGF_FROM_L2 = 2,
00400 MSGF_FROM_L4 = 4,
00401 MSGF_FROM_BOTH = 6,
00402 };
00403 #endif
00404
00409 enum {
00410 Q931_TIMER_NONE = 0,
00411 Q931_TIMER_T300,
00412 Q931_TIMER_T301,
00413 Q931_TIMER_T302,
00414 Q931_TIMER_T303,
00415 Q931_TIMER_T304,
00416 Q931_TIMER_T305,
00417 Q931_TIMER_T306,
00418 Q931_TIMER_T307,
00419 Q931_TIMER_T308,
00420 Q931_TIMER_T309,
00421 Q931_TIMER_T310,
00422 Q931_TIMER_T311,
00423 Q931_TIMER_T312,
00424 Q931_TIMER_T313,
00425 Q931_TIMER_T314,
00426 Q931_TIMER_T315,
00427 Q931_TIMER_T316,
00428 Q931_TIMER_T317,
00429 Q931_TIMER_T318,
00430 Q931_TIMER_T319,
00431 Q931_TIMER_T320,
00432 Q931_TIMER_T321,
00433 Q931_TIMER_T322,
00434 };
00435
00439 enum {
00440 Q931_TON_UNKNOWN = 0x00,
00441 Q931_TON_INTERNATIONAL = 0x01,
00442 Q931_TON_NATIONAL = 0x02,
00443 Q931_TON_NETWORK_SPECIFIC = 0x03,
00444 Q931_TON_SUBSCRIBER_NUMBER = 0x04,
00445 Q931_TON_ABBREVIATED_NUMBER = 0x06,
00446 Q931_TON_RESERVED = 0x07
00447 };
00448
00452 enum {
00453 Q931_NUMPLAN_UNKNOWN = 0x00,
00454 Q931_NUMPLAN_E164 = 0x01,
00455 Q931_NUMPLAN_X121 = 0x03,
00456 Q931_NUMPLAN_F69 = 0x04,
00457 Q931_NUMPLAN_NATIONAL = 0x08,
00458 Q931_NUMPLAN_PRIVATE = 0x09,
00459 Q931_NUMPLAN_RESERVED = 0x0e
00460 };
00461
00465 enum {
00466 Q931_PRES_ALLOWED = 0x00,
00467 Q931_PRES_RESTRICTED = 0x01,
00468 Q931_PRES_NOT_AVAILABLE = 0x02,
00469 Q931_PRES_RESERVED = 0x03
00470 };
00471
00475 enum {
00476 Q931_SCREEN_USER_NOT_SCREENED = 0x00,
00477 Q931_SCREEN_USER_VERIFIED_PASSED = 0x01,
00478 Q931_SCREEN_USER_VERIFIED_FAILED = 0x02,
00479 Q931_SCREEN_NETWORK = 0x03
00480 };
00481
00485 enum {
00486 Q931_CODING_ITU = 0x00,
00487 Q931_CODING_ISO = 0x01,
00488 Q931_CODING_NATIONAL = 0x02,
00489 Q931_CODING_NETWORK = 0x03
00490 };
00491
00495 enum {
00496 Q931_HLCHAR_TELEPHONY = 0x01,
00497 Q931_HLCHAR_FAX_G23 = 0x04,
00498 Q931_HLCHAR_FAX_G4 = 0x21,
00499 Q931_HLCHAR_FAX_G4II = 0x24,
00500 Q931_HLCHAR_T102 = 0x32,
00501 Q931_HLCHAR_T101 = 0x33,
00502 Q931_HLCHAR_F60 = 0x35,
00503 Q931_HLCHAR_X400 = 0x38,
00504 Q931_HLCHAR_X200 = 0x41
00505 };
00506
00510 enum {
00511 Q931_UIL1P_V110 = 0x01,
00512 Q931_UIL1P_I460 = 0x01,
00513 Q931_UIL1P_X30 = 0x01,
00514
00515 Q931_UIL1P_G711U = 0x02,
00516 Q931_UIL1P_G711A = 0x03,
00517 Q931_UIL1P_G721 = 0x04,
00518
00519 Q931_UIL1P_H221 = 0x05,
00520 Q931_UIL1P_H242 = 0x05,
00521
00522 Q931_UIL1P_H223 = 0x06,
00523 Q931_UIL1P_H245 = 0x06,
00524
00525 Q931_UIL1P_RATE_ADAP = 0x07,
00526
00527 Q931_UIL1P_V120 = 0x08,
00528 Q931_UIL1P_X31 = 0x09
00529 };
00530
00534 enum {
00535 Q931_ITC_SPEECH = 0x00,
00536 Q931_ITC_UNRESTRICTED = 0x08,
00537 Q931_ITC_RESTRICTED = 0x09,
00538 Q931_ITC_3K1_AUDIO = 0x10,
00539 Q931_ITC_UNRESTRICTED_TONES = 0x11,
00540 Q931_ITC_VIDEO = 0x18
00541 };
00542
00546 enum {
00547 Q931_ITR_PACKET = 0x00,
00548 Q931_ITR_64K = 0x10,
00549 Q931_ITR_128K = 0x11,
00550 Q931_ITR_384K = 0x13,
00551 Q931_ITR_1536K = 0x15,
00552 Q931_ITR_1920K = 0x17,
00553 Q931_ITR_MULTI = 0x18
00554 };
00555
00559 enum {
00560 Q931_CODESET_0 = 0,
00561 Q931_CODESET_1,
00562 Q931_CODESET_2,
00563 Q931_CODESET_3,
00564 Q931_CODESET_4,
00565 Q931_CODESET_5,
00566 Q931_CODESET_6,
00567 Q931_CODESET_7,
00568 };
00569 #define Q931_CODESET_ALL 0x07
00570
00571
00572
00573
00574 #include "Q850.h"
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584 typedef struct {
00585 L3UINT Size;
00586 L3UCHAR ProtDisc;
00587 L3UCHAR MesType;
00588 L3UCHAR CRVFlag;
00589 L3INT CRV;
00590
00591 } Q931mes_Header;
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602 typedef struct {
00603 L3UINT Size;
00604 L3UCHAR ProtDisc;
00605 L3UCHAR MesType;
00606 L3UCHAR CRVFlag;
00607 L3INT CRV;
00608
00609
00610
00611 L3UCHAR Tei;
00612
00613 ie Shift;
00614 ie MoreData;
00615 ie SendComplete;
00616 ie CongestionLevel;
00617 ie RepeatInd;
00618
00619 ie Segment;
00620 ie BearerCap;
00621 ie Cause;
00622 ie CallState;
00623 ie CallID;
00624 ie ChanID;
00625 ie ChangeStatus;
00626 ie ProgInd;
00627 ie NetFac;
00628 ie NotifInd;
00629 ie Display;
00630 ie DateTime;
00631 ie KeypadFac;
00632 ie Signal;
00633 ie InfoRate;
00634 ie EndEndTxDelay;
00635 ie TransDelSelInd;
00636 ie PackParam;
00637 ie PackWinSize;
00638 ie PackSize;
00639 ie ClosedUserGrp;
00640 ie RevChargeInd;
00641 ie CalledNum;
00642 ie CalledSub;
00643 ie CallingNum;
00644 ie CallingSub;
00645 ie RedirNum;
00646 ie TransNetSel;
00647 ie LLRepeatInd;
00648 ie RestartWin;
00649 ie RestartInd;
00650 ie LLComp;
00651 ie HLComp;
00652 ie UserUser;
00653 ie Escape;
00654 ie Switchhook;
00655 ie FeatAct;
00656 ie FeatInd;
00657 ie GenericDigits;
00658
00659 L3UCHAR buf[1];
00660
00661 } Q931mes_Generic;
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677 typedef struct Q931_TrunkInfo Q931_TrunkInfo_t;
00678
00682 typedef enum {
00683 Q931_LOG_NONE = -1,
00684 Q931_LOG_EMERG,
00685 Q931_LOG_ALERT,
00686 Q931_LOG_CRIT,
00687 Q931_LOG_ERROR,
00688 Q931_LOG_WARNING,
00689 Q931_LOG_NOTICE,
00690 Q931_LOG_INFO,
00691 Q931_LOG_DEBUG
00692 } Q931LogLevel_t;
00693
00697 typedef enum {
00698 Q931_TE = 0,
00699 Q931_NT
00700 } Q931NetUser_t;
00701
00702 typedef enum {
00703 Q931_Dialect_Q931 = 0,
00704 Q931_Dialect_National,
00705 Q931_Dialect_DMS,
00706 Q931_Dialect_5ESS,
00707 Q931_Dialect_DSS1,
00709 Q931_Dialect_Count
00710 } Q931Dialect_t;
00711 #define DIALECT_STRINGS "q931", "national", "dms", "5ess", "dss1"
00712 Q931_STR2ENUM_P(q931_str2Q931Dialect_type, q931_Q931Dialect_type2str, Q931Dialect_t)
00713
00714
00717 typedef enum {
00718 Q931_TrType_E1 = 0,
00719 Q931_TrType_T1,
00720 Q931_TrType_J1,
00721 Q931_TrType_BRI,
00722 Q931_TrType_BRI_PTMP
00723 } Q931_TrunkType_t;
00724
00728 typedef enum {
00729 Q931_TrState_NoAlignment = 0,
00730 Q931_TrState_Aligning,
00731 Q931_TrState_Aligned
00732 } Q931_TrunkState_t;
00733
00737 typedef enum {
00738 Q931_ChType_NotUsed = 0,
00739 Q931_ChType_B,
00740 Q931_ChType_D,
00741 Q931_ChType_Sync
00742 } Q931_ChanType_t;
00743
00744 #ifdef Q931PRIVATE
00745
00749 enum {
00750 Q931_TFLAG_STATUS_ENQUIRY = (1 << 0),
00752 Q931_TFLAG_AUTO_SETUP_ACK = (1 << 16),
00753 Q931_TFLAG_AUTO_SERVICE_ACK = (1 << 17),
00754 Q931_TFLAG_AUTO_CONNECT_ACK = (1 << 18),
00755 Q931_TFLAG_AUTO_RESTART_ACK = (1 << 19),
00757
00758
00759
00760 Q931_TFLAG_IGNORE_UNKNOWN_MSG = (1 << 29),
00762
00763
00764
00765 Q931_TFLAG_IGNORE_UNKNOWN_IE = (1 << 30),
00766 Q931_TFLAG_IGNORE_ILLEGAL_IE = (1 << 31),
00767 };
00768
00769
00770 void Q931TrunkSetFlag(Q931_TrunkInfo_t *trunk, const L3INT flag);
00771 void Q931TrunkClearFlag(Q931_TrunkInfo_t *trunk, L3INT flag);
00772 void Q931TrunkClearAllFlags(Q931_TrunkInfo_t *trunk);
00773 L3BOOL Q931TrunkIsSetFlag(const Q931_TrunkInfo_t *trunk, const L3INT flag);
00774 #endif
00775
00776
00777 void Q931TrunkSetAutoSetupAck(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00778 void Q931TrunkSetAutoServiceAck(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00779 void Q931TrunkSetAutoRestartAck(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00780 void Q931TrunkSetAutoConnectAck(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00781 void Q931TrunkSetStatusEnquiry(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00782 void Q931TrunkSetIgnoreUnknownMsg(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00783 void Q931TrunkSetIgnoreUnknownIEs(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00784 void Q931TrunkSetIgnoreIllegalIEs(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00785
00786 L3BOOL Q931TrunkGetAutoSetupAck(Q931_TrunkInfo_t *trunk);
00787 L3BOOL Q931TrunkGetAutoServiceAck(Q931_TrunkInfo_t *trunk);
00788 L3BOOL Q931TrunkGetAutoRestartAck(Q931_TrunkInfo_t *trunk);
00789 L3BOOL Q931TrunkGetAutoConnectAck(Q931_TrunkInfo_t *trunk);
00790 L3BOOL Q931TrunkGetStatusEnquiry(Q931_TrunkInfo_t *trunk);
00791 L3BOOL Q931TrunkGetIgnoreUnknownMsg(Q931_TrunkInfo_t *trunk);
00792 L3BOOL Q931TrunkGetIgnoreUnknownIEs(Q931_TrunkInfo_t *trunk);
00793 L3BOOL Q931TrunkGetIgnoreIllegalIEs(Q931_TrunkInfo_t *trunk);
00794
00795 void Q931TrunkSetRelaxedMode(Q931_TrunkInfo_t *trunk, L3BOOL enable);
00796
00797
00798 typedef L3INT (*Q931Tx34CB_t) (void *, L3UCHAR *, L3INT);
00799 typedef L3INT (*Q931Tx32CB_t) (void *, L3INT, L3UCHAR, L3UCHAR *, L3INT);
00800 typedef L3INT (*Q931ErrorCB_t) (void *, L3INT, L3INT, L3INT);
00801 typedef L3INT (*Q931LogCB_t) (void *, Q931LogLevel_t, char *, L3INT);
00802
00803 struct Q931Dialect;
00804
00805
00806
00807
00808 #include "Q931call.h"
00809
00810
00811 struct Q931_TrunkInfo
00812 {
00813 Q931NetUser_t NetUser;
00814 Q931_TrunkType_t TrunkType;
00815 struct Q931Dialect *Dialect;
00816
00817 Q931Tx34CB_t Q931Tx34CBProc;
00818 Q931Tx32CB_t Q931Tx32CBProc;
00819 Q931ErrorCB_t Q931ErrorCBProc;
00820 Q931LogCB_t Q931LogCBProc;
00821 void *PrivateData32;
00822 void *PrivateData34;
00823 void *PrivateDataLog;
00824
00825 Q931CallEventCB_t CallEventCBProc;
00826 void *PrivateDataCallEventCB;
00827
00828 Q931LogLevel_t loglevel;
00829
00830 L3UCHAR Enabled;
00831
00832
00833
00834 Q931_TrunkState_t TrunkState;
00835
00836 L3INT LastCRV;
00837
00838 L3UCHAR L3Buf[Q931L4BUF];
00839
00840
00841 L3UCHAR L2Buf[Q931L2BUF];
00842
00843
00844
00845
00846
00847 L3INT flags;
00848
00849
00850
00851 struct _charray
00852 {
00853 Q931_ChanType_t ChanType;
00854
00855 L3UCHAR Available;
00856
00857
00858
00859 L3INT CRV;
00860
00861 } ch[Q931MAXCHPERTRUNK];
00862
00863
00864
00865 struct Q931_Call call[Q931MAXCALLPERTRUNK];
00866 };
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880 #ifdef Q931PRIVATE
00881 typedef struct
00882 {
00883 L3INT State;
00884 L3INT Message;
00885 L3UCHAR Flags;
00886 } Q931State;
00887 #endif
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897 typedef L3INT (q931proc_func_t) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *, L3INT);
00898
00899 typedef L3INT (q931umes_func_t) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size);
00900 typedef L3INT (q931pmes_func_t) (Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
00901
00902 typedef L3INT (q931uie_func_t) (Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
00903 typedef L3INT (q931pie_func_t) (Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
00904
00905 typedef L3INT (q931timeout_func_t) (Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
00906 typedef L3ULONG q931timer_t;
00907
00908
00909 #ifdef Q931PRIVATE
00910 L3INT Q931Proc(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf, L3INT iFrom);
00911 L3INT Q931ProcInvalid(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf, L3INT iFrom);
00912 L3INT Q931Umes(Q931_TrunkInfo_t *pTrunk, L3UCHAR id, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size);
00913 L3INT Q931Pmes(Q931_TrunkInfo_t *pTrunk, L3UCHAR id, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
00914 L3INT Q931Uie(Q931_TrunkInfo_t *pTrunk, L3UCHAR id, Q931mes_Generic *pMes, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *IOff, L3INT *OOff);
00915 L3INT Q931Pie(Q931_TrunkInfo_t *pTrunk, L3UCHAR id, L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
00916 L3INT Q931Timeout(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call, L3UCHAR timer);
00917
00918 L3BOOL Q931UieIsNull(Q931_TrunkInfo_t *pTrunk, L3UCHAR id);
00919 L3BOOL Q931PieIsNull(Q931_TrunkInfo_t *pTrunk, L3UCHAR id);
00920
00921 #include "Q931dialect.h"
00922 #endif
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933
00934 #define Q931GetIETotSize(ie) (((ie.InfoID & 0x80) != 0) ? 1 : ie.LenIE) + 2)
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945 #define Q931IsIEPresent(x) ((x & 0x8000) != 0)
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961 #define Q931GetIEOffset(x) (x & 0x7fff)
00962 #define Q931GetIEValue(x) (x & 0x7fff)
00963
00964
00965
00966
00967
00968
00969
00970
00971
00972
00973 #define Q931GetIEPtr(ie,buf) ((void *)&buf[Q931GetIEOffset(ie)])
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984 #define Q931SetIE(x,o) { x = (ie)(o) | 0x8000; }
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996 #define IsQ931Ext(x) ((x & 0x80) == 0)
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008 #define ieGetOctet(x) ((L3UCHAR)(x))
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023 #define NoWarning(x) (x = x)
01024
01025
01026
01027
01028
01029
01030
01031 #include "Q931ie.h"
01032 #include "Q932.h"
01033
01034
01035
01036
01037
01038
01039 #ifdef Q931PRIVATE
01040
01041
01042 L3INT Q931Pmes_UserInformation(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01043 L3INT Q931Pmes_Restart(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01044 L3INT Q931Pmes_RestartAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01045 L3INT Q931Pmes_CongestionControl(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01046 L3INT Q931Pmes_Segment(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01047 L3INT Q931Pmes_Service(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01048 L3INT Q931Pmes_ServiceAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01049
01050
01051 L3INT Q931Umes_UserInformation(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT I, L3INT O);
01052 L3INT Q931Umes_Restart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT I, L3INT O);
01053 L3INT Q931Umes_RestartAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT I, L3INT O);
01054 L3INT Q931Umes_CongestionControl(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT I, L3INT O);
01055 L3INT Q931Umes_Segment(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT I, L3INT O);
01056 L3INT Q931Umes_Service(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size);
01057 L3INT Q931Umes_ServiceAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size);
01058
01059 #endif
01060
01061
01062
01063
01064
01065
01066 #ifdef Q931PRIVATE
01067
01068
01069 L3INT Q931ProcAlertingTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01070 L3INT Q931ProcCallProceedingTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01071 L3INT Q931ProcConnectTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01072 L3INT Q931ProcConnectAckTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01073 L3INT Q931ProcProgressTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01074 L3INT Q931ProcSetupTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01075 L3INT Q931ProcSetupAckTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01076 L3INT Q931ProcResumeTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01077 L3INT Q931ProcResumeAckTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01078 L3INT Q931ProcResumeRejectTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01079 L3INT Q931ProcSuspendTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01080 L3INT Q931ProcSuspendAckTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01081 L3INT Q931ProcSuspendRejectTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01082 L3INT Q931ProcUserInformationTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01083 L3INT Q931ProcDisconnectTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01084 L3INT Q931ProcReleaseTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01085 L3INT Q931ProcReleaseCompleteTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01086 L3INT Q931ProcRestartTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01087 L3INT Q931ProcRestartAckTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01088 L3INT Q931ProcCongestionControlTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01089 L3INT Q931ProcInformationTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01090 L3INT Q931ProcNotifyTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01091 L3INT Q931ProcStatusTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01092 L3INT Q931ProcStatusEnquiryTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01093 L3INT Q931ProcSegmentTE(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01094
01095 L3INT Q931ProcTimeoutT301TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01096 L3INT Q931ProcTimeoutT302TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01097 L3INT Q931ProcTimeoutT303TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01098 L3INT Q931ProcTimeoutT304TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01099 L3INT Q931ProcTimeoutT305TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01100 L3INT Q931ProcTimeoutT308TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01101 L3INT Q931ProcTimeoutT309TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01102 L3INT Q931ProcTimeoutT310TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01103 L3INT Q931ProcTimeoutT311TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01104 L3INT Q931ProcTimeoutT313TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01105 L3INT Q931ProcTimeoutT314TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01106 L3INT Q931ProcTimeoutT316TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01107 L3INT Q931ProcTimeoutT317TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01108 L3INT Q931ProcTimeoutT318TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01109 L3INT Q931ProcTimeoutT319TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01110 L3INT Q931ProcTimeoutT321TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01111 L3INT Q931ProcTimeoutT322TE(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01112
01113
01114
01115 L3INT Q931ProcAlertingNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01116 L3INT Q931ProcCallProceedingNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01117 L3INT Q931ProcConnectNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01118 L3INT Q931ProcConnectAckNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01119 L3INT Q931ProcProgressNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01120 L3INT Q931ProcSetupNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01121 L3INT Q931ProcSetupAckNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01122 L3INT Q931ProcResumeNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01123 L3INT Q931ProcResumeAckNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01124 L3INT Q931ProcResumeRejectNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01125 L3INT Q931ProcSuspendNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01126 L3INT Q931ProcSuspendAckNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01127 L3INT Q931ProcSuspendRejectNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01128 L3INT Q931ProcUserInformationNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01129 L3INT Q931ProcDisconnectNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01130 L3INT Q931ProcReleaseNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01131 L3INT Q931ProcReleaseCompleteNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01132 L3INT Q931ProcRestartNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01133 L3INT Q931ProcRestartAckNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01134 L3INT Q931ProcCongestionControlNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01135 L3INT Q931ProcInformationNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01136 L3INT Q931ProcNotifyNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01137 L3INT Q931ProcStatusNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01138 L3INT Q931ProcStatusEnquiryNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01139 L3INT Q931ProcSegmentNT(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom);
01140
01141 L3INT Q931ProcTimeoutT301NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01142 L3INT Q931ProcTimeoutT302NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01143 L3INT Q931ProcTimeoutT303NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01144 L3INT Q931ProcTimeoutT304NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01145 L3INT Q931ProcTimeoutT305NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01146 L3INT Q931ProcTimeoutT306NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01147 L3INT Q931ProcTimeoutT307NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01148 L3INT Q931ProcTimeoutT308NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01149 L3INT Q931ProcTimeoutT309NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01150 L3INT Q931ProcTimeoutT310NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01151 L3INT Q931ProcTimeoutT312NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01152 L3INT Q931ProcTimeoutT313NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01153 L3INT Q931ProcTimeoutT314NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01154 L3INT Q931ProcTimeoutT316NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01155 L3INT Q931ProcTimeoutT317NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01156 L3INT Q931ProcTimeoutT320NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01157 L3INT Q931ProcTimeoutT321NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01158 L3INT Q931ProcTimeoutT322NT(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01159
01160
01161 L3INT Q931ProcUnknownMessage(Q931_TrunkInfo_t *pTrunk,L3UCHAR *buf, L3INT iFrom);
01162 L3INT Q931ProcUnexpectedMessage(Q931_TrunkInfo_t *pTrunk,L3UCHAR *buf, L3INT iFrom);
01163
01164 #endif
01165
01166
01167
01168
01169
01170
01171
01172 void Q931TimerTick(Q931_TrunkInfo_t *pTrunk);
01173
01174 L3INT Q931Rx23(Q931_TrunkInfo_t *pTrunk, L3INT ind, L3UCHAR tei, L3UCHAR * Mes, L3INT Size);
01175 L3INT Q931Tx32Data(Q931_TrunkInfo_t *pTrunk, L3UCHAR bcast, L3UCHAR * Mes, L3INT Size);
01176 L3INT Q931Rx43(Q931_TrunkInfo_t *pTrunk, L3UCHAR * Mes, L3INT Size);
01177 L3INT Q931Tx34(Q931_TrunkInfo_t *pTrunk, L3UCHAR * Mes, L3INT Size);
01178
01179 void Q931SetError(Q931_TrunkInfo_t *pTrunk,L3INT ErrID, L3INT ErrPar1, L3INT ErrPar2);
01180
01181
01182 #ifdef Q931PRIVATE
01183 void Q931CreateTE(struct Q931Dialect *d);
01184 void Q931CreateNT(struct Q931Dialect *d);
01185 #endif
01186
01187
01188 void Q931Initialize(void);
01189 void Q931SetGetTimeCB(L3ULONG (*callback)(void));
01190
01191
01192 L3INT Q931InitMesSetup(Q931mes_Generic *p);
01193 L3INT Q931InitMesRestartAck(Q931mes_Generic * pMes);
01194 L3INT Q931InitMesGeneric(Q931mes_Generic *pMes);
01195
01196 L3INT Q931ReleaseCRV(Q931_TrunkInfo_t *pTrunk, L3INT CRV);
01197
01198
01199 #ifdef Q931PRIVATE
01200 L3ULONG Q931GetTime(void);
01201
01202 void Q931AddStateEntry(L3UCHAR iD, L3INT iState, L3INT iMes, L3UCHAR cDir);
01203 L3BOOL Q931IsEventLegal(L3UCHAR iD, L3INT iState, L3INT iMes, L3UCHAR cDir);
01204 #endif
01205
01206
01207
01208
01209
01210
01211
01212
01213 #ifdef Q931PRIVATE
01214 L3INT Q931GetUniqueCRV(Q931_TrunkInfo_t *pTrunk);
01215 #endif
01216
01217
01218 ie Q931AppendIE(L3UCHAR *pm, L3UCHAR *pi);
01219
01220 L3INT Q931InitIEBearerCap(Q931ie_BearerCap *p);
01221 L3INT Q931InitIEChanID(Q931ie_ChanID *p);
01222 L3INT Q931InitIEProgInd(Q931ie_ProgInd *p);
01223 L3INT Q931InitIENetFac(Q931ie_NetFac * pIE);
01224 L3INT Q931InitIEDisplay(Q931ie_Display * pIE);
01225 L3INT Q931InitIEDateTime(Q931ie_DateTime * pIE);
01226 L3INT Q931InitIEKeypadFac(Q931ie_KeypadFac * pIE);
01227 L3INT Q931InitIESignal(Q931ie_Signal * pIE);
01228 L3INT Q931InitIECallingNum(Q931ie_CallingNum * pIE);
01229 L3INT Q931InitIECallingSub(Q931ie_CallingSub * pIE);
01230 L3INT Q931InitIECalledNum(Q931ie_CalledNum * pIE);
01231 L3INT Q931InitIECalledSub(Q931ie_CalledSub * pIE);
01232 L3INT Q931InitIETransNetSel(Q931ie_TransNetSel * pIE);
01233 L3INT Q931InitIELLComp(Q931ie_LLComp * pIE);
01234 L3INT Q931InitIEHLComp(Q931ie_HLComp * pIE);
01235
01236
01237 L3INT Q931Disconnect(Q931_TrunkInfo_t *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause);
01238 L3INT Q931Release(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf, struct Q931_Call *call, L3UCHAR causeval);
01239 L3INT Q931ReleaseComplete(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf, struct Q931_Call *call, L3UCHAR causeval);
01240 L3INT Q931AckRestart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf);
01241 L3INT Q931AckConnect(struct Q931_Call *call);
01242 L3INT Q931AckSetup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf);
01243 L3INT Q931AckService(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf);
01244
01245
01246 L3INT Q931InitTrunk(Q931_TrunkInfo_t *pTrunk,
01247 Q931Dialect_t Dialect,
01248 Q931NetUser_t NetUser,
01249 Q931_TrunkType_t TrunkType,
01250 Q931Tx34CB_t Q931Tx34CBProc,
01251 Q931Tx32CB_t Q931Tx32CBProc,
01252 Q931ErrorCB_t Q931ErrorCBProc,
01253 void *PrivateData32,
01254 void *PrivateData34);
01255 L3INT Q931Start(Q931_TrunkInfo_t *trunk);
01256
01257
01258 L3INT Q931GetMesSize(Q931mes_Generic *pMes);
01259 L3INT Q931InitMesResume(Q931mes_Generic * pMes);
01260
01261
01262 #ifdef Q931PRIVATE
01263 L3INT Q931Log(Q931_TrunkInfo_t *trunk, Q931LogLevel_t level, const char *fmt, ...);
01264 #endif
01265
01266
01267 void Q931SetLogCB(Q931_TrunkInfo_t *trunk, Q931LogCB_t func, void *priv);
01268 void Q931SetLogLevel(Q931_TrunkInfo_t *trunk, Q931LogLevel_t level);
01269
01270
01271 void Q931SetL4HeaderSpace(L3INT space);
01272 void Q931SetL2HeaderSpace(L3INT space);
01273
01274
01275 #ifdef Q931PRIVATE
01276 L3INT Q931ProcDummy(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b,L3INT c);
01277 L3INT Q931UmesDummy(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size);
01278 L3INT Q931PmesDummy(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01279 L3INT Q931UieDummy(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *pMsg, L3UCHAR * IBuf, L3UCHAR * OBuf, L3INT *IOff, L3INT *OOff);
01280 L3INT Q931PieDummy(Q931_TrunkInfo_t *pTrunk,L3UCHAR *IBuf, L3UCHAR *OBuf, L3INT *Octet);
01281 L3INT Q931TxDummy(Q931_TrunkInfo_t *pTrunk, L3UCHAR * b, L3INT n);
01282 L3INT Q931TimeoutDummy(Q931_TrunkInfo_t *pTrunk, struct Q931_Call *call);
01283
01284
01285 L3INT Q931MesgHeader(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *mes, L3UCHAR *OBuf, L3INT Size, L3INT *IOff);
01286
01287
01288 L3INT Q931StatusEnquiryResponse(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf, struct Q931_Call *call, L3UCHAR causeval);
01289
01290
01291 L3INT Q931Umes_Generic(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size);
01292 L3INT Q931Pmes_Generic(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize);
01293 #endif
01294
01295
01296 L3INT Q931CallSendStatus(const struct Q931_Call *call, const L3UCHAR causeval);
01297
01298 #endif