?? parse_packet.c
字號:
/*$Header: /base/cvsroot/wam/sms/platform/src/smgp3/parse_packet.c,v 1.1 2006/06/30 02:48:31 zhiyong Exp $*/
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include "parse_packet.h"
int unparse_packet_1(unsigned char *buffer,unsigned int length,
unsigned char *linkid,
unsigned char *SubmitMsgType,
unsigned char *SPDealResult )
{
// unsigned char *p;
int offset =0;
unsigned short temp;
TLV2 param;
// buffer: Tag(2)+Length(2)+Value(XX) +Tag(2)+Length(2)+Value(XX)
//p = buffer;
if(length==0)
return 0;
while(offset< length)
{
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer+offset, 2);
param.Paramater_Tag = ntohs(temp); //get Tag.
offset += 2;
if(param.Paramater_Tag == LinkID_Tag)
{
memcpy (&temp, buffer+offset, 2); //get Length
param.Length = ntohs(temp);
offset += 2;
memcpy(linkid, buffer+offset,param.Length); //get Value.
offset += param.Length;
if(offset>= length)
return 0;
}
else
if(param.Paramater_Tag == SubmitMsgType_Tag)
{
memcpy (&temp, buffer+offset, 2);
param.Length = ntohs(temp);
offset += 2;
memcpy(SubmitMsgType,buffer+offset,param.Length); //get Value.
//*SubmitMsgType=ntohs(
offset += param.Length;
if(offset>= length)
return 0;
}
else
if( param.Paramater_Tag == SPDealReslt_Tag)
{
memcpy (&temp, buffer+offset, 2);
param.Length = ntohs(temp);
offset += 2;
memcpy(SPDealResult,buffer+offset,param.Length); //get Value.
offset += param.Length;
if(offset>= length)
return 0;
}
else
{
printf("unknow TLV type, ID:0x%02x\n", param.Paramater_Tag);
memcpy (&temp, buffer+offset, 2);
param.Length = ntohs(temp);
offset += 2;
offset += param.Length;
if(offset>= length)
return 0;
}
}//end while.
return 0;
// memset(¶m, 0, sizeof(TLV2));
// memcpy (&temp, buffer, 2);
// offset += 2;
// param.Paramater_Tag = ntohs(temp);
}
int parse_packet(unsigned char *buffer, unsigned int length , unsigned char *linkid, unsigned int SubmitMsgType, unsigned int SPDealResult)
{
// unsigned char *p;
int offset =0;
unsigned short temp;
unsigned char ch;
temp = htons(LinkID_Tag);
memcpy (buffer , (unsigned char *) &temp, 2);
offset += 2;
temp = htons(20);
memcpy (buffer+offset , (unsigned char *) &temp, 2);
offset += 2;
memcpy (buffer+offset, linkid,20);
offset += 20;
temp = htons(SubmitMsgType_Tag);
memcpy (buffer+offset , (unsigned char *) &temp, 2);
offset += 2;
temp = htons(1);
memcpy (buffer+offset , (unsigned char *) &temp, 2);
offset += 2;
ch = htons(SubmitMsgType);
memcpy (buffer+offset , (unsigned int *) &ch, 1);
offset += 2;
if(SubmitMsgType == 15) {
temp = htons(SPDealReslt_Tag);
memcpy (buffer+offset , (unsigned char *) &temp, 2);
offset += 2;
temp = htons(1);
memcpy (buffer+offset , (unsigned char *) &temp, 2);
offset += 2;
ch = htons(SPDealResult);
memcpy (buffer+offset , (unsigned int *) &ch, 1);
offset += 1;
}
return offset;
}
int unparse_packet(unsigned char *buffer,unsigned int length, unsigned char *linkid,unsigned char *SubmitMsgType,unsigned char *SPDealResult)
{
// unsigned char *p;
int offset =0;
unsigned short temp;
TLV2 param;
memset(¶m, 0, sizeof(TLV2));
//p = buffer;
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
//--------------------------------------------main Item.
if(param.Paramater_Tag == LinkID_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
memcpy(linkid, buffer+offset,param.Length);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if(param.Paramater_Tag == SubmitMsgType_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == SPDealReslt_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
//--------------------------------------------
if(param.Paramater_Tag == TP_pid_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == TP_udhi_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == ChargeUserType_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if(param.Paramater_Tag == ChargeTermType_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == ChargeTermPseudo_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if(param.Paramater_Tag == DestTermType_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == DestTermPseudo_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2 ;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if(param.Paramater_Tag == PkTotal_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == PkNumber_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if(param.Paramater_Tag == SrcTermType_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == SrcTermPseudo_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if(param.Paramater_Tag == NodesCount_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == MsgSrc_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if(param.Paramater_Tag == SrcType_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
memset(¶m, 0, sizeof(TLV2));
memcpy (&temp, buffer, 2);
offset += 2;
param.Paramater_Tag = ntohs(temp);
}
if( param.Paramater_Tag == MServiceID_Tag) {
memcpy (&temp, buffer+offset, 2);
offset += 2;
param.Length = ntohs(temp);
offset += param.Length;
if(offset>= length) {
return 0;
}
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -