The library with which to configure a Web Socket Server on a Mbed. This lib was coded by a day at least one year before when this description is written. It will be updated adopting mbed os 5.

Dependencies:   mbedTLSLibrary

Dependents:   SIMPLE_WSS

Committer:
aktk
Date:
Sat Mar 03 19:01:29 2018 +0000
Revision:
2:ccaae77f91b8
Put out the HTTP_SERVER lib and copy&pasted just the handler directory from the lib to this.

Who changed what in which revision?

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