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 */
/* 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