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 Akifumi Takahashi

Committer:
aktk
Date:
Mon Mar 19 09:25:32 2018 +0000
Revision:
16:c3920b5b8572
Parent:
11:0ee7d100db24
Child:
17:ce5845164001
ADD: DEBUG_PRINT_LINE etc. @Filehandler.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aktk 0:cc483bea4fe3 1 #include "FileHandler.h"
aktk 16:c3920b5b8572 2 //#ifndef DEBUG
aktk 16:c3920b5b8572 3 #define FILE_HANDLER_DEBUG
aktk 16:c3920b5b8572 4 //#endif
aktk 16:c3920b5b8572 5
aktk 16:c3920b5b8572 6 namespace FILE_HANDLER
aktk 16:c3920b5b8572 7 {
aktk 16:c3920b5b8572 8 void DEBUG_PRINT_NAME()
aktk 16:c3920b5b8572 9 {
aktk 16:c3920b5b8572 10 #ifdef FILE_HANDLER_DEBUG
aktk 16:c3920b5b8572 11 printf("(DEBUG LINE: FILE_HANDLER) ");
aktk 16:c3920b5b8572 12 #endif
aktk 16:c3920b5b8572 13 }
aktk 16:c3920b5b8572 14
aktk 16:c3920b5b8572 15 void DEBUG_PRINT_LINE(const char* arg_line)
aktk 16:c3920b5b8572 16 {
aktk 16:c3920b5b8572 17 #ifdef FILE_HANDLER_DEBUG
aktk 16:c3920b5b8572 18 DEBUG_PRINT_NAME();
aktk 16:c3920b5b8572 19 printf(arg_line);
aktk 16:c3920b5b8572 20 printf("\r\n");
aktk 0:cc483bea4fe3 21 #endif
aktk 16:c3920b5b8572 22 }
aktk 16:c3920b5b8572 23 template<typename T>
aktk 16:c3920b5b8572 24 void DEBUG_PRINT_LINE(const char* arg_line, T arg_t)
aktk 16:c3920b5b8572 25 {
aktk 16:c3920b5b8572 26 #ifdef FILE_HANDLER_DEBUG
aktk 16:c3920b5b8572 27 DEBUG_PRINT_NAME();
aktk 16:c3920b5b8572 28 printf(arg_line, arg_t);
aktk 16:c3920b5b8572 29 printf("\r\n");
aktk 16:c3920b5b8572 30 #endif
aktk 16:c3920b5b8572 31 }
aktk 16:c3920b5b8572 32 template<typename T1, typename T2>
aktk 16:c3920b5b8572 33 void DEBUG_PRINT_LINE(const char* arg_line, T1 arg_t1, T2 arg_t2)
aktk 16:c3920b5b8572 34 {
aktk 16:c3920b5b8572 35 #ifdef FILE_HANDLER_DEBUG
aktk 16:c3920b5b8572 36 DEBUG_PRINT_NAME();
aktk 16:c3920b5b8572 37 printf(arg_line, arg_t1, arg_t2);
aktk 16:c3920b5b8572 38 printf("\r\n");
aktk 16:c3920b5b8572 39 #endif
aktk 16:c3920b5b8572 40 }
aktk 16:c3920b5b8572 41 }
aktk 16:c3920b5b8572 42 using namespace FILE_HANDLER;
aktk 16:c3920b5b8572 43
aktk 0:cc483bea4fe3 44 LocalFileSystem local("local");
aktk 0:cc483bea4fe3 45
aktk 0:cc483bea4fe3 46 FileHandler::FileHandler()
aktk 0:cc483bea4fe3 47 {
aktk 0:cc483bea4fe3 48 fullpath = NULL;
aktk 0:cc483bea4fe3 49 filename = NULL;
aktk 0:cc483bea4fe3 50 suffix = NULL;
aktk 0:cc483bea4fe3 51 fp = NULL;
aktk 0:cc483bea4fe3 52 file_size = 0;
aktk 0:cc483bea4fe3 53 }
aktk 0:cc483bea4fe3 54 FileHandler::~FileHandler()
aktk 0:cc483bea4fe3 55 {
aktk 0:cc483bea4fe3 56 if (fullpath != NULL) free(fullpath);
aktk 0:cc483bea4fe3 57 if (fp != NULL) fclose(fp);
aktk 0:cc483bea4fe3 58 }
aktk 0:cc483bea4fe3 59
aktk 0:cc483bea4fe3 60 FILE* FileHandler::open
aktk 0:cc483bea4fe3 61 ( const char* arg_filepath,
aktk 0:cc483bea4fe3 62 const char* arg_mode
aktk 0:cc483bea4fe3 63 )
aktk 0:cc483bea4fe3 64 {
aktk 0:cc483bea4fe3 65 FILE *tmp;
aktk 0:cc483bea4fe3 66
aktk 16:c3920b5b8572 67 DEBUG_PRINT_LINE("\r\n"
aktk 16:c3920b5b8572 68 "fp: %d@FileHandler::open\r\n", fp);
aktk 0:cc483bea4fe3 69 if (fullpath != NULL) free(fullpath);
aktk 0:cc483bea4fe3 70 fullpath = (char*)malloc(sizeof(char) * (strlen("/local/") + strlen(arg_filepath) + strlen("index.htm") + 1));
aktk 16:c3920b5b8572 71 DEBUG_PRINT_LINE("fp: %d@FileHandler::open\r\n", fp);
aktk 0:cc483bea4fe3 72
aktk 0:cc483bea4fe3 73 // Path formatting
aktk 0:cc483bea4fe3 74 if (arg_filepath[0] == '/') {
aktk 0:cc483bea4fe3 75 sprintf(fullpath, "/local/%s", arg_filepath + 1);
aktk 0:cc483bea4fe3 76 } else {
aktk 0:cc483bea4fe3 77 sprintf(fullpath, "/local/%s", arg_filepath);
aktk 0:cc483bea4fe3 78 }
aktk 16:c3920b5b8572 79 DEBUG_PRINT_LINE("full-file-path: %s", fullpath);
aktk 0:cc483bea4fe3 80 // if the argument has no file name but directory, defalt settiing.
aktk 0:cc483bea4fe3 81 if (fullpath[strlen(fullpath) - 1] == '/')
aktk 0:cc483bea4fe3 82 strcat(fullpath, "index.htm");
aktk 16:c3920b5b8572 83 // store the file name part into a pointer
aktk 0:cc483bea4fe3 84 filename = strrchr(fullpath, '/');
aktk 0:cc483bea4fe3 85 if(filename != NULL) filename++; // remove '/' and just get only the file name.
aktk 0:cc483bea4fe3 86 // store the suffix part to a pointer
aktk 0:cc483bea4fe3 87 suffix = strchr(filename, '.');
aktk 0:cc483bea4fe3 88 if(suffix != NULL) suffix++; // remove '.' and just get only the suffix.
aktk 0:cc483bea4fe3 89 #ifdef DEBUG
aktk 11:0ee7d100db24 90 //////printf("full path: %s\r\nfilename: %s\r\nsuffix: %s\r\n", getFullpath(), getFilename(), getSuffix());
aktk 0:cc483bea4fe3 91 #endif
aktk 0:cc483bea4fe3 92 fp = fopen(fullpath, arg_mode);
aktk 0:cc483bea4fe3 93 #ifdef DEBUG
aktk 11:0ee7d100db24 94 //////////printf("file opened@FileHandler::open\r\n");
aktk 0:cc483bea4fe3 95 #endif
aktk 0:cc483bea4fe3 96 // mesure file size
aktk 0:cc483bea4fe3 97 file_size = 0;
aktk 0:cc483bea4fe3 98 tmp = fp;
aktk 0:cc483bea4fe3 99 if(tmp != NULL ) {
aktk 11:0ee7d100db24 100 ////printf("\r\nfile content\r\n");
aktk 0:cc483bea4fe3 101 int ctmp;
aktk 0:cc483bea4fe3 102 while(1) {
aktk 0:cc483bea4fe3 103 ctmp = fgetc(tmp);
aktk 0:cc483bea4fe3 104 if(ctmp != EOF) {
aktk 11:0ee7d100db24 105 //////printf("%c", ctmp);
aktk 0:cc483bea4fe3 106 file_size++;
aktk 0:cc483bea4fe3 107 } else {
aktk 11:0ee7d100db24 108 //////printf("[EOF]\r\n");
aktk 0:cc483bea4fe3 109 break;
aktk 0:cc483bea4fe3 110 }
aktk 0:cc483bea4fe3 111 }
aktk 11:0ee7d100db24 112 ////printf("file size: %d\r\n", file_size);
aktk 0:cc483bea4fe3 113 if(fseek(tmp, 0L, SEEK_SET) != 0) {
aktk 11:0ee7d100db24 114 //////printf("fseek failed\r\n");
aktk 0:cc483bea4fe3 115 }
aktk 0:cc483bea4fe3 116 } else {
aktk 0:cc483bea4fe3 117 file_size = 0;
aktk 0:cc483bea4fe3 118 }
aktk 0:cc483bea4fe3 119
aktk 0:cc483bea4fe3 120 return fp;
aktk 0:cc483bea4fe3 121 }
aktk 0:cc483bea4fe3 122 int FileHandler::close()
aktk 0:cc483bea4fe3 123 {
aktk 0:cc483bea4fe3 124 int tmp;
aktk 7:184c6f1ace94 125
aktk 7:184c6f1ace94 126 if(fp != NULL) {
aktk 0:cc483bea4fe3 127 tmp = fclose(fp);
aktk 0:cc483bea4fe3 128 fp = NULL;
aktk 0:cc483bea4fe3 129 return tmp;
aktk 7:184c6f1ace94 130 } else {
aktk 0:cc483bea4fe3 131 return 1;
aktk 0:cc483bea4fe3 132 }
aktk 0:cc483bea4fe3 133 }
aktk 0:cc483bea4fe3 134
aktk 0:cc483bea4fe3 135 int FileHandler::getc()
aktk 0:cc483bea4fe3 136 {
aktk 0:cc483bea4fe3 137 int tmp = fgetc(fp);
aktk 11:0ee7d100db24 138 #ifdef DEBUG
aktk 0:cc483bea4fe3 139 if(0x20 < tmp && tmp < 0x7e)
aktk 0:cc483bea4fe3 140 printf("%c", tmp);
aktk 0:cc483bea4fe3 141 else if (tmp == '\r')
aktk 0:cc483bea4fe3 142 printf("\r");
aktk 0:cc483bea4fe3 143 else if (tmp == '\n')
aktk 0:cc483bea4fe3 144 printf("\n");
aktk 0:cc483bea4fe3 145 else
aktk 0:cc483bea4fe3 146 printf("@");
aktk 11:0ee7d100db24 147 #endif
aktk 11:0ee7d100db24 148 return tmp;
aktk 0:cc483bea4fe3 149 }
aktk 0:cc483bea4fe3 150 bool FileHandler::arrival()
aktk 0:cc483bea4fe3 151 {
aktk 0:cc483bea4fe3 152 return (bool)fp;
aktk 0:cc483bea4fe3 153 }
aktk 0:cc483bea4fe3 154 bool FileHandler::atEOF()
aktk 0:cc483bea4fe3 155 {
aktk 0:cc483bea4fe3 156 return (bool)feof(fp);
aktk 0:cc483bea4fe3 157 }
aktk 0:cc483bea4fe3 158 bool FileHandler::hasError()
aktk 0:cc483bea4fe3 159 {
aktk 0:cc483bea4fe3 160 return (bool)ferror(fp);
aktk 0:cc483bea4fe3 161 }
aktk 0:cc483bea4fe3 162 char *FileHandler::getFullpath()
aktk 0:cc483bea4fe3 163 {
aktk 0:cc483bea4fe3 164 return fullpath;
aktk 0:cc483bea4fe3 165 }
aktk 0:cc483bea4fe3 166 char *FileHandler::getFilename()
aktk 0:cc483bea4fe3 167 {
aktk 0:cc483bea4fe3 168 return filename;
aktk 0:cc483bea4fe3 169 }
aktk 0:cc483bea4fe3 170 char *FileHandler::getSuffix()
aktk 0:cc483bea4fe3 171 {
aktk 0:cc483bea4fe3 172 return suffix;
aktk 0:cc483bea4fe3 173 }
aktk 0:cc483bea4fe3 174 int FileHandler::getFileSize()
aktk 0:cc483bea4fe3 175 {
aktk 0:cc483bea4fe3 176 return file_size;
aktk 0:cc483bea4fe3 177 }