Student project by David Berlin and Boris Dogadov made for the Embedded Systems Workshop course given in Tel-Aviv University on 2010 by Sivan Toledo. Visit the project website for more details: http://davidberlin.co.il/sadna/ .

Dependencies:   EthernetNetIf NTPClient_NetServices mbed HTTPServer HTTPClient CyaSSL

Committer:
sivan_toledo
Date:
Mon Apr 25 12:31:46 2011 +0000
Revision:
1:b05231650f32
Parent:
0:3e7d6f496a67

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sivan_toledo 0:3e7d6f496a67 1 #include "HttpHandlerUsbBrowser.h"
sivan_toledo 0:3e7d6f496a67 2 #include "USBHost.h"
sivan_toledo 0:3e7d6f496a67 3 #include "Utils.h"
sivan_toledo 0:3e7d6f496a67 4 #include "UsbStorage.h"
sivan_toledo 0:3e7d6f496a67 5
sivan_toledo 0:3e7d6f496a67 6 HttpHandlerUsbBrowser::HttpHandlerUsbBrowser(const char* rootPath, const char* path, TCPSocket* pTCPSocket) :
sivan_toledo 0:3e7d6f496a67 7 HTTPRequestHandler(rootPath, path, pTCPSocket)
sivan_toledo 0:3e7d6f496a67 8 {
sivan_toledo 0:3e7d6f496a67 9 //printf("HttpHandlerUsbBrowser()");
sivan_toledo 0:3e7d6f496a67 10 }
sivan_toledo 0:3e7d6f496a67 11
sivan_toledo 0:3e7d6f496a67 12 HttpHandlerUsbBrowser::~HttpHandlerUsbBrowser()
sivan_toledo 0:3e7d6f496a67 13 {
sivan_toledo 0:3e7d6f496a67 14 }
sivan_toledo 0:3e7d6f496a67 15
sivan_toledo 0:3e7d6f496a67 16 void HttpHandlerUsbBrowser::doGet()
sivan_toledo 0:3e7d6f496a67 17 {
sivan_toledo 0:3e7d6f496a67 18 int cmpRes = path().compare(0, 5, "/root");
sivan_toledo 0:3e7d6f496a67 19 printf("doGet path:%d\r\n", cmpRes);
sivan_toledo 0:3e7d6f496a67 20
sivan_toledo 0:3e7d6f496a67 21 DIR* d = 0;
sivan_toledo 0:3e7d6f496a67 22 FILE* f = 0;
sivan_toledo 0:3e7d6f496a67 23
sivan_toledo 0:3e7d6f496a67 24 char usbFullPath[256] = "/usb";
sivan_toledo 0:3e7d6f496a67 25 if (cmpRes == 0)
sivan_toledo 0:3e7d6f496a67 26 {
sivan_toledo 0:3e7d6f496a67 27 path().copy(usbFullPath + 4, 252, 5);
sivan_toledo 0:3e7d6f496a67 28 int usbFullPathLen = strlen(usbFullPath);
sivan_toledo 0:3e7d6f496a67 29 if (usbFullPath[usbFullPathLen - 1] == '/') usbFullPath[usbFullPathLen - 1] = 0;
sivan_toledo 0:3e7d6f496a67 30
sivan_toledo 0:3e7d6f496a67 31 d = opendir(usbFullPath);
sivan_toledo 0:3e7d6f496a67 32 //printf("after open dir\r\n");
sivan_toledo 0:3e7d6f496a67 33
sivan_toledo 0:3e7d6f496a67 34 if (!d) f = fopen(usbFullPath, "r");
sivan_toledo 0:3e7d6f496a67 35 //printf("after open file\r\n");
sivan_toledo 0:3e7d6f496a67 36 }
sivan_toledo 0:3e7d6f496a67 37
sivan_toledo 0:3e7d6f496a67 38 if (!d && !f)
sivan_toledo 0:3e7d6f496a67 39 {
sivan_toledo 0:3e7d6f496a67 40 printf("return no data\r\n");
sivan_toledo 0:3e7d6f496a67 41 respHeaders()["Connection"] = "close";
sivan_toledo 0:3e7d6f496a67 42 writeData("<html><body>No Data or Invalid Path</html></body>", 49);
sivan_toledo 0:3e7d6f496a67 43 setContentLen(49);
sivan_toledo 0:3e7d6f496a67 44 return;
sivan_toledo 0:3e7d6f496a67 45 }
sivan_toledo 0:3e7d6f496a67 46
sivan_toledo 0:3e7d6f496a67 47 const char* resp1 =
sivan_toledo 0:3e7d6f496a67 48 "<html><body>"
sivan_toledo 0:3e7d6f496a67 49 "<p><span style=\"color: #a9a9a9\"><span style=\"font-size: 12px\">DropBox Sync Flash-Explorer</span></span></p>";
sivan_toledo 0:3e7d6f496a67 50
sivan_toledo 0:3e7d6f496a67 51 const char* resp2 =
sivan_toledo 0:3e7d6f496a67 52 "</form><p>&nbsp;</p>"
sivan_toledo 0:3e7d6f496a67 53 "<p><strong><span style=\"color: #000080\">BDDB Ltd.</span></strong></p>"
sivan_toledo 0:3e7d6f496a67 54 "</body>"
sivan_toledo 0:3e7d6f496a67 55 "</html>";
sivan_toledo 0:3e7d6f496a67 56
sivan_toledo 0:3e7d6f496a67 57 int l1 = strlen(resp1), l2 = strlen(resp2);
sivan_toledo 0:3e7d6f496a67 58 int length = l1 + l2;
sivan_toledo 0:3e7d6f496a67 59
sivan_toledo 0:3e7d6f496a67 60 int t1 = writeData(resp1, l1);
sivan_toledo 0:3e7d6f496a67 61
sivan_toledo 0:3e7d6f496a67 62 if (d)
sivan_toledo 0:3e7d6f496a67 63 {
sivan_toledo 0:3e7d6f496a67 64 printf("\nDumping root dir\n\r");
sivan_toledo 0:3e7d6f496a67 65 struct dirent *dir = readdir(d);
sivan_toledo 0:3e7d6f496a67 66 while (dir)
sivan_toledo 0:3e7d6f496a67 67 {
sivan_toledo 0:3e7d6f496a67 68 int len = sizeof(dirent);
sivan_toledo 0:3e7d6f496a67 69 printf("%s %d\n\r", dir->d_name, len);
sivan_toledo 0:3e7d6f496a67 70
sivan_toledo 0:3e7d6f496a67 71 int nameLen = strlen(dir->d_name);
sivan_toledo 0:3e7d6f496a67 72
sivan_toledo 0:3e7d6f496a67 73 writeData("<p><a href=\"", 12);
sivan_toledo 0:3e7d6f496a67 74 writeData(dir->d_name, nameLen);
sivan_toledo 0:3e7d6f496a67 75 writeData("/\">", 3);
sivan_toledo 0:3e7d6f496a67 76 writeData(dir->d_name, nameLen);
sivan_toledo 0:3e7d6f496a67 77 writeData("</a></p>", 8);
sivan_toledo 0:3e7d6f496a67 78 length += nameLen * 2 + 23;
sivan_toledo 0:3e7d6f496a67 79
sivan_toledo 0:3e7d6f496a67 80 dir = readdir(d);
sivan_toledo 0:3e7d6f496a67 81 }
sivan_toledo 0:3e7d6f496a67 82 closedir(d);
sivan_toledo 0:3e7d6f496a67 83 }
sivan_toledo 0:3e7d6f496a67 84 else if (f)
sivan_toledo 0:3e7d6f496a67 85 {
sivan_toledo 0:3e7d6f496a67 86 printf("dumping file \r\n");
sivan_toledo 0:3e7d6f496a67 87 while (fgets(usbFullPath, 256, f) && length <= 4096)
sivan_toledo 0:3e7d6f496a67 88 {
sivan_toledo 0:3e7d6f496a67 89 // printf("%s\r\n", usbFullPath);
sivan_toledo 0:3e7d6f496a67 90 int len = strlen(usbFullPath);
sivan_toledo 0:3e7d6f496a67 91 writeData(usbFullPath, len);
sivan_toledo 0:3e7d6f496a67 92
sivan_toledo 0:3e7d6f496a67 93 length += len;
sivan_toledo 0:3e7d6f496a67 94 }
sivan_toledo 0:3e7d6f496a67 95
sivan_toledo 0:3e7d6f496a67 96 fclose(f);
sivan_toledo 0:3e7d6f496a67 97 }
sivan_toledo 0:3e7d6f496a67 98
sivan_toledo 0:3e7d6f496a67 99 int t3 = writeData(resp2, l2);
sivan_toledo 0:3e7d6f496a67 100 respHeaders()["Connection"] = "close";
sivan_toledo 0:3e7d6f496a67 101 setContentLen(length);
sivan_toledo 0:3e7d6f496a67 102
sivan_toledo 0:3e7d6f496a67 103 printf("doGet()-end length %d\r\n", length);
sivan_toledo 0:3e7d6f496a67 104 }
sivan_toledo 0:3e7d6f496a67 105
sivan_toledo 0:3e7d6f496a67 106 void HttpHandlerUsbBrowser::doPost()
sivan_toledo 0:3e7d6f496a67 107 {
sivan_toledo 0:3e7d6f496a67 108 printf("doPost()\r\n");
sivan_toledo 0:3e7d6f496a67 109 }
sivan_toledo 0:3e7d6f496a67 110
sivan_toledo 0:3e7d6f496a67 111 void HttpHandlerUsbBrowser::doHead()
sivan_toledo 0:3e7d6f496a67 112 {
sivan_toledo 0:3e7d6f496a67 113 printf("onHead\r\n");
sivan_toledo 0:3e7d6f496a67 114 }
sivan_toledo 0:3e7d6f496a67 115
sivan_toledo 0:3e7d6f496a67 116 void HttpHandlerUsbBrowser::onReadable() //Data has been read
sivan_toledo 0:3e7d6f496a67 117 {
sivan_toledo 0:3e7d6f496a67 118 printf("onReadable\r\n");
sivan_toledo 0:3e7d6f496a67 119 }
sivan_toledo 0:3e7d6f496a67 120
sivan_toledo 0:3e7d6f496a67 121 void HttpHandlerUsbBrowser::onWriteable() //Data has been written & buf is free
sivan_toledo 0:3e7d6f496a67 122 {
sivan_toledo 0:3e7d6f496a67 123 printf("onWriteable\r\n");
sivan_toledo 0:3e7d6f496a67 124 close(); //Data written, we can close the connection
sivan_toledo 0:3e7d6f496a67 125 }
sivan_toledo 0:3e7d6f496a67 126
sivan_toledo 0:3e7d6f496a67 127 void HttpHandlerUsbBrowser::onClose() //Connection is closing
sivan_toledo 0:3e7d6f496a67 128 {
sivan_toledo 0:3e7d6f496a67 129 //Nothing to do
sivan_toledo 0:3e7d6f496a67 130 }