Pārlūkot izejas kodu

added parse_bare,parse_safer

wangyu 8 gadi atpakaļ
vecāks
revīzija
dec07e3c19
1 mainītis faili ar 28 papildinājumiem un 17 dzēšanām
  1. 28 17
      main.cpp

+ 28 - 17
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)