22 |
|
|
23 |
#include <sys/types.h> |
#include <sys/types.h> |
24 |
#include <stdlib.h> |
#include <stdlib.h> |
25 |
|
#include <string.h> |
26 |
|
|
27 |
#include "fdo.h" |
#include "fdo.h" |
28 |
#include "log.h" |
#include "log.h" |
55 |
|
|
56 |
if(need_extra) |
if(need_extra) |
57 |
{ |
{ |
58 |
log(LOG_ERR, "IP tunnel - No extra packet received, cancelling the packet"); |
debug(1, "IP tunnel - No extra packet received, cancelling the packet"); |
59 |
need_extra = 0; |
need_extra = 0; |
60 |
free(extra_ip.data); |
free(extra_ip.data); |
61 |
fdo_unregister ( TOKEN ("yd") ); |
fdo_unregister ( TOKEN ("yd") ); |
68 |
debug (1, "IP tunnel - Received a big packet\n"); |
debug (1, "IP tunnel - Received a big packet\n"); |
69 |
ip_data=data + sizeof(*big); |
ip_data=data + sizeof(*big); |
70 |
big->len=ntohs(big->len) & IP_LEN_MASK; |
big->len=ntohs(big->len) & IP_LEN_MASK; |
71 |
if (data_size - sizeof(*big) != big->len) |
if (data_size - sizeof(*big) < big->len) |
72 |
{ |
{ |
73 |
/* |
/* |
74 |
* The packet is incomplete, we should receive yd tokens to |
* The packet is incomplete, we should receive yd tokens to |
75 |
* complete him |
* complete him |
76 |
*/ |
*/ |
77 |
log (LOG_INFO, "IP tunnel - big packet need extra packet(s)\n"); |
debug (1, "IP tunnel - big packet need extra packet(s)\n"); |
78 |
need_extra = 1; |
need_extra = 1; |
79 |
extra_ip.len = big->len; |
extra_ip.len = big->len; |
80 |
extra_ip.data = malloc( big->len ); |
extra_ip.data = malloc( big->len ); |