Specification of DCP: ===================== The Distributed Configuration Protocol v0.1 =========================================== Fabio, May, 28, 1998. This is a preliminary version of the Distributed Configuration Protocol which will be used to configure components and distributed component implementations across a distributed system. DCP can be used in client/server, peer-to-peer, and active networking situations. It's being implemented initially on ACE and will provide reconfiguration of TAO components. Later, it will be available to any 2K application or system module. Note that, in the protocol operations, the term SERVICE refers to a place holder, or hook, to concrete implementations. It doesn't need to be a CORBA service, it might be any place holder to which an implementation can be hooked. Thus, it can refer to a TAO component, to an application internal component, to a service running on top of TAO, etc. 1) Getting information about the remote node's persistent repository -------------------------------------------------------------------- LIST_SERVICES returns: list of strings (separated by "\r\n") representing the services in the local persistent repository LIST_IMPLEMENTATIONS returns: list of strings representing the implementations of a particular service in the local persistent repository 1.1) Getting information about the services linked to the run-time ------------------------------------------------------------------- LIST_LOADED_SERVICES returns: list of strings representing the services linked to the server process run-time. GET_INFO returns: string containing a description of a particular service. GET_USAGE returns: string representing the command-line initialization string for a particular service. 2) Reconfiguring the services linked to the run-time ---------------------------------------------------- LOAD_SERVICE returns: ACK or NACK plus error message HOOK_SERVICE SUSPEND_SERVICE [] returns: ACK or NACK plus error message RESUME_SERVICE [] returns: ACK or NACK plus error message REMOVE_SERVICE [] returns: ACK or NACK plus error message REPLACE_SERVICE [] returns: ACK or NACK plus error message CONFIGURE_SERVICE may also be "all" or "any". In the first case, the message_string is sent to all running implementations of that service and in the latter case it is sent to one of them. returns: string RESTART returns: ACK or NACK plus error message 3) Updating the ORB persistent service repository ------------------------------------------------- UPLOAD_IMPLEMENTATION returns: ACK or NACK plus error message DELETE_IMPLEMENTATION returns: ACK or NACK plus error message 4) Miscellaneous ---------------- QUIT returns: ACK HELP returns: string containing human-readable help and protocol version information. ................................................................................ DCP class interface and implementation: ======================================= The DCP.h and DCP.cpp files containing the implementation of this class in C++ is available at the 2K source tree. class DCP { public: static const char * const LIST_SERVICES; static const char * const LIST_IMPLEMENTATIONS; static const char * const LIST_LOADED_SERVICES; static const char * const GET_USAGE; static const char * const GET_INFO; static const char * const LOAD_SERVICE; static const char * const SUSPEND_SERVICE; static const char * const RESUME_SERVICE; static const char * const REMOVE_SERVICE; static const char * const REPLACE_SERVICE; static const char * const CONFIGURE_SERVICE; static const char * const UPLOAD_IMPLEMENTATION; static const char * const DELETE_IMPLEMENTATION; static const char * const RESTART; static const char * const QUIT; static const char * const HELP; static const char * const ANY; static const char * const ALL; enum { major_version = 0, minor_version = 1, MAX_MESSAGE_SIZE = 1024}; }; class DCP_Reply { public: static const char * const ACK; static const char * const NACK; static const char * const UNKNOWN; static const char * const UNKNOWN_SERVICE; static const char * const EMPTY; static const char * const MALFORMED_REQUEST; };