Index: filed.c ================================================================== --- filed.c +++ filed.c @@ -67,10 +67,12 @@ } struct filed_fileinfo { int fd; size_t len; + char *lastmod; + char *type; }; static struct filed_fileinfo *filed_open_file(const char *path, struct filed_fileinfo *buffer) { /* XXX:TODO: Cache file descriptors */ @@ -86,17 +88,21 @@ lseek(fd, 0, SEEK_SET); buffer->fd = fd; buffer->len = len; + /* XXX:TODO: Determine */ + buffer->type = "text/plain"; + buffer->lastmod = "Now"; + return(buffer); } static char *filed_get_http_request(FILE *fp, char *buffer, size_t buffer_len) { - /* XXX:TODO: Unimplemented */ setlinebuf(fp); + /* XXX:TODO: Unimplemented */ fp = fp; buffer = buffer; buffer_len = buffer_len; fflush(fp); @@ -105,12 +111,17 @@ } static void filed_handle_client(int fd) { struct filed_fileinfo *fileinfo, fileinfo_b; char *path, path_b[1010]; + char *date_current; FILE *fp; + /* XXX:TODO: Determine */ + date_current = "Now"; + + /* Open socket as ANSI I/O for ease of use */ fp = fdopen(fd, "w+b"); if (fp == NULL) { close(fd); return; @@ -125,11 +136,17 @@ fileinfo = filed_open_file(path, &fileinfo_b); if (fileinfo == NULL) { /* XXX: TODO: Return error page */ } else { - /* XXX: TODO: Send HTTP response header */ + fprintf(fp, "HTTP/1.1 200 OK\r\nDate: %s\r\nServer: filed\r\nLast-Modified: %s\r\nContent-Length: %llu\r\nContent-Type: %s\r\nConnection: close\r\n\r\n", + date_current, + fileinfo->lastmod, + (unsigned long long) fileinfo->len, + fileinfo->type + ); + sendfile(fd, fileinfo->fd, NULL, fileinfo->len); close(fileinfo->fd); }