what about if is a POST request ?, ranges should only work on GET and HEAD methods.
On Tue, Jul 16, 2013 at 10:47 AM, hamza zia <[email protected]> wrote: > I guess this should work. It only sends the range header if the response > is 206. The patch is attached > > hamza > > > On 14 July 2013 19:38, Sonny Karlsson <[email protected]> wrote: > >> On Sun, Jul 14, 2013 at 06:34:06PM +0200, Hamza Zia wrote: >> > From: hamza zia <[email protected]> >> > >> > Some plugins may want to support HTTP range requests so it is parsed and >> > filled in the request headers before calling the plugin. >> >> This is a good idea, but these changes are not enough to support this. >> >> If a plugin that isn't aware of the range headers serves a request with >> range headers, the response headers will be invalid. >> Monkey will add "Content-Range:" in mk_header_send(). >> >> I think you could make some changes so that these headers are only added >> on 206 responses. >> >> > --- >> > src/mk_http.c | 21 +++++++++++---------- >> > 1 file changed, 11 insertions(+), 10 deletions(-) >> > >> > diff --git a/src/mk_http.c b/src/mk_http.c >> > index 0f8a976..700cbda 100644 >> > --- a/src/mk_http.c >> > +++ b/src/mk_http.c >> > @@ -135,6 +135,9 @@ static int mk_http_range_set(struct session_request >> *sr, long file_size) >> > >> > lseek(sr->fd_file, sr->bytes_offset, SEEK_SET); >> > } >> > + >> > + sh->content_length = sr->bytes_to_send; >> > + >> > return 0; >> > } >> > >> > @@ -168,7 +171,6 @@ static int mk_http_range_parse(struct >> session_request *sr) >> > return -1; >> > } >> > >> > - sh->content_length = sh->ranges[1]; >> > return 0; >> > } >> > >> > @@ -186,16 +188,15 @@ static int mk_http_range_parse(struct >> session_request *sr) >> > 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); >> > + sr->headers.ranges[1] = -1; >> > mk_mem_free(buffer); >> > >> > - sh->content_length = (sh->content_length - sh->ranges[0]); >> > return 0; >> > } >> > >> > @@ -372,6 +373,11 @@ int mk_http_init(struct client_session *cs, struct >> session_request *sr) >> > return mk_request_error(MK_CLIENT_FORBIDDEN, cs, sr); >> > } >> > >> > + /* Parse HTTP Ranges */ >> > + sr->headers.ranges[0] = sr->headers.ranges[1] = -1; >> > + if (sr->range.data != NULL && mk_http_range_parse(sr) < 0) { >> > + return mk_request_error(MK_CLIENT_BAD_REQUEST, cs, sr); >> > + } >> > >> > if (mk_file_get_info(sr->real_path.data, &sr->file_info) != 0) { >> > /* if the resource requested doesn't exists, let's >> > @@ -546,13 +552,8 @@ int mk_http_init(struct client_session *cs, struct >> session_request *sr) >> > if (sr->method == HTTP_METHOD_GET || sr->method == >> HTTP_METHOD_HEAD) { >> > sr->headers.content_type = mime->type; >> > >> > - /* HTTP Ranges */ >> > - if (sr->range.data != NULL && config->resume == MK_TRUE) { >> > - if (mk_http_range_parse(sr) < 0) { >> > - sr->headers.ranges[0] = -1; >> > - sr->headers.ranges[1] = -1; >> > - return mk_request_error(MK_CLIENT_BAD_REQUEST, cs, sr); >> > - } >> > + /* Use parsed HTTP Range if available */ >> > + if (config->resume == MK_TRUE) { >> > if (sr->headers.ranges[0] >= 0 || sr->headers.ranges[1] >= >> 0) { >> > mk_header_set_http_status(sr, MK_HTTP_PARTIAL); >> > } >> > -- >> > 1.8.1.2 >> > >> > _______________________________________________ >> > Monkey mailing list >> > [email protected] >> > http://lists.monkey-project.com/listinfo/monkey >> >> -- >> Sonny Karlsson >> _______________________________________________ >> Monkey mailing list >> [email protected] >> http://lists.monkey-project.com/listinfo/monkey >> > > > _______________________________________________ > Monkey mailing list > [email protected] > http://lists.monkey-project.com/listinfo/monkey > > -- Eduardo Silva http://edsiper.linuxchile.cl http://monkey-project.com
_______________________________________________ Monkey mailing list [email protected] http://lists.monkey-project.com/listinfo/monkey
