FileDownloader.cpp@7:f652d1e054e9, 2011-01-30 (annotated)
- Committer:
- FrankWeissenborn
- Date:
- Sun Jan 30 21:33:12 2011 +0000
- Revision:
- 7:f652d1e054e9
- Parent:
- 2:0e9a10f2b8c5
Added: GetPath Problem: Memory leak (after 5-6 tune in)
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 | HTTPClient http; |
FrankWeissenborn | 0:d9d38ebc0f69 | 8 | HTTPStream stream; |
FrankWeissenborn | 0:d9d38ebc0f69 | 9 | |
FrankWeissenborn | 2:0e9a10f2b8c5 | 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 | 2:0e9a10f2b8c5 | 16 | HTTPResult GetFile(const char *uri, const char *filename, FILE *fp, char * buffer, int buffer_size) |
FrankWeissenborn | 0:d9d38ebc0f69 | 17 | { |
FrankWeissenborn | 0:d9d38ebc0f69 | 18 | |
FrankWeissenborn | 2:0e9a10f2b8c5 | 19 | completed = false; |
FrankWeissenborn | 2:0e9a10f2b8c5 | 20 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 21 | fp = fopen(filename, "w"); |
FrankWeissenborn | 0:d9d38ebc0f69 | 22 | if(fp == NULL) { |
FrankWeissenborn | 0:d9d38ebc0f69 | 23 | error("Could not open file for write\n"); |
FrankWeissenborn | 0:d9d38ebc0f69 | 24 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 25 | else { |
FrankWeissenborn | 2:0e9a10f2b8c5 | 26 | printf("Opened file\r\n"); |
FrankWeissenborn | 0:d9d38ebc0f69 | 27 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 28 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 29 | |
FrankWeissenborn | 2:0e9a10f2b8c5 | 30 | buffer[buffer_size-1] = 0x00; |
FrankWeissenborn | 2:0e9a10f2b8c5 | 31 | stream.readNext((byte*)buffer, buffer_size-2); //Point to buffer for the first read |
FrankWeissenborn | 0:d9d38ebc0f69 | 32 | HTTPResult r = http.get(uri, &stream, request_callback); |
FrankWeissenborn | 0:d9d38ebc0f69 | 33 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 34 | while (!completed) { |
FrankWeissenborn | 0:d9d38ebc0f69 | 35 | Net::poll(); //Polls the Networking stack |
FrankWeissenborn | 0:d9d38ebc0f69 | 36 | if (stream.readable()) { |
FrankWeissenborn | 2:0e9a10f2b8c5 | 37 | buffer[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string |
FrankWeissenborn | 0:d9d38ebc0f69 | 38 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 39 | int p=0; |
FrankWeissenborn | 2:0e9a10f2b8c5 | 40 | while (buffer[p] != 0) |
FrankWeissenborn | 0:d9d38ebc0f69 | 41 | { |
FrankWeissenborn | 2:0e9a10f2b8c5 | 42 | fprintf(fp,"%c",buffer[p]); |
FrankWeissenborn | 0:d9d38ebc0f69 | 43 | p++; |
FrankWeissenborn | 0:d9d38ebc0f69 | 44 | } |
FrankWeissenborn | 2:0e9a10f2b8c5 | 45 | stream.readNext((byte*)buffer, buffer_size-2); //Buffer has been read, now we can put more data in it |
FrankWeissenborn | 0:d9d38ebc0f69 | 46 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 47 | } |
FrankWeissenborn | 0:d9d38ebc0f69 | 48 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 49 | fclose(fp); |
FrankWeissenborn | 2:0e9a10f2b8c5 | 50 | |
FrankWeissenborn | 0:d9d38ebc0f69 | 51 | return result; |
FrankWeissenborn | 0:d9d38ebc0f69 | 52 | } |