SimpleXMLRPCServer and client IP address

2006-06-28 Thread Jeremy Monnet
Hello,

I've started python a few weeks ago, and to now everything went fine
with my cookbook and a learning book.

Now, I've tried the SimpleXMLRPCServer, and it worked OK untill I
tried to get the client IP address. I have searched a long time the
Internet but couldn't find a _simple_ solution :-)

#Code

from liste_films import *
import SimpleXMLRPCServer

def isOpen():
   # Here I want to get the clien IP address
   if CheckPerms(IP):
   return True
   else:
   return False

if __name__ == '__main__':
   server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8000))
   server.register_function(isOpen)
   server.serve_forever()

#end code

Tips I've found were :
- inherit from requestDispatcher and overload its methods. But that's
not that Simple.
- use the requestHandler and its method address_string(), but I didn't
an easy to understand example
- http://mail.python.org/pipermail/python-list/2006-May/340266.html
but this thread seems not to have been finished :-(

Furthermore, I think I should be able to access the socket object from
where I am (at starting of isOpen() ), but I don't know how. "self"
and "parent" are not defined, I can access the "server" object, but it
says the other end s not connected ("transport endpoint"). I think
this SimpleXMLRPCServer was not threaded (because it says in the API :
"answer all requests one at a time"), so I don't understand why in the
middle of my function the server.socket.getpeername() says it's not
connected.

I'm using python2.3 on linux (debian sid).

Thanks for any help !

Jeremy
-- 
Linux Registered User #317862
Linux From Scratch Registered User #16571
Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.
Please send me only open formats, as OpenDocument or pdf.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: SimpleXMLRPCServer and client IP address

2006-06-28 Thread Jeremy Monnet
Thanks for your answer !

On 6/28/06, Fredrik Lundh <[EMAIL PROTECTED]> wrote:
> maybe the explanation in that message was good enough for the poster ?

I think so ... unfortunately not for me ... yet ! :-)

>
> Your handler object should be getting set up with the client_address 
> property.
> If not you need to show us some small subset of your app that 
> demonstrates the
> issue.
>
> You can also inherit from SimpleXMLRPCServer and override verify_request, 
> from
> BaseServer, if you want the option of blocking requests based on source
> address.
>
> the second alternative should be straightforward enough:
>
> class MyXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
> def verify_request(self, request, client_address):
> return CheckPerms(client_address)
>
> server = MyXMLRPCServer(...)
> ...
>
> if you need more control, you need to subclass SimpleXMLRPCHandler instead.


this seems easy, but I'm not sure I could use it : I already provide
more than one method (of course not in the snippet of code I provided,
my mistake probably not to show it) and I plan to add several more in
the near future. Overloading verify_request() in this way means I
can't use the same xmlrpcserver for other methods ? Or am I just wrong
? (I should probably have a look at "request", maybe that's a key ?)
Or is it the "more control" you talked about ?

Jeremy
-- 
Linux Registered User #317862
Linux From Scratch Registered User #16571
Please do not send me .doc, .xls, .ppt, as I will *NOT* read them.
Please send me only open formats, as OpenDocument or pdf.
-- 
http://mail.python.org/mailman/listinfo/python-list