Beispiel #1
0
 def ntransfercmd(self, cmd, rest=None):
     size = None
     if self.passiveserver:
         host, port = self.makepasv()
         conn = socket.create_connection((host, port), self.timeout,
                                         self.source_address)
         try:
             if rest is not None:
                 self.sendcmd("REST %s" % rest)
             resp = self.sendcmd(cmd)
             if resp[0] == '2':
                 resp = self.getresp()
             if resp[0] != '1':
                 raise ftplib.error_reply(resp)
         except Exception:
             conn.close()
             raise
     else:
         sock = self.makeport()
         try:
             if rest is not None:
                 self.sendcmd("REST %s" % rest)
             resp = self.sendcmd(cmd)
             if resp[0] == '2':
                 resp = self.getresp()
             if resp[0] != '1':
                 raise ftplib.error_reply(resp)
             conn, sockaddr = sock.accept()
             if self.timeout is not socket._GLOBAL_DEFAULT_TIMEOUT:
                 conn.settimeout(self.timeout)
         finally:
             sock.close()
     if resp[:3] == '150':
         size = ftplib.parse150(resp)
     return conn, size
Beispiel #2
0
 def ntransfercmd(self, cmd, rest=None):
     size = None
     if self.passiveserver:
         host, port = self.makepasv()
         conn = socket.create_connection((host, port), self.timeout,
                                         self.source_address)
         try:
             if rest is not None:
                 self.sendcmd("REST %s" % rest)
             resp = self.sendcmd(cmd)
             if resp[0] == '2':
                 resp = self.getresp()
             if resp[0] != '1':
                 raise ftplib.error_reply(resp)
         except:
             conn.close()
             raise
     else:
         sock = self.makeport()
         try:
             if rest is not None:
                 self.sendcmd("REST %s" % rest)
             resp = self.sendcmd(cmd)
             if resp[0] == '2':
                 resp = self.getresp()
             if resp[0] != '1':
                 raise ftplib.error_reply(resp)
             conn, sockaddr = sock.accept()
             if self.timeout is not socket._GLOBAL_DEFAULT_TIMEOUT:
                 conn.settimeout(self.timeout)
         finally:
             sock.close()
     if resp[:3] == '150':
         size = ftplib.parse150(resp)
     return conn, size
Beispiel #3
0
    def ntransfercmd(self, cmd, rest=None):
        """
        Internal:
        
        Initiate a transfer over the data connection.

        If the transfer is active, send a port command and the
        transfer command, and accept the connection.  If the server is
        passive, send a pasv command, connect to it, and start the
        transfer command.  Either way, return the socket for the
        connection and the expected size of the transfer.  The
        expected size may be None if it could not be determined.

        Optional `rest' argument can be a string that is sent as the
        argument to a RESTART command.  This is essentially a server
        marker used to tell the server to skip over any data up to the
        given marker.
        """
        size = None
        if self.passiveserver:
            host, port = self.makepasv()
            af, socktype, proto, canon, sa = socket.getaddrinfo(host, port,
                                                    0, socket.SOCK_STREAM)[0]
            conn = socket.socket(af, socktype, proto)
            if self.data_socket_timeout:
                conn.settimeout(self.data_socket_timeout)
            conn.connect(sa)
            if rest is not None:
                self.sendcmd("REST %s" % rest)
            resp = self.sendcmd(cmd)
            if resp[0] != '1':
                raise error_reply, resp
        else:
            sock = self.makeport()
            if rest is not None:
                self.sendcmd("REST %s" % rest)
            resp = self.sendcmd(cmd)
            if resp[0] != '1':
                raise error_reply, resp
            conn, sockaddr = sock.accept()
        if resp[:3] == '150':
            # this is conditional in case we received a 125
            size = ftplib.parse150(resp)
        return conn, size
