X-Git-Url: https://git.llucax.com/z.facultad/66.09/etherled.git/blobdiff_plain/cbf2122a2f610a2b92f1dfcb0f554b4bf7c4757e..184461d7b468cd81882a29e292b6f7a9822b50d8:/src/udp.c?ds=sidebyside diff --git a/src/udp.c b/src/udp.c index 9da1b25..9738341 100644 --- a/src/udp.c +++ b/src/udp.c @@ -23,7 +23,7 @@ static void sum(uint16 w) bool udp_read_dgram_header() { - uint16 p; + byte tmp; /* reseteamos checksum */ checksum = 0; /* el UDP tiene un checksum que incluye parte de la cabecera IP */ @@ -43,17 +43,18 @@ bool udp_read_dgram_header() /* agregamos puerto de origen al checksum */ sum(udp_port_remote); /* sólo aceptamos datagramas a nuestro puerto */ - p = netdev_recv_word(); - if (p != udp_port_local) + if (netdev_recv_word() != udp_port_local) return false; /* drop */ /* agregamos puerto de destino al checksum */ sum(udp_port_local); /* tamaño del datagrama */ - if (netdev_recv_byte()) /* no soportamos más de 255 bytes */ + if (tmp = netdev_recv_byte()) /* no soportamos más de 255 bytes */ + return false; /* drop */ + udp_dgram_len = netdev_recv_byte(); /* parte baja */ + if (udp_dgram_len < 8) /* no puede ser más chico que sus cabeceras */ return false; /* drop */ - udp_dgram_len = netdev_recv_byte(); /* agregamos tamaño al checksum */ - sum(udp_dgram_len); + sum(WORD(tmp, udp_dgram_len)); /* agregamos checksum al checksum */ sum(netdev_recv_word()); /* falta agregar el cuerpo del mensaje para verificar la suma