⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tnmpnmpstack.c

📁 网管程序.应用于网管主机之间按照规则交换网管数据
💻 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 + -