Use generic "struct image" rather than "struct elf".
[people/xl0/gpxe.git] / src / tests / ftptest.c
1 #include <stdint.h>
2 #include <string.h>
3 #include <byteswap.h>
4 #include <console.h>
5 #include <vsprintf.h>
6 #include <gpxe/async.h>
7 #include <gpxe/buffer.h>
8 #include <gpxe/ftp.h>
9
10 static void print_ftp_response ( char *data, size_t len ) {
11         unsigned int i;
12         char c;
13
14         for ( i = 0 ; i < len ; i++ ) {
15                 c = 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 void test_ftp ( struct sockaddr_tcpip *server, const char *filename ) {
27         char data[256];
28         struct buffer buffer;
29         struct ftp_request ftp;
30         int rc;
31
32         printf ( "FTP fetching %s\n", filename );
33         
34         memset ( &buffer, 0, sizeof ( buffer ) );
35         buffer.addr = virt_to_user ( data );
36         buffer.len = sizeof ( data );
37
38         memset ( &ftp, 0, sizeof ( ftp ) );
39         memcpy ( &ftp.server, server, sizeof ( ftp.server ) );
40         ftp.filename = filename;
41         ftp.buffer = &buffer;
42
43         rc = async_wait ( ftp_get ( &ftp ) );
44         if ( rc ) {
45                 printf ( "FTP fetch failed\n" );
46                 return;
47         }
48
49         printf ( "FTP received %d bytes\n", buffer.fill );
50
51         print_ftp_response ( data, buffer.fill );
52 }