the actual handler:
        if you setup your urls.py properly, all calls to the xml-rpc service
        should be routed through here.
        If post data is defined, it assumes it's XML-RPC and tries to process as such
        Empty post assumes you're viewing from a browser and tells you about the service.

def rpc_handler(request):
    global ip
    """
        the actual handler:
        if you setup your urls.py properly, all calls to the xml-rpc service
        should be routed through here.
        If post data is defined, it assumes it's XML-RPC and tries to process as such
        Empty post assumes you're viewing from a browser and tells you about the service.
        """
    if len(request.body):
        ip = request.META["REMOTE_ADDR"]
        response = HttpResponse(mimetype="application/xml")
        data = dispatcher._marshaled_dispatch(request.body)
        response.write(data)

        #d = Xmlrpc(request)
    else:
        response = HttpResponse()
        response.write("<h1>This is an XML-RPC Service.</h2>")
        response.write("<p>You need to invoke it using an XML-RPC Client!</p>")
        response.write("The following methods are available:<ul>")
        methods = dispatcher.system_listMethods()

        for method in methods:
            sig = dispatcher.system_methodSignature(method)
            # this just reads your docblock, so fill it in!
            help = dispatcher.system_methodHelp(method)

            response.write("<li><b>%s</b>: [%s] %s" % (method, sig, help))
        response.write("</ul>")

    response['Content-length'] = str(len(response.content))
    return response