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?

UserRevisionLine numberNew 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 }