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
HttpHandlerUsbBrowser.cpp@0:3e7d6f496a67, 2011-04-17 (annotated)
- Committer:
- sivan_toledo
- Date:
- Sun Apr 17 21:30:10 2011 +0000
- Revision:
- 0:3e7d6f496a67
Who changed what in which revision?
User | Revision | Line number | New 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> </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 | } |