11 * 0 7 8 15 16 23 24 31
12 * +--------+--------+--------+--------+
13 * | Source | Destination |
15 * +--------+--------+--------+--------+
17 * | Length | Checksum |
18 * +--------+--------+--------+--------+
21 * +---------------- ...
24 * Aceptamos sólo datagramas UDP que vayan a el puerto de nuestra aplicación y
25 * cuyo tamaño sea menor a 255. El resto es descartado.
26 * El Length es tanto de la cabecera como datos, por lo tanto el tamaño mínimo
29 * El checksum se calcula utilizando algunos datos de la capa inferior e incluye
30 * a los datos. Entonces es calculado sobre el siguiente paquete 'virtual':
33 * 0 7 8 15 16 23 24 31
34 * +--------+--------+--------+--------+
35 * | ip source address |
36 * +--------+--------+--------+--------+
37 * | ip destination address |
38 * +--------+--------+--------+--------+
39 * | zero |protocol| UDP length |
40 * +--------+--------+--------+--------+
41 * | Source | Destination |
43 * +--------+--------+--------+--------+
45 * | Length | Checksum |
46 * +--------+--------+--------+--------+
49 * +---------------- ...
53 /** Puerto UDP nuestro */
54 extern uint16 udp_port_local;
56 /** Puerto UDP de destino */
57 extern uint16 udp_port_remote;
59 /** Tamaño del datagrama UDP */
60 extern byte udp_dgram_len;
62 /** Lee la cabecera del datagrama UDP.
64 * Deja en udp_port_remote el puerto de origen.
65 * Si devuelve false (0) es que hubo un error o es un datagrama no soportado,
66 * por lo que hay que descartarlo.
68 bool udp_read_dgram_header();
70 /** Escribe la cabecera del datagrama UDP.
72 * Pone como puerto destino a udp_port_remote, como origen udp_port_local y como
73 * tamaño a udp_dgram_len (en la parte baja y 0 en la parte alta).
75 void udp_write_dgram_header();