130 | | if ( (fldPtr->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
131 | | badFieldNumber = 1; |
132 | | } |
133 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
134 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
135 | | if ( (fldPtr->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
136 | | badFieldLength = 1; |
137 | | } |
138 | | fldPtr->next = cTFSPtr->fieldSet; |
139 | | fldPtr->prev = NULL; |
140 | | if ( cTFSPtr->fieldSet ) {cTFSPtr->fieldSet->prev = fldPtr;} |
141 | | cTFSPtr->fieldSet = fldPtr; |
142 | | if (i==0) { |
143 | | cTFSPtr->lastField = fldPtr; |
144 | | } |
145 | | cpt_fields++; |
146 | | if ( (cTFSPtr->templateFlowSetId < 256 ) |
147 | | || (cpt_fields > 40) |
148 | | || (badFieldNumber == 1) |
149 | | || badFieldLength == 1 |
150 | | || (badFieldCount == 1)) { |
151 | | /* fprintf(stderr,"\n IP: %lu.%lu.%lu.%lu, %d,%d\n", */ |
152 | | /* cr->IpAddress>>24, */ |
153 | | /* cr->IpAddress<<8>>24, */ |
154 | | /* cr->IpAddress<<16>>24, */ |
155 | | /* cr->IpAddress<<24>>24, */ |
156 | | /* badFieldNumber, */ |
157 | | /* badFieldLength */ |
158 | | /* ); */ |
159 | | /* fprintf (stderr, "\n cTFSPtr->templateFlowSetId: %hu\n", */ |
160 | | /* cTFSPtr->templateFlowSetId); */ |
161 | | while ( ((*offV9))> (index)){ |
162 | | buffer2[1]= *(buf+index); index++; |
163 | | buffer2[0]= *(buf+index); index++; |
164 | | tmp = *((unsigned short*)&buffer2); |
165 | | /* fprintf (stderr, " %hu ", tmp); */ |
166 | | } |
167 | | syslog (LOG_INFO, |
168 | | "in new template: field nb gt 89, field lg gt 16 or too many fields, bad template definition possibility"); |
169 | | /* fprintf(stderr, */ |
170 | | /* "\n in new template function: too many fields, bug collector or wrong template def \n"); */ |
171 | | ptpltmp = cTFSPtr; |
172 | | if (ptpltmp->prev == NULL) { |
173 | | cr->tplList = ptpltmp->next; |
174 | | if (cr->tplList) { |
175 | | cr->tplList->prev = NULL; |
176 | | } |
177 | | } else { |
178 | | ptpltmp->prev->next = ptpltmp->next; |
179 | | if (ptpltmp->next) { |
180 | | ptpltmp->next->prev = ptpltmp->prev; |
181 | | } |
182 | | } |
183 | | deleteTplFlSet(ptpltmp); |
184 | | cTFSPtr = NULL; |
185 | | return (-1); |
186 | | } |
187 | | } |
188 | | } else { /*update*/ |
189 | | ptpltmp = cTFSPtr; |
190 | | if (ptpltmp->prev == NULL) { |
191 | | cr->tplList = ptpltmp->next; |
192 | | if (cr->tplList) { |
193 | | cr->tplList->prev = NULL; |
194 | | } |
195 | | } else { |
196 | | ptpltmp->prev->next = ptpltmp->next; |
197 | | if (ptpltmp->next) { |
198 | | ptpltmp->next->prev = ptpltmp->prev; |
199 | | } |
200 | | } |
201 | | deleteTplFlSet(ptpltmp); |
202 | | ptpltmp = NULL; |
203 | | cTFSPtr = NULL; |
204 | | cTFSPtr = newRouterTplList(); |
205 | | cTFSPtr->next = cr->tplList; |
206 | | if (cr->tplList!=NULL) {cr->tplList->prev = cTFSPtr;} |
207 | | cr->tplList = cTFSPtr; |
208 | | cTFSPtr->templateFlowSetId = *((unsigned short*)&buffer2); |
209 | | cTFSPtr->sourceId = v9Ptr->sourceId; |
210 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
211 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
212 | | if ( (cTFSPtr->fieldCount = *((unsigned short*)&buffer2) ) == 0 ) { |
213 | | badFieldCount = 1; |
214 | | ptpltmp = cTFSPtr; |
215 | | if (ptpltmp->prev == NULL) { |
216 | | cr->tplList = ptpltmp->next; |
217 | | if (cr->tplList) { |
218 | | cr->tplList->prev = NULL; |
219 | | } |
220 | | } else { |
221 | | ptpltmp->prev->next = ptpltmp->next; |
222 | | if (ptpltmp->next) { |
223 | | ptpltmp->next->prev = ptpltmp->prev; |
224 | | } |
225 | | } |
226 | | deleteTplFlSet(ptpltmp); |
227 | | cTFSPtr = NULL; |
228 | | return (-1); |
229 | | } |
230 | | cpt_fields = 0; |
231 | | for ( i=0; i<cTFSPtr->fieldCount; i++) { |
232 | | FieldPtr fldPtr = (FieldPtr) malloc(sizeof(struct Field)); |
233 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
234 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
235 | | if ( (fldPtr->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
236 | | badFieldNumber = 1; |
237 | | } |
238 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
239 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
240 | | if ( (fldPtr->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
241 | | badFieldLength = 1; |
242 | | } |
243 | | fldPtr->next = cTFSPtr->fieldSet; |
244 | | fldPtr->prev = NULL; |
245 | | if ( cTFSPtr->fieldSet ) { |
246 | | cTFSPtr->fieldSet->prev = fldPtr; |
247 | | } |
248 | | cTFSPtr->fieldSet = fldPtr; |
249 | | if (i==0) { |
250 | | cTFSPtr->lastField = fldPtr; |
251 | | } |
252 | | cpt_fields++; |
253 | | if ( (cTFSPtr->templateFlowSetId < 256 ) |
254 | | || (cpt_fields > 40) |
255 | | || (badFieldNumber == 1) |
256 | | || badFieldLength == 1 |
257 | | || (badFieldCount == 1)) { |
258 | | while ( ((*offV9))> (index)){ |
259 | | buffer2[1]= *(buf+index); index++; |
260 | | buffer2[0]= *(buf+index); index++; |
261 | | tmp = *((unsigned short*)&buffer2); |
262 | | /* fprintf (stderr, " %hu ", tmp); */ |
263 | | } |
264 | | syslog (LOG_INFO, |
265 | | "in update template function: too many fields, bug collector or wrong template def in template update"); |
266 | | /* fprintf(stderr, */ |
267 | | /* "\nin update template function: too many fields, bug collector or wrong template def in template update\n"); */ |
268 | | ptpltmp = cTFSPtr; |
269 | | if (ptpltmp->prev == NULL) { |
270 | | cr->tplList = ptpltmp->next; |
271 | | if (cr->tplList) { |
272 | | cr->tplList->prev = NULL; |
273 | | } |
274 | | } else { |
275 | | ptpltmp->prev->next = ptpltmp->next; |
276 | | if (ptpltmp->next) { |
277 | | ptpltmp->next->prev = ptpltmp->prev; |
278 | | } |
279 | | } |
280 | | deleteTplFlSet(ptpltmp); |
281 | | cTFSPtr = NULL; |
282 | | return (-1); |
283 | | } |
284 | | } |
285 | | } /* end if template creation or update */ |
286 | | /* send to queue the template definition */ |
287 | | /* fprintf(stderr,"%hu %d\n", tplMsgType, sizeof(tplMsgType)); */ |
288 | | /* fprintf(stderr,"%lu %d\n", cr->IpAddress, sizeof(cr->IpAddress)); */ |
289 | | /* fprintf(stderr, "%lu.%lu.%lu.%lu ", */ |
290 | | /* ( cr->IpAddress)>>24, */ |
291 | | /* ( cr->IpAddress)<<8>>24, */ |
292 | | /* ( cr->IpAddress)<<16>>24, */ |
293 | | /* ( cr->IpAddress)<<24>>24); */ |
294 | | /* fprintf(stderr,"%lu %d\n", cTFSPtr->sourceId, sizeof(cTFSPtr->sourceId)); */ |
295 | | /* FIXME HERE don't send an wrong def if error detected */ |
296 | | msgTextIndex = mempcpy(mempcpy(mempcpy(mempcpy(mempcpy(myMsg.text, |
297 | | &tplMsgType, |
298 | | sizeof(unsigned short) |
299 | | ), |
300 | | &cr->IpAddress, |
301 | | sizeof(unsigned long) |
302 | | ), |
303 | | &cTFSPtr->sourceId, |
304 | | sizeof(unsigned long) |
305 | | ), |
306 | | &cTFSPtr->templateFlowSetId, |
307 | | sizeof(cTFSPtr->templateFlowSetId) |
308 | | ), |
309 | | &cTFSPtr->fieldCount, |
310 | | sizeof(cTFSPtr->fieldCount) |
311 | | ); |
312 | | /* add the fields list */ |
313 | | tmpField = cTFSPtr->lastField; |
314 | | for (; tmpField; tmpField=tmpField->prev) { |
315 | | msgTextIndex = mempcpy(mempcpy(msgTextIndex, |
316 | | &tmpField->fieldType, |
317 | | sizeof(tmpField->fieldType)), |
318 | | &tmpField->fieldLength, |
319 | | sizeof(tmpField->fieldLength)); |
320 | | } |
321 | | myMsg.type = 1; |
322 | | msgSend( myQueue, myMsg); |
323 | | /* end send */ |
324 | | (*cFNPtr)++; |
325 | | } while ( (cpt) < (length-2) ); /*length-2*/ |
| 128 | length = *((unsigned short*)&buffer2); |
| 129 | do { |
| 130 | #ifdef DEBUG |
| 131 | fprintf (stderr, "{"); |
| 132 | #endif |
| 133 | badFieldNumber = 0; |
| 134 | badFieldLength = 0; |
| 135 | badFieldCount = 0; |
| 136 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 137 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 138 | if ((cTFSPtr= |
| 139 | existTplId(cr, v9Ptr->sourceId, |
| 140 | *((unsigned short*)&buffer2)))==NULL) { |
| 141 | cTFSPtr = newRouterTplList(); |
| 142 | cTFSPtr->next = cr->tplList; |
| 143 | if (cr->tplList!=NULL) {cr->tplList->prev = cTFSPtr;} |
| 144 | cr->tplList = cTFSPtr; |
| 145 | cTFSPtr->templateFlowSetId = *((unsigned short*)&buffer2); |
| 146 | cTFSPtr->sourceId = v9Ptr->sourceId; |
| 147 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 148 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 149 | if ( (cTFSPtr->fieldCount = *((unsigned short*)&buffer2) ) == 0 ) { |
| 150 | badFieldCount = 1; |
| 151 | ptpltmp = cTFSPtr; |
| 152 | if (ptpltmp->prev == NULL) { |
| 153 | cr->tplList = ptpltmp->next; |
| 154 | if (cr->tplList) { |
| 155 | cr->tplList->prev = NULL; |
| 156 | } |
| 157 | } else { |
| 158 | ptpltmp->prev->next = ptpltmp->next; |
| 159 | if (ptpltmp->next) { |
| 160 | ptpltmp->next->prev = ptpltmp->prev; |
| 161 | } |
| 162 | } |
| 163 | deleteTplFlSet(ptpltmp); |
| 164 | cTFSPtr = NULL; |
| 165 | return (-1); |
| 166 | } |
| 167 | cpt_fields = 0; |
| 168 | for ( i=0; i<cTFSPtr->fieldCount; i++) { |
| 169 | FieldPtr fldPtr = (FieldPtr) malloc(sizeof(struct Field)); |
| 170 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 171 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 172 | if ( (fldPtr->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
| 173 | badFieldNumber = 1; |
| 174 | } |
| 175 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 176 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 177 | if ( (fldPtr->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
| 178 | badFieldLength = 1; |
| 179 | } |
| 180 | fldPtr->next = cTFSPtr->fieldSet; |
| 181 | fldPtr->prev = NULL; |
| 182 | if ( cTFSPtr->fieldSet ) {cTFSPtr->fieldSet->prev = fldPtr;} |
| 183 | cTFSPtr->fieldSet = fldPtr; |
| 184 | if (i==0) { |
| 185 | cTFSPtr->lastField = fldPtr; |
| 186 | } |
| 187 | cpt_fields++; |
| 188 | /* checkpoint */ |
| 189 | if ( (cTFSPtr->templateFlowSetId < 256 ) |
| 190 | || (cpt_fields > 25) |
| 191 | || (badFieldNumber == 1) |
| 192 | || badFieldLength == 1 |
| 193 | || (badFieldCount == 1)) { |
| 194 | fprintf(stderr,"\n IP: %lu.%lu.%lu.%lu, %d,%d\n", |
| 195 | cr->IpAddress>>24, |
| 196 | cr->IpAddress<<8>>24, |
| 197 | cr->IpAddress<<16>>24, |
| 198 | cr->IpAddress<<24>>24, |
| 199 | badFieldNumber, |
| 200 | badFieldLength |
| 201 | ); |
| 202 | fprintf (stderr, "\n cTFSPtr->templateFlowSetId: %hu\n", |
| 203 | cTFSPtr->templateFlowSetId); |
| 204 | while ( ((*offV9))> (index)){ |
| 205 | buffer2[1]= *(buf+index); index++; |
| 206 | buffer2[0]= *(buf+index); index++; |
| 207 | tmp = *((unsigned short*)&buffer2); |
| 208 | fprintf (stderr, " %hu ", tmp); |
| 209 | } |
| 210 | syslog (LOG_INFO, |
| 211 | "in new template: field nb gt 89, field lg gt 16 or too many fields, bad template definition possibility"); |
| 212 | fprintf(stderr, |
| 213 | "\n in new template function: too many fields, bug collector or wrong template def \n"); |
| 214 | ptpltmp = cTFSPtr; |
| 215 | if (ptpltmp->prev == NULL) { |
| 216 | cr->tplList = ptpltmp->next; |
| 217 | if (cr->tplList) { |
| 218 | cr->tplList->prev = NULL; |
| 219 | } |
| 220 | } else { |
| 221 | ptpltmp->prev->next = ptpltmp->next; |
| 222 | if (ptpltmp->next) { |
| 223 | ptpltmp->next->prev = ptpltmp->prev; |
| 224 | } |
| 225 | } |
| 226 | deleteTplFlSet(ptpltmp); |
| 227 | cTFSPtr = NULL; |
| 228 | return (-1); |
| 229 | } /* checkpoint end */ |
| 230 | } |
| 231 | } else { /*update*/ |
| 232 | ptpltmp = cTFSPtr; |
| 233 | if (ptpltmp->prev == NULL) { |
| 234 | cr->tplList = ptpltmp->next; |
| 235 | if (cr->tplList) { |
| 236 | cr->tplList->prev = NULL; |
| 237 | } |
| 238 | } else { |
| 239 | ptpltmp->prev->next = ptpltmp->next; |
| 240 | if (ptpltmp->next) { |
| 241 | ptpltmp->next->prev = ptpltmp->prev; |
| 242 | } |
| 243 | } |
| 244 | deleteTplFlSet(ptpltmp); |
| 245 | ptpltmp = NULL; |
| 246 | cTFSPtr = NULL; |
| 247 | cTFSPtr = newRouterTplList(); |
| 248 | cTFSPtr->next = cr->tplList; |
| 249 | if (cr->tplList!=NULL) {cr->tplList->prev = cTFSPtr;} |
| 250 | cr->tplList = cTFSPtr; |
| 251 | cTFSPtr->templateFlowSetId = *((unsigned short*)&buffer2); |
| 252 | cTFSPtr->sourceId = v9Ptr->sourceId; |
| 253 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 254 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 255 | if ( (cTFSPtr->fieldCount = *((unsigned short*)&buffer2) ) == 0 ) { |
| 256 | badFieldCount = 1; |
| 257 | ptpltmp = cTFSPtr; |
| 258 | if (ptpltmp->prev == NULL) { |
| 259 | cr->tplList = ptpltmp->next; |
| 260 | if (cr->tplList) { |
| 261 | cr->tplList->prev = NULL; |
| 262 | } |
| 263 | } else { |
| 264 | ptpltmp->prev->next = ptpltmp->next; |
| 265 | if (ptpltmp->next) { |
| 266 | ptpltmp->next->prev = ptpltmp->prev; |
| 267 | } |
| 268 | } |
| 269 | deleteTplFlSet(ptpltmp); |
| 270 | cTFSPtr = NULL; |
| 271 | return (-1); |
| 272 | } |
| 273 | cpt_fields = 0; |
| 274 | for ( i=0; i<cTFSPtr->fieldCount; i++) { |
| 275 | FieldPtr fldPtr = (FieldPtr) malloc(sizeof(struct Field)); |
| 276 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 277 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 278 | if ( (fldPtr->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
| 279 | badFieldNumber = 1; |
| 280 | } |
| 281 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 282 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 283 | if ( (fldPtr->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
| 284 | badFieldLength = 1; |
| 285 | } |
| 286 | fldPtr->next = cTFSPtr->fieldSet; |
| 287 | fldPtr->prev = NULL; |
| 288 | if ( cTFSPtr->fieldSet ) { |
| 289 | cTFSPtr->fieldSet->prev = fldPtr; |
| 290 | } |
| 291 | cTFSPtr->fieldSet = fldPtr; |
| 292 | if (i==0) { |
| 293 | cTFSPtr->lastField = fldPtr; |
| 294 | } |
| 295 | cpt_fields++; |
| 296 | if ( (cTFSPtr->templateFlowSetId < 256 ) |
| 297 | || (cpt_fields > 25) |
| 298 | || (badFieldNumber == 1) |
| 299 | || badFieldLength == 1 |
| 300 | || (badFieldCount == 1)) { |
| 301 | while ( ((*offV9))> (index)){ |
| 302 | buffer2[1]= *(buf+index); index++; |
| 303 | buffer2[0]= *(buf+index); index++; |
| 304 | tmp = *((unsigned short*)&buffer2); |
| 305 | fprintf (stderr, " %hu ", tmp); |
| 306 | } |
| 307 | syslog (LOG_INFO, |
| 308 | "in update template function: too many fields, bug collector or wrong template def in template update"); |
| 309 | fprintf(stderr, |
| 310 | "\nin update template function: too many fields, bug collector or wrong template def in template update\n"); |
| 311 | ptpltmp = cTFSPtr; |
| 312 | if (ptpltmp->prev == NULL) { |
| 313 | cr->tplList = ptpltmp->next; |
| 314 | if (cr->tplList) { |
| 315 | cr->tplList->prev = NULL; |
| 316 | } |
| 317 | } else { |
| 318 | ptpltmp->prev->next = ptpltmp->next; |
| 319 | if (ptpltmp->next) { |
| 320 | ptpltmp->next->prev = ptpltmp->prev; |
| 321 | } |
| 322 | } |
| 323 | deleteTplFlSet(ptpltmp); |
| 324 | cTFSPtr = NULL; |
| 325 | return (-1); |
| 326 | } |
| 327 | } |
| 328 | } /* end if template creation or update */ |
| 329 | /* send to queue the template definition */ |
| 330 | /* fprintf(stderr,"%hu %d\n", tplMsgType, sizeof(tplMsgType)); */ |
| 331 | /* fprintf(stderr,"%lu %d\n", cr->IpAddress, sizeof(cr->IpAddress)); */ |
| 332 | /* fprintf(stderr, "%lu.%lu.%lu.%lu ", */ |
| 333 | /* ( cr->IpAddress)>>24, */ |
| 334 | /* ( cr->IpAddress)<<8>>24, */ |
| 335 | /* ( cr->IpAddress)<<16>>24, */ |
| 336 | /* ( cr->IpAddress)<<24>>24); */ |
| 337 | /* fprintf(stderr,"%lu %d\n", cTFSPtr->sourceId, sizeof(cTFSPtr->sourceId)); */ |
| 338 | /* FIXME HERE don't send an wrong def if error detected */ |
| 339 | msgTextIndex = mempcpy(mempcpy(mempcpy(mempcpy(mempcpy(myMsg.text, |
| 340 | &tplMsgType, |
| 341 | sizeof(unsigned short) |
| 342 | ), |
| 343 | &cr->IpAddress, |
| 344 | sizeof(unsigned long) |
| 345 | ), |
| 346 | &cTFSPtr->sourceId, |
| 347 | sizeof(unsigned long) |
| 348 | ), |
| 349 | &cTFSPtr->templateFlowSetId, |
| 350 | sizeof(cTFSPtr->templateFlowSetId) |
| 351 | ), |
| 352 | &cTFSPtr->fieldCount, |
| 353 | sizeof(cTFSPtr->fieldCount) |
| 354 | ); |
| 355 | /* add the fields list */ |
| 356 | tmpField = cTFSPtr->lastField; |
| 357 | for (; tmpField; tmpField=tmpField->prev) { |
| 358 | msgTextIndex = mempcpy(mempcpy(msgTextIndex, |
| 359 | &tmpField->fieldType, |
| 360 | sizeof(tmpField->fieldType)), |
| 361 | &tmpField->fieldLength, |
| 362 | sizeof(tmpField->fieldLength)); |
| 363 | } |
| 364 | myMsg.type = 1; |
| 365 | msgSend( myQueue, myMsg); |
| 366 | /* end send */ |
| 367 | (*cFNPtr)++; |
| 368 | } while ( (cpt) < (length-2) ); /*length-2*/ |
360 | | fprintf (stderr, "<"); |
361 | | #endif |
362 | | badFieldNumber = 0; |
363 | | badFieldLength = 0; |
364 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
365 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
366 | | if ((cTOPtr= |
367 | | existTplOptId(cr, v9Ptr->sourceId, |
368 | | *((unsigned short*)&buffer2)))==NULL) { |
369 | | cTOPtr = newRouterTplOptList(); |
370 | | cTOPtr->next = cr->tplOptList; |
371 | | if (cr->tplOptList!=NULL) {cr->tplOptList->prev = cTOPtr;} |
372 | | cr->tplOptList = cTOPtr; |
373 | | cTOPtr->templateOptionId = *((unsigned short*)&buffer2); |
374 | | cTOPtr->sourceId = v9Ptr->sourceId; |
375 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
376 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
377 | | cTOPtr->optionScopeLg = *((unsigned short*)&buffer2); |
378 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
379 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
380 | | cTOPtr->optionLg = *((unsigned short*)&buffer2); |
381 | | cpt_fields = 0; |
382 | | for ( i=0; i<(((cTOPtr->optionScopeLg)+(cTOPtr->optionLg))/4); i++) { |
383 | | FieldPtr tmp = (FieldPtr) malloc(sizeof(struct Field)); |
384 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
385 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
386 | | if ( (tmp->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
387 | | badFieldNumber = 1; |
388 | | } |
389 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
390 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
391 | | if ( (tmp->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
392 | | badFieldLength = 1; |
393 | | } |
394 | | tmp->next = cTOPtr->fieldSet; |
395 | | tmp->prev = NULL; |
396 | | if ( cTOPtr->fieldSet ) {cTOPtr->fieldSet->prev = tmp;} |
397 | | cTOPtr->fieldSet = tmp; |
398 | | if (i==0) { |
399 | | cTOPtr->lastField = tmp; |
400 | | } |
401 | | cpt_fields++; |
402 | | if ( (cTOPtr->templateOptionId < 256) || (cpt_fields > 40) || (badFieldNumber == 1) || badFieldLength == 1) { |
403 | | syslog (LOG_INFO, |
404 | | "in option template function: too many fields, bug collector or wrong template def in template update"); |
| 403 | fprintf (stderr, "<"); |
| 404 | #endif |
| 405 | badFieldNumber = 0; |
| 406 | badFieldLength = 0; |
| 407 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 408 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 409 | if ((cTOPtr= |
| 410 | existTplOptId(cr, v9Ptr->sourceId, |
| 411 | *((unsigned short*)&buffer2)))==NULL) { |
| 412 | cTOPtr = newRouterTplOptList(); |
| 413 | cTOPtr->next = cr->tplOptList; |
| 414 | if (cr->tplOptList!=NULL) {cr->tplOptList->prev = cTOPtr;} |
| 415 | cr->tplOptList = cTOPtr; |
| 416 | cTOPtr->templateOptionId = *((unsigned short*)&buffer2); |
| 417 | cTOPtr->sourceId = v9Ptr->sourceId; |
| 418 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 419 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 420 | cTOPtr->optionScopeLg = *((unsigned short*)&buffer2); |
| 421 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 422 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 423 | cTOPtr->optionLg = *((unsigned short*)&buffer2); |
| 424 | cpt_fields = 0; |
| 425 | for ( i=0; i<(((cTOPtr->optionScopeLg)+(cTOPtr->optionLg))/4); i++) { |
| 426 | FieldPtr tmp = (FieldPtr) malloc(sizeof(struct Field)); |
| 427 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 428 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 429 | if ( (tmp->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
| 430 | badFieldNumber = 1; |
| 431 | } |
| 432 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 433 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 434 | if ( (tmp->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
| 435 | badFieldLength = 1; |
| 436 | } |
| 437 | tmp->next = cTOPtr->fieldSet; |
| 438 | tmp->prev = NULL; |
| 439 | if ( cTOPtr->fieldSet ) {cTOPtr->fieldSet->prev = tmp;} |
| 440 | cTOPtr->fieldSet = tmp; |
| 441 | if (i==0) { |
| 442 | cTOPtr->lastField = tmp; |
| 443 | } |
| 444 | cpt_fields++; |
| 445 | if ( (cTOPtr->templateOptionId < 256) |
| 446 | || (cpt_fields > 25) |
| 447 | || (badFieldNumber == 1) |
| 448 | || badFieldLength == 1) { |
| 449 | syslog (LOG_INFO, |
| 450 | "in option template function: too many fields, bug collector or wrong template def in template update"); |
406 | | fprintf(stderr, |
407 | | "\nin option template function: too many fields, bug collector or wrong template def in template update\n"); |
408 | | #endif |
409 | | ptplotmp = cTOPtr; |
410 | | if (ptplotmp->prev == NULL) { |
411 | | cr->tplOptList = ptplotmp->next; |
412 | | if (cr->tplOptList) { |
413 | | cr->tplOptList->prev = NULL; |
414 | | } |
415 | | } else { |
416 | | ptplotmp->prev->next = ptplotmp->next; |
417 | | if (ptplotmp->next) { |
418 | | ptplotmp->next->prev = ptplotmp->prev; |
419 | | } |
420 | | } |
421 | | deleteTplOption(ptplotmp); |
422 | | cTOPtr = NULL; |
423 | | return (-1); |
424 | | } |
425 | | } |
426 | | while ((*offV9)%4 != 0) { |
427 | | (*offV9)++; cpt++; |
428 | | } /*padding case*/ |
429 | | } else { /*update */ |
430 | | ptplotmp = cTOPtr; |
431 | | if (ptplotmp->prev == NULL) { |
432 | | cr->tplOptList = ptplotmp->next; |
433 | | if (cr->tplOptList) { |
434 | | cr->tplOptList->prev = NULL; |
435 | | } |
436 | | } else { |
437 | | ptplotmp->prev->next = ptplotmp->next; |
438 | | if (ptplotmp->next) { |
439 | | ptplotmp->next->prev = ptplotmp->prev; |
440 | | } |
441 | | } |
442 | | deleteTplOption(ptplotmp); |
443 | | cTOPtr = NULL; |
444 | | cTOPtr = newRouterTplOptList(); |
445 | | cTOPtr->next = cr->tplOptList; |
446 | | if (cr->tplOptList!=NULL) {cr->tplOptList->prev = cTOPtr;} |
447 | | cr->tplOptList = cTOPtr; |
448 | | cTOPtr->templateOptionId = *((unsigned short*)&buffer2); |
449 | | cTOPtr->sourceId = v9Ptr->sourceId; |
450 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
451 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
452 | | cTOPtr->optionScopeLg = *((unsigned short*)&buffer2); |
453 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
454 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
455 | | cTOPtr->optionLg = *((unsigned short*)&buffer2); |
456 | | cpt_fields = 0; |
457 | | for ( i=0; i<(((cTOPtr->optionScopeLg)+(cTOPtr->optionLg))/4); i++) { |
458 | | FieldPtr tmp = (FieldPtr) malloc(sizeof(struct Field)); |
459 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
460 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
461 | | if ( (tmp->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
462 | | badFieldNumber = 1; |
463 | | } |
464 | | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
465 | | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
466 | | if ( (tmp->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
467 | | badFieldLength = 1; |
468 | | } |
469 | | tmp->next = cTOPtr->fieldSet; |
470 | | tmp->prev = NULL; |
471 | | if ( cTOPtr->fieldSet ) {cTOPtr->fieldSet->prev = tmp;} |
472 | | cTOPtr->fieldSet = tmp; |
473 | | if (i==0) { |
474 | | cTOPtr->lastField = tmp; |
475 | | } |
476 | | cpt_fields++; |
477 | | if ( (cTOPtr->templateOptionId < 256) || (cpt_fields > 40) || (badFieldNumber == 1) || badFieldLength == 1) { |
478 | | syslog (LOG_INFO, |
479 | | "in update option tpl function: too many fields, bug collector or wrong template def in template update"); |
| 452 | fprintf(stderr, |
| 453 | "\nin option template function: too many fields, bug collector or wrong template def in template update\n"); |
| 454 | #endif |
| 455 | ptplotmp = cTOPtr; |
| 456 | if (ptplotmp->prev == NULL) { |
| 457 | cr->tplOptList = ptplotmp->next; |
| 458 | if (cr->tplOptList) { |
| 459 | cr->tplOptList->prev = NULL; |
| 460 | } |
| 461 | } else { |
| 462 | ptplotmp->prev->next = ptplotmp->next; |
| 463 | if (ptplotmp->next) { |
| 464 | ptplotmp->next->prev = ptplotmp->prev; |
| 465 | } |
| 466 | } |
| 467 | deleteTplOption(ptplotmp); |
| 468 | cTOPtr = NULL; |
| 469 | return (-1); |
| 470 | } |
| 471 | } |
| 472 | while ((*offV9)%4 != 0) { |
| 473 | (*offV9)++; cpt++; |
| 474 | } /*padding case*/ |
| 475 | } else { /*update */ |
| 476 | ptplotmp = cTOPtr; |
| 477 | if (ptplotmp->prev == NULL) { |
| 478 | cr->tplOptList = ptplotmp->next; |
| 479 | if (cr->tplOptList) { |
| 480 | cr->tplOptList->prev = NULL; |
| 481 | } |
| 482 | } else { |
| 483 | ptplotmp->prev->next = ptplotmp->next; |
| 484 | if (ptplotmp->next) { |
| 485 | ptplotmp->next->prev = ptplotmp->prev; |
| 486 | } |
| 487 | } |
| 488 | deleteTplOption(ptplotmp); |
| 489 | cTOPtr = NULL; |
| 490 | cTOPtr = newRouterTplOptList(); |
| 491 | cTOPtr->next = cr->tplOptList; |
| 492 | if (cr->tplOptList!=NULL) {cr->tplOptList->prev = cTOPtr;} |
| 493 | cr->tplOptList = cTOPtr; |
| 494 | cTOPtr->templateOptionId = *((unsigned short*)&buffer2); |
| 495 | cTOPtr->sourceId = v9Ptr->sourceId; |
| 496 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 497 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 498 | cTOPtr->optionScopeLg = *((unsigned short*)&buffer2); |
| 499 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 500 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 501 | cTOPtr->optionLg = *((unsigned short*)&buffer2); |
| 502 | cpt_fields = 0; |
| 503 | for ( i=0; i<(((cTOPtr->optionScopeLg)+(cTOPtr->optionLg))/4); i++) { |
| 504 | FieldPtr tmp = (FieldPtr) malloc(sizeof(struct Field)); |
| 505 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 506 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 507 | if ( (tmp->fieldType = *((unsigned short*)&buffer2) ) > 89) { |
| 508 | badFieldNumber = 1; |
| 509 | } |
| 510 | buffer2[1]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 511 | buffer2[0]= *(buf+(*offV9)); (*offV9)++; cpt++; |
| 512 | if ( (tmp->fieldLength = *((unsigned short*)&buffer2) ) > 16) { |
| 513 | badFieldLength = 1; |
| 514 | } |
| 515 | tmp->next = cTOPtr->fieldSet; |
| 516 | tmp->prev = NULL; |
| 517 | if ( cTOPtr->fieldSet ) {cTOPtr->fieldSet->prev = tmp;} |
| 518 | cTOPtr->fieldSet = tmp; |
| 519 | if (i==0) { |
| 520 | cTOPtr->lastField = tmp; |
| 521 | } |
| 522 | cpt_fields++; |
| 523 | if ( (cTOPtr->templateOptionId < 256) |
| 524 | || (cpt_fields > 25) |
| 525 | || (badFieldNumber == 1) |
| 526 | || badFieldLength == 1) { |
| 527 | syslog (LOG_INFO, |
| 528 | "in update option tpl function: too many fields, bug collector or wrong template def in template update"); |