|
Lines 142-148
Link Here
|
| 142 |
if (datalen != 8) |
142 |
if (datalen != 8) |
| 143 |
{ |
143 |
{ |
| 144 |
if (DEBUG) |
144 |
if (DEBUG) |
| 145 |
log (LOG_DEBUG, "%s: wrong size (%d != 8)\n", __FUNCTION__, |
145 |
_log (LOG_DEBUG, "%s: wrong size (%d != 8)\n", __FUNCTION__, |
| 146 |
datalen); |
146 |
datalen); |
| 147 |
wrong_length (c, "Message Type", 8, datalen, 0); |
147 |
wrong_length (c, "Message Type", 8, datalen, 0); |
| 148 |
return -EINVAL; |
148 |
return -EINVAL; |
|
Lines 150-162
Link Here
|
| 150 |
if ((c->msgtype > MAX_MSG) || (!msgtypes[c->msgtype])) |
150 |
if ((c->msgtype > MAX_MSG) || (!msgtypes[c->msgtype])) |
| 151 |
{ |
151 |
{ |
| 152 |
if (DEBUG) |
152 |
if (DEBUG) |
| 153 |
log (LOG_DEBUG, "%s: unknown message type %d\n", __FUNCTION__, |
153 |
_log (LOG_DEBUG, "%s: unknown message type %d\n", __FUNCTION__, |
| 154 |
c->msgtype); |
154 |
c->msgtype); |
| 155 |
return -EINVAL; |
155 |
return -EINVAL; |
| 156 |
} |
156 |
} |
| 157 |
if (debug_avp) |
157 |
if (debug_avp) |
| 158 |
if (DEBUG) |
158 |
if (DEBUG) |
| 159 |
log (LOG_DEBUG, "%s: message type %d (%s)\n", __FUNCTION__, |
159 |
_log (LOG_DEBUG, "%s: message type %d (%s)\n", __FUNCTION__, |
| 160 |
c->msgtype, msgtypes[c->msgtype]); |
160 |
c->msgtype, msgtypes[c->msgtype]); |
| 161 |
#ifdef SANITY |
161 |
#ifdef SANITY |
| 162 |
if (t->sanity) |
162 |
if (t->sanity) |
|
Lines 168-174
Link Here
|
| 168 |
if ((c != t->self) && (c->msgtype < Hello)) |
168 |
if ((c != t->self) && (c->msgtype < Hello)) |
| 169 |
{ |
169 |
{ |
| 170 |
if (DEBUG) |
170 |
if (DEBUG) |
| 171 |
log (LOG_DEBUG, |
171 |
_log (LOG_DEBUG, |
| 172 |
"%s: attempting to negotiate tunnel inside a call!\n", |
172 |
"%s: attempting to negotiate tunnel inside a call!\n", |
| 173 |
__FUNCTION__); |
173 |
__FUNCTION__); |
| 174 |
return -EINVAL; |
174 |
return -EINVAL; |
|
Lines 185-191
Link Here
|
| 185 |
*/ |
185 |
*/ |
| 186 |
|
186 |
|
| 187 |
if (DEBUG) |
187 |
if (DEBUG) |
| 188 |
log (LOG_DEBUG, |
188 |
_log (LOG_DEBUG, |
| 189 |
"%s: attempting to negotiate SCCRQ with state != 0\n", |
189 |
"%s: attempting to negotiate SCCRQ with state != 0\n", |
| 190 |
__FUNCTION__); |
190 |
__FUNCTION__); |
| 191 |
return -EINVAL; |
191 |
return -EINVAL; |
|
Lines 195-201
Link Here
|
| 195 |
if (t->state != SCCRQ) |
195 |
if (t->state != SCCRQ) |
| 196 |
{ |
196 |
{ |
| 197 |
if (DEBUG) |
197 |
if (DEBUG) |
| 198 |
log (LOG_DEBUG, |
198 |
_log (LOG_DEBUG, |
| 199 |
"%s: attempting to negotiate SCCRP with state != SCCRQ!\n", |
199 |
"%s: attempting to negotiate SCCRP with state != SCCRQ!\n", |
| 200 |
__FUNCTION__); |
200 |
__FUNCTION__); |
| 201 |
return -EINVAL; |
201 |
return -EINVAL; |
|
Lines 205-211
Link Here
|
| 205 |
if (t->state != SCCRP) |
205 |
if (t->state != SCCRP) |
| 206 |
{ |
206 |
{ |
| 207 |
if (DEBUG) |
207 |
if (DEBUG) |
| 208 |
log (LOG_DEBUG, |
208 |
_log (LOG_DEBUG, |
| 209 |
"%s: attempting to negotiate SCCCN with state != SCCRP!\n", |
209 |
"%s: attempting to negotiate SCCCN with state != SCCRP!\n", |
| 210 |
__FUNCTION__); |
210 |
__FUNCTION__); |
| 211 |
return -EINVAL; |
211 |
return -EINVAL; |
|
Lines 215-221
Link Here
|
| 215 |
if (t->state != SCCCN) |
215 |
if (t->state != SCCCN) |
| 216 |
{ |
216 |
{ |
| 217 |
if (DEBUG) |
217 |
if (DEBUG) |
| 218 |
log (LOG_DEBUG, |
218 |
_log (LOG_DEBUG, |
| 219 |
"%s: attempting to negotiate ICRQ when state != SCCCN\n", |
219 |
"%s: attempting to negotiate ICRQ when state != SCCCN\n", |
| 220 |
__FUNCTION__); |
220 |
__FUNCTION__); |
| 221 |
return -EINVAL; |
221 |
return -EINVAL; |
|
Lines 223-229
Link Here
|
| 223 |
if (c != t->self) |
223 |
if (c != t->self) |
| 224 |
{ |
224 |
{ |
| 225 |
if (DEBUG) |
225 |
if (DEBUG) |
| 226 |
log (LOG_DEBUG, |
226 |
_log (LOG_DEBUG, |
| 227 |
"%s: attempting to negotiate ICRQ on a call!\n", |
227 |
"%s: attempting to negotiate ICRQ on a call!\n", |
| 228 |
__FUNCTION__); |
228 |
__FUNCTION__); |
| 229 |
return -EINVAL; |
229 |
return -EINVAL; |
|
Lines 233-239
Link Here
|
| 233 |
if (t->state != SCCCN) |
233 |
if (t->state != SCCCN) |
| 234 |
{ |
234 |
{ |
| 235 |
if (DEBUG) |
235 |
if (DEBUG) |
| 236 |
log (LOG_DEBUG, |
236 |
_log (LOG_DEBUG, |
| 237 |
"%s: attempting to negotiate ICRP on tunnel!=SCCCN\n", |
237 |
"%s: attempting to negotiate ICRP on tunnel!=SCCCN\n", |
| 238 |
__FUNCTION__); |
238 |
__FUNCTION__); |
| 239 |
return -EINVAL; |
239 |
return -EINVAL; |
|
Lines 241-247
Link Here
|
| 241 |
if (c->state != ICRQ) |
241 |
if (c->state != ICRQ) |
| 242 |
{ |
242 |
{ |
| 243 |
if (DEBUG) |
243 |
if (DEBUG) |
| 244 |
log (LOG_DEBUG, |
244 |
_log (LOG_DEBUG, |
| 245 |
"%s: attempting to negotiate ICRP when state != ICRQ\n", |
245 |
"%s: attempting to negotiate ICRP when state != ICRQ\n", |
| 246 |
__FUNCTION__); |
246 |
__FUNCTION__); |
| 247 |
return -EINVAL; |
247 |
return -EINVAL; |
|
Lines 251-257
Link Here
|
| 251 |
if (c->state != ICRP) |
251 |
if (c->state != ICRP) |
| 252 |
{ |
252 |
{ |
| 253 |
if (DEBUG) |
253 |
if (DEBUG) |
| 254 |
log (LOG_DEBUG, |
254 |
_log (LOG_DEBUG, |
| 255 |
"%s: attempting to negotiate ICCN when state != ICRP\n", |
255 |
"%s: attempting to negotiate ICCN when state != ICRP\n", |
| 256 |
__FUNCTION__); |
256 |
__FUNCTION__); |
| 257 |
return -EINVAL; |
257 |
return -EINVAL; |
|
Lines 261-267
Link Here
|
| 261 |
if (c->state != ICCN) |
261 |
if (c->state != ICCN) |
| 262 |
{ |
262 |
{ |
| 263 |
if (DEBUG) |
263 |
if (DEBUG) |
| 264 |
log (LOG_DEBUG, |
264 |
_log (LOG_DEBUG, |
| 265 |
"%s: attempting to negotiate SLI when state != ICCN\n", |
265 |
"%s: attempting to negotiate SLI when state != ICCN\n", |
| 266 |
__FUNCTION__); |
266 |
__FUNCTION__); |
| 267 |
return -EINVAL; |
267 |
return -EINVAL; |
|
Lines 271-277
Link Here
|
| 271 |
if (t->state != SCCCN) |
271 |
if (t->state != SCCCN) |
| 272 |
{ |
272 |
{ |
| 273 |
if (DEBUG) |
273 |
if (DEBUG) |
| 274 |
log (LOG_DEBUG, |
274 |
_log (LOG_DEBUG, |
| 275 |
"%s: attempting to negotiate OCRP on tunnel!=SCCCN\n", |
275 |
"%s: attempting to negotiate OCRP on tunnel!=SCCCN\n", |
| 276 |
__FUNCTION__); |
276 |
__FUNCTION__); |
| 277 |
return -EINVAL; |
277 |
return -EINVAL; |
|
Lines 279-285
Link Here
|
| 279 |
if (c->state != OCRQ) |
279 |
if (c->state != OCRQ) |
| 280 |
{ |
280 |
{ |
| 281 |
if (DEBUG) |
281 |
if (DEBUG) |
| 282 |
log (LOG_DEBUG, |
282 |
_log (LOG_DEBUG, |
| 283 |
"%s: attempting to negotiate OCRP when state != OCRQ\n", |
283 |
"%s: attempting to negotiate OCRP when state != OCRQ\n", |
| 284 |
__FUNCTION__); |
284 |
__FUNCTION__); |
| 285 |
return -EINVAL; |
285 |
return -EINVAL; |
|
Lines 290-296
Link Here
|
| 290 |
if (c->state != OCRQ) |
290 |
if (c->state != OCRQ) |
| 291 |
{ |
291 |
{ |
| 292 |
if (DEBUG) |
292 |
if (DEBUG) |
| 293 |
log (LOG_DEBUG, |
293 |
_log (LOG_DEBUG, |
| 294 |
"%s: attempting to negotiate OCCN when state != OCRQ\n", |
294 |
"%s: attempting to negotiate OCCN when state != OCRQ\n", |
| 295 |
__FUNCTION__); |
295 |
__FUNCTION__); |
| 296 |
return -EINVAL; |
296 |
return -EINVAL; |
|
Lines 301-307
Link Here
|
| 301 |
case Hello: |
301 |
case Hello: |
| 302 |
break; |
302 |
break; |
| 303 |
default: |
303 |
default: |
| 304 |
log (LOG_WARN, "%s: i don't know how to handle %s messages\n", |
304 |
_log (LOG_WARN, "%s: i don't know how to handle %s messages\n", |
| 305 |
__FUNCTION__, msgtypes[c->msgtype]); |
305 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 306 |
return -EINVAL; |
306 |
return -EINVAL; |
| 307 |
} |
307 |
} |
|
Lines 313-324
Link Here
|
| 313 |
if (debug_avp) |
313 |
if (debug_avp) |
| 314 |
{ |
314 |
{ |
| 315 |
if (DEBUG) |
315 |
if (DEBUG) |
| 316 |
log (LOG_DEBUG, "%s: new incoming call\n", __FUNCTION__); |
316 |
_log (LOG_DEBUG, "%s: new incoming call\n", __FUNCTION__); |
| 317 |
} |
317 |
} |
| 318 |
tmp = new_call (t); |
318 |
tmp = new_call (t); |
| 319 |
if (!tmp) |
319 |
if (!tmp) |
| 320 |
{ |
320 |
{ |
| 321 |
log (LOG_WARN, "%s: unable to create new call\n", __FUNCTION__); |
321 |
_log (LOG_WARN, "%s: unable to create new call\n", __FUNCTION__); |
| 322 |
return -EINVAL; |
322 |
return -EINVAL; |
| 323 |
} |
323 |
} |
| 324 |
tmp->next = t->call_head; |
324 |
tmp->next = t->call_head; |
|
Lines 345-351
Link Here
|
| 345 |
if (size < 0) |
345 |
if (size < 0) |
| 346 |
{ |
346 |
{ |
| 347 |
if (DEBUG) |
347 |
if (DEBUG) |
| 348 |
log (LOG_DEBUG, "%s: Random vector too small (%d < 0)\n", |
348 |
_log (LOG_DEBUG, "%s: Random vector too small (%d < 0)\n", |
| 349 |
__FUNCTION__, size); |
349 |
__FUNCTION__, size); |
| 350 |
wrong_length (c, "Random Vector", 6, datalen, 1); |
350 |
wrong_length (c, "Random Vector", 6, datalen, 1); |
| 351 |
return -EINVAL; |
351 |
return -EINVAL; |
|
Lines 353-366
Link Here
|
| 353 |
if (size > MAX_VECTOR_SIZE) |
353 |
if (size > MAX_VECTOR_SIZE) |
| 354 |
{ |
354 |
{ |
| 355 |
if (DEBUG) |
355 |
if (DEBUG) |
| 356 |
log (LOG_DEBUG, "%s: Random vector too large (%d > %d)\n", |
356 |
_log (LOG_DEBUG, "%s: Random vector too large (%d > %d)\n", |
| 357 |
__FUNCTION__, datalen, MAX_VECTOR_SIZE); |
357 |
__FUNCTION__, datalen, MAX_VECTOR_SIZE); |
| 358 |
wrong_length (c, "Random Vector", 6, datalen, 1); |
358 |
wrong_length (c, "Random Vector", 6, datalen, 1); |
| 359 |
return -EINVAL; |
359 |
return -EINVAL; |
| 360 |
} |
360 |
} |
| 361 |
} |
361 |
} |
| 362 |
if (debug_avp) |
362 |
if (debug_avp) |
| 363 |
log (LOG_DEBUG, "%s: Random Vector of %d octets\n", __FUNCTION__, |
363 |
_log (LOG_DEBUG, "%s: Random Vector of %d octets\n", __FUNCTION__, |
| 364 |
size); |
364 |
size); |
| 365 |
t->chal_us.vector = (unsigned char *) &raw[3]; |
365 |
t->chal_us.vector = (unsigned char *) &raw[3]; |
| 366 |
t->chal_us.vector_len = size; |
366 |
t->chal_us.vector_len = size; |
|
Lines 383-389
Link Here
|
| 383 |
if (debug_avp) |
383 |
if (debug_avp) |
| 384 |
{ |
384 |
{ |
| 385 |
if (DEBUG) |
385 |
if (DEBUG) |
| 386 |
log (LOG_DEBUG, "%s : Ignoring AVP\n", __FUNCTION__); |
386 |
_log (LOG_DEBUG, "%s : Ignoring AVP\n", __FUNCTION__); |
| 387 |
} |
387 |
} |
| 388 |
return 0; |
388 |
return 0; |
| 389 |
} |
389 |
} |
|
Lines 396-402
Link Here
|
| 396 |
if (datalen != 6) |
396 |
if (datalen != 6) |
| 397 |
{ |
397 |
{ |
| 398 |
if (DEBUG) |
398 |
if (DEBUG) |
| 399 |
log (LOG_DEBUG, |
399 |
_log (LOG_DEBUG, |
| 400 |
"%s: avp is incorrect size. %d != 6\n", __FUNCTION__, |
400 |
"%s: avp is incorrect size. %d != 6\n", __FUNCTION__, |
| 401 |
datalen); |
401 |
datalen); |
| 402 |
wrong_length (c, "Sequencing Required", 6, datalen, 1); |
402 |
wrong_length (c, "Sequencing Required", 6, datalen, 1); |
|
Lines 408-414
Link Here
|
| 408 |
break; |
408 |
break; |
| 409 |
default: |
409 |
default: |
| 410 |
if (DEBUG) |
410 |
if (DEBUG) |
| 411 |
log (LOG_DEBUG, |
411 |
_log (LOG_DEBUG, |
| 412 |
"%s: sequencing required not appropriate for %s!\n", |
412 |
"%s: sequencing required not appropriate for %s!\n", |
| 413 |
__FUNCTION__, msgtypes[c->msgtype]); |
413 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 414 |
return -EINVAL; |
414 |
return -EINVAL; |
|
Lines 418-424
Link Here
|
| 418 |
if (debug_avp) |
418 |
if (debug_avp) |
| 419 |
{ |
419 |
{ |
| 420 |
if (DEBUG) |
420 |
if (DEBUG) |
| 421 |
log (LOG_DEBUG, "%s: peer requires sequencing.\n", __FUNCTION__); |
421 |
_log (LOG_DEBUG, "%s: peer requires sequencing.\n", __FUNCTION__); |
| 422 |
} |
422 |
} |
| 423 |
c->seq_reqd = -1; |
423 |
c->seq_reqd = -1; |
| 424 |
return 0; |
424 |
return 0; |
|
Lines 441-447
Link Here
|
| 441 |
if (datalen < 10) |
441 |
if (datalen < 10) |
| 442 |
{ |
442 |
{ |
| 443 |
if (DEBUG) |
443 |
if (DEBUG) |
| 444 |
log (LOG_DEBUG, |
444 |
_log (LOG_DEBUG, |
| 445 |
"%s: avp is incorrect size. %d < 10\n", __FUNCTION__, |
445 |
"%s: avp is incorrect size. %d < 10\n", __FUNCTION__, |
| 446 |
datalen); |
446 |
datalen); |
| 447 |
wrong_length (c, "Result Code", 10, datalen, 1); |
447 |
wrong_length (c, "Result Code", 10, datalen, 1); |
|
Lines 454-460
Link Here
|
| 454 |
break; |
454 |
break; |
| 455 |
default: |
455 |
default: |
| 456 |
if (DEBUG) |
456 |
if (DEBUG) |
| 457 |
log (LOG_DEBUG, |
457 |
_log (LOG_DEBUG, |
| 458 |
"%s: result code not appropriate for %s. Ignoring.\n", |
458 |
"%s: result code not appropriate for %s. Ignoring.\n", |
| 459 |
__FUNCTION__, msgtypes[c->msgtype]); |
459 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 460 |
return 0; |
460 |
return 0; |
|
Lines 466-472
Link Here
|
| 466 |
if ((c->msgtype == StopCCN) && ((result > 7) || (result < 1))) |
466 |
if ((c->msgtype == StopCCN) && ((result > 7) || (result < 1))) |
| 467 |
{ |
467 |
{ |
| 468 |
if (DEBUG) |
468 |
if (DEBUG) |
| 469 |
log (LOG_DEBUG, |
469 |
_log (LOG_DEBUG, |
| 470 |
"%s: result code out of range (%d %d %d). Ignoring.\n", |
470 |
"%s: result code out of range (%d %d %d). Ignoring.\n", |
| 471 |
__FUNCTION__, result, error, datalen); |
471 |
__FUNCTION__, result, error, datalen); |
| 472 |
return 0; |
472 |
return 0; |
|
Lines 475-481
Link Here
|
| 475 |
if ((c->msgtype == CDN) && ((result > 11) || (result < 1))) |
475 |
if ((c->msgtype == CDN) && ((result > 11) || (result < 1))) |
| 476 |
{ |
476 |
{ |
| 477 |
if (DEBUG) |
477 |
if (DEBUG) |
| 478 |
log (LOG_DEBUG, |
478 |
_log (LOG_DEBUG, |
| 479 |
"%s: result code out of range (%d %d %d). Ignoring.\n", |
479 |
"%s: result code out of range (%d %d %d). Ignoring.\n", |
| 480 |
__FUNCTION__, result, error, datalen); |
480 |
__FUNCTION__, result, error, datalen); |
| 481 |
return 0; |
481 |
return 0; |
|
Lines 488-501
Link Here
|
| 488 |
{ |
488 |
{ |
| 489 |
if (DEBUG && (c->msgtype == StopCCN)) |
489 |
if (DEBUG && (c->msgtype == StopCCN)) |
| 490 |
{ |
490 |
{ |
| 491 |
log (LOG_DEBUG, |
491 |
_log (LOG_DEBUG, |
| 492 |
"%s: peer closing for reason %d (%s), error = %d (%s)\n", |
492 |
"%s: peer closing for reason %d (%s), error = %d (%s)\n", |
| 493 |
__FUNCTION__, result, stopccn_result_codes[result], error, |
493 |
__FUNCTION__, result, stopccn_result_codes[result], error, |
| 494 |
c->errormsg); |
494 |
c->errormsg); |
| 495 |
} |
495 |
} |
| 496 |
else |
496 |
else |
| 497 |
{ |
497 |
{ |
| 498 |
log (LOG_DEBUG, |
498 |
_log (LOG_DEBUG, |
| 499 |
"%s: peer closing for reason %d (%s), error = %d (%s)\n", |
499 |
"%s: peer closing for reason %d (%s), error = %d (%s)\n", |
| 500 |
__FUNCTION__, result, cdn_result_codes[result], error, |
500 |
__FUNCTION__, result, cdn_result_codes[result], error, |
| 501 |
c->errormsg); |
501 |
c->errormsg); |
|
Lines 520-526
Link Here
|
| 520 |
if (datalen != 8) |
520 |
if (datalen != 8) |
| 521 |
{ |
521 |
{ |
| 522 |
if (DEBUG) |
522 |
if (DEBUG) |
| 523 |
log (LOG_DEBUG, |
523 |
_log (LOG_DEBUG, |
| 524 |
"%s: avp is incorrect size. %d != 8\n", __FUNCTION__, |
524 |
"%s: avp is incorrect size. %d != 8\n", __FUNCTION__, |
| 525 |
datalen); |
525 |
datalen); |
| 526 |
wrong_length (c, "Protocol Version", 8, datalen, 1); |
526 |
wrong_length (c, "Protocol Version", 8, datalen, 1); |
|
Lines 533-539
Link Here
|
| 533 |
break; |
533 |
break; |
| 534 |
default: |
534 |
default: |
| 535 |
if (DEBUG) |
535 |
if (DEBUG) |
| 536 |
log (LOG_DEBUG, |
536 |
_log (LOG_DEBUG, |
| 537 |
"%s: protocol version not appropriate for %s. Ignoring.\n", |
537 |
"%s: protocol version not appropriate for %s. Ignoring.\n", |
| 538 |
__FUNCTION__, msgtypes[c->msgtype]); |
538 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 539 |
return 0; |
539 |
return 0; |
|
Lines 544-550
Link Here
|
| 544 |
if (debug_avp) |
544 |
if (debug_avp) |
| 545 |
{ |
545 |
{ |
| 546 |
if (DEBUG) |
546 |
if (DEBUG) |
| 547 |
log (LOG_DEBUG, |
547 |
_log (LOG_DEBUG, |
| 548 |
"%s: peer is using version %d, revision %d.\n", __FUNCTION__, |
548 |
"%s: peer is using version %d, revision %d.\n", __FUNCTION__, |
| 549 |
(ver >> 8), ver & 0xFF); |
549 |
(ver >> 8), ver & 0xFF); |
| 550 |
} |
550 |
} |
|
Lines 572-578
Link Here
|
| 572 |
break; |
572 |
break; |
| 573 |
default: |
573 |
default: |
| 574 |
if (DEBUG) |
574 |
if (DEBUG) |
| 575 |
log (LOG_DEBUG, |
575 |
_log (LOG_DEBUG, |
| 576 |
"%s: framing capabilities not appropriate for %s. Ignoring.\n", |
576 |
"%s: framing capabilities not appropriate for %s. Ignoring.\n", |
| 577 |
__FUNCTION__, msgtypes[c->msgtype]); |
577 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 578 |
return 0; |
578 |
return 0; |
|
Lines 580-586
Link Here
|
| 580 |
if (datalen != 10) |
580 |
if (datalen != 10) |
| 581 |
{ |
581 |
{ |
| 582 |
if (DEBUG) |
582 |
if (DEBUG) |
| 583 |
log (LOG_DEBUG, |
583 |
_log (LOG_DEBUG, |
| 584 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
584 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
| 585 |
datalen); |
585 |
datalen); |
| 586 |
wrong_length (c, "Framming Capabilities", 10, datalen, 0); |
586 |
wrong_length (c, "Framming Capabilities", 10, datalen, 0); |
|
Lines 591-597
Link Here
|
| 591 |
caps = ntohs (raw[4]); |
591 |
caps = ntohs (raw[4]); |
| 592 |
if (debug_avp) |
592 |
if (debug_avp) |
| 593 |
if (DEBUG) |
593 |
if (DEBUG) |
| 594 |
log (LOG_DEBUG, |
594 |
_log (LOG_DEBUG, |
| 595 |
"%s: supported peer frames:%s%s\n", __FUNCTION__, |
595 |
"%s: supported peer frames:%s%s\n", __FUNCTION__, |
| 596 |
caps & ASYNC_FRAMING ? " async" : "", |
596 |
caps & ASYNC_FRAMING ? " async" : "", |
| 597 |
caps & SYNC_FRAMING ? " sync" : ""); |
597 |
caps & SYNC_FRAMING ? " sync" : ""); |
|
Lines 618-624
Link Here
|
| 618 |
break; |
618 |
break; |
| 619 |
default: |
619 |
default: |
| 620 |
if (DEBUG) |
620 |
if (DEBUG) |
| 621 |
log (LOG_DEBUG, |
621 |
_log (LOG_DEBUG, |
| 622 |
"%s: bearer capabilities not appropriate for message %s. Ignoring.\n", |
622 |
"%s: bearer capabilities not appropriate for message %s. Ignoring.\n", |
| 623 |
__FUNCTION__, msgtypes[c->msgtype]); |
623 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 624 |
return 0; |
624 |
return 0; |
|
Lines 626-632
Link Here
|
| 626 |
if (datalen != 10) |
626 |
if (datalen != 10) |
| 627 |
{ |
627 |
{ |
| 628 |
if (DEBUG) |
628 |
if (DEBUG) |
| 629 |
log (LOG_DEBUG, |
629 |
_log (LOG_DEBUG, |
| 630 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
630 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
| 631 |
datalen); |
631 |
datalen); |
| 632 |
wrong_length (c, "Bearer Capabilities", 10, datalen, 0); |
632 |
wrong_length (c, "Bearer Capabilities", 10, datalen, 0); |
|
Lines 639-645
Link Here
|
| 639 |
{ |
639 |
{ |
| 640 |
if (DEBUG) |
640 |
if (DEBUG) |
| 641 |
{ |
641 |
{ |
| 642 |
log (LOG_DEBUG, |
642 |
_log (LOG_DEBUG, |
| 643 |
"%s: supported peer bearers:%s%s\n", |
643 |
"%s: supported peer bearers:%s%s\n", |
| 644 |
__FUNCTION__, |
644 |
__FUNCTION__, |
| 645 |
caps & ANALOG_BEARER ? " analog" : "", |
645 |
caps & ANALOG_BEARER ? " analog" : "", |
|
Lines 673-679
Link Here
|
| 673 |
break; |
673 |
break; |
| 674 |
default: |
674 |
default: |
| 675 |
if (DEBUG) |
675 |
if (DEBUG) |
| 676 |
log (LOG_DEBUG, |
676 |
_log (LOG_DEBUG, |
| 677 |
"%s: firmware revision not appropriate for message %s. Ignoring.\n", |
677 |
"%s: firmware revision not appropriate for message %s. Ignoring.\n", |
| 678 |
__FUNCTION__, msgtypes[c->msgtype]); |
678 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 679 |
return 0; |
679 |
return 0; |
|
Lines 681-687
Link Here
|
| 681 |
if (datalen != 8) |
681 |
if (datalen != 8) |
| 682 |
{ |
682 |
{ |
| 683 |
if (DEBUG) |
683 |
if (DEBUG) |
| 684 |
log (LOG_DEBUG, |
684 |
_log (LOG_DEBUG, |
| 685 |
"%s: avp is incorrect size. %d != 8\n", __FUNCTION__, |
685 |
"%s: avp is incorrect size. %d != 8\n", __FUNCTION__, |
| 686 |
datalen); |
686 |
datalen); |
| 687 |
wrong_length (c, "Firmware Revision", 8, datalen, 0); |
687 |
wrong_length (c, "Firmware Revision", 8, datalen, 0); |
|
Lines 693-699
Link Here
|
| 693 |
if (debug_avp) |
693 |
if (debug_avp) |
| 694 |
{ |
694 |
{ |
| 695 |
if (DEBUG) |
695 |
if (DEBUG) |
| 696 |
log (LOG_DEBUG, |
696 |
_log (LOG_DEBUG, |
| 697 |
"%s: peer reports firmware version %d (0x%.4x)\n", |
697 |
"%s: peer reports firmware version %d (0x%.4x)\n", |
| 698 |
__FUNCTION__, ver, ver); |
698 |
__FUNCTION__, ver, ver); |
| 699 |
} |
699 |
} |
|
Lines 720-726
Link Here
|
| 720 |
break; |
720 |
break; |
| 721 |
default: |
721 |
default: |
| 722 |
if (DEBUG) |
722 |
if (DEBUG) |
| 723 |
log (LOG_DEBUG, |
723 |
_log (LOG_DEBUG, |
| 724 |
"%s: bearer type not appropriate for message %s. Ignoring.\n", |
724 |
"%s: bearer type not appropriate for message %s. Ignoring.\n", |
| 725 |
__FUNCTION__, msgtypes[c->msgtype]); |
725 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 726 |
return 0; |
726 |
return 0; |
|
Lines 728-734
Link Here
|
| 728 |
if (datalen != 10) |
728 |
if (datalen != 10) |
| 729 |
{ |
729 |
{ |
| 730 |
if (DEBUG) |
730 |
if (DEBUG) |
| 731 |
log (LOG_DEBUG, |
731 |
_log (LOG_DEBUG, |
| 732 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
732 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
| 733 |
datalen); |
733 |
datalen); |
| 734 |
wrong_length (c, "Bearer Type", 10, datalen, 0); |
734 |
wrong_length (c, "Bearer Type", 10, datalen, 0); |
|
Lines 740-746
Link Here
|
| 740 |
if (debug_avp) |
740 |
if (debug_avp) |
| 741 |
{ |
741 |
{ |
| 742 |
if (DEBUG) |
742 |
if (DEBUG) |
| 743 |
log (LOG_DEBUG, |
743 |
_log (LOG_DEBUG, |
| 744 |
"%s: peer bears:%s\n", __FUNCTION__, |
744 |
"%s: peer bears:%s\n", __FUNCTION__, |
| 745 |
b & ANALOG_BEARER ? " analog" : "digital"); |
745 |
b & ANALOG_BEARER ? " analog" : "digital"); |
| 746 |
} |
746 |
} |
|
Lines 767-773
Link Here
|
| 767 |
break; |
767 |
break; |
| 768 |
default: |
768 |
default: |
| 769 |
if (DEBUG) |
769 |
if (DEBUG) |
| 770 |
log (LOG_DEBUG, |
770 |
_log (LOG_DEBUG, |
| 771 |
"%s: frame type not appropriate for message %s. Ignoring.\n", |
771 |
"%s: frame type not appropriate for message %s. Ignoring.\n", |
| 772 |
__FUNCTION__, msgtypes[c->msgtype]); |
772 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 773 |
return 0; |
773 |
return 0; |
|
Lines 775-781
Link Here
|
| 775 |
if (datalen != 10) |
775 |
if (datalen != 10) |
| 776 |
{ |
776 |
{ |
| 777 |
if (DEBUG) |
777 |
if (DEBUG) |
| 778 |
log (LOG_DEBUG, |
778 |
_log (LOG_DEBUG, |
| 779 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
779 |
"%s: avp is incorrect size. %d != 10\n", __FUNCTION__, |
| 780 |
datalen); |
780 |
datalen); |
| 781 |
wrong_length (c, "Frame Type", 10, datalen, 0); |
781 |
wrong_length (c, "Frame Type", 10, datalen, 0); |
|
Lines 787-793
Link Here
|
| 787 |
if (debug_avp) |
787 |
if (debug_avp) |
| 788 |
{ |
788 |
{ |
| 789 |
if (DEBUG) |
789 |
if (DEBUG) |
| 790 |
log (LOG_DEBUG, |
790 |
_log (LOG_DEBUG, |
| 791 |
"%s: peer uses:%s frames\n", __FUNCTION__, |
791 |
"%s: peer uses:%s frames\n", __FUNCTION__, |
| 792 |
b & ASYNC_FRAMING ? " async" : "sync"); |
792 |
b & ASYNC_FRAMING ? " async" : "sync"); |
| 793 |
} |
793 |
} |
|
Lines 813-819
Link Here
|
| 813 |
break; |
813 |
break; |
| 814 |
default: |
814 |
default: |
| 815 |
if (DEBUG) |
815 |
if (DEBUG) |
| 816 |
log (LOG_DEBUG, |
816 |
_log (LOG_DEBUG, |
| 817 |
"%s: hostname not appropriate for message %s. Ignoring.\n", |
817 |
"%s: hostname not appropriate for message %s. Ignoring.\n", |
| 818 |
__FUNCTION__, msgtypes[c->msgtype]); |
818 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 819 |
return 0; |
819 |
return 0; |
|
Lines 821-827
Link Here
|
| 821 |
if (datalen < 6) |
821 |
if (datalen < 6) |
| 822 |
{ |
822 |
{ |
| 823 |
if (DEBUG) |
823 |
if (DEBUG) |
| 824 |
log (LOG_DEBUG, |
824 |
_log (LOG_DEBUG, |
| 825 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
825 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
| 826 |
datalen); |
826 |
datalen); |
| 827 |
wrong_length (c, "Hostname", 6, datalen, 1); |
827 |
wrong_length (c, "Hostname", 6, datalen, 1); |
|
Lines 833-839
Link Here
|
| 833 |
if (size > MAXSTRLEN - 1) |
833 |
if (size > MAXSTRLEN - 1) |
| 834 |
{ |
834 |
{ |
| 835 |
if (DEBUG) |
835 |
if (DEBUG) |
| 836 |
log (LOG_DEBUG, "%s: truncating reported hostname (size is %d)\n", |
836 |
_log (LOG_DEBUG, "%s: truncating reported hostname (size is %d)\n", |
| 837 |
__FUNCTION__, size); |
837 |
__FUNCTION__, size); |
| 838 |
size = MAXSTRLEN - 1; |
838 |
size = MAXSTRLEN - 1; |
| 839 |
} |
839 |
} |
|
Lines 841-847
Link Here
|
| 841 |
if (debug_avp) |
841 |
if (debug_avp) |
| 842 |
{ |
842 |
{ |
| 843 |
if (DEBUG) |
843 |
if (DEBUG) |
| 844 |
log (LOG_DEBUG, |
844 |
_log (LOG_DEBUG, |
| 845 |
"%s: peer reports hostname '%s'\n", __FUNCTION__, |
845 |
"%s: peer reports hostname '%s'\n", __FUNCTION__, |
| 846 |
t->hostname); |
846 |
t->hostname); |
| 847 |
} |
847 |
} |
|
Lines 866-872
Link Here
|
| 866 |
break; |
866 |
break; |
| 867 |
default: |
867 |
default: |
| 868 |
if (DEBUG) |
868 |
if (DEBUG) |
| 869 |
log (LOG_DEBUG, |
869 |
_log (LOG_DEBUG, |
| 870 |
"%s: dialing number not appropriate for message %s. Ignoring.\n", |
870 |
"%s: dialing number not appropriate for message %s. Ignoring.\n", |
| 871 |
__FUNCTION__, msgtypes[c->msgtype]); |
871 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 872 |
return 0; |
872 |
return 0; |
|
Lines 874-880
Link Here
|
| 874 |
if (datalen < 6) |
874 |
if (datalen < 6) |
| 875 |
{ |
875 |
{ |
| 876 |
if (DEBUG) |
876 |
if (DEBUG) |
| 877 |
log (LOG_DEBUG, |
877 |
_log (LOG_DEBUG, |
| 878 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
878 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
| 879 |
datalen); |
879 |
datalen); |
| 880 |
wrong_length (c, "Dialing Number", 6, datalen, 1); |
880 |
wrong_length (c, "Dialing Number", 6, datalen, 1); |
|
Lines 886-892
Link Here
|
| 886 |
if (size > MAXSTRLEN - 1) |
886 |
if (size > MAXSTRLEN - 1) |
| 887 |
{ |
887 |
{ |
| 888 |
if (DEBUG) |
888 |
if (DEBUG) |
| 889 |
log (LOG_DEBUG, |
889 |
_log (LOG_DEBUG, |
| 890 |
"%s: truncating reported dialing number (size is %d)\n", |
890 |
"%s: truncating reported dialing number (size is %d)\n", |
| 891 |
__FUNCTION__, size); |
891 |
__FUNCTION__, size); |
| 892 |
size = MAXSTRLEN - 1; |
892 |
size = MAXSTRLEN - 1; |
|
Lines 895-901
Link Here
|
| 895 |
if (debug_avp) |
895 |
if (debug_avp) |
| 896 |
{ |
896 |
{ |
| 897 |
if (DEBUG) |
897 |
if (DEBUG) |
| 898 |
log (LOG_DEBUG, |
898 |
_log (LOG_DEBUG, |
| 899 |
"%s: peer reports dialing number '%s'\n", __FUNCTION__, |
899 |
"%s: peer reports dialing number '%s'\n", __FUNCTION__, |
| 900 |
t->call_head->dialing); |
900 |
t->call_head->dialing); |
| 901 |
} |
901 |
} |
|
Lines 921-927
Link Here
|
| 921 |
break; |
921 |
break; |
| 922 |
default: |
922 |
default: |
| 923 |
if (DEBUG) |
923 |
if (DEBUG) |
| 924 |
log (LOG_DEBUG, |
924 |
_log (LOG_DEBUG, |
| 925 |
"%s: dialed number not appropriate for message %s. Ignoring.\n", |
925 |
"%s: dialed number not appropriate for message %s. Ignoring.\n", |
| 926 |
__FUNCTION__, msgtypes[c->msgtype]); |
926 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 927 |
return 0; |
927 |
return 0; |
|
Lines 929-935
Link Here
|
| 929 |
if (datalen < 6) |
929 |
if (datalen < 6) |
| 930 |
{ |
930 |
{ |
| 931 |
if (DEBUG) |
931 |
if (DEBUG) |
| 932 |
log (LOG_DEBUG, |
932 |
_log (LOG_DEBUG, |
| 933 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
933 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
| 934 |
datalen); |
934 |
datalen); |
| 935 |
wrong_length (c, "Dialed Number", 6, datalen, 1); |
935 |
wrong_length (c, "Dialed Number", 6, datalen, 1); |
|
Lines 941-947
Link Here
|
| 941 |
if (size > MAXSTRLEN - 1) |
941 |
if (size > MAXSTRLEN - 1) |
| 942 |
{ |
942 |
{ |
| 943 |
if (DEBUG) |
943 |
if (DEBUG) |
| 944 |
log (LOG_DEBUG, |
944 |
_log (LOG_DEBUG, |
| 945 |
"%s: truncating reported dialed number (size is %d)\n", |
945 |
"%s: truncating reported dialed number (size is %d)\n", |
| 946 |
__FUNCTION__, size); |
946 |
__FUNCTION__, size); |
| 947 |
size = MAXSTRLEN - 1; |
947 |
size = MAXSTRLEN - 1; |
|
Lines 950-956
Link Here
|
| 950 |
if (debug_avp) |
950 |
if (debug_avp) |
| 951 |
{ |
951 |
{ |
| 952 |
if (DEBUG) |
952 |
if (DEBUG) |
| 953 |
log (LOG_DEBUG, |
953 |
_log (LOG_DEBUG, |
| 954 |
"%s: peer reports dialed number '%s'\n", __FUNCTION__, |
954 |
"%s: peer reports dialed number '%s'\n", __FUNCTION__, |
| 955 |
t->call_head->dialed); |
955 |
t->call_head->dialed); |
| 956 |
} |
956 |
} |
|
Lines 976-982
Link Here
|
| 976 |
break; |
976 |
break; |
| 977 |
default: |
977 |
default: |
| 978 |
if (DEBUG) |
978 |
if (DEBUG) |
| 979 |
log (LOG_DEBUG, |
979 |
_log (LOG_DEBUG, |
| 980 |
"%s: sub_address not appropriate for message %s. Ignoring.\n", |
980 |
"%s: sub_address not appropriate for message %s. Ignoring.\n", |
| 981 |
__FUNCTION__, msgtypes[c->msgtype]); |
981 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 982 |
return 0; |
982 |
return 0; |
|
Lines 984-990
Link Here
|
| 984 |
if (datalen < 6) |
984 |
if (datalen < 6) |
| 985 |
{ |
985 |
{ |
| 986 |
if (DEBUG) |
986 |
if (DEBUG) |
| 987 |
log (LOG_DEBUG, |
987 |
_log (LOG_DEBUG, |
| 988 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
988 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
| 989 |
datalen); |
989 |
datalen); |
| 990 |
wrong_length (c, "Sub-address", 6, datalen, 1); |
990 |
wrong_length (c, "Sub-address", 6, datalen, 1); |
|
Lines 996-1002
Link Here
|
| 996 |
if (size > MAXSTRLEN - 1) |
996 |
if (size > MAXSTRLEN - 1) |
| 997 |
{ |
997 |
{ |
| 998 |
if (DEBUG) |
998 |
if (DEBUG) |
| 999 |
log (LOG_DEBUG, |
999 |
_log (LOG_DEBUG, |
| 1000 |
"%s: truncating reported sub address (size is %d)\n", |
1000 |
"%s: truncating reported sub address (size is %d)\n", |
| 1001 |
__FUNCTION__, size); |
1001 |
__FUNCTION__, size); |
| 1002 |
size = MAXSTRLEN - 1; |
1002 |
size = MAXSTRLEN - 1; |
|
Lines 1005-1011
Link Here
|
| 1005 |
if (debug_avp) |
1005 |
if (debug_avp) |
| 1006 |
{ |
1006 |
{ |
| 1007 |
if (DEBUG) |
1007 |
if (DEBUG) |
| 1008 |
log (LOG_DEBUG, |
1008 |
_log (LOG_DEBUG, |
| 1009 |
"%s: peer reports subaddress '%s'\n", __FUNCTION__, |
1009 |
"%s: peer reports subaddress '%s'\n", __FUNCTION__, |
| 1010 |
t->call_head->subaddy); |
1010 |
t->call_head->subaddy); |
| 1011 |
} |
1011 |
} |
|
Lines 1030-1036
Link Here
|
| 1030 |
break; |
1030 |
break; |
| 1031 |
default: |
1031 |
default: |
| 1032 |
if (DEBUG) |
1032 |
if (DEBUG) |
| 1033 |
log (LOG_DEBUG, |
1033 |
_log (LOG_DEBUG, |
| 1034 |
"%s: vendor not appropriate for message %s. Ignoring.\n", |
1034 |
"%s: vendor not appropriate for message %s. Ignoring.\n", |
| 1035 |
__FUNCTION__, msgtypes[c->msgtype]); |
1035 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1036 |
return 0; |
1036 |
return 0; |
|
Lines 1038-1044
Link Here
|
| 1038 |
if (datalen < 6) |
1038 |
if (datalen < 6) |
| 1039 |
{ |
1039 |
{ |
| 1040 |
if (DEBUG) |
1040 |
if (DEBUG) |
| 1041 |
log (LOG_DEBUG, |
1041 |
_log (LOG_DEBUG, |
| 1042 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
1042 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
| 1043 |
datalen); |
1043 |
datalen); |
| 1044 |
wrong_length (c, "Vendor", 6, datalen, 1); |
1044 |
wrong_length (c, "Vendor", 6, datalen, 1); |
|
Lines 1050-1056
Link Here
|
| 1050 |
if (size > MAXSTRLEN - 1) |
1050 |
if (size > MAXSTRLEN - 1) |
| 1051 |
{ |
1051 |
{ |
| 1052 |
if (DEBUG) |
1052 |
if (DEBUG) |
| 1053 |
log (LOG_DEBUG, "%s: truncating reported vendor (size is %d)\n", |
1053 |
_log (LOG_DEBUG, "%s: truncating reported vendor (size is %d)\n", |
| 1054 |
__FUNCTION__, size); |
1054 |
__FUNCTION__, size); |
| 1055 |
size = MAXSTRLEN - 1; |
1055 |
size = MAXSTRLEN - 1; |
| 1056 |
} |
1056 |
} |
|
Lines 1058-1064
Link Here
|
| 1058 |
if (debug_avp) |
1058 |
if (debug_avp) |
| 1059 |
{ |
1059 |
{ |
| 1060 |
if (DEBUG) |
1060 |
if (DEBUG) |
| 1061 |
log (LOG_DEBUG, |
1061 |
_log (LOG_DEBUG, |
| 1062 |
"%s: peer reports vendor '%s'\n", __FUNCTION__, t->vendor); |
1062 |
"%s: peer reports vendor '%s'\n", __FUNCTION__, t->vendor); |
| 1063 |
} |
1063 |
} |
| 1064 |
return 0; |
1064 |
return 0; |
|
Lines 1081-1087
Link Here
|
| 1081 |
break; |
1081 |
break; |
| 1082 |
default: |
1082 |
default: |
| 1083 |
if (DEBUG) |
1083 |
if (DEBUG) |
| 1084 |
log (LOG_DEBUG, |
1084 |
_log (LOG_DEBUG, |
| 1085 |
"%s: challenge not appropriate for message %s. Ignoring.\n", |
1085 |
"%s: challenge not appropriate for message %s. Ignoring.\n", |
| 1086 |
__FUNCTION__, msgtypes[c->msgtype]); |
1086 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1087 |
return 0; |
1087 |
return 0; |
|
Lines 1089-1095
Link Here
|
| 1089 |
if (datalen < 6) |
1089 |
if (datalen < 6) |
| 1090 |
{ |
1090 |
{ |
| 1091 |
if (DEBUG) |
1091 |
if (DEBUG) |
| 1092 |
log (LOG_DEBUG, |
1092 |
_log (LOG_DEBUG, |
| 1093 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
1093 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
| 1094 |
datalen); |
1094 |
datalen); |
| 1095 |
wrong_length (c, "challenge", 6, datalen, 1); |
1095 |
wrong_length (c, "challenge", 6, datalen, 1); |
|
Lines 1103-1109
Link Here
|
| 1103 |
size -= sizeof (struct avp_hdr); |
1103 |
size -= sizeof (struct avp_hdr); |
| 1104 |
/* if (size != MD_SIG_SIZE) |
1104 |
/* if (size != MD_SIG_SIZE) |
| 1105 |
{ |
1105 |
{ |
| 1106 |
log (LOG_DEBUG, "%s: Challenge is not the right length (%d != %d)\n", |
1106 |
_log (LOG_DEBUG, "%s: Challenge is not the right length (%d != %d)\n", |
| 1107 |
__FUNCTION__, size, MD_SIG_SIZE); |
1107 |
__FUNCTION__, size, MD_SIG_SIZE); |
| 1108 |
return -EINVAL; |
1108 |
return -EINVAL; |
| 1109 |
} */ |
1109 |
} */ |
|
Lines 1117-1123
Link Here
|
| 1117 |
t->chal_us.state = STATE_CHALLENGED; |
1117 |
t->chal_us.state = STATE_CHALLENGED; |
| 1118 |
if (debug_avp) |
1118 |
if (debug_avp) |
| 1119 |
{ |
1119 |
{ |
| 1120 |
log (LOG_DEBUG, "%s: challenge avp found\n", __FUNCTION__); |
1120 |
_log (LOG_DEBUG, "%s: challenge avp found\n", __FUNCTION__); |
| 1121 |
} |
1121 |
} |
| 1122 |
return 0; |
1122 |
return 0; |
| 1123 |
} |
1123 |
} |
|
Lines 1139-1145
Link Here
|
| 1139 |
break; |
1139 |
break; |
| 1140 |
default: |
1140 |
default: |
| 1141 |
if (DEBUG) |
1141 |
if (DEBUG) |
| 1142 |
log (LOG_DEBUG, |
1142 |
_log (LOG_DEBUG, |
| 1143 |
"%s: challenge response not appropriate for message %s. Ignoring.\n", |
1143 |
"%s: challenge response not appropriate for message %s. Ignoring.\n", |
| 1144 |
__FUNCTION__, msgtypes[c->msgtype]); |
1144 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1145 |
return 0; |
1145 |
return 0; |
|
Lines 1147-1153
Link Here
|
| 1147 |
if (datalen < 6) |
1147 |
if (datalen < 6) |
| 1148 |
{ |
1148 |
{ |
| 1149 |
if (DEBUG) |
1149 |
if (DEBUG) |
| 1150 |
log (LOG_DEBUG, |
1150 |
_log (LOG_DEBUG, |
| 1151 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
1151 |
"%s: avp is too small. %d < 6\n", __FUNCTION__, |
| 1152 |
datalen); |
1152 |
datalen); |
| 1153 |
wrong_length (c, "challenge", 6, datalen, 1); |
1153 |
wrong_length (c, "challenge", 6, datalen, 1); |
|
Lines 1159-1165
Link Here
|
| 1159 |
size -= sizeof (struct avp_hdr); |
1159 |
size -= sizeof (struct avp_hdr); |
| 1160 |
if (size != MD_SIG_SIZE) |
1160 |
if (size != MD_SIG_SIZE) |
| 1161 |
{ |
1161 |
{ |
| 1162 |
log (LOG_DEBUG, "%s: Challenge is not the right length (%d != %d)\n", |
1162 |
_log (LOG_DEBUG, "%s: Challenge is not the right length (%d != %d)\n", |
| 1163 |
__FUNCTION__, size, MD_SIG_SIZE); |
1163 |
__FUNCTION__, size, MD_SIG_SIZE); |
| 1164 |
return -EINVAL; |
1164 |
return -EINVAL; |
| 1165 |
} |
1165 |
} |
|
Lines 1167-1173
Link Here
|
| 1167 |
bcopy (&raw[3], t->chal_them.reply, MD_SIG_SIZE); |
1167 |
bcopy (&raw[3], t->chal_them.reply, MD_SIG_SIZE); |
| 1168 |
if (debug_avp) |
1168 |
if (debug_avp) |
| 1169 |
{ |
1169 |
{ |
| 1170 |
log (LOG_DEBUG, "%s: Challenge reply found\n", __FUNCTION__); |
1170 |
_log (LOG_DEBUG, "%s: Challenge reply found\n", __FUNCTION__); |
| 1171 |
} |
1171 |
} |
| 1172 |
return 0; |
1172 |
return 0; |
| 1173 |
} |
1173 |
} |
|
Lines 1191-1197
Link Here
|
| 1191 |
break; |
1191 |
break; |
| 1192 |
default: |
1192 |
default: |
| 1193 |
if (DEBUG) |
1193 |
if (DEBUG) |
| 1194 |
log (LOG_DEBUG, |
1194 |
_log (LOG_DEBUG, |
| 1195 |
"%s: tunnel ID not appropriate for message %s. Ignoring.\n", |
1195 |
"%s: tunnel ID not appropriate for message %s. Ignoring.\n", |
| 1196 |
__FUNCTION__, msgtypes[c->msgtype]); |
1196 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1197 |
return 0; |
1197 |
return 0; |
|
Lines 1199-1205
Link Here
|
| 1199 |
if (datalen != 8) |
1199 |
if (datalen != 8) |
| 1200 |
{ |
1200 |
{ |
| 1201 |
if (DEBUG) |
1201 |
if (DEBUG) |
| 1202 |
log (LOG_DEBUG, |
1202 |
_log (LOG_DEBUG, |
| 1203 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
1203 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
| 1204 |
datalen); |
1204 |
datalen); |
| 1205 |
wrong_length (c, "Assigned Tunnel ID", 8, datalen, 0); |
1205 |
wrong_length (c, "Assigned Tunnel ID", 8, datalen, 0); |
|
Lines 1218-1224
Link Here
|
| 1218 |
if (debug_avp) |
1218 |
if (debug_avp) |
| 1219 |
{ |
1219 |
{ |
| 1220 |
if (DEBUG) |
1220 |
if (DEBUG) |
| 1221 |
log (LOG_DEBUG, |
1221 |
_log (LOG_DEBUG, |
| 1222 |
"%s: using peer's tunnel %d\n", __FUNCTION__, |
1222 |
"%s: using peer's tunnel %d\n", __FUNCTION__, |
| 1223 |
ntohs (raw[3])); |
1223 |
ntohs (raw[3])); |
| 1224 |
} |
1224 |
} |
|
Lines 1246-1252
Link Here
|
| 1246 |
case OCRQ: |
1246 |
case OCRQ: |
| 1247 |
default: |
1247 |
default: |
| 1248 |
if (DEBUG) |
1248 |
if (DEBUG) |
| 1249 |
log (LOG_DEBUG, |
1249 |
_log (LOG_DEBUG, |
| 1250 |
"%s: call ID not appropriate for message %s. Ignoring.\n", |
1250 |
"%s: call ID not appropriate for message %s. Ignoring.\n", |
| 1251 |
__FUNCTION__, msgtypes[c->msgtype]); |
1251 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1252 |
return 0; |
1252 |
return 0; |
|
Lines 1254-1260
Link Here
|
| 1254 |
if (datalen != 8) |
1254 |
if (datalen != 8) |
| 1255 |
{ |
1255 |
{ |
| 1256 |
if (DEBUG) |
1256 |
if (DEBUG) |
| 1257 |
log (LOG_DEBUG, |
1257 |
_log (LOG_DEBUG, |
| 1258 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
1258 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
| 1259 |
datalen); |
1259 |
datalen); |
| 1260 |
wrong_length (c, "Assigned Call ID", 8, datalen, 0); |
1260 |
wrong_length (c, "Assigned Call ID", 8, datalen, 0); |
|
Lines 1280-1292
Link Here
|
| 1280 |
} |
1280 |
} |
| 1281 |
else |
1281 |
else |
| 1282 |
{ |
1282 |
{ |
| 1283 |
log (LOG_DEBUG, "%s: Dunno what to do when it's state %s!\n", |
1283 |
_log (LOG_DEBUG, "%s: Dunno what to do when it's state %s!\n", |
| 1284 |
__FUNCTION__, msgtypes[c->msgtype]); |
1284 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1285 |
} |
1285 |
} |
| 1286 |
if (debug_avp) |
1286 |
if (debug_avp) |
| 1287 |
{ |
1287 |
{ |
| 1288 |
if (DEBUG) |
1288 |
if (DEBUG) |
| 1289 |
log (LOG_DEBUG, |
1289 |
_log (LOG_DEBUG, |
| 1290 |
"%s: using peer's call %d\n", __FUNCTION__, ntohs (raw[3])); |
1290 |
"%s: using peer's call %d\n", __FUNCTION__, ntohs (raw[3])); |
| 1291 |
} |
1291 |
} |
| 1292 |
return 0; |
1292 |
return 0; |
|
Lines 1313-1319
Link Here
|
| 1313 |
break; |
1313 |
break; |
| 1314 |
default: |
1314 |
default: |
| 1315 |
if (DEBUG) |
1315 |
if (DEBUG) |
| 1316 |
log (LOG_DEBUG, |
1316 |
_log (LOG_DEBUG, |
| 1317 |
"%s: packet delay not appropriate for message %s. Ignoring.\n", |
1317 |
"%s: packet delay not appropriate for message %s. Ignoring.\n", |
| 1318 |
__FUNCTION__, msgtypes[c->msgtype]); |
1318 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1319 |
return 0; |
1319 |
return 0; |
|
Lines 1321-1327
Link Here
|
| 1321 |
if (datalen != 8) |
1321 |
if (datalen != 8) |
| 1322 |
{ |
1322 |
{ |
| 1323 |
if (DEBUG) |
1323 |
if (DEBUG) |
| 1324 |
log (LOG_DEBUG, |
1324 |
_log (LOG_DEBUG, |
| 1325 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
1325 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
| 1326 |
datalen); |
1326 |
datalen); |
| 1327 |
wrong_length (c, "Assigned Call ID", 8, datalen, 0); |
1327 |
wrong_length (c, "Assigned Call ID", 8, datalen, 0); |
|
Lines 1333-1339
Link Here
|
| 1333 |
if (debug_avp) |
1333 |
if (debug_avp) |
| 1334 |
{ |
1334 |
{ |
| 1335 |
if (DEBUG) |
1335 |
if (DEBUG) |
| 1336 |
log (LOG_DEBUG, |
1336 |
_log (LOG_DEBUG, |
| 1337 |
"%s: peer's delay is %d 1/10's of a second\n", __FUNCTION__, |
1337 |
"%s: peer's delay is %d 1/10's of a second\n", __FUNCTION__, |
| 1338 |
ntohs (raw[3])); |
1338 |
ntohs (raw[3])); |
| 1339 |
} |
1339 |
} |
|
Lines 1357-1363
Link Here
|
| 1357 |
break; |
1357 |
break; |
| 1358 |
default: |
1358 |
default: |
| 1359 |
if (DEBUG) |
1359 |
if (DEBUG) |
| 1360 |
log (LOG_DEBUG, |
1360 |
_log (LOG_DEBUG, |
| 1361 |
"%s: call ID not appropriate for message %s. Ignoring.\n", |
1361 |
"%s: call ID not appropriate for message %s. Ignoring.\n", |
| 1362 |
__FUNCTION__, msgtypes[c->msgtype]); |
1362 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1363 |
return 0; |
1363 |
return 0; |
|
Lines 1366-1378
Link Here
|
| 1366 |
{ |
1366 |
{ |
| 1367 |
#ifdef STRICT |
1367 |
#ifdef STRICT |
| 1368 |
if (DEBUG) |
1368 |
if (DEBUG) |
| 1369 |
log (LOG_DEBUG, |
1369 |
_log (LOG_DEBUG, |
| 1370 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
1370 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
| 1371 |
datalen); |
1371 |
datalen); |
| 1372 |
wrong_length (c, "Serial Number", 10, datalen, 0); |
1372 |
wrong_length (c, "Serial Number", 10, datalen, 0); |
| 1373 |
return -EINVAL; |
1373 |
return -EINVAL; |
| 1374 |
#else |
1374 |
#else |
| 1375 |
log (LOG_DEBUG, |
1375 |
_log (LOG_DEBUG, |
| 1376 |
"%s: peer is using old style serial number. Will be invalid.\n", |
1376 |
"%s: peer is using old style serial number. Will be invalid.\n", |
| 1377 |
__FUNCTION__); |
1377 |
__FUNCTION__); |
| 1378 |
#endif |
1378 |
#endif |
|
Lines 1385-1391
Link Here
|
| 1385 |
if (debug_avp) |
1385 |
if (debug_avp) |
| 1386 |
{ |
1386 |
{ |
| 1387 |
if (DEBUG) |
1387 |
if (DEBUG) |
| 1388 |
log (LOG_DEBUG, |
1388 |
_log (LOG_DEBUG, |
| 1389 |
"%s: serial number is %d\n", __FUNCTION__, |
1389 |
"%s: serial number is %d\n", __FUNCTION__, |
| 1390 |
t->call_head->serno); |
1390 |
t->call_head->serno); |
| 1391 |
} |
1391 |
} |
|
Lines 1410-1416
Link Here
|
| 1410 |
break; |
1410 |
break; |
| 1411 |
default: |
1411 |
default: |
| 1412 |
if (DEBUG) |
1412 |
if (DEBUG) |
| 1413 |
log (LOG_DEBUG, |
1413 |
_log (LOG_DEBUG, |
| 1414 |
"%s: rx connect speed not appropriate for message %s. Ignoring.\n", |
1414 |
"%s: rx connect speed not appropriate for message %s. Ignoring.\n", |
| 1415 |
__FUNCTION__, msgtypes[c->msgtype]); |
1415 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1416 |
return 0; |
1416 |
return 0; |
|
Lines 1418-1424
Link Here
|
| 1418 |
if (datalen != 10) |
1418 |
if (datalen != 10) |
| 1419 |
{ |
1419 |
{ |
| 1420 |
if (DEBUG) |
1420 |
if (DEBUG) |
| 1421 |
log (LOG_DEBUG, |
1421 |
_log (LOG_DEBUG, |
| 1422 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
1422 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
| 1423 |
datalen); |
1423 |
datalen); |
| 1424 |
wrong_length (c, "Connect Speed (RX)", 10, datalen, 0); |
1424 |
wrong_length (c, "Connect Speed (RX)", 10, datalen, 0); |
|
Lines 1431-1437
Link Here
|
| 1431 |
if (debug_avp) |
1431 |
if (debug_avp) |
| 1432 |
{ |
1432 |
{ |
| 1433 |
if (DEBUG) |
1433 |
if (DEBUG) |
| 1434 |
log (LOG_DEBUG, |
1434 |
_log (LOG_DEBUG, |
| 1435 |
"%s: receive baud rate is %d\n", __FUNCTION__, c->rxspeed); |
1435 |
"%s: receive baud rate is %d\n", __FUNCTION__, c->rxspeed); |
| 1436 |
} |
1436 |
} |
| 1437 |
return 0; |
1437 |
return 0; |
|
Lines 1455-1461
Link Here
|
| 1455 |
break; |
1455 |
break; |
| 1456 |
default: |
1456 |
default: |
| 1457 |
if (DEBUG) |
1457 |
if (DEBUG) |
| 1458 |
log (LOG_DEBUG, |
1458 |
_log (LOG_DEBUG, |
| 1459 |
"%s: tx connect speed not appropriate for message %s. Ignoring.\n", |
1459 |
"%s: tx connect speed not appropriate for message %s. Ignoring.\n", |
| 1460 |
__FUNCTION__, msgtypes[c->msgtype]); |
1460 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1461 |
return 0; |
1461 |
return 0; |
|
Lines 1463-1469
Link Here
|
| 1463 |
if (datalen != 10) |
1463 |
if (datalen != 10) |
| 1464 |
{ |
1464 |
{ |
| 1465 |
if (DEBUG) |
1465 |
if (DEBUG) |
| 1466 |
log (LOG_DEBUG, |
1466 |
_log (LOG_DEBUG, |
| 1467 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
1467 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
| 1468 |
datalen); |
1468 |
datalen); |
| 1469 |
wrong_length (c, "Connect Speed (tx)", 10, datalen, 0); |
1469 |
wrong_length (c, "Connect Speed (tx)", 10, datalen, 0); |
|
Lines 1476-1482
Link Here
|
| 1476 |
if (debug_avp) |
1476 |
if (debug_avp) |
| 1477 |
{ |
1477 |
{ |
| 1478 |
if (DEBUG) |
1478 |
if (DEBUG) |
| 1479 |
log (LOG_DEBUG, |
1479 |
_log (LOG_DEBUG, |
| 1480 |
"%s: transmit baud rate is %d\n", __FUNCTION__, c->txspeed); |
1480 |
"%s: transmit baud rate is %d\n", __FUNCTION__, c->txspeed); |
| 1481 |
} |
1481 |
} |
| 1482 |
return 0; |
1482 |
return 0; |
|
Lines 1501-1507
Link Here
|
| 1501 |
break; |
1501 |
break; |
| 1502 |
default: |
1502 |
default: |
| 1503 |
if (DEBUG) |
1503 |
if (DEBUG) |
| 1504 |
log (LOG_DEBUG, |
1504 |
_log (LOG_DEBUG, |
| 1505 |
"%s: physical channel not appropriate for message %s. Ignoring.\n", |
1505 |
"%s: physical channel not appropriate for message %s. Ignoring.\n", |
| 1506 |
__FUNCTION__, msgtypes[c->msgtype]); |
1506 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1507 |
return 0; |
1507 |
return 0; |
|
Lines 1509-1515
Link Here
|
| 1509 |
if (datalen != 10) |
1509 |
if (datalen != 10) |
| 1510 |
{ |
1510 |
{ |
| 1511 |
if (DEBUG) |
1511 |
if (DEBUG) |
| 1512 |
log (LOG_DEBUG, |
1512 |
_log (LOG_DEBUG, |
| 1513 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
1513 |
"%s: avp is wrong size. %d != 10\n", __FUNCTION__, |
| 1514 |
datalen); |
1514 |
datalen); |
| 1515 |
wrong_length (c, "Physical Channel", 10, datalen, 0); |
1515 |
wrong_length (c, "Physical Channel", 10, datalen, 0); |
|
Lines 1522-1528
Link Here
|
| 1522 |
if (debug_avp) |
1522 |
if (debug_avp) |
| 1523 |
{ |
1523 |
{ |
| 1524 |
if (DEBUG) |
1524 |
if (DEBUG) |
| 1525 |
log (LOG_DEBUG, |
1525 |
_log (LOG_DEBUG, |
| 1526 |
"%s: physical channel is %d\n", __FUNCTION__, |
1526 |
"%s: physical channel is %d\n", __FUNCTION__, |
| 1527 |
t->call_head->physchan); |
1527 |
t->call_head->physchan); |
| 1528 |
} |
1528 |
} |
|
Lines 1552-1558
Link Here
|
| 1552 |
break; |
1552 |
break; |
| 1553 |
default: |
1553 |
default: |
| 1554 |
if (DEBUG) |
1554 |
if (DEBUG) |
| 1555 |
log (LOG_DEBUG, |
1555 |
_log (LOG_DEBUG, |
| 1556 |
"%s: RWS not appropriate for message %s. Ignoring.\n", |
1556 |
"%s: RWS not appropriate for message %s. Ignoring.\n", |
| 1557 |
__FUNCTION__, msgtypes[c->msgtype]); |
1557 |
__FUNCTION__, msgtypes[c->msgtype]); |
| 1558 |
return 0; |
1558 |
return 0; |
|
Lines 1560-1566
Link Here
|
| 1560 |
if (datalen != 8) |
1560 |
if (datalen != 8) |
| 1561 |
{ |
1561 |
{ |
| 1562 |
if (DEBUG) |
1562 |
if (DEBUG) |
| 1563 |
log (LOG_DEBUG, |
1563 |
_log (LOG_DEBUG, |
| 1564 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
1564 |
"%s: avp is wrong size. %d != 8\n", __FUNCTION__, |
| 1565 |
datalen); |
1565 |
datalen); |
| 1566 |
wrong_length (c, "Receive Window Size", 8, datalen, 0); |
1566 |
wrong_length (c, "Receive Window Size", 8, datalen, 0); |
|
Lines 1574-1580
Link Here
|
| 1574 |
if (debug_avp) |
1574 |
if (debug_avp) |
| 1575 |
{ |
1575 |
{ |
| 1576 |
if (DEBUG) |
1576 |
if (DEBUG) |
| 1577 |
log (LOG_DEBUG, |
1577 |
_log (LOG_DEBUG, |
| 1578 |
"%s: peer wants RWS of %d. Will use flow control.\n", |
1578 |
"%s: peer wants RWS of %d. Will use flow control.\n", |
| 1579 |
__FUNCTION__, t->rws); |
1579 |
__FUNCTION__, t->rws); |
| 1580 |
} |
1580 |
} |
|
Lines 1597-1603
Link Here
|
| 1597 |
char *data = buf->start + sizeof (struct control_hdr); |
1597 |
char *data = buf->start + sizeof (struct control_hdr); |
| 1598 |
avp = (struct avp_hdr *) data; |
1598 |
avp = (struct avp_hdr *) data; |
| 1599 |
if (debug_avp) |
1599 |
if (debug_avp) |
| 1600 |
log (LOG_DEBUG, "%s: handling avp's for tunnel %d, call %d\n", |
1600 |
_log (LOG_DEBUG, "%s: handling avp's for tunnel %d, call %d\n", |
| 1601 |
__FUNCTION__, t->ourtid, c->ourcid); |
1601 |
__FUNCTION__, t->ourtid, c->ourcid); |
| 1602 |
while (len > 0) |
1602 |
while (len > 0) |
| 1603 |
{ |
1603 |
{ |
|
Lines 1607-1613
Link Here
|
| 1607 |
{ |
1607 |
{ |
| 1608 |
if (AMBIT (avp->length)) |
1608 |
if (AMBIT (avp->length)) |
| 1609 |
{ |
1609 |
{ |
| 1610 |
log (LOG_WARN, |
1610 |
_log (LOG_WARN, |
| 1611 |
"%s: dont know how to handle mandatory attribute %d. Closing %s.\n" |
1611 |
"%s: dont know how to handle mandatory attribute %d. Closing %s.\n" |
| 1612 |
__FUNCTION__, avp->attr, |
1612 |
__FUNCTION__, avp->attr, |
| 1613 |
(c != t->self) ? "call" : "tunnel"); |
1613 |
(c != t->self) ? "call" : "tunnel"); |
|
Lines 1620-1626
Link Here
|
| 1620 |
else |
1620 |
else |
| 1621 |
{ |
1621 |
{ |
| 1622 |
if (DEBUG) |
1622 |
if (DEBUG) |
| 1623 |
log (LOG_WARN, |
1623 |
_log (LOG_WARN, |
| 1624 |
"%s: dont know how to handle atribute %d.\n", |
1624 |
"%s: dont know how to handle atribute %d.\n", |
| 1625 |
__FUNCTION__, avp->attr); |
1625 |
__FUNCTION__, avp->attr); |
| 1626 |
goto next; |
1626 |
goto next; |
|
Lines 1628-1634
Link Here
|
| 1628 |
} |
1628 |
} |
| 1629 |
if (ALENGTH (avp->length) > len) |
1629 |
if (ALENGTH (avp->length) > len) |
| 1630 |
{ |
1630 |
{ |
| 1631 |
log (LOG_WARN, |
1631 |
_log (LOG_WARN, |
| 1632 |
"%s: AVP received with length > remaining packet length!\n", |
1632 |
"%s: AVP received with length > remaining packet length!\n", |
| 1633 |
__FUNCTION__); |
1633 |
__FUNCTION__); |
| 1634 |
set_error (c, ERROR_LENGTH, "Invalid AVP length"); |
1634 |
set_error (c, ERROR_LENGTH, "Invalid AVP length"); |
|
Lines 1637-1643
Link Here
|
| 1637 |
} |
1637 |
} |
| 1638 |
if (avp->attr && firstavp) |
1638 |
if (avp->attr && firstavp) |
| 1639 |
{ |
1639 |
{ |
| 1640 |
log (LOG_WARN, "%s: First AVP was not message type.\n", |
1640 |
_log (LOG_WARN, "%s: First AVP was not message type.\n", |
| 1641 |
__FUNCTION__); |
1641 |
__FUNCTION__); |
| 1642 |
set_error (c, VENDOR_ERROR, "First AVP must be message type"); |
1642 |
set_error (c, VENDOR_ERROR, "First AVP must be message type"); |
| 1643 |
c->needclose = -1; |
1643 |
c->needclose = -1; |
|
Lines 1645-1651
Link Here
|
| 1645 |
} |
1645 |
} |
| 1646 |
if (ALENGTH (avp->length) < sizeof (struct avp_hdr)) |
1646 |
if (ALENGTH (avp->length) < sizeof (struct avp_hdr)) |
| 1647 |
{ |
1647 |
{ |
| 1648 |
log (LOG_WARN, "%s: AVP with too small of size (%d).\n", |
1648 |
_log (LOG_WARN, "%s: AVP with too small of size (%d).\n", |
| 1649 |
__FUNCTION__, ALENGTH (avp->length)); |
1649 |
__FUNCTION__, ALENGTH (avp->length)); |
| 1650 |
set_error (c, ERROR_LENGTH, "AVP too small"); |
1650 |
set_error (c, ERROR_LENGTH, "AVP too small"); |
| 1651 |
c->needclose = -1; |
1651 |
c->needclose = -1; |
|
Lines 1653-1659
Link Here
|
| 1653 |
} |
1653 |
} |
| 1654 |
if (AZBITS (avp->length)) |
1654 |
if (AZBITS (avp->length)) |
| 1655 |
{ |
1655 |
{ |
| 1656 |
log (LOG_WARN, "%s: %sAVP has reserved bits set.\n", __FUNCTION__, |
1656 |
_log (LOG_WARN, "%s: %sAVP has reserved bits set.\n", __FUNCTION__, |
| 1657 |
AMBIT (avp->length) ? "Mandatory " : ""); |
1657 |
AMBIT (avp->length) ? "Mandatory " : ""); |
| 1658 |
if (AMBIT (avp->length)) |
1658 |
if (AMBIT (avp->length)) |
| 1659 |
{ |
1659 |
{ |
|
Lines 1666-1672
Link Here
|
| 1666 |
if (AHBIT (avp->length)) |
1666 |
if (AHBIT (avp->length)) |
| 1667 |
{ |
1667 |
{ |
| 1668 |
#ifdef DEBUG_HIDDEN |
1668 |
#ifdef DEBUG_HIDDEN |
| 1669 |
log (LOG_DEBUG, "%s: Hidden bit set on AVP.\n", __FUNCTION__); |
1669 |
_log (LOG_DEBUG, "%s: Hidden bit set on AVP.\n", __FUNCTION__); |
| 1670 |
#endif |
1670 |
#endif |
| 1671 |
/* We want to rewrite the AVP as an unhidden AVP |
1671 |
/* We want to rewrite the AVP as an unhidden AVP |
| 1672 |
and then pass it along as normal. Remeber how |
1672 |
and then pass it along as normal. Remeber how |
|
Lines 1675-1681
Link Here
|
| 1675 |
if (decrypt_avp (data, t)) |
1675 |
if (decrypt_avp (data, t)) |
| 1676 |
{ |
1676 |
{ |
| 1677 |
if (debug_avp) |
1677 |
if (debug_avp) |
| 1678 |
log (LOG_WARN, "%s: Unable to handle hidden %sAVP\n:", |
1678 |
_log (LOG_WARN, "%s: Unable to handle hidden %sAVP\n:", |
| 1679 |
__FUNCTION__, |
1679 |
__FUNCTION__, |
| 1680 |
(AMBIT (avp->length) ? "mandatory " : "")); |
1680 |
(AMBIT (avp->length) ? "mandatory " : "")); |
| 1681 |
if (AMBIT (avp->length)) |
1681 |
if (AMBIT (avp->length)) |
|
Lines 1700-1706
Link Here
|
| 1700 |
{ |
1700 |
{ |
| 1701 |
if (AMBIT (avp->length)) |
1701 |
if (AMBIT (avp->length)) |
| 1702 |
{ |
1702 |
{ |
| 1703 |
log (LOG_WARN, |
1703 |
_log (LOG_WARN, |
| 1704 |
"%s: Bad exit status handling attribute %d (%s) on mandatory packet.\n", |
1704 |
"%s: Bad exit status handling attribute %d (%s) on mandatory packet.\n", |
| 1705 |
__FUNCTION__, avp->attr, |
1705 |
__FUNCTION__, avp->attr, |
| 1706 |
avps[avp->attr].description); |
1706 |
avps[avp->attr].description); |
|
Lines 1710-1716
Link Here
|
| 1710 |
else |
1710 |
else |
| 1711 |
{ |
1711 |
{ |
| 1712 |
if (DEBUG) |
1712 |
if (DEBUG) |
| 1713 |
log (LOG_DEBUG, |
1713 |
_log (LOG_DEBUG, |
| 1714 |
"%s: Bad exit status handling attribute %d (%s).\n", |
1714 |
"%s: Bad exit status handling attribute %d (%s).\n", |
| 1715 |
__FUNCTION__, avp->attr, |
1715 |
__FUNCTION__, avp->attr, |
| 1716 |
avps[avp->attr].description); |
1716 |
avps[avp->attr].description); |
|
Lines 1721-1727
Link Here
|
| 1721 |
{ |
1721 |
{ |
| 1722 |
if (AMBIT (avp->length)) |
1722 |
if (AMBIT (avp->length)) |
| 1723 |
{ |
1723 |
{ |
| 1724 |
log (LOG_WARN, |
1724 |
_log (LOG_WARN, |
| 1725 |
"%s: No handler for mandatory attribute %d (%s). Closing %s.\n", |
1725 |
"%s: No handler for mandatory attribute %d (%s). Closing %s.\n", |
| 1726 |
__FUNCTION__, avp->attr, avps[avp->attr].description, |
1726 |
__FUNCTION__, avp->attr, avps[avp->attr].description, |
| 1727 |
(c != t->self) ? "call" : "tunnel"); |
1727 |
(c != t->self) ? "call" : "tunnel"); |
|
Lines 1732-1738
Link Here
|
| 1732 |
else |
1732 |
else |
| 1733 |
{ |
1733 |
{ |
| 1734 |
if (DEBUG) |
1734 |
if (DEBUG) |
| 1735 |
log (LOG_WARN, "%s: no handler for atribute %d (%s).\n", |
1735 |
_log (LOG_WARN, "%s: no handler for atribute %d (%s).\n", |
| 1736 |
__FUNCTION__, avp->attr, |
1736 |
__FUNCTION__, avp->attr, |
| 1737 |
avps[avp->attr].description); |
1737 |
avps[avp->attr].description); |
| 1738 |
} |
1738 |
} |
|
Lines 1754-1760
Link Here
|
| 1754 |
} |
1754 |
} |
| 1755 |
if (len != 0) |
1755 |
if (len != 0) |
| 1756 |
{ |
1756 |
{ |
| 1757 |
log (LOG_WARN, "%s: negative overall packet length\n", __FUNCTION__); |
1757 |
_log (LOG_WARN, "%s: negative overall packet length\n", __FUNCTION__); |
| 1758 |
return -EINVAL; |
1758 |
return -EINVAL; |
| 1759 |
} |
1759 |
} |
| 1760 |
return 0; |
1760 |
return 0; |