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 + -
显示快捷键?