00001 #include <string.h> 00002 #include <malloc.h> 00003 #include "server_client_ascii.h" 00004 00005 const unsigned int req_max = 1024; 00006 00007 bool ServerClientAscii::ParseBuffer() 00008 { 00009 unsigned int i=0; 00010 while(i<buffer_len && buffer[i] != '\n' && i < req_max) 00011 i++; 00012 00013 if(i >= buffer_len) 00014 return false; 00015 00016 char req[req_max + 1]; 00017 req[i] = '\0'; 00018 00019 if(i > 0) 00020 { 00021 memcpy(req, buffer, i); 00022 00023 // Remove trailing '\n' or '\r'; 00024 unsigned int j = i - 1; 00025 while(j != 0 && (req[j] == '\n' || req[j] == '\r')) 00026 req[j] = '\0'; 00027 } 00028 00029 if(i + 1 == buffer_len) 00030 { 00031 buffer_len = 0; 00032 free(buffer); 00033 buffer = NULL; 00034 } 00035 else 00036 { 00037 char* new_buf = (char*)malloc(buffer_len - i - 1); 00038 buffer_len -= i + 1; 00039 memcpy(new_buf, buffer + i + 1, buffer_len); 00040 free(buffer); 00041 buffer = new_buf; 00042 } 00043 00044 HandleReq(req); 00045 return true; 00046 }
1.5.8