home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / M2Crypto / httpslib.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  5.4 KB  |  182 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import string
  5. import sys
  6. import socket
  7. import urllib
  8. import base64
  9. from httplib import *
  10. from httplib import HTTPS_PORT
  11. import SSL
  12.  
  13. class HTTPSConnection(HTTPConnection):
  14.     default_port = HTTPS_PORT
  15.     
  16.     def __init__(self, host, port = None, strict = None, **ssl):
  17.         self.session = None
  18.         keys = ssl.keys()
  19.         
  20.         try:
  21.             keys.remove('key_file')
  22.         except ValueError:
  23.             pass
  24.  
  25.         
  26.         try:
  27.             keys.remove('cert_file')
  28.         except ValueError:
  29.             pass
  30.  
  31.         
  32.         try:
  33.             keys.remove('ssl_context')
  34.         except ValueError:
  35.             pass
  36.  
  37.         if keys:
  38.             raise ValueError('unknown keyword argument')
  39.         
  40.         
  41.         try:
  42.             self.ssl_ctx = ssl['ssl_context']
  43.         except KeyError:
  44.             self.ssl_ctx = SSL.Context('sslv23')
  45.  
  46.         HTTPConnection.__init__(self, host, port, strict)
  47.  
  48.     
  49.     def connect(self):
  50.         self.sock = SSL.Connection(self.ssl_ctx)
  51.         if self.session:
  52.             self.sock.set_session(self.session)
  53.         
  54.         self.sock.connect((self.host, self.port))
  55.  
  56.     
  57.     def close(self):
  58.         pass
  59.  
  60.     
  61.     def get_session(self):
  62.         return self.sock.get_session()
  63.  
  64.     
  65.     def set_session(self, session):
  66.         self.session = session
  67.  
  68.  
  69.  
  70. class HTTPS(HTTP):
  71.     _connection_class = HTTPSConnection
  72.     
  73.     def __init__(self, host = '', port = None, strict = None, **ssl):
  74.         HTTP.__init__(self, host, port, strict)
  75.         
  76.         try:
  77.             self.ssl_ctx = ssl['ssl_context']
  78.         except KeyError:
  79.             self.ssl_ctx = SSL.Context('sslv23')
  80.  
  81.         self._conn.ssl_ctx = self.ssl_ctx
  82.  
  83.  
  84.  
  85. class ProxyHTTPSConnection(HTTPSConnection):
  86.     _ports = {
  87.         'http': 80,
  88.         'https': 443 }
  89.     _AUTH_HEADER = 'Proxy-Authorization'
  90.     _UA_HEADER = 'User-Agent'
  91.     
  92.     def __init__(self, host, port = None, strict = None, username = None, password = None, **ssl):
  93.         HTTPSConnection.__init__(self, host, port, strict, **ssl)
  94.         self._username = username
  95.         self._password = password
  96.         self._proxy_auth = None
  97.         self._proxy_UA = None
  98.  
  99.     
  100.     def putrequest(self, method, url, skip_host = 0, skip_accept_encoding = 0):
  101.         (proto, rest) = urllib.splittype(url)
  102.         if proto is None:
  103.             raise ValueError, 'unknown URL type: %s' % url
  104.         
  105.         (host, rest) = urllib.splithost(rest)
  106.         (host, port) = urllib.splitport(host)
  107.         if port is None:
  108.             
  109.             try:
  110.                 port = self._ports[proto]
  111.             except KeyError:
  112.                 raise ValueError, 'unknown protocol for: %s' % url
  113.             except:
  114.                 None<EXCEPTION MATCH>KeyError
  115.             
  116.  
  117.         None<EXCEPTION MATCH>KeyError
  118.         self._real_host = host
  119.         self._real_port = port
  120.         HTTPSConnection.putrequest(self, method, url, skip_host, skip_accept_encoding)
  121.  
  122.     
  123.     def putheader(self, header, value):
  124.         if header.lower() == self._UA_HEADER.lower():
  125.             self._proxy_UA = value
  126.         
  127.         if header.lower() == self._AUTH_HEADER.lower():
  128.             self._proxy_auth = value
  129.         else:
  130.             HTTPSConnection.putheader(self, header, value)
  131.  
  132.     
  133.     def endheaders(self):
  134.         if not self._proxy_auth:
  135.             self._proxy_auth = self._encode_auth()
  136.         
  137.         HTTPSConnection.endheaders(self)
  138.  
  139.     
  140.     def connect(self):
  141.         HTTPConnection.connect(self)
  142.         self.sock.sendall(self._get_connect_msg())
  143.         response = HTTPResponse(self.sock)
  144.         response.begin()
  145.         code = response.status
  146.         if code != 200:
  147.             self.close()
  148.             raise socket.error, 'Proxy connection failed: %d' % code
  149.         
  150.         self._start_ssl()
  151.  
  152.     
  153.     def _get_connect_msg(self):
  154.         msg = 'CONNECT %s:%d HTTP/1.1\r\n' % (self._real_host, self._real_port)
  155.         msg = msg + 'Host: %s:%d\r\n' % (self._real_host, self._real_port)
  156.         if self._proxy_UA:
  157.             msg = msg + '%s: %s\r\n' % (self._UA_HEADER, self._proxy_UA)
  158.         
  159.         if self._proxy_auth:
  160.             msg = msg + '%s: %s\r\n' % (self._AUTH_HEADER, self._proxy_auth)
  161.         
  162.         msg = msg + '\r\n'
  163.         return msg
  164.  
  165.     
  166.     def _start_ssl(self):
  167.         self.sock = SSL.Connection(self.ssl_ctx, self.sock)
  168.         self.sock.setup_ssl()
  169.         self.sock.set_connect_state()
  170.         self.sock.connect_ssl()
  171.  
  172.     
  173.     def _encode_auth(self):
  174.         if not self._username and self._password:
  175.             return None
  176.         
  177.         userpass = '%s:%s' % (self._username, self._password)
  178.         enc_userpass = base64.encodestring(userpass).replace('\n', '')
  179.         return 'Basic %s' % enc_userpass
  180.  
  181.  
  182.