the co2 protocol stack:


co2               visible(API) v
---------------------------------
xmlrpc | http     transparent  ^
-------------
tcp/ip
...



the co2 protocol:

mandatory xmlrpc-methods (must be callable through xmlrpc):

server:    ping()
					 co2.get_method_names()
					 co2.get_method_help(<method_name>)
					 co2.get_method_signature(<method_name>)
relay:		 relay.register()
					 relay.relay(data)
satellite: notify(data)

('server' refers to both relay and satellite)

argument format:

all arguments are passed as dictionaries (a structure of key-value pairs)
exceptions are get_method_help and get_method_signature (and their synonyms),
which accept a string as parameter (for general xmlrpc-compatibility)


naming conventions for method calls:

co2.<method_name>: co2-specific methods
system.<method_name>: system-specific methods
(in the python implementation the above are simply synonyms)

for methods exposed by plugins:
<package>.<module>.<method_name>


optional xmlrpc-methods and synonyms:

web.get_method_names, system.listMethods = co2.get_method_names
web.get_method_help, system.methodHelp = co2.get_method_help
web.get_method_signature, system.methodSignature = co2.get_method_signature
web.ping = ping



xmlrpc-methods not in the protocol but in the python implementation:
(don't rely on them!)

test(data) (synonym = web.test):
 returns <data>
method_call(data) (synonym = web.method_call):
 kind of a meta-method to call other methods
 data: {'method_name':<method_name>, data}
 method <method_name> is called with data as argument

plus some undocumented stuff for testing and debugging (look at the code)
