util.cpp
来自「ABis无线接口全套资料」· C++ 代码 · 共 414 行
CPP
414 行
/* ======================================================================== *\
|
|
| JOYIT Communication Technology
| Copyright (C) 2003-2004, All Right Reserved.
|
| System: Programmable Signaling Gateway
| Sub-system: MTP3
| Filename: util.cpp
| Environment: LINUX -- Red Hat 7.2 & GNU C/C++ Compiler 2.96
| vxWorks -- Tornado 2.0 & vxWorks 5.4
| Function description: Define the general function.
|
|
\* ======================================================================== */
#ifndef _UTIL_HPP
#include "util.hpp"
#endif
#ifndef _EVENT_HPP
#include "event.hpp"
#endif
#ifndef _OPAGENT_HPP
#include "opagent.hpp"
#endif
#ifndef _EXCEPTION_HPP
#include "exception.hpp"
#endif
#ifndef _MSGNAME_HPP
#include "msgname.hpp"
#endif
#ifndef _WERROR_HPP
#include "werror.hpp"
#endif
#ifdef __cplusplus
extern "C"
{
#endif
#ifdef __LINUX__
#ifndef _STDIO_H
#include <stdio.h>
#endif
#ifndef _TIME_H
#include <time.h>
#endif
#elif __VXWORKS__
#ifndef __INCstdioh
#include <stdio.h>
#endif
#ifndef __INCtimeh
#include <time.h>
#endif
#endif
#ifdef __cplusplus
};
#endif
char isDisplay = 1; // Display detail message. 0: No; 1: Yes.
char isLog = 0; // Log detail message to LOG. 0: No; 1: Yes.
int gDebugLevel = EN_PRINT_LEVEL_WARNING; // Adding for SAP projec, 2007-07-26
CIPCClient * ipcPtr = NULL;
char * pc14str(UINT32 spc)
{
static char buf[16];
int p1, p2, p3;
p1 = spc >> 11;
p2 = spc >> 3;
p2 &= 0x000000FFL;
p3 = spc & 0x00000007L;
sprintf(buf, "%d-%d-%d", int(p1), int(p2), int(p3));
return buf;
}
char * pc24str(UINT32 spc)
{
static char buf[16];
UINT32 p1, p2, p3;
p1 = spc >> 16;
p2 = spc >> 8;
p2 &= 0x000000FFL;
p3 = spc & 0x000000FFL;
sprintf(buf, "%d-%d-%d", int(p1), int(p2), int(p3));
return buf;
}
void * SendMessage(WObject * dest, WEvent& event)
{
ushort what = event.what;
dest->handleEvent(event);
event.what = what;
return NULL;
}
void * PostMessage(WObject * dest, WEvent& event)
{
dest->putEvent(event);
return NULL;
}
void * PostMessage(WEvent& event)
{
systemEventQueue.pushEvent(event);
return NULL;
}
int StartTimer(const WEvent& event, int timeval, char flag, char pre)
{
int r;
r = ipcPtr->StartTimer(event, timeval, flag, pre);
if (r < 0)
{ // Exception handle
char tmpbuf[128];
sprintf(tmpbuf, "%s MODULE: 0x%X, EVCODE: 0x%X", g_Errstr[E_STARTTIMER_FAIL],
event.dst, event.evCode);
xcpPtr->error(E_STARTTIMER_FAIL, SF_UTIL, tmpbuf);
}
return r;
}
// #ifdef __MARCONI__ // Add 2005-01-11, by Wujianjin.
#ifdef __PSG_REDUNDANT // Add 2006-08-22, by Wu jianjin.
int VerifyTimer(const WEvent& event, int timeval, char flag, char pre)
{
int r;
r = ipcPtr->VerifyTimer(event, timeval, flag, pre);
if (r < 0)
{ // Exception handle
char tmpbuf[128];
sprintf(tmpbuf, "%s MODULE: 0x%X, EVCODE: 0x%X", g_Errstr[E_STARTTIMER_FAIL],
event.dst, event.evCode);
xcpPtr->error(E_STARTTIMER_FAIL, SF_UTIL, tmpbuf);
}
return r;
}
// #endif // __MARCONI__
#endif // ifdef __PSG_REDUNDANT
int StopTimer(const WEvent& event)
{
int r;
r = ipcPtr->StopTimer(event);
if (r < 0)
{ // Exception handle
char tmpbuf[128];
sprintf(tmpbuf, "%s MODULE: 0x%X, EVCODE: 0x%X", g_Errstr[E_STOPTIMER_FAIL],
event.dst, event.evCode);
xcpPtr->error(E_STOPTIMER_FAIL, SF_UTIL, tmpbuf);
}
return r;
}
/*void Print(char * msg, uchar ps)
{
if (NULL == msg)
{
return;
}
WEvent ev;
ev.what = evPrint;
ev.prEvent.printStyle = ps;
ev.prEvent.timeStamp = time(NULL);
// ev.msgLen = strlen(msg);
ev.msgPtr = (char *)msg;
// systemEventQueue.pushEvent(ev);
SendMessage(opaPtr, ev);
}
*/
int Send2Icp(WEvent& event, int directout)
{
int r = 0;
// If my self is secondary, all output message will be discard. In dual node PSG system,
// only primary node to output result message.
// Modify by Wu jianjin, 2004-11-15
//if ((directout != 0) ||
// (sysPtr->IfPrimary( ) != PSG_SECONDARY))
//{
r = ipcPtr->SendMsg(event);
if (r < 0)
{
char tmpbuf[128];
sprintf(tmpbuf, "Failed to send message to SYSMGR errcod: 0x%x.", r);
Print(tmpbuf);
}
//}
return r;
}
/*
RealModuleId * GetRealId(rmi_t& id)
{
return sysPtr->GetRealId(id);
}
int IfPrimary( )
{
return sysPtr->IfPrimary( );
}
*/
void Print(const char *f, ...)
{
if ((isDisplay+isLog) == 0)
{
return;
}
va_list arg_list;
char buffer[128];
va_start(arg_list, f);
vsprintf(buffer, f, arg_list);
va_end(arg_list);
WEvent ev;
ev.what = evPrint;
ev.prEvent.timeStamp = time(NULL);
ev.msgPtr = (char *)buffer;
SendMessage(opaPtr, ev);
}
//
// Function: Display detail message.
// flag:
// 0: Received message from SS7 link. p1 = SS7 link ID
// 1: Transmit message to SS7 link. p1 = SS7 link ID
// 2: Received message from DSS1 link. p1 = DSS1 link ID
// 3: Transmit message to DSS1 link. p1 = DSS1 link ID
// 4: Received message from ISUP. p1 = PCM ID, p2 = TS ID
// 5: Transmit message to ISUP. p1 = PCM ID, p2 = TS ID
// 6: Received message from TUP. p1 = PCM ID, p2 = TS ID
// 7: Transmit message to TUP. p1 = PCM ID, p2 = TS ID
// 8: Received message from LAYER3. p1 = PCM ID, p2 = TS ID
// 9: Transmit message to LAYER3. p1 = PCM ID, p2 = TS ID
// 10: Received API message from ISUP. p1 = PCM ID, p2 = TS ID
// 11: Transmit API message to ISUP. p1 = PCM ID, p2 = TS ID
// 12: Received API message from TUP. p1 = PCM ID, p2 = TS ID
// 13: Transmit API message to TUP. p1 = PCM ID, p2 = TS ID
// 14: Received API message from LAYER3. p1 = PCM ID, p2 = TS ID
// 15: Transmit API message to LAYER3. p1 = PCM ID, p2 = TS ID
void display(unsigned char * buf, int len, unsigned char flag, unsigned short p1, unsigned char p2, unsigned short mType)
{
char bPos;
char * msgName;
char tmpbuf[128];
int i=0;
/*
if (flag)
sprintf(tmpbuf, "Tx%02d ", dlid);
else
sprintf(tmpbuf, "Rx%02d ", dlid);
*/
msgName = GetMessageName(flag, mType);
switch (flag)
{
case RX_SS7:
case TX_SS7:
Print("%s SS7 Link: %d", ((flag % 2) ? "-->" : "<--"), p1);
break;
case RX_DSS1:
case TX_DSS1:
Print("%s DSS1::%s D-Link: %d", ((flag % 2) ? "-->" : "<--"), msgName, p1);
break;
case RX_ISUP:
case TX_ISUP:
Print("%s ISUP::%s (%d-%d)", ((flag % 2) ? "-->" : "<--"), msgName, p1, p2);
break;
case RX_TUP:
case TX_TUP:
Print("%s TUP::%s (%d-%d)", ((flag % 2) ? "-->" : "<--"), msgName, p1, p2);
break;
case RX_Q931:
case TX_Q931:
Print("%s Q931::%s (%d-%d)", ((flag % 2) ? "-->" : "<--"), msgName, p1, p2);
break;
case RX_ISUPAPI:
case TX_ISUPAPI:
Print("%s ISUP API::%s (%d-%d)", ((flag % 2) ? "-->" : "<--"), msgName, p1, p2);
break;
case RX_TUPAPI:
case TX_TUPAPI:
Print("%s TUP API::%s (%d-%d)", ((flag % 2) ? "-->" : "<--"), msgName, p1, p2);
break;
case RX_Q931API:
case TX_Q931API:
Print("%s Q931 API::%s (%d-%d)", ((flag % 2) ? "-->" : "<--"), msgName, p1, p2);
break;
case RX_TCP:
case TX_TCP:
Print("%s IP Port: %d -- IP Link: %d", ((flag % 2) ? "-->" : "<--"), p1, p2);
break;
default:
Print("%s Message", ((flag % 2) ? "-->" : "<--"));
break;
} // End of switch (flag)
switch (flag)
{
case RX_SS7:
case RX_DSS1:
case RX_ISUP:
case RX_TUP:
case RX_Q931:
case RX_ISUPAPI:
case RX_TUPAPI:
case RX_Q931API:
case RX_TCP:
sprintf(tmpbuf, " Rx ");
bPos = 8;
break;
case TX_SS7:
case TX_DSS1:
case TX_ISUP:
case TX_TUP:
case TX_Q931:
case TX_ISUPAPI:
case TX_TUPAPI:
case TX_Q931API:
case TX_TCP:
sprintf(tmpbuf, "Tx ");
bPos = 4;
break;
default:
if (flag % 2)
{
sprintf(tmpbuf, "Tx ");
}
else
{
sprintf(tmpbuf, " Rx ");
}
break;
} // End of switch (flag)
while (i < len)
{
sprintf(tmpbuf+bPos+3*(i%16), "%02X ", buf[i]);
i++;
if (! (i % 16))
{
Print(tmpbuf);
memset(tmpbuf, ' ', bPos);
// sprintf(tmpbuf, "%c", ' ');
}
}
if (len % 16)
{
Print(tmpbuf);
}
}
// ------------------------------------------------------------------------
//
// Revision list.
// ==============
//
// 1.0, 2003-04-18, Wu jianjin
// Initial version.
// 1.1, 2003-05-19, Wu jianjin
// Ported to vxWorks.
// 1.2, 204-11-14, Wu jianjin
// Add dual node control.
// ------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?