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)
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