Changeset 154 for uKadecot/trunk/uip
- Timestamp:
- Feb 2, 2016, 9:54:35 PM (8 years ago)
- Location:
- uKadecot/trunk/uip/apps/webserver
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/uip/apps/webserver/httpd-fs.c
r108 r154 38 38 #include "pff.h" 39 39 #include "diskio.h" 40 #include "mmc_rspi.h" 41 #include <string.h> 40 42 41 43 //#define FILE_DUMP 42 44 #ifdef FILE_DUMP 43 #include <string.h>44 45 char path[256] = ""; 45 46 FATFS fs; … … 98 99 FRESULT res; 99 100 #endif 100 disk_initialize(); 101 ramdisk_initialize(); 102 mmc_rspi_initialize(); 101 103 #ifdef FILE_DUMP 102 104 if((res = pf_mount(&fs)) != FR_OK){ … … 112 114 /*-----------------------------------------------------------------------------------*/ 113 115 int 114 httpd_fs_open( const char *name, struct httpd_fs_file *file)116 httpd_fs_open(int drv, const char *name, struct httpd_fs_file *file) 115 117 { 116 118 FRESULT res; 117 FATFS *fs = (FATFS *)&file->fs; 119 FATFS *fs = (FATFS *)file->fs; 120 121 file->pos = 0; 122 file->len = 0; 123 file->drv = drv; 124 file->name = name; 125 memset(fs, 0, sizeof(FATFS)); 126 127 if (drv == 0) { 128 fs->disk_get_status = ramdisk_get_status; 129 fs->disk_readp = ramdisk_readp; 130 fs->disk_writep = ramdisk_writep; 131 } 132 else { 133 fs->disk_get_status = mmc_rspi_get_status; 134 fs->disk_readp = mmc_rspi_readp; 135 fs->disk_writep = mmc_rspi_writep; 136 } 118 137 119 138 if (fs->fs_type == 0){ … … 125 144 126 145 if((res = pf_open(fs, name)) != FR_OK){ 127 printf("pf_open(% s) => %d\n", name, res);146 printf("pf_open(%d:%s) => %d\n", drv, name, res); 128 147 return 0; 129 148 } 130 149 131 file->pos = 0;132 150 file->len = fs->fsize; 133 file->name = name;134 151 135 //printf("httpd_fs_open(% s) %d\n", name, file->len);152 //printf("httpd_fs_open(%d:%s) %d\n", drv, name, file->len); 136 153 137 154 return 1; … … 143 160 FRESULT ret; 144 161 UINT rlen; 145 FATFS *fs = (FATFS *) &file->fs;162 FATFS *fs = (FATFS *)file->fs; 146 163 147 164 if((ret = pf_lseek(fs, file->pos)) != FR_OK){ 148 printf("pf_lseek(%d ) => %d\n", file->pos, ret);165 printf("pf_lseek(%d:%s, %d) => %d\n", file->drv, file->name, file->pos, ret); 149 166 return 0; 150 167 } 151 168 152 169 if(file->pos != fs->fptr){ 153 printf("pf_lseek(%d ) != %d\n", file->pos, fs->fptr);170 printf("pf_lseek(%d:%s, %d) != %d\n", file->drv, file->name, file->pos, fs->fptr); 154 171 } 155 172 156 173 if((ret = pf_read(fs, dst, len, &rlen)) != FR_OK){ 157 printf("pf_read(% x, %d) => %d\n", dst, len, ret);174 printf("pf_read(%d:%s, 0x%p, %d) => %d\n", file->drv, file->name, dst, len, ret); 158 175 return 0; 159 176 } 160 177 161 //printf("httpd_fs_read(% s, %d, %d) => %d\n", file->name, file->pos, len, rlen);178 //printf("httpd_fs_read(%d:%s, %d, %d) => %d\n", file->drv, file->name, file->pos, len, rlen); 162 179 163 180 return rlen; -
uKadecot/trunk/uip/apps/webserver/httpd-fs.h
r108 r154 41 41 int pos; 42 42 int len; 43 int drv; 43 44 const char *name; 44 char fs[64/*>sizeof(FATFS)*/];45 void *fs; 45 46 }; 46 47 47 48 /* file must be allocated by caller and will be filled in 48 49 by the function. */ 49 int httpd_fs_open( const char *name, struct httpd_fs_file *file);50 int httpd_fs_open(int drv, const char *name, struct httpd_fs_file *file); 50 51 int httpd_fs_read(struct httpd_fs_file *file, void *dst, int len); 51 52 -
uKadecot/trunk/uip/apps/webserver/httpd.c
r152 r154 198 198 memcpy(pos, statushdr, len); pos += len; 199 199 200 len = strlen(http_content_encoding_gzip); 201 memcpy(pos, http_content_encoding_gzip, len); pos += len; 200 if (s->drv == 0) { 201 len = strlen(http_content_encoding_gzip); 202 memcpy(pos, http_content_encoding_gzip, len); pos += len; 203 } 202 204 203 205 ptr = strrchr(s->message.request_url, ISO_period); … … 244 246 PT_THREAD(handle_output(struct httpd_state *s)) 245 247 { 246 char *ptr;247 248 248 PT_BEGIN(&s->outputpt); 249 249 250 if (!httpd_fs_open(s->message.request_url, &s->file)) { 251 httpd_fs_open(http_404_html, &s->file); 250 s->file.fs = ((char *)&s[1]) - 64 - 512; 251 252 if (!httpd_fs_open(s->drv, s->filename, &s->file)) { 253 s->drv = 0; 254 httpd_fs_open(s->drv, http_404_html, &s->file); 252 255 strcpy_s(s->message.request_url, sizeof(s->message.request_url), http_404_html); 253 256 PT_WAIT_THREAD(&s->outputpt, … … 259 262 send_headers(s, 260 263 http_header_200)); 261 ptr = strchr(s->message.request_url, ISO_period);262 264 PT_WAIT_THREAD(&s->outputpt, send_file(s)); 263 265 } … … 406 408 if ((s->message.request_url[0] == '\0') || ((s->message.request_url[0] == '/') && (s->message.request_url[1] == '\0'))) { 407 409 strncpy_s(s->message.request_url, sizeof(s->message.request_url), http_index_html, sizeof(s->message.request_url)); 410 s->filename = s->message.request_url; 411 } 412 /* "/~/"ならSDカードから読み込み */ 413 else if ((s->message.request_url[0] == '/') && (s->message.request_url[1] == '~') && (s->message.request_url[2] == '/')) { 414 s->drv = 1; 415 s->filename = &s->message.request_url[2]; 416 } 417 else { 418 s->drv = 0; 419 s->filename = s->message.request_url; 408 420 } 409 421 -
uKadecot/trunk/uip/apps/webserver/httpd.h
r108 r154 47 47 char inputbuf[50]; 48 48 char state; 49 int drv; 50 char *filename; 51 int len; 49 52 struct httpd_fs_file file; 50 int len;51 unsigned short count;52 53 int parse_pos; 53 54 int parse_len;
Note:
See TracChangeset
for help on using the changeset viewer.