Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(803)

Side by Side Diff: Tools/Scripts/webkitpy/thirdparty/mod_pywebsocket/xhr_benchmark_handler.py

Issue 314043002: [WebSocket] Add tests for permessage deflate split frames. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2014 Google Inc. All rights reserved.
2 #
3 # Use of this source code is governed by a BSD-style
4 # license that can be found in the COPYING file or at
5 # https://developers.google.com/open-source/licenses/bsd
6
7
8 from mod_pywebsocket import util
9
10
11 class XHRBenchmarkHandler(object):
12 def __init__(self, headers, rfile, wfile):
13 self._logger = util.get_class_logger(self)
14
15 self.headers = headers
16 self.rfile = rfile
17 self.wfile = wfile
18
19 def do_send(self):
20 content_length = int(self.headers.getheader('Content-Length'))
21
22 self._logger.debug('Requested to receive %s bytes', content_length)
23
24 RECEIVE_BLOCK_SIZE = 1024 * 1024
25
26 bytes_to_receive = content_length
27 while bytes_to_receive > 0:
28 bytes_to_receive_in_this_loop = bytes_to_receive
29 if bytes_to_receive_in_this_loop > RECEIVE_BLOCK_SIZE:
30 bytes_to_receive_in_this_loop = RECEIVE_BLOCK_SIZE
31 received_data = self.rfile.read(bytes_to_receive_in_this_loop)
32 for c in received_data:
33 if c != 'a':
34 self._logger.debug('Request body verification failed')
35 return
36 bytes_to_receive -= len(received_data)
37 if bytes_to_receive < 0:
38 self._logger.debug('Received %d more bytes than expected' %
39 (-bytes_to_receive))
40 return
41
42 # Return the number of received bytes back to the client.
43 response_body = '%d' % content_length
44 self.wfile.write(
45 'HTTP/1.1 200 OK\r\n'
46 'Content-Type: text/html\r\n'
47 'Content-Length: %d\r\n'
48 '\r\n%s' % (len(response_body), response_body))
49 self.wfile.flush()
50
51 def do_receive(self):
52 content_length = int(self.headers.getheader('Content-Length'))
53 request_body = self.rfile.read(content_length)
54
55 request_array = request_body.split(' ')
56 if len(request_array) < 2:
57 self._logger.debug('Malformed request body: %r', request_body)
58 return
59
60 # Parse the size parameter.
61 bytes_to_send = request_array[0]
62 try:
63 bytes_to_send = int(bytes_to_send)
64 except ValueError, e:
65 self._logger.debug('Malformed size parameter: %r', bytes_to_send)
66 return
67 self._logger.debug('Requested to send %s bytes', bytes_to_send)
68
69 # Parse the transfer encoding parameter.
70 chunked_mode = False
71 mode_parameter = request_array[1]
72 if mode_parameter == 'chunked':
73 self._logger.debug('Requested chunked transfer encoding')
74 chunked_mode = True
75 elif mode_parameter != 'none':
76 self._logger.debug('Invalid mode parameter: %r', mode_parameter)
77 return
78
79 # Write a header
80 response_header = (
81 'HTTP/1.1 200 OK\r\n'
82 'Content-Type: application/octet-stream\r\n')
83 if chunked_mode:
84 response_header += 'Transfer-Encoding: chunked\r\n\r\n'
85 else:
86 response_header += (
87 'Content-Length: %d\r\n\r\n' % bytes_to_send)
88 self.wfile.write(response_header)
89 self.wfile.flush()
90
91 # Write a body
92 SEND_BLOCK_SIZE = 1024 * 1024
93
94 while bytes_to_send > 0:
95 bytes_to_send_in_this_loop = bytes_to_send
96 if bytes_to_send_in_this_loop > SEND_BLOCK_SIZE:
97 bytes_to_send_in_this_loop = SEND_BLOCK_SIZE
98
99 if chunked_mode:
100 self.wfile.write('%x\r\n' % bytes_to_send_in_this_loop)
101 self.wfile.write('a' * bytes_to_send_in_this_loop)
102 if chunked_mode:
103 self.wfile.write('\r\n')
104 self.wfile.flush()
105
106 bytes_to_send -= bytes_to_send_in_this_loop
107
108 if chunked_mode:
109 self.wfile.write('0\r\n\r\n')
110 self.wfile.flush()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698