'Starts connection. Connects to proxy, supplies login and password to it
(if were specified while creating instance). Instructs proxy to make
connection to the target server. Returns non-empty sting on success.'

def connect(self, dupe=None):

    if (not TCPsocket.connect(self, (self._proxy['host'], self._proxy['port']))):
        return
    self.DEBUG('Proxy    server    contacted,    performing    authentification', 'start')
    connector = [('CONNECT    %s:%s    HTTP/1.0' % self._server), 'Proxy-Connection:    Keep-Alive', 'Pragma:    no-cache', ('Host:    %s:%s' % self._server), 'User-Agent:    HTTPPROXYsocket/v0.1']
    if (self._proxy.has_key('user') and self._proxy.has_key('password')):
        credentials = ('%s:%s' % (self._proxy['user'], self._proxy['password']))
        credentials = base64.encodestring(credentials).strip()
        connector.append(('Proxy-Authorization:    Basic    ' + credentials))
    connector.append('\r\n')
    self.send('\r\n'.join(connector))
    try:
        reply = self.receive().replace('\r', '')
    except IOError:
        self.DEBUG('Proxy    suddenly    disconnected', 'error')
        self._owner.disconnected()
        return
    try:
        (proto, code, desc) = reply.split('\n')[0].split('    ', 2)
    except:
        raise error('Invalid    proxy    reply')
    if (code != '200'):
        self.DEBUG(('Invalid    proxy    reply:    %s    %s    %s' % (proto, code, desc)), 'error')
        self._owner.disconnected()
        return
    while (reply.find('\n\n') == (-1)):
        try:
            reply += self.receive().replace('\r', '')
        except IOError:
            self.DEBUG('Proxy    suddenly    disconnected', 'error')
            self._owner.disconnected()
            return
    self.DEBUG('Authentification    successfull.    Jabber    server    contacted.', 'ok')
    return 'ok'
