The lib with which to make LPC1768 a simple HTTP server. This have not yet implemented. fopen() DOESN'T WORK after EthernetInterface::connect() is called as using mbed-os 5.4~. See also https://os.mbed.com/questions/80658/HardFault-occurs-when-fopen-is-called-af/ or https://github.com/ARMmbed/mbed-os/issues/6578 and https://github.com/ARMmbed/mbed-os/issues/6624
Fork of HTTP_SERVER by
Revision 18:ad5c461905bd, committed 2018-03-23
- Comitter:
- aktk
- Date:
- Fri Mar 23 07:40:26 2018 +0000
- Parent:
- 17:ce5845164001
- Commit message:
- rename: Filehandler.h -> FileHandler.h
Changed in this revision
handlers/FileHandler.cpp | Show annotated file Show diff for this revision Revisions of this file |
handlers/Filehandler.cpp | Show diff for this revision Revisions of this file |
diff -r ce5845164001 -r ad5c461905bd handlers/FileHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/handlers/FileHandler.cpp Fri Mar 23 07:40:26 2018 +0000 @@ -0,0 +1,186 @@ +#include "FileHandler.h" +//#ifndef DEBUG +#define FILE_HANDLER_DEBUG +//#endif +LocalFileSystem local("local"); + +namespace FILE_HANDLER +{ +void DEBUG_PRINT_NAME() +{ +#ifdef FILE_HANDLER_DEBUG + printf("(DEBUG LINE: FILE_HANDLER) "); +#endif +} + +void DEBUG_PRINT_LINE(const char* arg_line) +{ +#ifdef FILE_HANDLER_DEBUG + DEBUG_PRINT_NAME(); + printf(arg_line); + printf("\r\n"); +#endif +} +template<typename T> +void DEBUG_PRINT_LINE(const char* arg_line, T arg_t) +{ +#ifdef FILE_HANDLER_DEBUG + DEBUG_PRINT_NAME(); + printf(arg_line, arg_t); + printf("\r\n"); +#endif +} +template<typename T1, typename T2> +void DEBUG_PRINT_LINE(const char* arg_line, T1 arg_t1, T2 arg_t2) +{ +#ifdef FILE_HANDLER_DEBUG + DEBUG_PRINT_NAME(); + printf(arg_line, arg_t1, arg_t2); + printf("\r\n"); +#endif +} +} +using namespace FILE_HANDLER; + +FileHandler::FileHandler() +{ + fullpath = NULL; + filename = NULL; + suffix = NULL; + fp = NULL; + file_size = 0; +} +FileHandler::~FileHandler() +{ + if (fullpath != NULL) free(fullpath); + if (fp != NULL) fclose(fp); +} + +FILE* FileHandler::open +( const char* arg_filepath, + const char* arg_mode +) +{ + FILE *tmp; + + DEBUG_PRINT_LINE("fp: %d", fp); + if (fullpath != NULL) free(fullpath); + // Allocating memory for fullpath; + // [[+ strlen("index.htm") + 1]] at the end of line is ONLY a MARGIN allowed for concatenating the string. + fullpath = (char*)malloc(sizeof(char) * (strlen("/local/") + strlen(arg_filepath) + strlen("index.htm") + 1)); + + // Path formatting + if (arg_filepath[0] == '/') { + sprintf(fullpath, "/local/%s", arg_filepath + 1); + } else { + sprintf(fullpath, "/local/%s", arg_filepath); + } + // if the argument has no file name but directory, defalt settiing. + if (fullpath[strlen(fullpath) - 1] == '/') + strcat(fullpath, "index.htm"); + DEBUG_PRINT_LINE("full-file-path: %s", fullpath); + // store the file name part into a pointer + filename = strrchr(fullpath, '/'); + // remove '/' and just get only the file name. + if(filename != NULL) filename++; + // store the suffix part to a pointer + suffix = strchr(filename, '.'); + // remove '.' and just get only the suffix. + if(suffix != NULL) suffix++; + DEBUG_PRINT_LINE("!!Public function check..."); + DEBUG_PRINT_LINE(" full path: %s", getFullpath()); + DEBUG_PRINT_LINE(" filename : %s", getFilename()); + DEBUG_PRINT_LINE(" suffix : %s", getSuffix()); + DEBUG_PRINT_LINE("...DONE!!"); + DEBUG_PRINT_LINE("fopen(...)"); + DEBUG_PRINT_LINE(" path: %s", fullpath); + DEBUG_PRINT_LINE(" mode: %s", arg_mode); + fp = fopen(fullpath, arg_mode); + if(fp != NULL) { + DEBUG_PRINT_LINE("file opened"); + DEBUG_PRINT_LINE("fp: %d", fp); + } else { + DEBUG_PRINT_LINE("Something is wrong @fopen(...)"); + } + // mesure file size + file_size = 0; + tmp = fp; + if(tmp != NULL ) { + ////printf("\r\nfile content\r\n"); + int ctmp; + while(1) { + ctmp = fgetc(tmp); + if(ctmp != EOF) { + //////printf("%c", ctmp); + file_size++; + } else { + //////printf("[EOF]\r\n"); + break; + } + } + ////printf("file size: %d\r\n", file_size); + if(fseek(tmp, 0L, SEEK_SET) != 0) { + //////printf("fseek failed\r\n"); + } + } else { + file_size = 0; + } + + return fp; +} +int FileHandler::close() +{ + int tmp; + + if(fp != NULL) { + tmp = fclose(fp); + fp = NULL; + return tmp; + } else { + return 1; + } +} + +int FileHandler::getc() +{ + int tmp = fgetc(fp); +#ifdef DEBUG + if(0x20 < tmp && tmp < 0x7e) + printf("%c", tmp); + else if (tmp == '\r') + printf("\r"); + else if (tmp == '\n') + printf("\n"); + else + printf("@"); +#endif + return tmp; +} +bool FileHandler::arrival() +{ + return (bool)fp; +} +bool FileHandler::atEOF() +{ + return (bool)feof(fp); +} +bool FileHandler::hasError() +{ + return (bool)ferror(fp); +} +char *FileHandler::getFullpath() +{ + return fullpath; +} +char *FileHandler::getFilename() +{ + return filename; +} +char *FileHandler::getSuffix() +{ + return suffix; +} +int FileHandler::getFileSize() +{ + return file_size; +} \ No newline at end of file
diff -r ce5845164001 -r ad5c461905bd handlers/Filehandler.cpp --- a/handlers/Filehandler.cpp Fri Mar 23 07:39:28 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -#include "FileHandler.h" -//#ifndef DEBUG -#define FILE_HANDLER_DEBUG -//#endif -LocalFileSystem local("local"); - -namespace FILE_HANDLER -{ -void DEBUG_PRINT_NAME() -{ -#ifdef FILE_HANDLER_DEBUG - printf("(DEBUG LINE: FILE_HANDLER) "); -#endif -} - -void DEBUG_PRINT_LINE(const char* arg_line) -{ -#ifdef FILE_HANDLER_DEBUG - DEBUG_PRINT_NAME(); - printf(arg_line); - printf("\r\n"); -#endif -} -template<typename T> -void DEBUG_PRINT_LINE(const char* arg_line, T arg_t) -{ -#ifdef FILE_HANDLER_DEBUG - DEBUG_PRINT_NAME(); - printf(arg_line, arg_t); - printf("\r\n"); -#endif -} -template<typename T1, typename T2> -void DEBUG_PRINT_LINE(const char* arg_line, T1 arg_t1, T2 arg_t2) -{ -#ifdef FILE_HANDLER_DEBUG - DEBUG_PRINT_NAME(); - printf(arg_line, arg_t1, arg_t2); - printf("\r\n"); -#endif -} -} -using namespace FILE_HANDLER; - -FileHandler::FileHandler() -{ - fullpath = NULL; - filename = NULL; - suffix = NULL; - fp = NULL; - file_size = 0; -} -FileHandler::~FileHandler() -{ - if (fullpath != NULL) free(fullpath); - if (fp != NULL) fclose(fp); -} - -FILE* FileHandler::open -( const char* arg_filepath, - const char* arg_mode -) -{ - FILE *tmp; - - DEBUG_PRINT_LINE("fp: %d", fp); - if (fullpath != NULL) free(fullpath); - // Allocating memory for fullpath; - // [[+ strlen("index.htm") + 1]] at the end of line is ONLY a MARGIN allowed for concatenating the string. - fullpath = (char*)malloc(sizeof(char) * (strlen("/local/") + strlen(arg_filepath) + strlen("index.htm") + 1)); - - // Path formatting - if (arg_filepath[0] == '/') { - sprintf(fullpath, "/local/%s", arg_filepath + 1); - } else { - sprintf(fullpath, "/local/%s", arg_filepath); - } - // if the argument has no file name but directory, defalt settiing. - if (fullpath[strlen(fullpath) - 1] == '/') - strcat(fullpath, "index.htm"); - DEBUG_PRINT_LINE("full-file-path: %s", fullpath); - // store the file name part into a pointer - filename = strrchr(fullpath, '/'); - // remove '/' and just get only the file name. - if(filename != NULL) filename++; - // store the suffix part to a pointer - suffix = strchr(filename, '.'); - // remove '.' and just get only the suffix. - if(suffix != NULL) suffix++; - DEBUG_PRINT_LINE("!!Public function check..."); - DEBUG_PRINT_LINE(" full path: %s", getFullpath()); - DEBUG_PRINT_LINE(" filename : %s", getFilename()); - DEBUG_PRINT_LINE(" suffix : %s", getSuffix()); - DEBUG_PRINT_LINE("...DONE!!"); - DEBUG_PRINT_LINE("fopen(...)"); - DEBUG_PRINT_LINE(" path: %s", fullpath); - DEBUG_PRINT_LINE(" mode: %s", arg_mode); - fp = fopen(fullpath, arg_mode); - if(fp != NULL) { - DEBUG_PRINT_LINE("file opened"); - DEBUG_PRINT_LINE("fp: %d", fp); - } else { - DEBUG_PRINT_LINE("Something is wrong @fopen(...)"); - } - // mesure file size - file_size = 0; - tmp = fp; - if(tmp != NULL ) { - ////printf("\r\nfile content\r\n"); - int ctmp; - while(1) { - ctmp = fgetc(tmp); - if(ctmp != EOF) { - //////printf("%c", ctmp); - file_size++; - } else { - //////printf("[EOF]\r\n"); - break; - } - } - ////printf("file size: %d\r\n", file_size); - if(fseek(tmp, 0L, SEEK_SET) != 0) { - //////printf("fseek failed\r\n"); - } - } else { - file_size = 0; - } - - return fp; -} -int FileHandler::close() -{ - int tmp; - - if(fp != NULL) { - tmp = fclose(fp); - fp = NULL; - return tmp; - } else { - return 1; - } -} - -int FileHandler::getc() -{ - int tmp = fgetc(fp); -#ifdef DEBUG - if(0x20 < tmp && tmp < 0x7e) - printf("%c", tmp); - else if (tmp == '\r') - printf("\r"); - else if (tmp == '\n') - printf("\n"); - else - printf("@"); -#endif - return tmp; -} -bool FileHandler::arrival() -{ - return (bool)fp; -} -bool FileHandler::atEOF() -{ - return (bool)feof(fp); -} -bool FileHandler::hasError() -{ - return (bool)ferror(fp); -} -char *FileHandler::getFullpath() -{ - return fullpath; -} -char *FileHandler::getFilename() -{ - return filename; -} -char *FileHandler::getSuffix() -{ - return suffix; -} -int FileHandler::getFileSize() -{ - return file_size; -} \ No newline at end of file