diff options
Diffstat (limited to 'src/net/util.c')
| -rw-r--r-- | src/net/util.c | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/net/util.c b/src/net/util.c index 3b820c9..bada160 100644 --- a/src/net/util.c +++ b/src/net/util.c @@ -37,7 +37,7 @@ int64_t recv_header(int client_fd, char** _buffer, char** header_eof){ /** * @brief calls recv into buffer until everything is read * -*/ + */ // deprecated!! replaced by recv_header (above) int64_t recv_full_buffer(int client_fd, char** _buffer, int* header_eof, int* state){ char* header, *buffer = malloc(BUFFER_SIZE * sizeof * buffer); @@ -59,13 +59,13 @@ int64_t recv_full_buffer(int client_fd, char** _buffer, int* header_eof, int* st if(*header_eof == -1 && (header = strstr(buffer, "\r\n\r\n")) != NULL){ *header_eof = header - buffer; char* cont_len_raw = strstr(buffer, "Content-Length: "); - + if(cont_len_raw == NULL) { len += n; *_buffer = buffer; return len; } - + str* cont_len_str = str_init(""); if(cont_len_raw == NULL) abort(); //i is length of 'Content-Length: ' @@ -92,7 +92,7 @@ int64_t recv_full_buffer(int client_fd, char** _buffer, int* header_eof, int* st buffer = realloc(buffer, len + BUFFER_SIZE + 1); memset(buffer + len, 0, n + 1); } - + if(content_len != -1 && len - *header_eof - 4 >= con_len_full) break; } @@ -104,7 +104,7 @@ int64_t recv_full_buffer(int client_fd, char** _buffer, int* header_eof, int* st /** * @brief converts the request buffer into a parray_t * -*/ + */ int parse_header(char* buffer, int header_eof, parray_t** _table){ if(header_eof == -1) return -1; @@ -117,7 +117,7 @@ int parse_header(char* buffer, int header_eof, parray_t** _table){ if(buffer[oi] == ' ' || buffer[oi] == '\n'){ if(buffer[oi] == '\n') current->c[current->len - 1] = 0; if(item < 3) parray_set(table, item == 0 ? "Request" : - item == 1 ? "Path" : "Version", (void*)str_init(current->c)); + item == 1 ? "Path" : "Version", (void*)str_init(current->c)); str_clear(current); item++; if(buffer[oi] == '\n') break; @@ -174,16 +174,16 @@ int parse_header(char* buffer, int header_eof, parray_t** _table){ /** * @brief contructs an http request * -*/ + */ void http_build(str** _dest, int code, const char* code_det, char* header_vs, char* content, size_t len){ char* dest = malloc(HTTP_BUFFER_SIZE); memset(dest, 0, HTTP_BUFFER_SIZE); sprintf(dest, - "HTTP/1.1 %i %s\r\n" - "%s" - "\r\n" - , code, code_det, header_vs); + "HTTP/1.1 %i %s\r\n" + "%s" + "\r\n" + , code, code_det, header_vs); *_dest = str_init(dest); str_pushl(*_dest, content, len); @@ -193,7 +193,7 @@ void http_build(str** _dest, int code, const char* code_det, char* header_vs, ch /** * @brief gets a string representation of a http code * -*/ + */ const char* http_code(int code){ switch(code){ case 100: return "Continue"; break; @@ -341,7 +341,7 @@ int match_param(char* path, char* match, parray_t* arr){ case GET_KEY: if(path[pi] == '}'){ step = GET_VALUE; - name = calloc(pi - start, sizeof * name); + name = calloc(pi - start + 1, sizeof * name); memcpy(name, path + start + 1, pi - start - 1); start = mi; } @@ -384,9 +384,9 @@ parray_t* route_match(parray_t* paths, char* request, larray_t** _params){ for(int i = 0; i != paths->len; i++){ //if(match_param(paths->P[i].key->c, request)) //*if(strcmp(request, paths->P[i].key->c) == 0)*/{ - //printf("pass!\n"); + //printf("pass!\n"); //printf("%i\n", i); - + temp = parray_init(); if(match_param(paths->P[i].key->c, request, temp)){ @@ -410,6 +410,7 @@ uint64_t _mimetypes_len = 15; void parse_mimetypes(){ if(_mimetypes == NULL || _mimetypes_len == 0) return; + if(mime_type != NULL) return; mime_type = map_init(); FILE* fp = fopen(_mimetypes, "r"); @@ -439,9 +440,10 @@ void parse_mimetypes(){ if(line[i] == ' ' || line[i] == '\t' || line[i] == '\n'){ if(type_len == 0) continue; char* mtype_c = calloc(1024, sizeof * mtype); - strcpy(mtype_c, mtype); + mtype_c = strcpy(mtype_c, mtype); map_set(&mime_type, type, mtype_c); type_len = 0; + free(type); type = calloc(512, sizeof * type); } else { type[type_len] = line[i]; @@ -452,10 +454,12 @@ void parse_mimetypes(){ free(type); } + free(line); fclose(fp); } void _parse_mimetypes(){ + abort(); mime_type = map_init(); FILE* fp = fopen(MIMETYPES, "r"); char* buffer = calloc(1024, sizeof * buffer); @@ -477,7 +481,7 @@ void _parse_mimetypes(){ if(buffer[i + type_len] == '\0' || buffer[i + type_len] == '\n') break; } type[type_len] = '\0'; - + //check if the type has an associated file type if(buffer[i + type_len] == '\0' || buffer[i + type_len] == '\n'){ free(type); |
