Ejemplo n.º 1
0
    def request(self, r, params={}, answers=1):
        """Make a request to the DAAP server, with the passed params. This
        deals with all the cikiness like validation hashes, etc, etc"""

        # this returns an HTTP response object
        response = self._get_response(r, params)
        status = response.status
        content = response.read()
        # if we got gzipped data base, gunzip it.
        if response.getheader("Content-Encoding") == "gzip":
            log.debug("gunzipping data")
            old_len = len(content)
            compressedstream = StringIO(content)
            import gzip

            gunzipper = gzip.GzipFile(fileobj=compressedstream)
            content = gunzipper.read()
            log.debug("expanded from %s bytes to %s bytes", old_len, len(content))
        # close this, we're done with it
        response.close()

        if status == 401:
            raise DAAPError('DAAPClient: %s: auth required' % r)
        elif status == 403:
            raise DAAPError('DAAPClient: %s: Authentication failure' % r)
        elif status == 503:
            raise DAAPError(
                'DAAPClient: %s: 503 - probably max connections to server' % r
            )
        elif status == 204:
            # no content, ie logout messages
            return None
        elif status != 200:
            raise DAAPError(
                'DAAPClient: %s: Error %s making request' % (r, response.status)
            )

        return self.readResponse(content)
Ejemplo n.º 2
0
    def connect(self, hostname, port=3689, password=None):
        if self.socket is not None:
            raise DAAPError("DAAPClient: already connected.")
#        if ':' in hostname:
#            raise DAAPError('cannot connect to ipv6 addresses')
# if it's an ipv6 address
        if ':' in hostname and hostname[0] != '[':
            hostname = '[' + hostname + ']'
        self.hostname = hostname
        self.port = port
        self.password = password
        #        self.socket = httplib.HTTPConnection(hostname, port)
        self.socket = httplib.HTTPConnection(hostname + ':' + str(port))
        self.getContentCodes()  # practically required
        self.getInfo()  # to determine the remote server version