Added TFTP test code (currently just dumps file to console).
[people/xl0/gpxe.git] / src / tests / tftptest.c
1 #include <stdint.h>
2 #include <string.h>
3 #include <console.h>
4 #include <gpxe/udp.h>
5 #include <gpxe/tftp.h>
6 #include <gpxe/async.h>
7
8 static void test_tftp_callback ( struct tftp_session *tftp __unused,
9                                  unsigned int block __unused,
10                                  void *data, size_t len ) {
11         unsigned int i;
12         char c;
13
14         for ( i = 0 ; i < len ; i++ ) {
15                 c = * ( ( char * ) data + i );
16                 if ( c == '\r' ) {
17                         /* Print nothing */
18                 } else if ( ( c == '\n' ) || ( c >= 32 ) || ( c <= 126 ) ) {
19                         putchar ( c );
20                 } else {
21                         putchar ( '.' );
22                 }
23         }       
24 }
25
26 int test_tftp ( struct sockaddr_tcpip *target, const char *filename ) {
27         struct tftp_session tftp;
28
29         memset ( &tftp, 0, sizeof ( tftp ) );
30         udp_connect ( &tftp.udp, target );
31         tftp.filename = filename;
32         tftp.callback = test_tftp_callback;
33
34         return async_wait ( tftp_get ( &tftp ) );
35 }