Show More
@@ -69,17 +69,21 b' class socketproxy(object):' | |||||
69 | __slots__ = ( |
|
69 | __slots__ = ( | |
70 | '_orig', |
|
70 | '_orig', | |
71 | '_logfp', |
|
71 | '_logfp', | |
72 | '_closeafterrecvbytes', |
|
72 | '_close_after_recv_bytes', | |
73 | '_closeaftersendbytes', |
|
73 | '_close_after_send_bytes', | |
74 | ) |
|
74 | ) | |
75 |
|
75 | |||
76 | def __init__( |
|
76 | def __init__( | |
77 | self, obj, logfp, closeafterrecvbytes=0, closeaftersendbytes=0 |
|
77 | self, obj, logfp, close_after_recv_bytes=0, close_after_send_bytes=0 | |
78 | ): |
|
78 | ): | |
79 | object.__setattr__(self, '_orig', obj) |
|
79 | object.__setattr__(self, '_orig', obj) | |
80 | object.__setattr__(self, '_logfp', logfp) |
|
80 | object.__setattr__(self, '_logfp', logfp) | |
81 | object.__setattr__(self, '_closeafterrecvbytes', closeafterrecvbytes) |
|
81 | object.__setattr__( | |
82 |
|
|
82 | self, '_close_after_recv_bytes', close_after_recv_bytes | |
|
83 | ) | |||
|
84 | object.__setattr__( | |||
|
85 | self, '_close_after_send_bytes', close_after_send_bytes | |||
|
86 | ) | |||
83 |
|
87 | |||
84 | def __getattribute__(self, name): |
|
88 | def __getattribute__(self, name): | |
85 | if name in ('makefile', 'sendall', '_writelog'): |
|
89 | if name in ('makefile', 'sendall', '_writelog'): | |
@@ -104,22 +108,22 b' class socketproxy(object):' | |||||
104 | f = object.__getattribute__(self, '_orig').makefile(mode, bufsize) |
|
108 | f = object.__getattribute__(self, '_orig').makefile(mode, bufsize) | |
105 |
|
109 | |||
106 | logfp = object.__getattribute__(self, '_logfp') |
|
110 | logfp = object.__getattribute__(self, '_logfp') | |
107 | closeafterrecvbytes = object.__getattribute__( |
|
111 | close_after_recv_bytes = object.__getattribute__( | |
108 | self, '_closeafterrecvbytes' |
|
112 | self, '_close_after_recv_bytes' | |
109 | ) |
|
113 | ) | |
110 | closeaftersendbytes = object.__getattribute__( |
|
114 | close_after_send_bytes = object.__getattribute__( | |
111 | self, '_closeaftersendbytes' |
|
115 | self, '_close_after_send_bytes' | |
112 | ) |
|
116 | ) | |
113 |
|
117 | |||
114 | return fileobjectproxy( |
|
118 | return fileobjectproxy( | |
115 | f, |
|
119 | f, | |
116 | logfp, |
|
120 | logfp, | |
117 | closeafterrecvbytes=closeafterrecvbytes, |
|
121 | close_after_recv_bytes=close_after_recv_bytes, | |
118 | closeaftersendbytes=closeaftersendbytes, |
|
122 | close_after_send_bytes=close_after_send_bytes, | |
119 | ) |
|
123 | ) | |
120 |
|
124 | |||
121 | def sendall(self, data, flags=0): |
|
125 | def sendall(self, data, flags=0): | |
122 | remaining = object.__getattribute__(self, '_closeaftersendbytes') |
|
126 | remaining = object.__getattribute__(self, '_close_after_send_bytes') | |
123 |
|
127 | |||
124 | # No read limit. Call original function. |
|
128 | # No read limit. Call original function. | |
125 | if not remaining: |
|
129 | if not remaining: | |
@@ -141,7 +145,7 b' class socketproxy(object):' | |||||
141 | % (len(newdata), len(data), remaining, newdata) |
|
145 | % (len(newdata), len(data), remaining, newdata) | |
142 | ) |
|
146 | ) | |
143 |
|
147 | |||
144 | object.__setattr__(self, '_closeaftersendbytes', remaining) |
|
148 | object.__setattr__(self, '_close_after_send_bytes', remaining) | |
145 |
|
149 | |||
146 | if remaining <= 0: |
|
150 | if remaining <= 0: | |
147 | self._writelog(b'write limit reached; closing socket') |
|
151 | self._writelog(b'write limit reached; closing socket') | |
@@ -157,17 +161,21 b' class fileobjectproxy(object):' | |||||
157 | __slots__ = ( |
|
161 | __slots__ = ( | |
158 | '_orig', |
|
162 | '_orig', | |
159 | '_logfp', |
|
163 | '_logfp', | |
160 | '_closeafterrecvbytes', |
|
164 | '_close_after_recv_bytes', | |
161 | '_closeaftersendbytes', |
|
165 | '_close_after_send_bytes', | |
162 | ) |
|
166 | ) | |
163 |
|
167 | |||
164 | def __init__( |
|
168 | def __init__( | |
165 | self, obj, logfp, closeafterrecvbytes=0, closeaftersendbytes=0 |
|
169 | self, obj, logfp, close_after_recv_bytes=0, close_after_send_bytes=0 | |
166 | ): |
|
170 | ): | |
167 | object.__setattr__(self, '_orig', obj) |
|
171 | object.__setattr__(self, '_orig', obj) | |
168 | object.__setattr__(self, '_logfp', logfp) |
|
172 | object.__setattr__(self, '_logfp', logfp) | |
169 | object.__setattr__(self, '_closeafterrecvbytes', closeafterrecvbytes) |
|
173 | object.__setattr__( | |
170 |
|
|
174 | self, '_close_after_recv_bytes', close_after_recv_bytes | |
|
175 | ) | |||
|
176 | object.__setattr__( | |||
|
177 | self, '_close_after_send_bytes', close_after_send_bytes | |||
|
178 | ) | |||
171 |
|
179 | |||
172 | def __getattribute__(self, name): |
|
180 | def __getattribute__(self, name): | |
173 | if name in ('_close', 'read', 'readline', 'write', '_writelog'): |
|
181 | if name in ('_close', 'read', 'readline', 'write', '_writelog'): | |
@@ -202,7 +210,7 b' class fileobjectproxy(object):' | |||||
202 | self._sock.shutdown(socket.SHUT_RDWR) |
|
210 | self._sock.shutdown(socket.SHUT_RDWR) | |
203 |
|
211 | |||
204 | def read(self, size=-1): |
|
212 | def read(self, size=-1): | |
205 | remaining = object.__getattribute__(self, '_closeafterrecvbytes') |
|
213 | remaining = object.__getattribute__(self, '_close_after_recv_bytes') | |
206 |
|
214 | |||
207 | # No read limit. Call original function. |
|
215 | # No read limit. Call original function. | |
208 | if not remaining: |
|
216 | if not remaining: | |
@@ -227,7 +235,7 b' class fileobjectproxy(object):' | |||||
227 | % (size, origsize, len(result), result) |
|
235 | % (size, origsize, len(result), result) | |
228 | ) |
|
236 | ) | |
229 |
|
237 | |||
230 | object.__setattr__(self, '_closeafterrecvbytes', remaining) |
|
238 | object.__setattr__(self, '_close_after_recv_bytes', remaining) | |
231 |
|
239 | |||
232 | if remaining <= 0: |
|
240 | if remaining <= 0: | |
233 | self._writelog(b'read limit reached; closing socket') |
|
241 | self._writelog(b'read limit reached; closing socket') | |
@@ -239,7 +247,7 b' class fileobjectproxy(object):' | |||||
239 | return result |
|
247 | return result | |
240 |
|
248 | |||
241 | def readline(self, size=-1): |
|
249 | def readline(self, size=-1): | |
242 | remaining = object.__getattribute__(self, '_closeafterrecvbytes') |
|
250 | remaining = object.__getattribute__(self, '_close_after_recv_bytes') | |
243 |
|
251 | |||
244 | # No read limit. Call original function. |
|
252 | # No read limit. Call original function. | |
245 | if not remaining: |
|
253 | if not remaining: | |
@@ -264,7 +272,7 b' class fileobjectproxy(object):' | |||||
264 | % (size, origsize, len(result), result) |
|
272 | % (size, origsize, len(result), result) | |
265 | ) |
|
273 | ) | |
266 |
|
274 | |||
267 | object.__setattr__(self, '_closeafterrecvbytes', remaining) |
|
275 | object.__setattr__(self, '_close_after_recv_bytes', remaining) | |
268 |
|
276 | |||
269 | if remaining <= 0: |
|
277 | if remaining <= 0: | |
270 | self._writelog(b'read limit reached; closing socket') |
|
278 | self._writelog(b'read limit reached; closing socket') | |
@@ -276,7 +284,7 b' class fileobjectproxy(object):' | |||||
276 | return result |
|
284 | return result | |
277 |
|
285 | |||
278 | def write(self, data): |
|
286 | def write(self, data): | |
279 | remaining = object.__getattribute__(self, '_closeaftersendbytes') |
|
287 | remaining = object.__getattribute__(self, '_close_after_send_bytes') | |
280 |
|
288 | |||
281 | # No byte limit on this operation. Call original function. |
|
289 | # No byte limit on this operation. Call original function. | |
282 | if not remaining: |
|
290 | if not remaining: | |
@@ -298,7 +306,7 b' class fileobjectproxy(object):' | |||||
298 |
|
306 | |||
299 | result = object.__getattribute__(self, '_orig').write(newdata) |
|
307 | result = object.__getattribute__(self, '_orig').write(newdata) | |
300 |
|
308 | |||
301 | object.__setattr__(self, '_closeaftersendbytes', remaining) |
|
309 | object.__setattr__(self, '_close_after_send_bytes', remaining) | |
302 |
|
310 | |||
303 | if remaining <= 0: |
|
311 | if remaining <= 0: | |
304 | self._writelog(b'write limit reached; closing socket') |
|
312 | self._writelog(b'write limit reached; closing socket') | |
@@ -319,10 +327,10 b' def extsetup(ui):' | |||||
319 |
|
327 | |||
320 | recvbytes = self._ui.config(b'badserver', b'close-after-recv-bytes') |
|
328 | recvbytes = self._ui.config(b'badserver', b'close-after-recv-bytes') | |
321 | recvbytes = recvbytes.split(b',') |
|
329 | recvbytes = recvbytes.split(b',') | |
322 | self.closeafterrecvbytes = [int(v) for v in recvbytes if v] |
|
330 | self.close_after_recv_bytes = [int(v) for v in recvbytes if v] | |
323 | sendbytes = self._ui.config(b'badserver', b'close-after-send-bytes') |
|
331 | sendbytes = self._ui.config(b'badserver', b'close-after-send-bytes') | |
324 | sendbytes = sendbytes.split(b',') |
|
332 | sendbytes = sendbytes.split(b',') | |
325 | self.closeaftersendbytes = [int(v) for v in sendbytes if v] |
|
333 | self.close_after_send_bytes = [int(v) for v in sendbytes if v] | |
326 |
|
334 | |||
327 | # Need to inherit object so super() works. |
|
335 | # Need to inherit object so super() works. | |
328 | class badrequesthandler(self.RequestHandlerClass, object): |
|
336 | class badrequesthandler(self.RequestHandlerClass, object): | |
@@ -362,21 +370,21 b' def extsetup(ui):' | |||||
362 | # is a hgweb.server._httprequesthandler. |
|
370 | # is a hgweb.server._httprequesthandler. | |
363 | def process_request(self, socket, address): |
|
371 | def process_request(self, socket, address): | |
364 | # Wrap socket in a proxy if we need to count bytes. |
|
372 | # Wrap socket in a proxy if we need to count bytes. | |
365 | if self.closeafterrecvbytes: |
|
373 | if self.close_after_recv_bytes: | |
366 | closeafterrecvbytes = self.closeafterrecvbytes.pop(0) |
|
374 | close_after_recv_bytes = self.close_after_recv_bytes.pop(0) | |
367 | else: |
|
375 | else: | |
368 | closeafterrecvbytes = 0 |
|
376 | close_after_recv_bytes = 0 | |
369 | if self.closeaftersendbytes: |
|
377 | if self.close_after_send_bytes: | |
370 | closeaftersendbytes = self.closeaftersendbytes.pop(0) |
|
378 | close_after_send_bytes = self.close_after_send_bytes.pop(0) | |
371 | else: |
|
379 | else: | |
372 | closeaftersendbytes = 0 |
|
380 | close_after_send_bytes = 0 | |
373 |
|
381 | |||
374 | if closeafterrecvbytes or closeaftersendbytes: |
|
382 | if close_after_recv_bytes or close_after_send_bytes: | |
375 | socket = socketproxy( |
|
383 | socket = socketproxy( | |
376 | socket, |
|
384 | socket, | |
377 | self.errorlog, |
|
385 | self.errorlog, | |
378 | closeafterrecvbytes=closeafterrecvbytes, |
|
386 | close_after_recv_bytes=close_after_recv_bytes, | |
379 | closeaftersendbytes=closeaftersendbytes, |
|
387 | close_after_send_bytes=close_after_send_bytes, | |
380 | ) |
|
388 | ) | |
381 |
|
389 | |||
382 | return super(badserver, self).process_request(socket, address) |
|
390 | return super(badserver, self).process_request(socket, address) |
General Comments 0
You need to be logged in to leave comments.
Login now