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()
           co2.get_method_signature()
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.: co2-specific methods
system.: system-specific methods
(in the python implementation the above are simply synonyms)

for methods exposed by plugins:
..

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

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