FileDownloader.cpp@1:1b5ed0fa82f0, 2011-01-24 (annotated)
- Committer:
- FrankWeissenborn
- Date:
- Mon Jan 24 13:54:12 2011 +0000
- Revision:
- 1:1b5ed0fa82f0
- Parent:
- 0:d9d38ebc0f69
- Child:
- 2:0e9a10f2b8c5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
FrankWeissenborn | 0:d9d38ebc0f69 | 1 | #include "FileDownloader.h" |
FrankWeissenborn | 0:d9d38ebc0f69 | 2 | #include "SDFileSystem.h" |
FrankWeissenborn | 0:d9d38ebc0f69 | 3 | |
FrankWeissenborn | 1:1b5ed0fa82f0 | 4 | extern SDFileSystem sd; |
FrankWeissenborn | 0:d9d38ebc0f69 | 5 | HTTPResult result; |
FrankWeissenborn | 0:d9d38ebc0f69 | 6 | bool completed = false; |
FrankWeissenborn | 0:d9d38ebc0f69 | 7 | FILE *fp; |
FrankWeissenborn | 0:d9d38ebc0f69 | 8 | HTTPClient http; |
FrankWeissenborn | 0:d9d38ebc0f69 | 9 | HTTPStream stream; |
FrankWeissenborn | 0:d9d38ebc0f69 | 10 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 11 | void request_callback(HTTPResult r) { |
FrankWeissenborn | 0:d9d38ebc0f69 | 12 | result = r; |
FrankWeissenborn | 0:d9d38ebc0f69 | 13 | completed = true; |
FrankWeissenborn | 0:d9d38ebc0f69 | 14 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 15 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 16 | HTTPResult GetFile(const char *uri, const char *filename) |
FrankWeissenborn | 0:d9d38ebc0f69 | 17 | { |
FrankWeissenborn | 0:d9d38ebc0f69 | 18 | completed = false; |
FrankWeissenborn | 0:d9d38ebc0f69 | 19 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 20 | fp = fopen(filename, "w"); |
FrankWeissenborn | 0:d9d38ebc0f69 | 21 | if(fp == NULL) { |
FrankWeissenborn | 0:d9d38ebc0f69 | 22 | error("Could not open file for write\n"); |
FrankWeissenborn | 0:d9d38ebc0f69 | 23 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 24 | else { |
FrankWeissenborn | 0:d9d38ebc0f69 | 25 | printf("Opened file"); |
FrankWeissenborn | 0:d9d38ebc0f69 | 26 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 27 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 28 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 29 | char BigBuf[512 + 1] = {0}; |
FrankWeissenborn | 0:d9d38ebc0f69 | 30 | stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read |
FrankWeissenborn | 0:d9d38ebc0f69 | 31 | HTTPResult r = http.get(uri, &stream, request_callback); |
FrankWeissenborn | 0:d9d38ebc0f69 | 32 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 33 | while (!completed) { |
FrankWeissenborn | 0:d9d38ebc0f69 | 34 | Net::poll(); //Polls the Networking stack |
FrankWeissenborn | 0:d9d38ebc0f69 | 35 | if (stream.readable()) { |
FrankWeissenborn | 0:d9d38ebc0f69 | 36 | BigBuf[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string |
FrankWeissenborn | 0:d9d38ebc0f69 | 37 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 38 | int p=0; |
FrankWeissenborn | 0:d9d38ebc0f69 | 39 | while (BigBuf[p] != 0) |
FrankWeissenborn | 0:d9d38ebc0f69 | 40 | { |
FrankWeissenborn | 0:d9d38ebc0f69 | 41 | fprintf(fp,"%c",BigBuf[p]); |
FrankWeissenborn | 0:d9d38ebc0f69 | 42 | p++; |
FrankWeissenborn | 0:d9d38ebc0f69 | 43 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 44 | stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it |
FrankWeissenborn | 0:d9d38ebc0f69 | 45 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 46 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 47 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 48 | fclose(fp); |
FrankWeissenborn | 0:d9d38ebc0f69 | 49 | return result; |
FrankWeissenborn | 0:d9d38ebc0f69 | 50 | } |