cMsg (pronounced "see message") is a software package conceived and written at Jefferson Lab by Elliott Wolin, Carl Timmer, and Vardan Gyurjyan. At one level this package is an API to a message-passing system (or domain as we refer to it). Users can create messages and have them handled knowing only a UDL (Uniform Domain Locator) to specify a particular server (domain) to use. Thus the API acts essentially as a multiplexor, diverting messages to the desired domain.
At another level, cMsg is an implementation of a domain. Not only can cMsg pass off messages to Channel Access, SmartSockets, or a number of other domains, it can handle messages itself. It was designed to be extremely flexible and so adding another domain is relatively easy.
There is a User's Guide, API documentation in the form of web pages generated by javadoc and doxygen, and a Developer's Guide. Try it and let us know what you think about it. If you find any bugs, we have a bug-report web page at http://xdaq.jlab.org/CODA/portal/html/ .