From dec07e3c19562bf0c9728f3bbc8d54d12d890b00 Mon Sep 17 00:00:00 2001 From: wangyu Date: Wed, 26 Jul 2017 23:55:42 +0800 Subject: [PATCH] added parse_bare,parse_safer --- main.cpp | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/main.cpp b/main.cpp index 49aa22b..3f03f1a 100755 --- a/main.cpp +++ b/main.cpp @@ -1840,29 +1840,36 @@ int send_bare(const packet_info_t &info,const char* data,int len) send_raw(info,send_data_buf2,new_len); return 0; } - -int recv_bare(packet_info_t &info,char* & data,int & len) +int parse_bare(const char *input,int input_len,char* & data,int & len) //allow overlap { static char recv_data_buf[buf_len]; - if(recv_raw(info,data,len)<0) - { - //printf("recv_raw_fail in recv bare\n"); - return -1; - } if(len==0) //dont decrpyt zero length packet; { return 0; } - if(my_decrypt(data,recv_data_buf,len,key)!=0) + if(my_decrypt(input,recv_data_buf,input_len,key)!=0) { mylog(log_debug,"decrypt_fail in recv bare\n"); return -1; } + len=input_len; data=recv_data_buf+sizeof(iv_t); len-=sizeof(iv_t); return 0; } +int recv_bare(packet_info_t &info,char* & data,int & len) +{ + if(recv_raw(info,data,len)<0) + { + //printf("recv_raw_fail in recv bare\n"); + return -1; + } + parse_bare(data,len,data,len); + return 0; +} + + int numbers_to_char(id_t id1,id_t id2,id_t id3,char * &data,int len) { @@ -1954,17 +1961,11 @@ int send_data_safer(packet_info_t &info,const char* data,int len,uint32_t conv_n return 0; } -int recv_safer(packet_info_t &info,char* &data,int &len) +int parse_safer(const char * input,int input_len,char* &data,int &len)//allow overlap { - - char * recv_data;int recv_len; static char recv_data_buf[buf_len]; - if(recv_raw(info,recv_data,recv_len)!=0) return -1; - - //printf("1111111111111111\n"); - - if(my_decrypt(recv_data,recv_data_buf,recv_len,key2)!=0) + if(my_decrypt(input,recv_data_buf,input_len,key2)!=0) { //printf("decrypt fail\n"); return -1; @@ -1995,7 +1996,7 @@ int recv_safer(packet_info_t &info,char* &data,int &len) //printf("recv _len %d\n ",recv_len); data=recv_data_buf+sizeof(anti_replay_seq_t)+sizeof(id_t)*2; - len=recv_len-(sizeof(anti_replay_seq_t)+sizeof(id_t)*2 ); + len=input_len-(sizeof(anti_replay_seq_t)+sizeof(id_t)*2 ); if(len<0) @@ -2006,6 +2007,16 @@ int recv_safer(packet_info_t &info,char* &data,int &len) return 0; } +int recv_safer(packet_info_t &info,char* &data,int &len) +{ + + char * recv_data;int recv_len; + static char recv_data_buf[buf_len]; + + if(recv_raw(info,recv_data,recv_len)!=0) return -1; + + return parse_safer(recv_data,recv_len,data,len); +} /* int send_bare_deprecated(const packet_info_t &info,const char* data,int len)