blob: 871f3ef3c44dc6385e706db9762013dec49aab15 [file] [log] [blame] [edit]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
// ----------------------------------------------------------------------
//
// This Software is an original work of authorship of PacketVideo Corporation.
// Portions of the Software were developed in collaboration with NTT DoCoMo,
// Inc. or were derived from the public domain or materials licensed from
// third parties. Title and ownership, including all intellectual property
// rights in and to the Software shall remain with PacketVideo Corporation
// and NTT DoCoMo, Inc.
//
// -----------------------------------------------------------------------
/************************************************************************/
/* file name : seclc.c */
/* file contents : Close Logical Channel */
/* : Signalling Entity Management */
/* draw : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendment : */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
/************************************************************************/
/* Headerfile Include */
/************************************************************************/
#include "h245inf.h"
#include "semsgque.h"
#include "clc.h"
#include "lcentry.h"
/************************************************************************/
/* function name : Se_Clc_0400_0000 */
/* function outline : Event CLOSE.request */
/* : Status Outgoing Idle */
/* function discription: void Se_Clc_0400_0000( ) */
/* input data : int32 Lcn */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career () : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0400_0000(LCEntry *pLcbEntry)
{
pLcbEntry->ClcStatusWrite(CLS_OUTGOING_AWTING_RPS) ;
MsgCloseSend(pLcbEntry) ;
T108TimerStart(pLcbEntry) ;
}
/************************************************************************/
/* function name : Se_Clc_0401_0001 */
/* function outline : Event RequestChannelClose */
/* : Status Incoming Idle */
/* function discription: void Se_Clc_0401_0001() */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0401_0001(LCEntry *pLcbEntry)
{
pLcbEntry->ClcStatusWrite(CLS_INCOMING_AWTING_RPS) ;
PtvCloseIdcSend(pLcbEntry) ;
}
/************************************************************************/
/* function name : Se_Clc_0401_0011 */
/* function outline : Event RequestChannelClose */
/* : Status Incoming Awaiting Response */
/* function discription: void Se_Clc_0401_0011( ) */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0401_0011(LCEntry *pLcbEntry)
{
S_RccRejectCause cause;
cause.index = 0 ; /* unspecified */
PtvRjtIdcSend(pLcbEntry, Src_USER , &cause) ;
PtvCloseIdcSend(pLcbEntry) ;
}
/************************************************************************/
/* function name : Se_Clc_0402_0011 */
/* function outline : Event CLOSE.response */
/* : Status Incoming Awaiting Response */
/* function discription: void Se_Clc_0402_0011( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0402_0011(LCEntry *pLcbEntry)
{
pLcbEntry->ClcStatusWrite(CLS_INCOMING_IDLE) ;
MsgCloseAckSend(pLcbEntry) ;
}
/************************************************************************/
/* function name : Se_Clc_0403_0011 */
/* function outline : Event REJECT.request */
/* : Status Incoming Awaiting Response */
/* function discription: void Se_Clc_0403_0011( PS_RccRejectCause ) */
/* input data : PS_RccRejectCause pCause_Clc */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0403_0011(LCEntry *pLcbEntry, PS_RccRejectCause pCause)
{
pLcbEntry->ClcStatusWrite(CLS_INCOMING_IDLE) ;
MsgCloseRjtSend(pLcbEntry, pCause) ;
}
/************************************************************************/
/* function name : Se_Clc_0404_0010 */
/* function outline : Event RequestChannelCloseAck */
/* : Status Outgoing Awaiting Response */
/* function discription: void Se_Clc_0404_0010( ) */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0404_0010(LCEntry *pLcbEntry)
{
T108TimerStop(pLcbEntry) ;
pLcbEntry->ClcStatusWrite(CLS_OUTGOING_IDLE) ;
PtvCloseCfmSend(pLcbEntry) ;
}
/************************************************************************/
/* function name : Se_Clc_0405_0010 */
/* function outline : Event RequestChannelCloseReject */
/* : Status Outgoing Awaiting Response */
/* function discription: void Se_Clc_0405_0010 */
/* : ( PS_RequestChannelCloseReject ) */
/* input data : PS_RequestChannelCloseReject */
/* pRequestChannelCloseReject */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0405_0010(LCEntry *pLcbEntry, PS_RequestChannelCloseReject pRequestChannelCloseReject)
{
T108TimerStop(pLcbEntry) ;
pLcbEntry->ClcStatusWrite(CLS_OUTGOING_IDLE) ;
PtvRjtIdcSend(pLcbEntry, Src_USER, &pRequestChannelCloseReject->rccRejectCause) ;
}
/************************************************************************/
/* function name : Se_Clc_0406_0010 */
/* function outline : Event Timer T108 Timeout */
/* : Status Outgoing Awaiting Response */
/* function discription: void Se_Clc_0406_0010( int32 ) */
/* input data : int32 Timer_Sequence_Number */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0406_0010(LCEntry *pLcbEntry, int32 Timer_Sequence_Number)
{
S_RccRejectCause cause;
/* Receive Timer Sequense Number Equal Timer Sequence Number */
if (Timer_Sequence_Number == pLcbEntry->ClcTmrSqcNumberRead())
{
pLcbEntry->ClcStatusWrite(CLS_OUTGOING_IDLE) ;
MsgCloseRlsSend(pLcbEntry) ;
cause.index = 0 ; /* unspecified */
PtvRjtIdcSend(pLcbEntry, Src_PROTOCOL , &cause) ;
}
}
/************************************************************************/
/* function name : Se_Clc_0407_0011 */
/* function outline : Event RequestChannelCloseRelease */
/* : Status Incoming Awaiting Response */
/* function discription: void Se_Clc_0407_0011( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::_0407_0011(LCEntry *pLcbEntry)
{
S_RccRejectCause cause;
cause.index = 0 ; /* unspecified */
pLcbEntry->ClcStatusWrite(CLS_INCOMING_IDLE) ;
PtvRjtIdcSend(pLcbEntry, Src_PROTOCOL , &cause) ;
}
/************************************************************************/
/* function name : Se_ClcMsgCloseSend */
/* function outline : RequestChannelClose Send */
/* function discription: void Se_ClcMsgCloseSend( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::MsgCloseSend(LCEntry *pLcbEntry)
{
S_RequestChannelClose requestChannelClose ;
S_H245Msg h245Msg ;
requestChannelClose.forwardLogicalChannelNumber = (uint16) pLcbEntry->FwdLcnRead() ;
requestChannelClose.option_of_qosCapability = false;
requestChannelClose.option_of_rccReason = false;
h245Msg.Type1 = H245_MSG_REQ ;
h245Msg.Type2 = MSGTYP_CLC ;
h245Msg.pData = (uint8*) & requestChannelClose ;
MessageSend(&h245Msg) ;
}
/************************************************************************/
/* function name : Se_ClcMsgCloseAckSend */
/* function outline : RequestChannelCloseAck Send */
/* function discription: void Se_ClcMsgCloseAckSend( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::MsgCloseAckSend(LCEntry *pLcbEntry)
{
S_RequestChannelCloseAck requestChannelCloseAck ;
S_H245Msg h245Msg ;
requestChannelCloseAck.forwardLogicalChannelNumber = (uint16) pLcbEntry->FwdLcnRead() ;
h245Msg.Type1 = H245_MSG_RPS ;
h245Msg.Type2 = MSGTYP_CLC_ACK ;
h245Msg.pData = (uint8*) & requestChannelCloseAck ;
MessageSend(&h245Msg) ;
}
/************************************************************************/
/* function name : Se_ClcMsgCloseRjtSend */
/* function outline : RequestChannelCloseReject Send */
/* function discription: void Se_ClcMsgCloseRjtSend( PS_RccRejectCause ) */
/* input data : PS_RccRejectCause pCause_clcse */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::MsgCloseRjtSend(LCEntry *pLcbEntry, PS_RccRejectCause pCause)
{
S_RequestChannelCloseReject requestChannelCloseReject ;
S_H245Msg h245Msg ;
requestChannelCloseReject.forwardLogicalChannelNumber = (uint16) pLcbEntry->FwdLcnRead() ;
oscl_memcpy((int8*)&requestChannelCloseReject.rccRejectCause ,
(int8*)pCause , sizeof(S_RccRejectCause)) ;
h245Msg.Type1 = H245_MSG_RPS ;
h245Msg.Type2 = MSGTYP_CLC_RJT ;
h245Msg.pData = (uint8*) & requestChannelCloseReject ;
MessageSend(&h245Msg) ;
}
/************************************************************************/
/* function name : Se_ClcMsgCloseRlsSend */
/* function outline : RequestChannelCloseRelease Send */
/* function discription: void Se_ClcMsgCloseRlsSend( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::MsgCloseRlsSend(LCEntry *pLcbEntry)
{
S_RequestChannelCloseRelease requestChannelCloseRelease ;
S_H245Msg h245Msg ;
requestChannelCloseRelease.forwardLogicalChannelNumber = (uint16) pLcbEntry->FwdLcnRead() ;
h245Msg.Type1 = H245_MSG_IDC ;
h245Msg.Type2 = MSGTYP_CLC_RLS ;
h245Msg.pData = (uint8*) & requestChannelCloseRelease ;
MessageSend(&h245Msg) ;
}
/************************************************************************/
/* function name : Se_ClcPtvCloseIdcSend */
/* function outline : CLOSE.indicaton Send */
/* function discription: void Se_ClcPtvCloseIdcSend( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::PtvCloseIdcSend(LCEntry *pLcbEntry)
{
S_InfHeader header ;
header.InfType = H245_PRIMITIVE ;
header.InfId = E_PtvId_Clc_Cls_Idc ;
header.InfSupplement1 = pLcbEntry->FwdLcnRead() ;
header.InfSupplement2 = pLcbEntry->DirectionalRead() ;
/* (UNI=1, BI=2) */
header.pParameter = NULL ;
header.Size = 0 ;
PrimitiveSend(&header) ;
}
/************************************************************************/
/* function name : Se_ClcPtvRjtIdcSend */
/* function outline : REJECT.indication Send */
/* function discription: void Se_ClcPtvRjtIdcSend( int32, */
/* PS_RccRejectCause ) */
/* input data : int32 Source */
/* : PS_RccRejectCause pCause_clcse */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::PtvRjtIdcSend(LCEntry *pLcbEntry,
int32 Source ,
PS_RccRejectCause pCause)
{
S_InfHeader header ;
S_SourceCause_Clc sourceCause_Clc ;
sourceCause_Clc.Source = (ENUM_Source)Source ;
oscl_memcpy((int8*)&sourceCause_Clc.Cause , (int8*)pCause , sizeof(S_RccRejectCause)) ;
header.InfType = H245_PRIMITIVE ;
header.InfId = E_PtvId_Clc_Rjt_Idc ;
/* Test for OutgoingIncoming not needed -- RAN */
header.InfSupplement1 = pLcbEntry->FwdLcnRead() ;
header.InfSupplement2 = 0 ;
header.pParameter = (uint8*) & sourceCause_Clc ;
header.Size = sizeof(S_SourceCause_Clc) ;
PrimitiveSend(&header) ;
}
/************************************************************************/
/* function name : Se_ClcPtvCloseCfmSend */
/* function outline : SEND.confirm Send */
/* function discription: void Se_ClcPtvCloseCfmSend( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::PtvCloseCfmSend(LCEntry *pLcbEntry)
{
S_InfHeader header ;
header.InfType = H245_PRIMITIVE ;
header.InfId = E_PtvId_Clc_Cls_Cfm ;
header.InfSupplement1 = pLcbEntry->FwdLcnRead() ;
header.InfSupplement2 = 0 ;
header.pParameter = NULL ;
header.Size = 0 ;
PrimitiveSend(&header) ;
}
/************************************************************************/
/* function name : Se_ClcT108TimerIdGet */
/* function outline : T108 Timer Id Get */
/* function discription: Se_ClcT108TimerIdGet( PS_LCB_ENTRY ) */
/* input data : PS_LCB_ENTRY p_LcbEntry */
/* output data : int32 Timer Id */
/* draw time : '96.11.11 */
/*----------------------------------------------------------------------*/
/* (x) */
/* This routine added for multiple CLCSEs. RAN */
/************************************************************************/
int32 CLC::T108TimerIdGet(LCEntry *p_LcbEntry)
{
/* Return T108 Timer Id */
return(((p_LcbEntry->FwdLcnRead()) << 16) | E_TmrId_Clc_T108) ;
}
/************************************************************************/
/* function name : Se_ClcT108TimerStart */
/* function outline : T108 Timer Start */
/* function discription: void Se_ClcT108TimerStart( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.26 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::T108TimerStart(LCEntry *pLcbEntry)
{
pLcbEntry->ClcTmrSqcNumberInc() ;
RequestTimer(T108TimerIdGet(pLcbEntry),
pLcbEntry->ClcTmrSqcNumberRead(),
TimerDuration);
}
/************************************************************************/
/* function name : Se_ClcT108TimerStop */
/* function outline : T108 Timer Stop */
/* function discription: void Se_ClcT108TimerStop( void ) */
/* input data : None */
/* output data : None */
/* draw time : '96.11.19 */
/*----------------------------------------------------------------------*/
/* amendent career (x) : */
/* */
/* Copyright (C) 1996 NTT DoCoMo */
/************************************************************************/
void CLC::T108TimerStop(LCEntry *pLcbEntry)
{
CancelTimer(T108TimerIdGet(pLcbEntry)) ;
}