]> git.llucax.com Git - z.facultad/66.09/etherled.git/blob - src/c/udp.c
1c4189e370410f91a32fe65c76ec85664fd6c30d
[z.facultad/66.09/etherled.git] / src / c / udp.c
1 #include "ip.h"
2
3 extern uint16 udp_port_local;
4
5 extern uint16 udp_port_remote;
6
7 extern byte udp_dgram_len;
8
9 bool udp_read_dgram_header()
10 {
11         /* puerto origen */
12         udp_port_remote = net_getw();
13         /* sólo aceptamos datagramas a nuestro puerto */
14         if (net_getw() != udp_port_local)
15                 return false; /* drop */
16         /* tamaño del datagrama */
17         if (net_getb()) /* no soportamos más de 255 bytes */
18                 return false; /* drop */
19         udp_dgram_len = net_getb();
20         /* descartamos checksum */
21         net_getw();
22         return true;
23 }
24
25 void udp_write_dgram_header()
26 {
27         /* puerto origen */
28         net_putw(udp_port_local);
29         /* puerto destino */
30         net_putw(udp_port_remote);
31         /* tamaño del datagrama */
32         net_putb(0x00); /* parte alta en 0 porque no soportamos más de 255 */
33         net_putb(udp_dgram_len);
34         /* indicamos que no se usa checksum */
35         net_putw(0x0000);
36         return true;
37 }
38