Beispiel #4
0
    def transfer(self, method, *args, **kwargs):
        """Returns a urllib3 connection for the given URL. This should not be
        called from user code, and is only exposed for use when subclassing the
        :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`.

        :param url: The URL to connect to.
        :param proxies: (optional) A Requests-style dictionary of proxies used on this request.
        """
        connCallback = kwargs.get("connCallback")
        passive = kwargs.get("passive", DEFAULT_PASSIVE)
        restartMarker = kwargs.get("restartMarker")
        connMetadata = {}
        
        if not passive:
            sock, metadata = self.makeport(self.sock.family)
            connMetadata.update(metadata)
        else:
            conn, metadata = self.makepasv(self.sock.family)
            connMetadata.update(metadata)
        if restartMarker is not None:
            self._request("REST", restartMarker)
        resp = self._request(method, *args, **kwargs)

        # Some servers apparently send a 200 reply to
        # a LIST or STOR command, before the 150 reply
        # (and way before the 226 reply). This seems to
        # be in violation of the protocol (which only allows
        # 1xx or error messages for LIST), so we just discard
        # this response.
        # if resp.raw[0] == '2':
        #     resp = self._getresponse()
        # if resp.raw[0] != '1':
        #     raise ftplib.error_reply, resp
        if not passive:
            conn, connMetadata["sockaddr"] = sock.accept()
        if resp.status_code == 150:
            # this is conditional in case we received a 125
            connMetadata["size"] = ftplib.parse150(str(resp.raw))
        if connCallback:
            newConn = connCallback(conn)
            if newConn:
                conn = newConn
        return conn, connMetadata
Beispiel #5
0
    def ntransfercmd(self, cmd, rest=None):
        assert self.passiveserver

        host, port = self.makepasv()
        conn = gevent.socket.create_connection((host, port), self.timeout)

        try:
            if rest is not None:
                self.sendcmd("REST %s" % rest)
            resp = self.sendcmd(cmd)
            if resp[0] == '2':
                resp = self.getresp()
            if resp[0] != '1':
                raise ftplib.error_reply(resp)
        except:
            conn.close()
            raise

        if resp[:3] == '150':
            size = ftplib.parse150(resp)

        return conn, size
Beispiel #6
0
    def ntransfercmd(self, cmd, rest=None):
        assert self.passiveserver

        host, port = self.makepasv()
        conn = gevent.socket.create_connection((host, port), self.timeout)

        try:
            if rest is not None:
                self.sendcmd("REST %s" % rest)
            resp = self.sendcmd(cmd)
            if resp[0] == '2':
                resp = self.getresp()
            if resp[0] != '1':
                raise ftplib.error_reply(resp)
        except:
            conn.close()
            raise

        if resp[:3] == '150':
            size = ftplib.parse150(resp)

        return conn, size
Beispiel #7
0
 def update_event(self, inp=-1):
     self.set_output_val(0, ftplib.parse150(self.input(0)))
            if resp[0] == '2':
                resp = self.getresp()
            if resp[0] != '1':
                raise ftplib.error_reply, resp
        else:
            sock = self.makeport()
            if rest is not None:
                self.sendcmd("REST %s" % rest)
            resp = self.sendcmd(cmd)
            if resp[0] == '2':
                resp = self.getresp()
            if resp[0] != '1':
                raise ftplib.error_reply, resp
            conn, sockaddr = sock.accept()
        if resp[:3] == '150':
            size = ftplib.parse150(resp)
        return conn, size


class TimeoutHTTPHandler(_H):
    """A timeout enabled HTTPHandler for urllib2."""
    def __init__(self, timeout=None, debuglevel=0):
        """Initialize the object.

    Args:
      timeout: the socket connect timeout value.
      debuglevel: the debuglevel level.
    """
        _H.__init__(self, debuglevel)
        TimeoutHTTPConnection._timeout = timeout
      if resp[0] == '2':
        resp = self.getresp()
      if resp[0] != '1':
        raise ftplib.error_reply, resp
    else:
      sock = self.makeport()
      if rest is not None:
        self.sendcmd("REST %s" % rest)
      resp = self.sendcmd(cmd)
      if resp[0] == '2':
        resp = self.getresp()
      if resp[0] != '1':
        raise ftplib.error_reply, resp
      conn, sockaddr = sock.accept()
    if resp[:3] == '150':
      size = ftplib.parse150(resp)
    return conn, size
          


class TimeoutHTTPHandler(_H):
  """A timeout enabled HTTPHandler for urllib2."""
  def __init__(self, timeout=None, debuglevel=0):
    """Initialize the object.

    Args:
      timeout: the socket connect timeout value.
      debuglevel: the debuglevel level.
    """
    _H.__init__(self, debuglevel)
    TimeoutHTTPConnection._timeout = timeout