00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "parser_msrp.hpp"
00021 #include "iostream_t.hpp"
00022 #include <regex.h>
00023 #include "string_t.hpp"
00024 #include "Utils.hpp"
00025
00026
00027 C_ProtocolFrame::T_MsgError parse_msrp (char *P_buf,
00028 size_t *P_size,
00029 char *P_buf_header,
00030 size_t P_size_header) {
00031
00032
00033 C_ProtocolFrame::T_MsgError L_error = C_ProtocolFrame::E_MSG_OK;
00034
00035 return (L_error) ;
00036 }
00037
00038
00039 char* skip_blank(char *P_ptr,
00040 char *P_buffer,
00041 size_t P_size_buffer,
00042 size_t *P_size) {
00043
00044 char *L_blank_ptr = NULL ;
00045 char *L_new_ptr = P_ptr ;
00046
00047
00048 L_blank_ptr = P_ptr ;
00049 while (((L_blank_ptr) && (L_blank_ptr < (P_buffer + P_size_buffer))) &&
00050 ((*L_blank_ptr == ' ') ||
00051 (*L_blank_ptr == '\t'))) { L_blank_ptr++ ; }
00052 if (L_blank_ptr != P_ptr) {
00053 *(P_size) = (L_blank_ptr - P_ptr) ;
00054 L_new_ptr = L_blank_ptr ;
00055 }
00056
00057 return (L_new_ptr) ;
00058 }
00059
00060
00061 char * filter_msrp(char* P_buffer) {
00062
00063 size_t L_size = 0 ;
00064
00065 size_t L_size_buffer = 0 ;
00066 size_t L_size_end = 0 ;
00067
00068 char *L_pos = NULL ;
00069 char *L_ptr = P_buffer ;
00070
00071 char *L_result = NULL ;
00072 char *L_new = NULL ;
00073
00074 bool L_skip_blank = true ;
00075 size_t L_size_blank = 0 ;
00076
00077
00078 if ((P_buffer != NULL) &&
00079 ((L_size_buffer = strlen(P_buffer)) > 0 )) {
00080
00081 L_size_end = L_size_buffer ;
00082
00083 ALLOC_TABLE(L_result,
00084 char*,
00085 sizeof(char),
00086 (2*L_size_buffer));
00087
00088
00089 if ((strchr(L_ptr,'\n')) == NULL) {
00090
00091 L_new = L_result ;
00092 L_size = L_size_buffer ;
00093
00094
00095 if (L_skip_blank) {
00096 L_ptr = skip_blank(L_ptr,P_buffer, L_size_buffer, &L_size_blank) ;
00097 L_size -= L_size_blank ;
00098 }
00099
00100 memcpy(L_new, L_ptr, L_size);
00101 L_new += (L_size - 1) ;
00102 if (*L_new != '\r') {
00103 L_new += 1 ;
00104 *L_new = '\r' ;
00105 }
00106 L_new += 2 ;
00107 *L_new = '\0' ;
00108 *(L_new-1) = '\n' ;
00109
00110 } else {
00111
00112
00113 while( (L_ptr)
00114 && (L_pos = strchr(L_ptr,'\n')) != NULL) {
00115
00116 L_size_blank = 0 ;
00117
00118 L_size = L_pos - L_ptr ;
00119
00120 if (L_skip_blank) {
00121
00122 L_ptr = skip_blank(L_ptr,P_buffer, L_size_buffer, &L_size_blank) ;
00123 L_size -= L_size_blank ;
00124 L_size_end -= L_size_blank ;
00125
00126 }
00127
00128 if (L_new == NULL) { L_new = L_result ; } else { L_new += 1 ; }
00129 memcpy(L_new, L_ptr, L_size);
00130 L_new += (L_size - 1) ;
00131
00132 if ((L_pos + 1) <= (P_buffer+L_size_buffer)) {
00133 L_ptr = L_pos + 1 ;
00134 } else {
00135 L_ptr = NULL ;
00136 }
00137
00138 L_size_end -= (L_size + 1) ;
00139
00140 if (*L_new != '\r') {
00141 L_new += 1 ;
00142 *(L_new) = '\r' ;
00143 }
00144 L_new += 1 ;
00145 *(L_new) = '\n' ;
00146
00147 }
00148
00149
00150
00151 if (L_size_end > 0) {
00152
00153 L_size = L_size_end ;
00154 L_size_blank = 0 ;
00155
00156
00157 if (L_skip_blank) {
00158
00159 L_ptr = skip_blank(L_ptr,P_buffer, L_size_buffer, &L_size_blank) ;
00160 L_size -= L_size_blank ;
00161 }
00162
00163 if (L_size) {
00164 L_new +=1 ;
00165
00166 memcpy(L_new, L_ptr, L_size);
00167 L_new += (L_size-1) ;
00168
00169 if (*L_new != '\r') {
00170 L_new += 1 ;
00171 *(L_new) = '\r' ;
00172 }
00173 L_new += 2 ;
00174 *L_new = '\0' ;
00175 *(L_new-1) = '\n' ;
00176 } else {
00177
00178 L_new += 1 ;
00179 *L_new = '\0' ;
00180 }
00181 } else {
00182
00183 L_new += 1 ;
00184 *L_new = '\0' ;
00185
00186 }
00187 }
00188 }
00189
00190 if (L_result != NULL) {
00191 L_ptr = L_result ;
00192 while ((L_ptr = strstr(L_ptr, "\r\n\r\n")) != NULL ) {
00193 memmove(L_ptr+2, L_ptr+4, strlen(L_ptr+4));
00194 L_ptr += 2 ;
00195 }
00196 }
00197
00198 return (L_result);
00199 }
00200