]> git.llucax.com Git - z.facultad/66.09/etherled.git/blobdiff - src/udp.c
Arregla macros para que no hagan lío evaluando cosas más de una vez.
[z.facultad/66.09/etherled.git] / src / udp.c
index 9da1b25c0adf607b6579eeb2aef0996b590941b4..9738341a243bbba08d4333241557ca0331b5bb54 100644 (file)
--- 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