Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
HTTPStaticPage.h
00001 #ifndef HTTPSTATICPAGE_H 00002 #define HTTPSTATICPAGE_H 00003 00004 #include "HTTPServer.h" 00005 00006 /** 00007 * A datastorage helper for the HTTPStaticPage class. 00008 * Stores only the left upload size. 00009 */ 00010 class HTTPStaticPageData : public HTTPData { 00011 public: int left; 00012 }; 00013 00014 /** 00015 * This class Provide a Handler to send Static HTTP Pages from the bin file. 00016 */ 00017 class HTTPStaticPage : public HTTPHandler { 00018 public: 00019 /** 00020 * Constructer takes the pagename and the pagedata. 00021 * As long as the pagedata is NULL terminated you have not to tell the data length. 00022 * But if you want to send binary data you should tell us the size. 00023 */ 00024 HTTPStaticPage(const char *path, const char *page, int length = 0) 00025 : HTTPHandler(path), _page(page) { 00026 _size = (length)?length:strlen(_page); 00027 } 00028 00029 private: 00030 /** 00031 * A this Static Page is requested! 00032 * Prepare a datastorage helper "HTTPStaticPageHelper" to store the left data size. 00033 * And return HTTP_OK 00034 */ 00035 virtual HTTPStatus init(HTTPConnection *con) const { 00036 HTTPStaticPageData *data = new HTTPStaticPageData(); 00037 con->data = data; 00038 data->left = _size; 00039 con->setLength(_size); 00040 return HTTP_OK; 00041 } 00042 00043 /** 00044 * Send the maximum data out to the client. 00045 * If the file is complete transmitted close connection by returning HTTP_SuccessEnded 00046 */ 00047 virtual HTTPHandle send(HTTPConnection *con, int maximum) const { 00048 HTTPStaticPageData *data = static_cast<HTTPStaticPageData *>(con->data); 00049 int len = min(maximum, data->left); 00050 err_t err; 00051 00052 do { 00053 err = con->write((void*)&_page[_size - data->left], len, 1); 00054 if(err == ERR_MEM) { 00055 len >>= 1; 00056 } 00057 } while(err == ERR_MEM && len > 1); 00058 if(err == ERR_OK) { 00059 data->left -= len; 00060 } 00061 00062 return (data->left)? HTTP_Success : HTTP_SuccessEnded; 00063 } 00064 00065 /** Pointer to the page data */ 00066 const char *_page; 00067 00068 /** page data size*/ 00069 int _size; 00070 }; 00071 00072 #endif
Generated on Tue Jul 12 2022 19:24:05 by
1.7.2