mercurial/hgweb/server.py
changeset 12784 763be3cd084a
parent 12783 191d0fd5c2fd
child 12797 076bbbf0ba86
equal deleted inserted replaced
12783:191d0fd5c2fd 12784:763be3cd084a
   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