init ems server code
This commit is contained in:
415
plat/sccp/src/sccp_log.c
Normal file
415
plat/sccp/src/sccp_log.c
Normal file
@@ -0,0 +1,415 @@
|
||||
//////////////////////////////////////////////////
|
||||
//Title : spLog.c
|
||||
//Auhtor : Liu Wei
|
||||
//Desc : sccp log implementation
|
||||
//Created : 2007-05-19
|
||||
//Revision :
|
||||
//
|
||||
//Revision :
|
||||
//
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
#include "./include/sccp.h"
|
||||
#include "./include/sccp_pub.h"
|
||||
#include "./include/sccp_func.h"
|
||||
|
||||
BYTE sccpDebugFull = 0;
|
||||
/* by simon at 23/9/26 */
|
||||
extern SCCP_SegMsgBuf sccp_segmsgbuf[MAX_SEGMSG_BUF];
|
||||
|
||||
extern void spWatchDogStatic ( u8 uDebugStaticMask );
|
||||
extern char sccp_debug_buf[5120];
|
||||
extern int spLog_fd;
|
||||
extern unsigned long spLogDebug_mask;
|
||||
|
||||
void spLog ( char *info )
|
||||
{
|
||||
#ifdef DEBUG_TEST
|
||||
if( strlen ( info ) < 2048 )
|
||||
{
|
||||
printf ( "[SCCP]: %s\n", info );
|
||||
}
|
||||
#else
|
||||
if( strlen ( sccp_debug_buf ) + strlen ( info ) > 2048 )
|
||||
{
|
||||
sccpDebugFull = 1;
|
||||
return;
|
||||
}
|
||||
strncat ( sccp_debug_buf, info, 2048 );
|
||||
strcat ( sccp_debug_buf, "\r\n" );
|
||||
|
||||
if( spLog_fd != -1 )
|
||||
{
|
||||
write ( spLog_fd, info, strlen ( info ) );
|
||||
write ( spLog_fd, "\r\n", 2 );
|
||||
}
|
||||
|
||||
if( strlen ( sccp_debug_buf ) > 2050 )
|
||||
{
|
||||
printf ( "sccp debug buffer overflow, len=%d\n", strlen ( sccp_debug_buf ) );
|
||||
}
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void spShowAddr ( SCCP_ADDR * pAddr, const char *sAddrName )
|
||||
{
|
||||
char srcAddr[128], digits[24];
|
||||
|
||||
Digits2Str ( digits, pAddr->GTAI, ( ( pAddr->len + 1 ) / 2 ) % MAX_DIGITS );
|
||||
digits[pAddr->len] = 0;
|
||||
sprintf ( srcAddr, "%s: SPC=%06X SSN=%d RI=%d GTI=%d NP=%d TT=%d GT=%s", sAddrName, pAddr->DPC, pAddr->SSN, pAddr->RI, pAddr->GTI, pAddr->NP, pAddr->TT, digits );
|
||||
spLog ( srcAddr );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
void spLogDebug ( DWORD mask, const char *fmt, ... )
|
||||
{
|
||||
va_list ap;
|
||||
char buf[1024];
|
||||
|
||||
if( ( mask & spLogDebug_mask ) == 0 || sccpDebugFull )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( spLogDebug_mask & SCCPDB_TIME )
|
||||
{
|
||||
struct timeval tv;
|
||||
struct timezone tz;
|
||||
struct tm *t;
|
||||
char timestr[32];
|
||||
|
||||
gettimeofday ( &tv, &tz );
|
||||
t = localtime ( &tv.tv_sec );
|
||||
if( t == NULL )
|
||||
{
|
||||
assert( 0 && "syscall : localtime fail");
|
||||
exit(0);
|
||||
}
|
||||
sprintf ( timestr, "(%d:%d:%d.%ld):", t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec );
|
||||
spLog ( timestr );
|
||||
}
|
||||
|
||||
if( ( mask & SCCPDB_ERR ) && ( strlen ( sccp_debug_buf ) + 5 < 2048 ) )
|
||||
{
|
||||
strcat ( sccp_debug_buf, "\33[31m" );
|
||||
}
|
||||
|
||||
va_start ( ap, fmt );
|
||||
vsnprintf ( buf, 1024, fmt, ap );
|
||||
va_end ( ap );
|
||||
strcat ( buf, "\33[37m" );
|
||||
spLog ( buf );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void spShowBCD ( DWORD mask, BYTE * buf, int len )
|
||||
{
|
||||
// int i = 0, j = 0, linemax = 24;
|
||||
char info[1024];
|
||||
|
||||
if( ( spLogDebug_mask & SCCPDB_MSG ) == 0 || ( spLogDebug_mask & mask ) == 0 || sccpDebugFull )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( len >= 256 )
|
||||
{
|
||||
len = 256;
|
||||
}
|
||||
|
||||
MsgToFmtLog ( buf, len, info, 1024 );
|
||||
spLog ( info );
|
||||
}
|
||||
|
||||
void spLogSeg ( SCCP_SegMsgBuf * pSegMsgbuf )
|
||||
{
|
||||
char digits[24], info[256];
|
||||
|
||||
spShowAddr ( &pSegMsgbuf->SegID.CGA, "spShowAddr" );
|
||||
|
||||
BcdToAscii ( digits, pSegMsgbuf->SegID.SegLR, 6 );
|
||||
digits[6] = 0;
|
||||
sprintf ( info, "Seginfo: Total=%d RSE=%d DPC=%06X SLS=%d Class=%d SegLR=0x%s", pSegMsgbuf->MsgTotal, pSegMsgbuf->RSE, pSegMsgbuf->SegID.DPC, pSegMsgbuf->SegID.SLS, pSegMsgbuf->MsgClass, digits );
|
||||
spLog ( info );
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void spShowMsg ( DWORD mask, const char *pDesc, Intra_Msg * pIntraMsg )
|
||||
{
|
||||
// int i = 0, j = 0, linemax = 24;
|
||||
int len;
|
||||
// char srcAddr[128], dstAddr[128];
|
||||
char digits[24], info[1024];
|
||||
char *pStr;
|
||||
|
||||
if( ( mask & spLogDebug_mask ) == 0 && ( sccp_filter_msg ( &pIntraMsg->CGA, &pIntraMsg->CDA ) == 0 || mask >= SCCPDB_STP ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if( sccpDebugFull )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if( strlen ( sccp_debug_buf ) + 2 < 2048 )
|
||||
{
|
||||
strcat ( sccp_debug_buf, "\r\n" );
|
||||
}
|
||||
if( spLogDebug_mask & SCCPDB_TIME )
|
||||
{
|
||||
struct timeval tv;
|
||||
struct timezone tz;
|
||||
struct tm *t;
|
||||
char timestr[32];
|
||||
|
||||
gettimeofday ( &tv, &tz );
|
||||
t = localtime ( &tv.tv_sec );
|
||||
if( t == NULL )
|
||||
{
|
||||
assert( 0 && "syscall : localtime fail");
|
||||
exit(0);
|
||||
}
|
||||
sprintf ( timestr, "(%d:%d:%d.%ld):", t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec );
|
||||
spLog ( timestr );
|
||||
}
|
||||
|
||||
if( mask & SCCPDB_ERR && ( strlen ( sccp_debug_buf ) + 5 < 2048 ) )
|
||||
{
|
||||
strcat ( sccp_debug_buf, "\33[31m" );
|
||||
}
|
||||
|
||||
spGetMsgStr ( pIntraMsg->msgtype, pStr );
|
||||
sprintf ( info, "%s %s[%d->%d], SLS=%02x, NetID=%d, msglen=%d\33[37m", pDesc, pStr, pIntraMsg->CGA.SSN, pIntraMsg->CDA.SSN, pIntraMsg->SLS, pIntraMsg->NetID, pIntraMsg->msglen );
|
||||
|
||||
spLog ( info );
|
||||
|
||||
if( ( spLogDebug_mask & SCCPDB_ADDR ) || ( mask & SCCPDB_ERR ) )
|
||||
{
|
||||
spShowAddr ( &pIntraMsg->CGA, "SrcAddr" );
|
||||
spShowAddr ( &pIntraMsg->CDA, "DstAddr" );
|
||||
}
|
||||
|
||||
if( mask & SCCPDB_AIF )
|
||||
{
|
||||
char digits1[24], digits2[24];
|
||||
|
||||
BcdToAscii ( digits1, pIntraMsg->aSLR, 6 );
|
||||
digits1[6] = 0;
|
||||
BcdToAscii ( digits2, pIntraMsg->aDLR, 6 );
|
||||
digits2[6] = 0;
|
||||
sprintf ( info, "SLR = %s DLR = %s ", digits1, digits2 );
|
||||
spLog ( info );
|
||||
}
|
||||
|
||||
if( mask & SCCPDB_XUDT )
|
||||
{
|
||||
BcdToAscii ( digits, pIntraMsg->Segmnt.SegLR, 6 );
|
||||
digits[6] = 0;
|
||||
sprintf ( info, "Seginfo: RS=%d SegLR=0x%s", pIntraMsg->Segmnt.RSBits, digits );
|
||||
spLog ( info );
|
||||
}
|
||||
|
||||
if( ( spLogDebug_mask & SCCPDB_MSG ) == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
len = pIntraMsg->msglen % 256;
|
||||
MsgToFmtLog ( pIntraMsg->data, len, info, 1024 );
|
||||
spLog ( info );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void spShowPrimitive ( SP_UiPriPara * pUiPriParam, u8 uDirection )
|
||||
{
|
||||
u8 *pStr;
|
||||
|
||||
spGetUlPrimitiveStr ( pUiPriParam->uUiPri, pStr );
|
||||
if( uDirection )
|
||||
{
|
||||
spLogDebug ( SCCPDB_TIME, "AIF ==> SCCP : %s", pStr );
|
||||
}
|
||||
else
|
||||
{
|
||||
spLogDebug ( SCCPDB_TIME, "SCCP ==> AIF : %s", pStr );
|
||||
}
|
||||
|
||||
spShowUserData ( pUiPriParam );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void spLogStateError ( u16 wConnId, u8 uErrCode )
|
||||
{
|
||||
CO_ConnSection *pCS;
|
||||
u8 *pStateStr;
|
||||
u8 *pPriStr;
|
||||
u8 *pSideStr;
|
||||
|
||||
WxcAssert ( wConnId < CO_CS_MPORT, "SCCP spLogStateError unexpected connection id" );
|
||||
|
||||
pCS = &pSp->tCo.tCSInst[wConnId];
|
||||
|
||||
spGetCoStateStr ( pCS->uCState, pStateStr );
|
||||
spGetUlPrimitiveStr ( pCS->uPri, pPriStr );
|
||||
spGetCoInstanceSide ( pCS->uSide, pSideStr );
|
||||
|
||||
switch ( uErrCode )
|
||||
{
|
||||
case ERR_NONE:
|
||||
{
|
||||
#ifdef _WXC_FSM_TEST
|
||||
char str[512];
|
||||
|
||||
sprintf ( str, "]coFsm[: call back state %s , side :%s \n", pStateStr, pSideStr );
|
||||
spLog ( str );
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case ERR_FSM_UNEXPECT_SIDE:
|
||||
spLogDebug ( SCCPDB_ERR, "Recieve unexpected side: %s ", pSideStr );
|
||||
spWatchDogStatic ( ERR_FSM_UNEXPECT_SIDE );
|
||||
break;
|
||||
case ERR_FSM_UNEXPECT_PRI:
|
||||
spLogDebug ( SCCPDB_ERR, "Recieve unexpected primitive in the state machine ," "Discard the primtive . \nstate: %s primtive :%s side :%s\n", pStateStr, pPriStr, pSideStr );
|
||||
spWatchDogStatic ( ERR_FSM_UNEXPECT_PRI );
|
||||
break;
|
||||
case ERR_FSM_DISCARD:
|
||||
spLogDebug ( SCCPDB_ERR, "Unexpected state machine ,Discard the state : %s side :%s", pStateStr, pSideStr );
|
||||
spWatchDogStatic ( ERR_FSM_DISCARD );
|
||||
break;
|
||||
case ERR_FSM_ERROR:
|
||||
spLogDebug ( SCCPDB_ERR, "Unexpected state machine ,error state : %s side :%s", pStateStr, pSideStr );
|
||||
spWatchDogStatic ( ERR_FSM_ERROR );
|
||||
break;
|
||||
case ERR_FSM_FATAL:
|
||||
spLogDebug ( SCCPDB_ERR, "Unexpected state machine ,fatal error : %s side :%s", pStateStr, pSideStr );
|
||||
spWatchDogStatic ( ERR_FSM_FATAL );
|
||||
case ERR_FSM_RESERVED:
|
||||
spLogDebug ( SCCPDB_ERR, "Unexpected reserved state machine, unsupported now state : %s side :%s", pStateStr, pSideStr );
|
||||
spWatchDogStatic ( ERR_FSM_RESERVED );
|
||||
break;
|
||||
default:
|
||||
spLogDebug ( SCCPDB_ERR, "SCCP log state error , but unkonw eror code" );
|
||||
spWatchDogStatic ( ERR_FSM_UNKOWN_ERROR_CODE );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void spLogTimerOut ( u16 wConnId, u8 uTimerID )
|
||||
{
|
||||
u8 *pTimerStr;
|
||||
|
||||
spGetTimerOutStr ( uTimerID, pTimerStr );
|
||||
spLogDebug ( SCCPDB_ERR, "SCCP Timer Out Timer ID : %s ConnID : %d ", pTimerStr, wConnId );
|
||||
spWatchDogStatic ( SP_TIMER_OUT );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// ///
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void spShowUserData ( SP_UiPriPara * pPri )
|
||||
{
|
||||
SP_UD *pUd;
|
||||
SP_UiPriUnion *pPriUn;
|
||||
|
||||
pPriUn = &pPri->tPriUnion;
|
||||
|
||||
switch ( pPri->uUiPri )
|
||||
{
|
||||
case N_CONNECT_REQ:
|
||||
if( !( pPriUn->tPriNConnReq.uOptFlag & 0x08 ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
spLogDebug ( SCCPDB_AIF, "Connect Req primitive Flag :0x%X ", pPriUn->tPriNConnReq.uOptFlag );
|
||||
pUd = &pPriUn->tPriNConnReq.tUD;
|
||||
break;
|
||||
case N_CONNECT_IND:
|
||||
if( !( pPriUn->tPriNConnInd.uOptFlag & 0x04 ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
spLogDebug ( SCCPDB_AIF, "Connect Ind primitive Flag :0x%X NetID : %d "
|
||||
"RI : %d SSN : %d" , pPriUn->tPriNConnInd.uOptFlag
|
||||
,pPriUn->tPriNConnInd.tCDA.NetID
|
||||
,pPriUn->tPriNConnInd.tCDA.RI
|
||||
,pPriUn->tPriNConnInd.tCDA.SSN );
|
||||
pUd = &pPriUn->tPriNConnInd.tUD;
|
||||
break;
|
||||
case N_CONNECT_CFM:
|
||||
if( !( pPriUn->tPriNConnCfm.uOptFlag & 0x04 ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
spLogDebug ( SCCPDB_AIF, "Connect Cfm primitive Flag :0x%X ", pPriUn->tPriNConnCfm.uOptFlag );
|
||||
pUd = &pPriUn->tPriNConnCfm.tUD;
|
||||
break;
|
||||
case N_CONNECT_RSP:
|
||||
if( !( pPriUn->tPriNConnRsp.uOptFlag & 0x04 ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
spLogDebug ( SCCPDB_AIF, "Connect Rsp primitive Flag :0x%X ", pPriUn->tPriNConnRsp.uOptFlag );
|
||||
pUd = &pPriUn->tPriNConnRsp.tUD;
|
||||
break;
|
||||
case N_DISCONNECT_REQ:
|
||||
if( !( pPriUn->tPriNDisconnReq.uOptFlag & 0x04 ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
spLogDebug ( SCCPDB_AIF, "Disconnect Req primitive Flag :0x%X ", pPriUn->tPriNDisconnReq.uOptFlag );
|
||||
pUd = &pPriUn->tPriNDisconnReq.tUD;
|
||||
break;
|
||||
case N_DISCONNECT_IND:
|
||||
if( !( pPriUn->tPriNDisconnInd.uOptFlag & 0x04 ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
spLogDebug ( SCCPDB_AIF, "Disconnect Ind primitive Flag :0x%X ", pPriUn->tPriNDisconnInd.uOptFlag );
|
||||
pUd = &pPriUn->tPriNDisconnInd.tUD;
|
||||
break;
|
||||
case N_DATA_REQ:
|
||||
pUd = &pPriUn->tPriNDataReq.tUD;
|
||||
break;
|
||||
case N_DATA_IND:
|
||||
pUd = &pPriUn->tPriNDataInd.tUD;
|
||||
break;
|
||||
case N_DATAAK_REQ:
|
||||
case N_EDATA_REQ:
|
||||
case N_RESET_REQ:
|
||||
case N_RESET_RSP:
|
||||
case N_INFORM_REQ:
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
if( pUd->uDataLen > 0 )
|
||||
{
|
||||
spShowBCD ( SCCPDB_AIF, pUd->aUserData, ( pUd->uDataLen ) % 256 );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user