📄 tnmpnmpstack.c
字号:
/********************************************************************
* 文 件 : TNMPNMPStack.c *
* 作 者 : 夏颖昌 *
* 日 期 : 2004.12 *
* 描 述 : BI系统网管接口打包解包函数 *
********************************************************************/
#include "TNMPNMPStack.h"
#include "binm_socket.h"
#ifndef __DEBUG__
#define __DEBUG__
#endif
int ParserData( char *p_Data, PNMP_DATA *p_outData )
{
char *pTemp;
char *ptr;
char *ptr2;
int nLen;
char pType[ 4096 + 1 ];
char temp[ 50 + 1 ];
memset(( char *)temp, 0x00, sizeof( temp ));
memset(( char *)pType, 0x00, sizeof( pType ));
#ifdef __DUBUG__
//printf ( "now start calling ParserData function---\n" );
//printf ( "进入解包函数体!\n" );
#endif
if ( !p_Data )
return( FAILED_RETURN_CODE );
pTemp = p_Data;
package_report( __FILE__, __LINE__, "Parser start------\np_Data: [%s]\n",
p_Data );
//printf( "Parser-------: [%s]\n", p_Data );
/*** 初始化报文结构 ***/
InitStruct( p_outData );
/*** 判断报文头 ***/
ptr = strstr( pTemp, PNMP_HEAD );
if( !ptr )
{
printf( "Error: no find package-head\n" );
return ( FAILED_RETURN_CODE );
}
/*** 判断Package-Type ***/
ptr = strstr( pTemp, PNMP_TYPE );
if( !ptr )
{
printf( "Error: no find package-type\n" );
return ( FAILED_RETURN_CODE );
}
else
{
if( memcmp( ptr + 14, PNMP_REQ, 3 ) == 0 )
p_outData->pdPackageType = 1;
else if( memcmp( ptr + 14, PNMP_ACK, 3 ) == 0 )
p_outData->pdPackageType = 2;
else if( memcmp( ptr + 14, PNMP_MSG, 3 ) == 0 )
p_outData->pdPackageType = 3;
else
printf( "Error: unknown package-type\n" );
}
#ifdef __DEBUG__
//printf ( "pdPackageType: [%d]\n", p_outData->pdPackageType );
#endif
/*** 判断Command ***/
if(( ptr = strstr( pTemp, PNMP_COMMAND )) != NULL )
{
if( memcmp( ptr + 9, PNMP_AUTH, 4 ) == 0 )
p_outData->pdCommand = 1;
else if( memcmp( ptr + 9, PNMP_TASK, 4 ) == 0 )
p_outData->pdCommand = 2;
else if( memcmp( ptr + 9, PNMP_SYNC, 4 ) == 0 )
p_outData->pdCommand = 3;
else if( memcmp( ptr + 9, PNMP_QUERYTASK, 9 ) == 0 )
p_outData->pdCommand = 4;
else if( memcmp( ptr + 9, PNMP_TASKFINISH, 10 ) == 0 )
p_outData->pdCommand = 5;
else if( memcmp( ptr + 9, PNMP_DOWNLOADFINISH, 14 ) == 0 )
p_outData->pdCommand = 6;
else
printf( "Error: unknown command\n" );
//p_outData->pdCommand = 0;
}
#ifdef __DEBUG__
//printf ( "Parser status\n" );
#endif
/*** 解析status ***/
if(( ptr = strstr( pTemp, PNMP_STATUS )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( temp, ptr2 + 8, ( ptr - ptr2 - 8 ));
p_outData->pdStatus = atoi( temp );
}
/*** 解析pdSequence ***/
if(( ptr = strstr( pTemp, PNMP_SEQUENCE )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdSequence, ptr2 + 10, ptr-ptr2-10 );
}
/*** 解析pdParameter ***/
if(( ptr = strstr( pTemp, PNMP_PARAMETER )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdParameter, ptr2 + 11, ptr-ptr2-11 );
}
#ifdef __DEBUG__
//printf ( "Parser pdTimeNeeded\n" );
#endif
/*** 解析pdTimeNeeded ***/
if(( ptr = strstr( pTemp, PNMP_TIME_NEEDED )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memset(( char *)temp, 0x00, sizeof( temp ));
memcpy( temp, ptr2 + 13, ( ptr - ptr2 - 13 ));
p_outData->pdTimeNeeded = atoi( temp );
}
#ifdef __DEBUG__
//printf ( "Parser pdUser\n" );
#endif
/*** 解析pdUser ***/
if(( ptr = strstr( pTemp, PNMP_USER )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdUser, ptr2 + 6, ptr - ptr2 - 6 );
}
/*** 解析pdPassWord ***/
if(( ptr = strstr( pTemp, PNMP_PASSWORD )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdPassWord, ptr2 + 10, ptr - ptr2 - 10 );
}
/*** 解析pdServer ***/
if(( ptr = strstr( pTemp, PNMP_SERVER )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdServer, ptr2 + 7, ptr - ptr2 - 7 );
}
/*** 解析pdClient ***/
if(( ptr = strstr( pTemp, PNMP_CLIENT )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdClient, ptr2 + 8, ptr - ptr2 - 8 );
}
/*** 解析pdHostId ***/
if(( ptr = strstr( pTemp, PNMP_HOSTID )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdHostId, ptr2 + 8, ptr - ptr2 - 8 );
}
/*** 解析pdURL ***/
if(( ptr = strstr( pTemp, PNMP_URL )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdURL, ptr2 + 5, ptr - ptr2 - 5 );
}
/*** 解析pdMD5 ***/
if(( ptr = strstr( pTemp, PNMP_MD5 )) != NULL )
{
ptr2 = ptr;
while( 1 )
{
if( *ptr == 0x0d && *( ptr + 1 ) == 0x0a )
break;
ptr++;
}
memcpy( p_outData->pdMD5, ptr2 + 14, ptr - ptr2 -14 );
}
/*** 判断报文结束 ***/
ptr = strstr( pTemp, PNMP_END2 );
if( !ptr )
{
printf( "Error: package incorrect end\n" );
return( FAILED_RETURN_CODE );
}
#ifdef __DEBUG__
package_report( __FILE__, __LINE__,
"Parser end------\np_outData->pdVerson: [%f]\np_outData->pdPackageType: [%d]\np_outData->pdCommand: [%d]\np_outData->pdStatus: [%d]\np_outData->pdSequence: [%s]\np_outData->pdParameter: [%s]\np_outData->pdTimeNeeded: [%d]\np_outData->pdUser: [%s]\np_outData->pdPassWord: [%s]\np_outData->pdServer: [%s]\np_outData->pdClient: [%s]\np_outData->pdHostId: [%s]\np_outData->pdURL: [%s]\np_outData->pdMD5: [%s]\n",
p_outData->pdVerson,
p_outData->pdPackageType,
p_outData->pdCommand,
p_outData->pdStatus,
p_outData->pdSequence,
p_outData->pdParameter,
p_outData->pdTimeNeeded,
p_outData->pdUser,
p_outData->pdPassWord,
p_outData->pdServer,
p_outData->pdClient,
p_outData->pdHostId,
p_outData->pdURL,
p_outData->pdMD5 );
//printf ( "call ParserData function end!\n" );
//printf ( "调用解包函数结束!\n" );
#endif
return( SUCCESSED_RETURN_CODE );
}
int BuildData( PNMP_DATA *p_Data, char *p_outData )
{
char temp[ 24 + 1 ];
memset(( char *)temp, 0x00, sizeof( temp ));
#ifdef __DEBUG__
//printf ( "now start calling Build function---\n" );
//printf ( "现在进入打包函数体!\n" );
#endif
#ifdef __DEBUG__
package_report( __FILE__, __LINE__,
"Build start------\np_Data->pdVerson: [%f]\np_Data->pdPackageType: [%d]\np_Data->pdCommand: [%d]\np_Data->pdStatus: [%d]\np_Data->pdSequence: [%s]\np_Data->pdParameter: [%s]\np_Data->pdTimeNeeded: [%d]\np_Data->pdUser: [%s]\np_Data->pdPassWord: [%s]\np_Data->pdServer: [%s]\np_Data->pdClient: [%s]\np_Data->pdHostId: [%s]\np_Data->pdURL: [%s]\np_Data->pdMD5: [%s]\n",
p_Data->pdVerson,
p_Data->pdPackageType,
p_Data->pdCommand,
p_Data->pdStatus,
p_Data->pdSequence,
p_Data->pdParameter,
p_Data->pdTimeNeeded,
p_Data->pdUser,
p_Data->pdPassWord,
p_Data->pdServer,
p_Data->pdClient,
p_Data->pdHostId,
p_Data->pdURL,
p_Data->pdMD5 );
#endif
/*** 封装报文头 ***/
strcpy( p_outData, PNMP_HEAD );
strcat( p_outData, PNMP_END2 );
/*** 封装PackageType ***/
if( p_Data->pdPackageType == 1 )
{
strcat( p_outData, "Package-Type: REQ" );
strcat( p_outData, PNMP_END2 );
}
else if( p_Data->pdPackageType == 2 )
{
strcat( p_outData, "Package-Type: ACK" );
strcat( p_outData, PNMP_END2 );
}
else if( p_Data->pdPackageType == 3 )
{
strcat( p_outData, "Package-Type: MSG" );
strcat( p_outData, PNMP_END2 );
}
else
{
printf( "Error: no package-type in buffer\n" );
return( -1 );
}
/*** 封装Command ***/
if( p_Data->pdCommand == 1 )
{
strcat( p_outData, "Command: Auth" );
strcat( p_outData, PNMP_END2 );
}
else if( p_Data->pdCommand == 2 )
{
strcat( p_outData, "Command: Task" );
strcat( p_outData, PNMP_END2 );
}
else if( p_Data->pdCommand == 3 )
{
strcat( p_outData, "Command: Sync" );
strcat( p_outData, PNMP_END2 );
}
else if( p_Data->pdCommand == 4 )
{
strcat( p_outData, "Command: QueryTask" );
strcat( p_outData, PNMP_END2 );
}
else if( p_Data->pdCommand == 5 )
{
strcat( p_outData, "Command: TaskFinish" );
strcat( p_outData, PNMP_END2 );
}
else if( p_Data->pdCommand == 6 )
{
strcat( p_outData, "Command: DownloadFinish" );
strcat( p_outData, PNMP_END2 );
}
else
{
//printf( "Error: no command in buffer\n" );
//return( -1 );
;
}
/*** 封装status ***/
if( p_Data->pdStatus != -1 )
{
sprintf( temp, "%d", p_Data->pdStatus );
strcat( p_outData, "Status: " );
strcat( p_outData, temp );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdSequence[ 0 ] != 0x00 )
{
strcat( p_outData, "Sequence: " );
strcat( p_outData, p_Data->pdSequence );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdParameter[ 0 ] != 0x00 )
{
strcat( p_outData, "Parameter: " );
strcat( p_outData, p_Data->pdParameter );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdTimeNeeded != -1 )
{
memset(( char *)temp, 0x00, sizeof( temp ));
sprintf( temp, "%d", p_Data->pdTimeNeeded );
strcat( p_outData, "Time-Needed: " );
strcat( p_outData, temp );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdUser[ 0 ] != 0x00 )
{
strcat( p_outData, "User: " );
strcat( p_outData, p_Data->pdUser );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdPassWord[ 0 ] != 0x00 )
{
strcat( p_outData, "Password: " );
strcat( p_outData, p_Data->pdPassWord );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdServer[ 0 ] != 0x00 )
{
strcat( p_outData, "Server: " );
strcat( p_outData, p_Data->pdServer );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdClient[ 0 ] != 0x00 )
{
strcat( p_outData, "Client: " );
strcat( p_outData, p_Data->pdClient );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdHostId[ 0 ] != 0x00 )
{
strcat( p_outData, "HostId: " );
strcat( p_outData, p_Data->pdHostId );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdURL[ 0 ] != 0x00 )
{
strcat( p_outData, "URL: " );
strcat( p_outData, p_Data->pdURL );
strcat( p_outData, PNMP_END2 );
}
if( p_Data->pdMD5[ 0 ] != 0x00 )
{
strcat( p_outData, "MD5-CheckSum: " );
strcat( p_outData, p_Data->pdMD5 );
strcat( p_outData, PNMP_END2 );
}
//结束符
strcat( p_outData, PNMP_END2 );
#ifdef __DEBUG__
package_report( __FILE__, __LINE__, "Build end------\np_outData: [%s\n",
p_outData );
//printf ( "call Build function end!\n" );
//printf ( "调用打包函数结束!\n" );
#endif
return( SUCCESSED_RETURN_CODE );
}
int InitStruct( PNMP_DATA * m_pParserPnmp )
{
m_pParserPnmp->pdVerson=1.0;
m_pParserPnmp->pdPackageType=0;
m_pParserPnmp->pdCommand=0;
m_pParserPnmp->pdStatus=-1;
m_pParserPnmp->pdTimeNeeded=-1;
memset(( char *)m_pParserPnmp->pdSequence, 0x00,
sizeof( m_pParserPnmp->pdSequence ));
memset(( char *)m_pParserPnmp->pdParameter, 0x00,
sizeof( m_pParserPnmp->pdParameter ));
memset(( char *)m_pParserPnmp->pdUser, 0x00, sizeof( m_pParserPnmp->pdUser ));
memset(( char *)m_pParserPnmp->pdPassWord, 0x00,
sizeof( m_pParserPnmp->pdPassWord ));
memset(( char *)m_pParserPnmp->pdServer, 0x00, sizeof( m_pParserPnmp->pdServer));
memset(( char *)m_pParserPnmp->pdClient, 0x00, sizeof( m_pParserPnmp->pdClient));
memset(( char *)m_pParserPnmp->pdHostId, 0x00, sizeof( m_pParserPnmp->pdHostId));
memset(( char *)m_pParserPnmp->pdURL, 0x00, sizeof( m_pParserPnmp->pdURL ));
memset(( char *)m_pParserPnmp->pdMD5, 0x00, sizeof( m_pParserPnmp->pdMD5 ));
/*
m_pParserPnmp->pdSequence=NULL;
m_pParserPnmp->pdParameter=NULL;
m_pParserPnmp->pdUser=NULL;
m_pParserPnmp->pdPassWord=NULL;
m_pParserPnmp->pdServer=NULL;
m_pParserPnmp->pdClient=NULL;
m_pParserPnmp->pdHostId=NULL;
m_pParserPnmp->pdURL=NULL;
m_pParserPnmp->pdMD5=NULL;
*/
return( SUCCESSED_RETURN_CODE );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -