Improve response headers composer
authorEduardo Silva <edsiper@gmail.com>
Wed, 10 Mar 2010 00:59:00 +0000 (21:59 -0300)
committerEduardo Silva <edsiper@gmail.com>
Wed, 10 Mar 2010 00:59:00 +0000 (21:59 -0300)
src/header.c
src/include/clock.h
src/include/header.h
src/memory.c
src/mimetype.c
src/utils.c

index e82d8e7..16d732f 100644 (file)
@@ -167,7 +167,7 @@ int mk_header_send(int fd, struct client_request *cr,
     mk_iov_add_entry(iov,
                      header_current_time.data,
                      header_current_time.len,
-                     mk_iov_crlf, MK_IOV_NOT_FREE_BUF);
+                     mk_iov_none, MK_IOV_NOT_FREE_BUF);
 
     /* Connection */
     if (config->keep_alive == VAR_ON &&
@@ -214,7 +214,7 @@ int mk_header_send(int fd, struct client_request *cr,
                          mk_iov_none, MK_IOV_NOT_FREE_BUF);
         mk_iov_add_entry(iov, sh->last_modified.data,
                          sh->last_modified.len,
-                         mk_iov_crlf, MK_IOV_NOT_FREE_BUF);
+                         mk_iov_none, MK_IOV_NOT_FREE_BUF);
     }
 
     /* Content type */
@@ -227,7 +227,7 @@ int mk_header_send(int fd, struct client_request *cr,
         mk_iov_add_entry(iov,
                          sh->content_type.data,
                          sh->content_type.len,
-                         mk_iov_crlf, MK_IOV_NOT_FREE_BUF);
+                         mk_iov_none, MK_IOV_NOT_FREE_BUF);
     }
 
     /* Transfer Encoding */
@@ -256,7 +256,7 @@ int mk_header_send(int fd, struct client_request *cr,
         if (sh->ranges[0] >= 0 && sh->ranges[1] == -1) {
             length = (unsigned int)
                 (sh->content_length - sh->ranges[0]);
-            m_build_buffer(&buffer, &len, "%s %i", RH_CONTENT_LENGTH, length);
+            m_build_buffer(&buffer, &len, "%s%i", RH_CONTENT_LENGTH, length);
             mk_iov_add_entry(iov, buffer, len, mk_iov_crlf, MK_IOV_FREE_BUF);
 
             m_build_buffer(&buffer,
@@ -308,11 +308,11 @@ int mk_header_send(int fd, struct client_request *cr,
     else if (sh->content_length >= 0) {
         mk_iov_add_entry(iov, mk_rh_content_length.data,
                          mk_rh_content_length.len,
-                         mk_iov_space, MK_IOV_NOT_FREE_BUF);
+                         mk_iov_none, MK_IOV_NOT_FREE_BUF);
 
         mk_iov_add_entry(iov, sh->content_length_p.data,
                          sh->content_length_p.len,
-                         mk_iov_crlf, MK_IOV_NOT_FREE_BUF);
+                         mk_iov_none, MK_IOV_NOT_FREE_BUF);
     }
 
     if (sh->cgi == SH_NOCGI || sh->breakline == MK_HEADER_BREAKLINE) {
index a9cb20c..c5e03d1 100644 (file)
@@ -32,7 +32,7 @@ time_t monkey_init_time;
 mk_pointer log_current_time;
 mk_pointer header_current_time;
 
-#define GMT_DATEFORMAT "%a, %d %b %Y %H:%M:%S GMT"
+#define GMT_DATEFORMAT "%a, %d %b %Y %H:%M:%S GMT\r\n"
 
 void *mk_clock_worker_init(void *args);
 void mk_clock_set_time();
index be2dad0..2f1af7a 100644 (file)
@@ -71,10 +71,11 @@ mk_pointer mk_header_short_location;
 mk_pointer mk_header_short_ct;
 
 /* Accept ranges */
-#define MK_HEADER_ACCEPT_RANGES "Accept-Ranges: bytes"
+#define MK_HEADER_ACCEPT_RANGES "Accept-Ranges: bytes" MK_CRLF
 
 #define MK_HEADER_CONN_KA "Connection: Keep-Alive" MK_CRLF
 #define MK_HEADER_CONN_CLOSE "Connection: Close" MK_CRLF
+#define MK_HEADER_CONTENT_LENGTH "Content-Length: "
 
 /* Transfer Encoding */
 #define MK_HEADER_TE_TYPE_CHUNKED 0
@@ -85,6 +86,7 @@ mk_pointer mk_header_short_ct;
 /* mk pointers with response server headers */
 mk_pointer mk_header_conn_ka;
 mk_pointer mk_header_conn_close;
+mk_pointer mk_header_content_length;
 mk_pointer mk_header_accept_ranges;
 mk_pointer mk_header_te_chunked;
 mk_pointer mk_header_last_modified;
index a4d1576..d37461c 100644 (file)
@@ -196,14 +196,13 @@ void mk_mem_pointers_init()
     /* Server response normal headers */
     mk_pointer_set(&mk_header_conn_ka, MK_HEADER_CONN_KA);
     mk_pointer_set(&mk_header_conn_close, MK_HEADER_CONN_CLOSE);
+    mk_pointer_set(&mk_header_content_length, MK_HEADER_CONTENT_LENGTH);
     mk_pointer_set(&mk_header_accept_ranges, MK_HEADER_ACCEPT_RANGES);
     mk_pointer_set(&mk_header_te_chunked, MK_HEADER_TE_CHUNKED);
     mk_pointer_set(&mk_header_last_modified, MK_HEADER_LAST_MODIFIED);
 
     mk_http_status_list_init();
     mk_iov_separators_init();
-//        mk_palm_set_env();
-
 
     /* Server */
     mk_pointer_set(&mk_monkey_protocol, HTTP_PROTOCOL_11_STR);
index b390f93..3141e64 100644 (file)
 #include "str.h"
 #include "config.h"
 #include "monkey.h"
+#include "request.h"
 
 /* Carga en estructura los mimetypes */
 void mk_mimetype_read_config()
 {
-    char buffer[255], path[MAX_PATH];
-    char *name = 0, *type = 0, *last = 0;
-    FILE *mime_file;
+    char path[MAX_PATH];
+    struct mk_config *c;
 
     snprintf(path, MAX_PATH, "%s/monkey.mime", config->serverconf);
 
-    if ((mime_file = fopen(path, "r")) == NULL) {
-        puts("Error: I can't open monkey.mime file");
-        exit(1);
-    }
-
-    /* Rutina que carga en memoria los mime types */
-    while (fgets(buffer, 255, mime_file)) {
-        int len;
-        len = strlen(buffer);
-        if (buffer[len - 1] == '\n') {
-            buffer[--len] = 0;
-            if (len && buffer[len - 1] == '\r')
-                buffer[--len] = 0;
-        }
-
-        name = strtok_r(buffer, "\"\t ", &last);
-        type = strtok_r(NULL, "\"\t ", &last);
-
-        if (!name || !type)
-            continue;
-        if (buffer[0] == '#')
-            continue;
+    /* Read configuration file */
+    c = mk_config_create(path);
 
-        if (mk_mimetype_add(name, type, NULL) != 0)
+    while (c) {
+        if (mk_mimetype_add(c->key, c->val, NULL) != 0) {
             puts("Error loading Mime Types");
+        }
+        c = c->next;
     }
-    fclose(mime_file);
+
+    /* Free configuration */
+    mk_config_free(c);
 
     /* Set default mime type */
     mimetype_default = mk_mem_malloc_z(sizeof(struct mimetype));
@@ -81,13 +66,18 @@ void mk_mimetype_read_config()
 
 int mk_mimetype_add(char *name, char *type, char *bin_path)
 {
-
+    int len;
     struct mimetype *new_mime, *aux_mime;
 
     new_mime = mk_mem_malloc_z(sizeof(struct mimetype));
 
-    new_mime->name = mk_string_dup(name);
-    mk_pointer_set(&new_mime->type, mk_string_dup(type));
+    new_mime->name = name;
+
+    len = strlen(name) + 2;
+    new_mime->type.data = mk_mem_malloc(len);
+    strcat(new_mime->type.data, MK_CRLF);
+    new_mime->type.len = len;
+
     new_mime->script_bin_path = mk_string_dup(bin_path);
 
     new_mime->next = NULL;
index 5a978ec..c6fd41c 100644 (file)
@@ -273,7 +273,7 @@ mk_pointer mk_utils_int2mkp(int n)
     int size = 32;
 
     buf = mk_mem_malloc(size);
-    len = snprintf(buf, 32, "%i", n);
+    len = snprintf(buf, 32, "%i\r\n", n);
 
     p.data = buf;
     p.len = len;