- Lauri
>From 4f637b87582ba72076784151b66f072d39632feb Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <[email protected]> Date: Sun, 17 Jun 2012 17:14:48 +0300 Subject: [PATCH 2/3] http: Mark range_set, range_parse as static
Signed-off-by: Lauri Kasanen <[email protected]> --- src/include/mk_http.h | 2 - src/mk_http.c | 202 ++++++++++++++++++++++++------------------------ 2 files changed, 101 insertions(+), 103 deletions(-) diff --git a/src/include/mk_http.h b/src/include/mk_http.h index 48b2d63..8e7acef 100644 --- a/src/include/mk_http.h +++ b/src/include/mk_http.h @@ -72,8 +72,6 @@ mk_pointer mk_http_protocol_check_str(int protocol); int mk_http_init(struct client_session *cs, struct session_request *sr); int mk_http_keepalive_check(struct client_session *cs); -int mk_http_range_set(struct session_request *sr, long file_size); -int mk_http_range_parse(struct session_request *sr); int mk_http_pending_request(struct client_session *cs); int mk_http_send_file(struct client_session *cs, struct session_request *sr); diff --git a/src/mk_http.c b/src/mk_http.c index af889df..e3e1c35 100644 --- a/src/mk_http.c +++ b/src/mk_http.c @@ -103,6 +103,107 @@ mk_pointer mk_http_method_check_str(int method) return mk_http_method_null_p; } +static int mk_http_range_set(struct session_request *sr, long file_size) +{ + struct response_headers *sh = &sr->headers; + + sr->bytes_to_send = file_size; + sr->bytes_offset = 0; + + if (config->resume == MK_TRUE && sr->range.data) { + /* yyy- */ + if (sh->ranges[0] >= 0 && sh->ranges[1] == -1) { + sr->bytes_offset = sh->ranges[0]; + sr->bytes_to_send = file_size - sr->bytes_offset; + } + + /* yyy-xxx */ + if (sh->ranges[0] >= 0 && sh->ranges[1] >= 0) { + sr->bytes_offset = sh->ranges[0]; + sr->bytes_to_send = labs(sh->ranges[1] - sh->ranges[0]) + 1; + } + + /* -xxx */ + if (sh->ranges[0] == -1 && sh->ranges[1] > 0) { + sr->bytes_to_send = sh->ranges[1]; + sr->bytes_offset = file_size - sh->ranges[1]; + } + + if (sr->bytes_offset > file_size || sr->bytes_to_send > file_size) { + return -1; + } + + lseek(sr->fd_file, sr->bytes_offset, SEEK_SET); + } + return 0; + + +} + +static int mk_http_range_parse(struct session_request *sr) +{ + int eq_pos, sep_pos, len; + char *buffer = 0; + struct response_headers *sh; + + if (!sr->range.data) + return -1; + + if ((eq_pos = mk_string_char_search(sr->range.data, '=', sr->range.len)) < 0) + return -1; + + if (strncasecmp(sr->range.data, "Bytes", eq_pos) != 0) + return -1; + + if ((sep_pos = mk_string_char_search(sr->range.data, '-', sr->range.len)) < 0) + return -1; + + len = sr->range.len; + sh = &sr->headers; + + /* =-xxx */ + if (eq_pos + 1 == sep_pos) { + sh->ranges[0] = -1; + sh->ranges[1] = (unsigned long) atol(sr->range.data + sep_pos + 1); + + if (sh->ranges[1] <= 0) { + return -1; + } + + sh->content_length = sh->ranges[1]; + return 0; + } + + /* =yyy-xxx */ + if ((eq_pos + 1 != sep_pos) && (len > sep_pos + 1)) { + buffer = mk_string_copy_substr(sr->range.data, eq_pos + 1, sep_pos); + sh->ranges[0] = (unsigned long) atol(buffer); + mk_mem_free(buffer); + + buffer = mk_string_copy_substr(sr->range.data, sep_pos + 1, len); + sh->ranges[1] = (unsigned long) atol(buffer); + mk_mem_free(buffer); + + if (sh->ranges[1] <= 0 || (sh->ranges[0] > sh->ranges[1])) { + return -1; + } + + sh->content_length = abs(sh->ranges[1] - sh->ranges[0]) + 1; + return 0; + } + /* =yyy- */ + if ((eq_pos + 1 != sep_pos) && (len == sep_pos + 1)) { + buffer = mk_string_copy_substr(sr->range.data, eq_pos + 1, len); + sr->headers.ranges[0] = (unsigned long) atol(buffer); + mk_mem_free(buffer); + + sh->content_length = (sh->content_length - sh->ranges[0]); + return 0; + } + + return -1; +} + int mk_http_method_get(char *body) { int int_method, pos = 0; @@ -546,107 +647,6 @@ int mk_http_keepalive_check(struct client_session *cs) return 0; } -int mk_http_range_set(struct session_request *sr, long file_size) -{ - struct response_headers *sh = &sr->headers; - - sr->bytes_to_send = file_size; - sr->bytes_offset = 0; - - if (config->resume == MK_TRUE && sr->range.data) { - /* yyy- */ - if (sh->ranges[0] >= 0 && sh->ranges[1] == -1) { - sr->bytes_offset = sh->ranges[0]; - sr->bytes_to_send = file_size - sr->bytes_offset; - } - - /* yyy-xxx */ - if (sh->ranges[0] >= 0 && sh->ranges[1] >= 0) { - sr->bytes_offset = sh->ranges[0]; - sr->bytes_to_send = labs(sh->ranges[1] - sh->ranges[0]) + 1; - } - - /* -xxx */ - if (sh->ranges[0] == -1 && sh->ranges[1] > 0) { - sr->bytes_to_send = sh->ranges[1]; - sr->bytes_offset = file_size - sh->ranges[1]; - } - - if (sr->bytes_offset > file_size || sr->bytes_to_send > file_size) { - return -1; - } - - lseek(sr->fd_file, sr->bytes_offset, SEEK_SET); - } - return 0; - - -} - -int mk_http_range_parse(struct session_request *sr) -{ - int eq_pos, sep_pos, len; - char *buffer = 0; - struct response_headers *sh; - - if (!sr->range.data) - return -1; - - if ((eq_pos = mk_string_char_search(sr->range.data, '=', sr->range.len)) < 0) - return -1; - - if (strncasecmp(sr->range.data, "Bytes", eq_pos) != 0) - return -1; - - if ((sep_pos = mk_string_char_search(sr->range.data, '-', sr->range.len)) < 0) - return -1; - - len = sr->range.len; - sh = &sr->headers; - - /* =-xxx */ - if (eq_pos + 1 == sep_pos) { - sh->ranges[0] = -1; - sh->ranges[1] = (unsigned long) atol(sr->range.data + sep_pos + 1); - - if (sh->ranges[1] <= 0) { - return -1; - } - - sh->content_length = sh->ranges[1]; - return 0; - } - - /* =yyy-xxx */ - if ((eq_pos + 1 != sep_pos) && (len > sep_pos + 1)) { - buffer = mk_string_copy_substr(sr->range.data, eq_pos + 1, sep_pos); - sh->ranges[0] = (unsigned long) atol(buffer); - mk_mem_free(buffer); - - buffer = mk_string_copy_substr(sr->range.data, sep_pos + 1, len); - sh->ranges[1] = (unsigned long) atol(buffer); - mk_mem_free(buffer); - - if (sh->ranges[1] <= 0 || (sh->ranges[0] > sh->ranges[1])) { - return -1; - } - - sh->content_length = abs(sh->ranges[1] - sh->ranges[0]) + 1; - return 0; - } - /* =yyy- */ - if ((eq_pos + 1 != sep_pos) && (len == sep_pos + 1)) { - buffer = mk_string_copy_substr(sr->range.data, eq_pos + 1, len); - sr->headers.ranges[0] = (unsigned long) atol(buffer); - mk_mem_free(buffer); - - sh->content_length = (sh->content_length - sh->ranges[0]); - return 0; - } - - return -1; -} - /* * Check if client request still has pending data * -- 1.7.2.1
_______________________________________________ Monkey mailing list [email protected] http://lists.monkey-project.com/listinfo/monkey
