212 _httprequesthandler.handle_one_request(self) |
212 _httprequesthandler.handle_one_request(self) |
213 except (OpenSSL.SSL.SysCallError, OpenSSL.SSL.ZeroReturnError): |
213 except (OpenSSL.SSL.SysCallError, OpenSSL.SSL.ZeroReturnError): |
214 self.close_connection = True |
214 self.close_connection = True |
215 pass |
215 pass |
216 |
216 |
|
217 class _httprequesthandlerssl(_httprequesthandler): |
|
218 """HTTPS handler based on Pythons ssl module (introduced in 2.6)""" |
|
219 |
|
220 url_scheme = 'https' |
|
221 |
|
222 @staticmethod |
|
223 def preparehttpserver(httpserver, ssl_cert): |
|
224 try: |
|
225 import ssl |
|
226 ssl.wrap_socket |
|
227 except ImportError: |
|
228 raise util.Abort(_("SSL support is unavailable")) |
|
229 httpserver.socket = ssl.wrap_socket(httpserver.socket, server_side=True, |
|
230 certfile=ssl_cert, ssl_version=ssl.PROTOCOL_SSLv3) |
|
231 |
|
232 def setup(self): |
|
233 self.connection = self.request |
|
234 self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) |
|
235 self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) |
|
236 |
217 try: |
237 try: |
218 from threading import activeCount |
238 from threading import activeCount |
219 _mixin = SocketServer.ThreadingMixIn |
239 _mixin = SocketServer.ThreadingMixIn |
220 except ImportError: |
240 except ImportError: |
221 if hasattr(os, "fork"): |
241 if hasattr(os, "fork"): |
263 super(IPv6HTTPServer, self).__init__(*args, **kwargs) |
283 super(IPv6HTTPServer, self).__init__(*args, **kwargs) |
264 |
284 |
265 def create_server(ui, app): |
285 def create_server(ui, app): |
266 |
286 |
267 if ui.config('web', 'certificate'): |
287 if ui.config('web', 'certificate'): |
268 handler = _httprequesthandleropenssl |
288 if sys.version_info >= (2, 6): |
|
289 handler = _httprequesthandlerssl |
|
290 else: |
|
291 handler = _httprequesthandleropenssl |
269 else: |
292 else: |
270 handler = _httprequesthandler |
293 handler = _httprequesthandler |
271 |
294 |
272 if ui.configbool('web', 'ipv6'): |
295 if ui.configbool('web', 'ipv6'): |
273 cls = IPv6HTTPServer |
296 cls = IPv6HTTPServer |