#!/usr/bin/python # # Test harness for UPnP ContentDirectory:1 service. # # Licensed under the MIT license # http://opensource.org/licenses/mit-license.php # Copyright 2005, Tim Potter from twisted.web import client from twisted.internet import reactor from twisted.python import usage import sys, string, SOAPpy class UPnPSOAPProxy: """A proxy for making UPnP SOAP calls.""" def __init__(self, url): self.url = url def _cbGotResult(self, result): return SOAPpy.parseSOAPRPC(result) def callRemote(self, method, *args, **kwargs): payload = SOAPpy.buildSOAP(args = args, kw = kwargs, method = method) payload = string.replace(payload, '\n', '\r\n') action = \ '"urn:schemas-upnp-org:service:ContentDirectory:1#%s"' % method page = client.getPage(self.url, postdata = payload, method = 'POST', headers = {'Content-Type': 'text/xml', 'SOAPACTION': action}) return page.addCallback(self._cbGotResult) class Options(usage.Options): pass def printResult(value): print value reactor.stop() def printError(error): print 'error', error reactor.stop() #proxy = UPnPSOAPProxy('http://192.168.126.128:5643/ContentDirectory/control') proxy = UPnPSOAPProxy('http://127.0.0.1:8080/ContentDirectory/control') #proxy = UPnPSOAPProxy('http://16.176.65.48:5643/ContentDirectory/control') #proxy.callRemote('GetSearchCapabilities').addCallbacks(printResult, printError) #proxy.callRemote('GetSortCapabilities').addCallbacks(printResult, printError) proxy.callRemote('Browse', ObjectID = '0\\Music\\Genres\\Others\\chimes.wav', # BrowseFlag = 'BrowseDirectChildren', BrowseFlag = 'BrowseMetadata', Filter = '*', StartingIndex = 0, RequestedCount = 700, SortCriteria = None).addCallbacks(printResult, printError) reactor.run()