#include "shrink.h" /************************************************************************ ** Function name: deal_file ** Descriptions: 处理请求文件 ** output parameters: pr:服务请求指针 *************************************************************************/ void deal_file(struct request * pr) { char lm[64]; const char *mime = ""; const char *fmt; #ifdef _WINFS struct stat st; #elif _NOFS time_t mtime = 1240025040; #endif int n; int i; char * s = pr->path + strlen(pr->path); //获取mime for(i=0;ipath)>mimes[i].extlen && *(s-mimes[i].extlen-1)=='.' && !ncasecmp(mimes[i].ext,s-mimes[i].extlen,mimes[i].extlen)) { mime = mimes[i].val; break; } } //mine值存在 if (strlen(mime) > 0) { #ifdef _WINFS stat(pr->path,&st); #endif fmt = "%a, %d %b %Y %H:%M:%S GMT"; #ifdef _WINFS (void) strftime(lm, sizeof(lm), fmt, localtime(&st.st_mtime)); if (pr->ims && pr->ims>=st.st_mtime) #elif _NOFS (void) strftime(lm, sizeof(lm), fmt, localtime(&mtime)); if (pr->ims && pr->ims>=mtime) #endif //{ // errstatus(pr, 304, "Not Modified","", ""); // return; //} pr->io_local.readlen = _snprintf(pr->io_local.buf,IO_LOCAL, "HTTP/1.1 200 OK\r\n" "Connection: close\r\n" //"Last-Modified: %s\r\n" "Content-Type: %s\r\n" "\r\n",mime); n = fs_read(pr->fd, pr->io_local.buf + pr->io_local.readlen, IO_SPACELEN(&pr->io_local)); pr->io_local.done ++; if (n > 0) { pr->io_local.readlen += n; } } else { errstatus(pr, 400, "Bad Request", "", "Bad request"); } }