Chromium Code Reviews| Index: net/tools/testserver/testserver.py |
| diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py |
| index acfafae79516c3e82ca85e4578329ae77079545b..ac6d33a180415ffe227c6068d7832a5f28b811a2 100755 |
| --- a/net/tools/testserver/testserver.py |
| +++ b/net/tools/testserver/testserver.py |
| @@ -593,6 +593,25 @@ class TestPageHandler(BasePageHandler): |
| return True |
| + def ReadRequestBody(self): |
| + """This function reads the body of the current HTTP request, handling""" |
| + """both plain and chunked transfer encoded requests.""" |
|
wtc
2011/01/21 19:35:54
Your multi-line comment format seems non-ideal. P
Satish
2011/01/21 20:29:57
Sure :) I saw lines 558-560 which were in this for
|
| + if self.headers.getheader('transfer-encoding') != 'chunked': |
| + length = int(self.headers.getheader('content-length')) |
| + return self.rfile.read(length) |
| + |
| + # Read the response body as chunks. |
|
wtc
2011/01/21 19:35:54
Typo: response body => request body
|
| + body = "" |
| + while True: |
| + line = self.rfile.readline() |
| + if line == "0\r\n": |
| + self.rfile.readline() |
| + break |
|
wtc
2011/01/21 19:35:54
Nit: you can check for "0\r\n" below, after line 6
|
| + length = int(line, 16) |
|
wtc
2011/01/21 19:35:54
What does the argument "16" mean?
Satish
2011/01/21 20:29:57
The second argument is the base and we pass 16 sin
|
| + body += self.rfile.read(length) |
| + self.rfile.read(2) |
| + return body |
| + |
| def EchoHandler(self): |
| """This handler just echoes back the payload of the request, for testing |
| form submission.""" |
| @@ -603,9 +622,7 @@ class TestPageHandler(BasePageHandler): |
| self.send_response(200) |
| self.send_header('Content-type', 'text/html') |
| self.end_headers() |
| - length = int(self.headers.getheader('content-length')) |
| - request = self.rfile.read(length) |
| - self.wfile.write(request) |
| + self.wfile.write(self.ReadRequestBody()) |
| return True |
| def EchoTitleHandler(self): |
| @@ -617,8 +634,7 @@ class TestPageHandler(BasePageHandler): |
| self.send_response(200) |
| self.send_header('Content-type', 'text/html') |
| self.end_headers() |
| - length = int(self.headers.getheader('content-length')) |
| - request = self.rfile.read(length) |
| + request = self.ReadRequestBody() |
| self.wfile.write('<html><head><title>') |
| self.wfile.write(request) |
| self.wfile.write('</title></head></html>') |
| @@ -642,8 +658,7 @@ class TestPageHandler(BasePageHandler): |
| '<h1>Request Body:</h1><pre>') |
| if self.command == 'POST' or self.command == 'PUT': |
| - length = int(self.headers.getheader('content-length')) |
| - qs = self.rfile.read(length) |
| + qs = self.ReadRequestBody() |
| params = cgi.parse_qs(qs, keep_blank_values=1) |
| for param in params: |
| @@ -745,7 +760,7 @@ class TestPageHandler(BasePageHandler): |
| # Consume a request body if present. |
| if self.command == 'POST' or self.command == 'PUT' : |
| - self.rfile.read(int(self.headers.getheader('content-length'))) |
| + self.ReadRequestBody() |
| _, _, url_path, _, query, _ = urlparse.urlparse(self.path) |
| sub_path = url_path[len(prefix):] |
| @@ -1262,8 +1277,7 @@ class TestPageHandler(BasePageHandler): |
| if not self._ShouldHandleRequest("/device_management"): |
| return False |
| - length = int(self.headers.getheader('content-length')) |
| - raw_request = self.rfile.read(length) |
| + raw_request = self.ReadRequestBody() |
| if not self.server._device_management_handler: |
| import device_management |
| @@ -1324,8 +1338,7 @@ class SyncPageHandler(BasePageHandler): |
| if not self._ShouldHandleRequest(test_name): |
| return False |
| - length = int(self.headers.getheader('content-length')) |
| - raw_request = self.rfile.read(length) |
| + raw_request = self.ReadRequestBody() |
| http_response, raw_reply = self.server.HandleCommand( |
| self.path, raw_request) |