root/src/isdn/Q931api.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. Q931Api_InitTrunk
  2. Q931SetMesProc
  3. Q931SetIEProc
  4. Q931SetTimeoutProc
  5. Q931SetTimerDefault
  6. Q931GetMesSize
  7. Q931AppendIE
  8. Q931GetUniqueCRV
  9. Q931InitMesGeneric
  10. Q931InitMesResume
  11. Q931InitMesRestartAck
  12. Q931InitIEBearerCap
  13. Q931InitIEChanID
  14. Q931InitIEProgInd
  15. Q931InitIENetFac
  16. Q931InitIEDisplay
  17. Q931InitIEDateTime
  18. Q931InitIEKeypadFac
  19. Q931InitIESignal
  20. Q931InitIECallingNum
  21. Q931InitIECallingSub
  22. Q931InitIECalledNum
  23. Q931InitIECalledSub
  24. Q931InitIETransNetSel
  25. Q931InitIELLComp
  26. Q931InitIEHLComp
  27. Q931ProcUnknownMessage
  28. Q931ProcUnexpectedMessage
  29. Q931Disconnect
  30. Q931ReleaseComplete
  31. Q931AckRestart
  32. Q931AckSetup
  33. Q931AckConnect
  34. Q931AckService

   1 /*****************************************************************************
   2 
   3   FileName:             Q931api.c
   4 
   5   Contents:             api (Application Programming Interface) functions.
   6                                 See     q931.h for description. 
   7 
   8   License/Copyright:
   9 
  10   Copyright (c) 2007, Jan Vidar Berger, Case Labs, Ltd. All rights reserved.
  11   email:janvb@caselaboratories.com  
  12 
  13   Redistribution and use in source and binary forms, with or without 
  14   modification, are permitted provided that the following conditions are 
  15   met:
  16 
  17     * Redistributions of source code must retain the above copyright notice, 
  18           this list of conditions and the following disclaimer.
  19     * Redistributions in binary form must reproduce the above copyright notice, 
  20           this list of conditions and the following disclaimer in the documentation 
  21           and/or other materials provided with the distribution.
  22     * Neither the name of the Case Labs, Ltd nor the names of its contributors 
  23           may be used to endorse or promote products derived from this software 
  24           without specific prior written permission.
  25 
  26   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
  27   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  28   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  29   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
  30   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
  31   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
  32   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
  33   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
  34   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
  35   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
  36   POSSIBILITY OF SUCH DAMAGE.
  37 *****************************************************************************/
  38 
  39 #include "Q931.h"
  40 #include "memory.h"
  41 
  42 extern L3INT Q931L4HeaderSpace;
  43 
  44 /*
  45 L3INT Q931CreateMesIndex(L3INT mc)
  46 {
  47     if(mc < 0 || mc > 127 )
  48         return Q931E_INTERNAL;
  49 
  50     if(Q931MesCount >127)
  51         return Q931E_INTERNAL;
  52 
  53     Q931MesIndex[mc] = Q931MesCount ++;
  54 
  55     return Q931E_NO_ERROR;
  56 }
  57 */
  58 /*
  59 L3INT Q931CreateIEIndex(L3INT iec)
  60 {
  61     if(iec < 0 || iec > 127 )
  62         return Q931E_INTERNAL;
  63 
  64     if(Q931IECount > 127)
  65         return Q931E_INTERNAL;
  66 
  67     Q931IEIndex[iec] = Q931IECount ++;
  68 
  69     return Q931E_NO_ERROR;
  70 }
  71 */
  72 
  73 L3INT Q931Api_InitTrunk(Q931_TrunkInfo_t *pTrunk,
  74                                                 Q931Dialect_t Dialect,
  75                                                 Q931NetUser_t NetUser,
  76                                                 Q931_TrunkType_t TrunkType,
  77                                                 Q931Tx34CB_t Q931Tx34CBProc,
  78                                                 Q931Tx32CB_t Q931Tx32CBProc,
  79                                                 Q931ErrorCB_t Q931ErrorCBProc,
  80                                                 void *PrivateData32,
  81                                                 void *PrivateData34)
  82 {
  83         int y, dchannel, maxchans, has_sync = 0;
  84 
  85         switch(TrunkType)
  86         {
  87         case Q931_TrType_E1:
  88                 dchannel = 16;
  89                 maxchans = 31;
  90                 has_sync = 1;
  91                 break;
  92 
  93         case Q931_TrType_T1:
  94         case Q931_TrType_J1:
  95                 dchannel = 24;
  96                 maxchans = 24;
  97                 break;
  98 
  99         case Q931_TrType_BRI:
 100         case Q931_TrType_BRI_PTMP:
 101                 dchannel = 3;
 102                 maxchans = 3;
 103                 break;
 104 
 105         default:
 106                 return 0;
 107         }
 108 
 109         pTrunk->Q931Tx34CBProc = Q931Tx34CBProc;
 110         pTrunk->Q931Tx32CBProc = Q931Tx32CBProc;
 111         pTrunk->Q931ErrorCBProc = Q931ErrorCBProc;
 112         pTrunk->PrivateData32 = PrivateData32;
 113         pTrunk->PrivateData34 = PrivateData34;
 114 
 115     pTrunk->LastCRV                     = 0;
 116     pTrunk->Dialect                     = Dialect + NetUser;       
 117     pTrunk->Enabled                     = 0;
 118     pTrunk->TrunkType           = TrunkType;
 119     pTrunk->NetUser                     = NetUser;
 120     pTrunk->TrunkState          = 0;
 121         pTrunk->autoRestartAck  = 0;
 122     for(y=0; y < Q931MAXCHPERTRUNK; y++)
 123     {
 124         pTrunk->ch[y].Available = 1;
 125 
 126         if(has_sync && y == 0)
 127         {
 128             pTrunk->ch[y].ChanType = Q931_ChType_Sync;
 129         }
 130         else if(y == dchannel)
 131         {
 132             pTrunk->ch[y].ChanType = Q931_ChType_D;
 133         }
 134         else if(y > maxchans)
 135         {
 136             pTrunk->ch[y].ChanType = Q931_ChType_NotUsed;
 137         }
 138         else
 139         {
 140                         pTrunk->ch[y].ChanType = Q931_ChType_B;
 141         }
 142     }
 143 
 144     for(y=0; y < Q931MAXCALLPERTRUNK; y++)
 145     {
 146         pTrunk->call[y].InUse = 0;
 147 
 148     }
 149         return 1;
 150 }
 151 
 152 void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect, q931proc_func_t *Q931ProcFunc, q931umes_func_t *Q931UmesFunc, q931pmes_func_t *Q931PmesFunc)
 153 {
 154     if(Q931ProcFunc != NULL)
 155         Q931Proc[dialect][mes] = Q931ProcFunc;
 156     if(Q931UmesFunc != NULL)
 157         Q931Umes[dialect][mes] = Q931UmesFunc;
 158     if(Q931PmesFunc != NULL)
 159         Q931Pmes[dialect][mes] = Q931PmesFunc;
 160 }
 161 
 162 void Q931SetIEProc(L3UCHAR iec, L3UCHAR dialect, q931pie_func_t *Q931PieProc, q931uie_func_t *Q931UieProc)
 163 {
 164     if(Q931PieProc != NULL)
 165         Q931Pie[dialect][iec] = Q931PieProc;
 166     if(Q931UieProc != NULL)
 167         Q931Uie[dialect][iec] = Q931UieProc;
 168 }
 169 
 170 void Q931SetTimeoutProc(L3UCHAR dialect, L3UCHAR timer, q931timeout_func_t *Q931TimeoutProc)
 171 {
 172         if(Q931Timeout != NULL)
 173                 Q931Timeout[dialect][timer] = Q931TimeoutProc;
 174 }
 175 
 176 void Q931SetTimerDefault(L3UCHAR dialect, L3UCHAR timer, q931timer_t timeout)
 177 {
 178         Q931Timer[dialect][timer] = timeout;
 179 }
 180 
 181 L3INT Q931GetMesSize(Q931mes_Generic *pMes)
 182 {
 183         
 184     L3UCHAR *p = &pMes->buf[0];
 185     L3INT Size = (L3INT)(p - (L3UCHAR *)pMes);
 186     return Size;
 187 }
 188 
 189 /*****************************************************************************
 190 
 191   Function:     q931AppendIE    
 192 
 193   Description:  Append IE to the message.
 194 
 195   Parameters:   pm      Ptr to message.
 196                 pi      Ptr to information element
 197 
 198   Return Value  ie setting
 199 
 200 *****************************************************************************/
 201 
 202 ie Q931AppendIE( L3UCHAR *pm, L3UCHAR *pi)
 203 {
 204         ie IE = 0;
 205         Q931mes_Generic * pMes= (Q931mes_Generic *)pm;
 206         Q931ie_BearerCap * pIE= (Q931ie_BearerCap *)pi;
 207         L3INT iISize = pIE->Size;
 208 
 209         L3UCHAR *pBuf = &pMes->buf[0];
 210         L3INT Off = (L3INT)(pMes->Size - (pBuf - pm));
 211         IE = (ie)(Off | 0x8000);
 212 
 213         memcpy(&pm[pMes->Size], pi, iISize);
 214 
 215         pMes->Size += iISize;
 216 
 217         return IE;
 218 }
 219 
 220 /*****************************************************************************
 221 *****************************************************************************/
 222 static L3INT crv={1};
 223 
 224 L3INT Q931GetUniqueCRV(Q931_TrunkInfo_t *pTrunk)
 225 {
 226         L3INT max = (Q931_IS_BRI(pTrunk)) ? Q931_BRI_MAX_CRV : Q931_PRI_MAX_CRV;
 227 
 228         crv++;
 229         crv = (crv <= max) ? crv : 1;
 230 
 231         return crv;
 232 }
 233 
 234 L3INT Q931InitMesGeneric(Q931mes_Generic *pMes)
 235 {
 236         memset(pMes, 0, sizeof(*pMes));
 237         pMes->ProtDisc          = 0x08;
 238         pMes->Size                      = Q931GetMesSize(pMes);
 239 
 240         return 0;
 241 }
 242 
 243 L3INT Q931InitMesResume(Q931mes_Generic * pMes)
 244 {
 245         pMes->ProtDisc          = 0x08;
 246         pMes->CRV                       = 0;            /* CRV to be allocated, might be receive*/
 247         pMes->MesType           = Q931mes_RESUME;
 248 
 249         pMes->Size                      = Q931GetMesSize(pMes);
 250     pMes->CallID        = 0;        /* Channel Identification               */
 251         return 0;
 252 }
 253 
 254 L3INT Q931InitMesRestartAck(Q931mes_Generic * pMes)
 255 {
 256         pMes->ProtDisc          = 0x08;
 257         pMes->CRV                       = 0;            /* CRV to be allocated, might be receive*/
 258         pMes->MesType           = Q931mes_RESTART_ACKNOWLEDGE;
 259 
 260         pMes->Size                      = Q931GetMesSize(pMes);
 261     pMes->ChanID        = 0;        /* Channel Identification               */
 262         pMes->Display           = 0;
 263         pMes->RestartInd        = 0;
 264         pMes->RestartWin        = 0;
 265         return 0;
 266 }
 267 
 268 L3INT Q931InitIEBearerCap(Q931ie_BearerCap *pIE)
 269 {
 270         pIE->IEId                       = Q931ie_BEARER_CAPABILITY;
 271         pIE->Size                       = sizeof(Q931ie_BearerCap);
 272         pIE->CodStand           = 0;
 273         pIE->ITC                        = 0;
 274         pIE->TransMode          = 0;
 275         pIE->ITR                        = 0x10;
 276         pIE->RateMul            = 0;
 277 
 278         pIE->Layer1Ident        = 0;
 279         pIE->UIL1Prot           = 0;        /* User Information Layer 1 Protocol    */
 280         pIE->SyncAsync          = 0;        /* Sync/Async                           */
 281         pIE->Negot                      = 0;                
 282         pIE->UserRate           = 0;
 283         pIE->InterRate          = 0;        /* Intermediate Rate                    */
 284         pIE->NIConTx            = 0;
 285         pIE->NIConRx            = 0;
 286         pIE->FlowCtlTx          = 0;        /* Flow control on Tx                   */
 287         pIE->FlowCtlRx          = 0;        /* Flow control on Rx                   */
 288         pIE->HDR                        = 0;
 289         pIE->MultiFrame         = 0;        /* Multi frame support                  */
 290         pIE->Mode                       = 0;
 291         pIE->LLInegot           = 0;
 292         pIE->Assignor           = 0;        /* Assignor/assignee                    */
 293         pIE->InBandNeg          = 0;        /* In-band/out-band negot.              */
 294         pIE->NumStopBits        = 0;        /* Number of stop bits                  */
 295         pIE->NumDataBits        = 0;        /* Number of data bits.                 */
 296         pIE->Parity                     = 0;
 297         pIE->DuplexMode         = 0;
 298         pIE->ModemType          = 0;
 299         pIE->Layer2Ident        = 0;
 300         pIE->UIL2Prot           = 0;        /* User Information Layer 2 Protocol    */
 301         pIE->Layer3Ident        = 0;           
 302         pIE->UIL3Prot           = 0;        /* User Information Layer 3 Protocol    */
 303         pIE->AL3Info1           = 0;
 304         pIE->AL3Info2           = 0;
 305 
 306         return 0;
 307 }
 308 
 309 L3INT Q931InitIEChanID(Q931ie_ChanID *pIE)
 310 {
 311         pIE->IEId                       = Q931ie_CHANNEL_IDENTIFICATION;
 312         pIE->Size                       = sizeof(Q931ie_ChanID);
 313         pIE->IntIDPresent       = 0;        /* Int. id. present                     */
 314         pIE->IntType            = 0;        /* Int. type                            */
 315         pIE->PrefExcl           = 0;        /* Pref./Excl.                          */
 316         pIE->DChanInd           = 0;        /* D-channel ind.                       */
 317         pIE->InfoChanSel        = 0;        /* Info. channel selection              */
 318         pIE->InterfaceID        = 0;        /* Interface identifier                 */
 319         pIE->CodStand           = 0;            /* Code standard                        */
 320         pIE->NumMap                     = 0;        /* Number/Map                           */
 321         pIE->ChanMapType        = 0;        /* Channel type/Map element type        */
 322         pIE->ChanSlot           = 0;        /* Channel number/Slot map              */
 323 
 324         return 0;
 325 }
 326 
 327 L3INT Q931InitIEProgInd(Q931ie_ProgInd * pIE)
 328 {
 329         pIE->IEId                       = Q931ie_PROGRESS_INDICATOR;
 330         pIE->Size                       = sizeof(Q931ie_ProgInd);
 331         pIE->CodStand           = 0;        /* Coding standard                      */
 332         pIE->Location           = 0;        /* Location                             */
 333         pIE->ProgDesc           = 0;        /* Progress description                 */
 334 
 335         return 0;
 336 }
 337 
 338 L3INT Q931InitIENetFac(Q931ie_NetFac * pIE)
 339 {
 340         pIE->IEId                       = Q931ie_NETWORK_SPECIFIC_FACILITIES;
 341         pIE->Size                       = sizeof(Q931ie_NetFac);
 342         pIE->LenNetID           = 0;        /* Length of network facilities id.     */
 343         pIE->TypeNetID          = 0;        /* Type of network identification       */
 344         pIE->NetIDPlan          = 0;        /* Network identification plan.         */
 345         pIE->NetFac                     = 0;        /* Network specific facility spec.      */
 346         pIE->NetID[0]           = 0;
 347         return 0;
 348 }
 349 
 350 L3INT Q931InitIEDisplay(Q931ie_Display * pIE)
 351 {
 352         pIE->IEId                       = Q931ie_DISPLAY;
 353         pIE->Size                       = sizeof(Q931ie_Display);
 354         pIE->Display[0]         = 0;
 355         return 0;
 356 }
 357 
 358 L3INT Q931InitIEDateTime(Q931ie_DateTime * pIE)
 359 {
 360         pIE->IEId                       = Q931ie_DATETIME;
 361         pIE->Size                       = sizeof(Q931ie_DateTime);
 362         pIE->Year                       = 0;        /* Year                                 */
 363         pIE->Month                      = 0;        /* Month                                */
 364         pIE->Day                        = 0;        /* Day                                  */
 365         pIE->Hour                       = 0;        /* Hour                                 */
 366         pIE->Minute                     = 0;        /* Minute                               */
 367         pIE->Second                     = 0;        /* Second                               */
 368 
 369         return 0;
 370 }
 371 
 372 L3INT Q931InitIEKeypadFac(Q931ie_KeypadFac * pIE)
 373 {
 374         pIE->IEId                       = Q931ie_KEYPAD_FACILITY;
 375         pIE->Size                       = sizeof(Q931ie_KeypadFac);
 376         pIE->KeypadFac[0]       = 0;
 377         return 0;
 378 }
 379 
 380 L3INT Q931InitIESignal(Q931ie_Signal * pIE)
 381 {
 382         pIE->IEId                       = Q931ie_SIGNAL;
 383         pIE->Size                       = sizeof(Q931ie_Signal);
 384         pIE->Signal                     = 0;
 385         return 0;
 386 }
 387 
 388 L3INT Q931InitIECallingNum(Q931ie_CallingNum * pIE)
 389 {
 390         pIE->IEId                       = Q931ie_CALLING_PARTY_NUMBER;
 391         pIE->Size                       = sizeof(Q931ie_CallingNum);
 392         pIE->TypNum                     = 0;        /* Type of number                       */
 393         pIE->NumPlanID          = 0;        /* Numbering plan identification        */
 394         pIE->PresInd            = 0;        /* Presentation indicator               */
 395         pIE->ScreenInd          = 0;        /* Screening indicator                  */
 396         pIE->Digit[0]           = 0;        /* Number digits (IA5)                  */
 397 
 398         return 0;
 399 }
 400 
 401 L3INT Q931InitIECallingSub(Q931ie_CallingSub * pIE)
 402 {
 403         pIE->IEId                       = Q931ie_CALLING_PARTY_SUBADDRESS;
 404         pIE->Size                       = sizeof(Q931ie_CallingSub);
 405         pIE->TypNum                     = 0;        /* Type of subaddress                   */
 406         pIE->OddEvenInd         = 0;        /* Odd/Even indicator                   */
 407         pIE->Digit[0]           = 0;        /* Digits                               */
 408 
 409         return 0;
 410 }
 411 
 412 L3INT Q931InitIECalledNum(Q931ie_CalledNum * pIE)
 413 {
 414         pIE->IEId                       = Q931ie_CALLED_PARTY_NUMBER;
 415         pIE->Size                       = sizeof(Q931ie_CalledNum);
 416         pIE->TypNum                     = 0;        /* Type of Number                       */
 417         pIE->NumPlanID          = 0;        /* Numbering plan identification        */
 418         pIE->Digit[0]           = 0;        /* Digit (IA5)                          */
 419 
 420         return 0;
 421 }
 422 
 423 L3INT Q931InitIECalledSub(Q931ie_CalledSub * pIE)
 424 {
 425         pIE->IEId                       = Q931ie_CALLED_PARTY_SUBADDRESS;
 426         pIE->Size                       = sizeof(Q931ie_CalledSub);
 427         pIE->TypNum                     = 0;        /* Type of subaddress                   */
 428         pIE->OddEvenInd         = 0;        /* Odd/Even indicator                   */
 429         pIE->Digit[0]           = 0;        /* Digits                               */
 430 
 431         return 0;
 432 }
 433 
 434 L3INT Q931InitIETransNetSel(Q931ie_TransNetSel * pIE)
 435 {
 436         pIE->IEId                       = Q931ie_TRANSIT_NETWORK_SELECTION;
 437         pIE->Size                       = sizeof(Q931ie_TransNetSel);
 438         pIE->Type                       = 0;        /* Type of network identifier           */
 439         pIE->NetIDPlan          = 0;        /* Network idetification plan           */
 440         pIE->NetID[0]           = 0;        /* Network identification(IA5)          */
 441 
 442         return 0;
 443 }
 444 
 445 L3INT Q931InitIELLComp(Q931ie_LLComp * pIE)
 446 {
 447         pIE->IEId                       = Q931ie_LOW_LAYER_COMPATIBILITY;
 448         pIE->Size                       = sizeof(Q931ie_LLComp);
 449 
 450         pIE->CodStand           = 0;        /* Coding standard                      */
 451         pIE->ITransCap          = 0;        /* Information transfer capability      */
 452         pIE->NegotInd           = 0;        /* Negot indic.                         */
 453         pIE->TransMode          = 0;        /* Transfer Mode                        */
 454         pIE->InfoRate           = 0;        /* Information transfer rate            */
 455         pIE->RateMul            = 0;        /* Rate multiplier                      */
 456         pIE->Layer1Ident        = 0;        /* Layer 1 ident.                       */
 457         pIE->UIL1Prot           = 0;        /* User information layer 1 protocol    */
 458         pIE->SyncAsync          = 0;        /* Synch/asynch                         */
 459         pIE->Negot                      = 0;        /* Negot                                */
 460         pIE->UserRate           = 0;        /* User rate                            */
 461         pIE->InterRate          = 0;        /* Intermediate rate                    */
 462         pIE->NIConTx            = 0;        /* NIC on Tx                            */
 463         pIE->NIConRx            = 0;        /* NIC on Rx                            */
 464         pIE->FlowCtlTx          = 0;        /* Flow control on Tx                   */
 465         pIE->FlowCtlRx          = 0;        /* Flow control on Rx                   */
 466         pIE->HDR                        = 0;        /* Hdr/no hdr                           */
 467         pIE->MultiFrame         = 0;        /* Multiframe                           */
 468         pIE->ModeL1                     = 0;            /* Mode L1                                                              */
 469         pIE->NegotLLI           = 0;        /* Negot. LLI                           */
 470         pIE->Assignor           = 0;        /* Assignor/Assignor ee                 */
 471         pIE->InBandNeg          = 0;        /* In-band negot.                       */
 472         pIE->NumStopBits        = 0;        /* Number of stop bits                  */
 473         pIE->NumDataBits        = 0;        /* Number of data bits                  */
 474         pIE->Parity                     = 0;        /* Parity                               */
 475         pIE->DuplexMode         = 0;        /* Duplex Mode                          */
 476         pIE->ModemType          = 0;        /* Modem type                           */
 477         pIE->Layer2Ident        = 0;        /* Layer 2 ident.                       */
 478         pIE->UIL2Prot           = 0;        /* User information layer 2 protocol    */
 479         pIE->ModeL2                     = 0;        /* ModeL2                               */
 480         pIE->Q933use            = 0;        /* Q.9333 use                           */
 481         pIE->UsrSpcL2Prot       = 0;        /* User specified layer 2 protocol info */
 482         pIE->WindowSize         = 0;        /* Window size (k)                      */
 483         pIE->Layer3Ident        = 0;        /* Layer 3 ident                        */
 484         pIE->OptL3Info          = 0;        /* Optional layer 3 protocol info.      */
 485         pIE->ModeL3                     = 0;        /* Mode of operation                    */
 486 #if 0
 487         pIE->ModeX25op          = 0;        /* Mode of operation X.25               */
 488 #endif
 489         pIE->DefPackSize        = 0;        /* Default packet size                  */
 490         pIE->PackWinSize        = 0;        /* Packet window size                   */
 491         pIE->AddL3Info          = 0;        /* Additional Layer 3 protocol info     */
 492 
 493         return 0;
 494 }
 495 
 496 L3INT Q931InitIEHLComp(Q931ie_HLComp * pIE)
 497 {
 498         pIE->IEId                       = Q931ie_HIGH_LAYER_COMPATIBILITY;
 499         pIE->Size                       = sizeof(Q931ie_HLComp);
 500 
 501         return 0;
 502 }
 503 
 504 L3INT Q931ProcUnknownMessage(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom)
 505 {
 506         /* TODO:  Unhandled paramaters */
 507         (void)pTrunk;
 508         (void)b;
 509         (void)iFrom;
 510 
 511     return 0;
 512 }
 513 
 514 L3INT Q931ProcUnexpectedMessage(Q931_TrunkInfo_t *pTrunk,L3UCHAR * b, L3INT iFrom)
 515 {
 516         /* TODO:  Unhandled paramaters */
 517         (void)pTrunk;
 518         (void)b;
 519         (void)iFrom;
 520 
 521     return 0;
 522 }
 523 
 524 L3INT Q931Disconnect(Q931_TrunkInfo_t *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause)
 525 {
 526         /* TODO:  Unhandled paramaters */
 527         (void)pTrunk;
 528         (void)iTo;
 529         (void)iCRV;
 530         (void)iCause;
 531 
 532     return 0;
 533 }
 534 
 535 L3INT Q931ReleaseComplete(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf)
 536 {
 537     Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace];
 538         ptr->MesType = Q931mes_RELEASE_COMPLETE;
 539         ptr->CRVFlag = !(ptr->CRVFlag);
 540         return Q931Tx32Data(pTrunk,0,buf,ptr->Size);
 541 }
 542 
 543 L3INT Q931AckRestart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf)
 544 {
 545         L3INT RetCode;
 546 
 547     Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace];
 548         ptr->MesType = Q931mes_RESTART_ACKNOWLEDGE;
 549         //if (ptr->CRV) {
 550                 ptr->CRVFlag = !(ptr->CRVFlag);
 551                 //}
 552 
 553         RetCode = Q931Proc[pTrunk->Dialect][ptr->MesType](pTrunk, buf, 4);
 554 
 555     return RetCode;
 556 }
 557 
 558 L3INT Q931AckSetup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf)
 559 {
 560         L3INT RetCode;
 561 
 562     Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace];
 563         ptr->MesType = Q931mes_SETUP_ACKNOWLEDGE;
 564 
 565         RetCode = Q931Proc[pTrunk->Dialect][ptr->MesType](pTrunk, buf, 4);
 566 
 567     return RetCode;
 568 }
 569 
 570 L3INT Q931AckConnect(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf)
 571 {
 572         L3INT RetCode;
 573 
 574     Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace];
 575         ptr->MesType = Q931mes_CONNECT_ACKNOWLEDGE;
 576 
 577         RetCode = Q931Proc[pTrunk->Dialect][ptr->MesType](pTrunk, buf, 4);
 578 
 579     return RetCode;
 580 }
 581 
 582 L3INT Q931AckService(Q931_TrunkInfo_t *pTrunk, L3UCHAR *buf)
 583 {
 584         L3INT RetCode;
 585 
 586     Q931mes_Header *ptr = (Q931mes_Header*)&buf[Q931L4HeaderSpace];
 587         ptr->MesType = Q931mes_SERVICE_ACKNOWLEDGE;
 588         if (ptr->CRV) {
 589                 ptr->CRVFlag = !(ptr->CRVFlag);
 590         }
 591 
 592         RetCode = Q931Proc[pTrunk->Dialect][ptr->MesType](pTrunk, buf, 4);
 593 
 594     return RetCode;
 595 }
 596 
 597 Q931_ENUM_NAMES(DIALECT_TYPE_NAMES, DIALECT_STRINGS)
 598 Q931_STR2ENUM(q931_str2Q931Dialect_type, q931_Q931Dialect_type2str, Q931Dialect_t, DIALECT_TYPE_NAMES, Q931_Dialect_Count)

/* [<][>][^][v][top][bottom][index][help] */