127 lines
3.9 KiB
C
127 lines
3.9 KiB
C
|
|
/********************************************************************/
|
|
/*Title: scoc.c */
|
|
/*Descr: SCCP Connection-Oriented Control */
|
|
/*Author: Liang Hanxi */
|
|
/*Create: 2002-2-19 */
|
|
/*Modify: 2003-5-9 */
|
|
|
|
/********************************************************************/
|
|
#include "./include/sccp.h"
|
|
|
|
/*===========import================*/
|
|
extern int scrc_route ( Intra_Msg * pIntraMsg, BOOL ForceAnsi );
|
|
extern int build_msg ( BYTE * buf, Intra_Msg * intramsg, BYTE NetID, BYTE ansi_flag ); //sccpmsg.c
|
|
extern int parse_msg ( BYTE * buf, Intra_Msg * intramsg, int len, BYTE NetID, BYTE ansi_flag ); //sccpmsg.c
|
|
|
|
/*===========export================*/
|
|
int scrc2scoc ( Intra_Msg * intramsg, BYTE AnsiFlag );
|
|
int scoc_store ( up_message * sccpmsg );
|
|
|
|
/*
|
|
int scrc2scoc ( Intra_Msg * intramsg, BYTE AnsiFlag )
|
|
{
|
|
up_message mtp3msg;
|
|
|
|
mtp3msg.len = build_msg ( mtp3msg.msgList, intramsg, intramsg->NetID, AnsiFlag );
|
|
mtp3msg.dest_ip = intramsg->CDA.ip;
|
|
mtp3msg.dpc = intramsg->DPC;
|
|
mtp3msg.opc = intramsg->OPC;
|
|
mtp3msg.sio = intramsg->NetID * 0x40 + 3;
|
|
mtp3msg.cic[0] = intramsg->SLS;
|
|
mtp3msg.link = intramsg->link;
|
|
|
|
scoc_store ( &mtp3msg );
|
|
return 1;
|
|
}
|
|
*/
|
|
/*
|
|
int scoc_store ( up_message * sccpmsg )
|
|
{
|
|
up_message *pmsg;
|
|
|
|
SccpCsta[SccpCstaInd].utilization[4 - 3]++;
|
|
spLogDebug ( SCCPDB_AIF, "MSC <== SCCP: CO Message. opc=%x,sio=%02x", sccpmsg->opc, sccpmsg->sio );
|
|
spShowBCD ( SCCPDB_AIF, ( BYTE * ) sccpmsg, ( sccpmsg->len + 17 ) % 256 );
|
|
|
|
pmsg = &ScocBuf.msgin[ScocBuf.rcvsub[0]];
|
|
memcpy ( pmsg, sccpmsg, sizeof ( up_message ) );
|
|
|
|
ScocBuf.rcvsub[0] = ( ScocBuf.rcvsub[0] + 1 ) % SS_MSG_NUM;
|
|
if( ScocBuf.rcvsub[0] == ScocBuf.rcvsub[1] )
|
|
ScocBuf.rcvsub[1] = ( ScocBuf.rcvsub[1] + 1 ) % SS_MSG_NUM;
|
|
|
|
sccpmsg_st.msg_mtp_scoc++;
|
|
return 1;
|
|
}
|
|
*/
|
|
|
|
/******************************************************************/
|
|
|
|
/*================== User Interface-----> ================*/
|
|
|
|
/******************************************************************/
|
|
/*
|
|
int scoc_send ( up_message * pmsg )
|
|
{
|
|
BYTE ntype;
|
|
BOOL ForceAnsi = 0;
|
|
|
|
ntype = pmsg->msgList[0];
|
|
|
|
spLogDebug ( SCCPDB_AIF, "MSC ==> SCCP: CO/UDT Message. opc=%x,sio=%02x,type=%d", pmsg->opc, pmsg->sio, ntype );
|
|
spShowBCD ( SCCPDB_AIF, ( BYTE * ) pmsg, ( pmsg->len + 17 ) % 256 );
|
|
SccpCsta[SccpCstaInd].utilization[0]++;
|
|
switch ( ntype )
|
|
{
|
|
case CR_MSG:
|
|
SccpCsta[SccpCstaInd].quality[4]++;
|
|
break;
|
|
case CC_MSG:
|
|
break;
|
|
case DT1_MSG:
|
|
SccpCsta[SccpCstaInd].utilization[10 - 3]++;
|
|
break;
|
|
case DT2_MSG:
|
|
SccpCsta[SccpCstaInd].utilization[12 - 3]++;
|
|
break;
|
|
}
|
|
if( ntype == CR_MSG || ntype == UDT_MSG )
|
|
{
|
|
Intra_Msg outmsg;
|
|
BYTE NetID = pmsg->sio / 0x40;
|
|
|
|
memset ( &outmsg, 0, sizeof ( Intra_Msg ) );
|
|
|
|
ForceAnsi = ( pmsg->sio >> 4 ) & 1;
|
|
parse_msg ( pmsg->msgList, &outmsg, pmsg->len, NetID, ForceAnsi );
|
|
|
|
outmsg.CDA.ip = INADDR_NONE;
|
|
outmsg.OPC = pmsg->opc;
|
|
outmsg.DPC = pmsg->dpc;
|
|
outmsg.SLS = pmsg->cic[0];
|
|
|
|
outmsg.NetID = outmsg.CGA.NetID = outmsg.CDA.NetID = NetID;
|
|
return scrc_route ( &outmsg, ForceAnsi );
|
|
}
|
|
else
|
|
{
|
|
return sccp_to_mtp3 ( pmsg );
|
|
}
|
|
|
|
}
|
|
|
|
int scoc_receive ( up_message * sccpmsg )
|
|
{
|
|
up_message *pmsg;
|
|
|
|
if( ScocBuf.rcvsub[0] == ScocBuf.rcvsub[1] )
|
|
return 0;
|
|
pmsg = &ScocBuf.msgin[ScocBuf.rcvsub[1]];
|
|
memcpy ( sccpmsg, pmsg, sizeof ( up_message ) );
|
|
ScocBuf.rcvsub[1] = ( ScocBuf.rcvsub[1] + 1 ) % SS_MSG_NUM;
|
|
sccpmsg_st.msg_scoc_up++;
|
|
return 1;
|
|
}
|
|
*/
|