Index: source/ariba/Makefile.am
===================================================================
--- source/ariba/Makefile.am	(revision 6266)
+++ source/ariba/Makefile.am	(revision 6584)
@@ -361,5 +361,4 @@
 libariba_la_SOURCES += \
   utility/misc/Helper.cpp \
-  utility/misc/OvlVis.cpp \
   utility/misc/sha1.cpp \
   utility/misc/StringFormat.cpp
@@ -369,5 +368,4 @@
   utility/misc/Helper.h \
   utility/misc/KeyMapping.hpp \
-  utility/misc/OvlVis.h \
   utility/misc/sha1.h \
   utility/misc/StringFormat.h
@@ -434,2 +432,11 @@
   utility/types/ServiceID.h \
   utility/types/SpoVNetID.h
+
+#------------> utility :: visual
+
+libariba_la_SOURCES += \
+  utility/visual/OvlVis.cpp
+
+nobase_libariba_la_HEADERS += \
+  utility/visual/OvlVis.h
+  
Index: source/ariba/overlay/BaseOverlay.cpp
===================================================================
--- source/ariba/overlay/BaseOverlay.cpp	(revision 6266)
+++ source/ariba/overlay/BaseOverlay.cpp	(revision 6584)
@@ -55,5 +55,5 @@
 #include "ariba/overlay/messages/JoinReply.h"
 
-#include "ariba/utility/misc/OvlVis.h"
+#include "ariba/utility/visual/OvlVis.h"
 
 namespace ariba {
Index: source/ariba/utility/misc/OvlVis.cpp
===================================================================
--- source/ariba/utility/misc/OvlVis.cpp	(revision 6266)
+++ 	(revision )
@@ -1,671 +1,0 @@
-// [License]
-// The Ariba-Underlay Copyright
-//
-// Copyright (c) 2008-2009, Institute of Telematics, UniversitÃ€t Karlsruhe (TH)
-//
-// Institute of Telematics
-// UniversitÃ€t Karlsruhe (TH)
-// Zirkel 2, 76128 Karlsruhe
-// Germany
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// 1. Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
-// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
-// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// The views and conclusions contained in the software and documentation
-// are those of the authors and should not be interpreted as representing
-// official policies, either expressed or implied, of the Institute of
-// Telematics.
-// [License]
-
-#include "OvlVis.h"
-
-namespace ariba {
-namespace utility {
-
-//*****************************************************
-//*****************************************************
-//*****************************************************
-
-use_logging_cpp(OvlVis);
-
-OvlVis::OvlVis() : socket(io_service), socketOpened(false) {
-
-	if( ! Configuration::haveConfig() ) return;
-	if( ! Configuration::instance().exists("DEMO_OvlVisIP") )   return;
-	if( ! Configuration::instance().exists("DEMO_OvlVisPort") ) return;
-
-	string serverIP = Configuration::instance().read<string>("DEMO_OvlVisIP");
-	string serverPort = Configuration::instance().read<string>("DEMO_OvlVisPort");
-	if( serverIP.length() == 0 || serverPort.length() == 0) return;
-
-	logging_debug( "connecting to ovlvis " + serverIP + " on " + serverPort );
-
-	tcp::resolver resolver(io_service);
-	tcp::resolver::query query(
-		serverIP,
-		serverPort,
-		tcp::resolver::query::passive |
-		tcp::resolver::query::address_configured |
-		tcp::resolver::query::numeric_service);
-
-	tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
-	tcp::resolver::iterator end;
-
-	boost::system::error_code error = boost::asio::error::host_not_found;
-	while (error && endpoint_iterator != end){
-		socket.close();
-		socket.connect(*endpoint_iterator++, error);
-	}
-
-	if (error){
-		logging_warn( "OvlVis could not connect to GUI" );
-	} else {
-		socketOpened = true;
-	}
-}
-
-OvlVis::~OvlVis(){
-
-	socket.close();
-
-}
-
-void OvlVis::sendMessage( const string msg, NETWORK_ID nid ) {
-
-	sendSocket( msg );
-
-// 	{
-// 		// auto layout
-// 		ostringstream out;
-//
-// 		out 	<< "VisMsgOptimizeView" << ";"
-// 			<< Helper::ultos(nid)     << ";" // network id is ignored in the message renderer, just renders the current viewed network
-// 			<< "0"                  << std::endl;
-//
-// 		sendSocket( out.str() );
-// 	}
-
-// 	{	// auto zoom
-// 		ostringstream out;
-//
-// 		out 	<< "VisMsgOptimizeView" << ";"
-// 			<< Helper::ultos(nid)     << ";" // network id is ignored in the message renderer, just renders the current viewed network
-// 			<< "1"                  << std::endl;
-//
-// 		sendSocket( out.str() );
-// 	}
-
-}
-
-void OvlVis::sendSocket(const string msg){
-	if( socket.is_open() && socketOpened )
-		socket.send( boost::asio::buffer(msg) );
-}
-
-//*****************************************************
-//*****************************************************
-//*****************************************************
-
-void OvlVis::visCreate(
-	NETWORK_ID network,
-	NodeID& node,
-	string nodename,
-	string info
-	){
-
-	ostringstream out;
-
-	out 	<< "VisMsgCreate"         << ";"
-		<< Helper::ultos(network) << ";"
-		<< node.toString()        << ";"
-		<< nodename               << ";"
-		<< "" /*netName*/         << ";"
-		<< "" /*ip*/              << ";"
-		<< "" /*port*/            << ";"
-		<< "0"                    << ";"
-		<< info                   << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visChangeStatus(
-	NETWORK_ID network,
-	NodeID& node,
-	bool enable,
-	string info
-	){
-
-	ostringstream out;
-
-	out 	<< "VisMsgChangeStatus"   << ";"
-		<< Helper::ultos(network) << ";"
-		<< node.toString()        << ";"
-		<< (enable ? "1" : "0")   << ";"
-		<< info                   << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visConnect(
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	string info
-	){
-
-	// if we already have a link between the two nodes
-	// we just ignore the call and leave the old link
-
-	if( networkLinks.exists( network, NodePair(srcnode,destnode) )) return;
-
-	ostringstream out;
-	unsigned long edgekey = networkLinks.insert( network, NodePair(srcnode,destnode) );
-
-	out 	<< "VisMsgConnect"        << ";"
-		<< Helper::ultos(network) << ";"
-		<< edgekey 		  << ";"
-		<< srcnode.toString()     << ";"
-		<< destnode.toString()    << ";"
-		<< "0"                    << ";"
-		<< info                   << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visDisconnect(
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	string info
-	){
-
-	if( !networkLinks.exists(network, NodePair(srcnode, destnode)) ) return;
-
-	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
-	networkLinks.remove( network, NodePair(srcnode, destnode) );
-
-	ostringstream out;
-	out	<< "VisMsgDisconnect"     << ";"
-		<< Helper::ultos(network) << ";"
-		<< Helper::ultos(edgekey) << ";"
-		<< info                   << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visFailedConnect(
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	string info
-	){
-
-	ostringstream out;
-
-	out 	<< "VisMsgFailedConnect"  << ";"
-		<< Helper::ultos(network) << ";"
-		<< srcnode.toString()     << ";"
-		<< destnode.toString()    << ";"
-		<< info                   << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visShutdown(
-	NETWORK_ID network,
-	NodeID& node,
-	string info
-	){
-
-	ostringstream out;
-
-	out	<< "VisMsgShutdown"       << ";"
-		<< Helper::ultos(network) << ";"
-		<< node.toString()        << ";"
-		<< info                   << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-//*****************************************************
-//*****************************************************
-//*****************************************************
-
-void OvlVis::visChangeNodeColor (
-	NETWORK_ID network,
-	NodeID& node,
-	unsigned char r,
-	unsigned char g,
-	unsigned char b
-	){
-
-	ostringstream out;
-
-	out	<< "VisMsgChangeNodeColor"       	<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< node.toString()        		<< ";"
-		<< ariba::utility::Helper::ultos(r) 	<< ";"
-		<< ariba::utility::Helper::ultos(g) 	<< ";"
-		<< ariba::utility::Helper::ultos(b) 	<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visChangeNodeColor (
-	NETWORK_ID network,
-	NodeID& node,
-	NODE_COLORS color
-	){
-
-	unsigned char r = 0;
-	unsigned char g = 0;
-	unsigned char b = 0;
-
-	switch( color ) {
-		case NODE_COLORS_GREY: 	r = 128; g = 128; b = 128; break;
-		case NODE_COLORS_GREEN:	r = 0;   g = 200; b = 0;   break;
-		case NODE_COLORS_RED:	r = 255; g = 0;   b = 0;   break;
-	}
-
-	visChangeNodeColor( network, node, r, g, b );
-}
-
-void OvlVis::visChangeNodeIcon (
-                NETWORK_ID network,
-                NodeID& node,
-                ICON_ID icon
-                ){
-
-        ostringstream out;
-
-        out	<< "VisMsgChangeNodeIcon"               << ";"
-                << Helper::ultos(network) 		<< ";"
-                << node.toString()        		<< ";"
-                << Helper::ultos((unsigned int)icon)	<< std::endl;
-
-        sendMessage( out.str(), network );
-}
-
-void OvlVis::visShowNodeLabel (
-	NETWORK_ID network,
-	NodeID& node,
-	string label
-	){
-
-	ostringstream out;
-
-	out	<< "VisMsgShowNodeLabel"       		<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< node.toString()        		<< ";"
-		<< label				<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visDeleteNodeLabel (
-	NETWORK_ID network,
-	NodeID& node
-	){
-
-	ostringstream out;
-
-	out	<< "VisMsgDeleteNodeLable"       	<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< node.toString()        		<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visShowNodeBubble (
-                NETWORK_ID network,
-                NodeID& node,
-                string label
-                ){
-
-	unsigned long bubbleKey = nodeBubbles.insert( network, node );
-        ostringstream out;
-
-        out       << "VisMsgShowNodeBubble"     << ";"
-                  << Helper::ultos(network)     << ";"
-                  << Helper::ultos(bubbleKey)   << ";"
-                  << node.toString()            << ";"
-                  << label                      << std::endl;
-
-        sendMessage( out.str(), network );
-}
-
-
-void OvlVis::visDeleteNodeBubble (
-	NETWORK_ID network,
-	NodeID& node
-	){
-
-	if( !nodeBubbles.exists(network, node)) return;
-
-	unsigned long bubbleID = nodeBubbles.get( network, node );
-	nodeBubbles.remove( network, node );
-
-	ostringstream out;
-
-	out	<< "VisMsgDeleteBubble"         << ";"
-                << Helper::ultos(network) 	<< ";"
-                << Helper::ultos(bubbleID)      << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visShowShiftedNodeIcon (
-                NETWORK_ID network,
-                NodeID& node,
-                ICON_ID iconID,
-		unsigned int timeout
-                ){
-
-	unsigned long iconKey = shiftedNodeIcons.insert( network, node );
-
-        ostringstream out;
-
-        out	<< "VisMsgShowNodeIcon"      	<< ";"
-                << Helper::ultos(network)   	<< ";"
-                << Helper::ultos(iconKey)       << ";"
-                << node.toString()       	<< ";"
-                << Helper::ultos(iconID)	<< std::endl;
-
-        sendMessage( out.str(), network );
-
-	if( timeout > 0 ){
-		TimedoutIcon* obj = new TimedoutIcon( network, node, timeout );
-		obj->startIcon();
-	}
-}
-
-void OvlVis::visDeleteShiftedNodeIcon (
-                NETWORK_ID network,
-                NodeID& node
-                ){
-
-	if( !shiftedNodeIcons.exists(network, node) )return;
-
-	unsigned long iconKey = shiftedNodeIcons.get( network, node );
-	shiftedNodeIcons.remove( network, node );
-
-	ostringstream out;
-
-	out	<< "VisMsgDeleteIcon"           << ";"
-                << Helper::ultos(network) 	<< ";"
-                << Helper::ultos(iconKey)       << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-//*****************************************************
-//*****************************************************
-//*****************************************************
-
-void OvlVis::visChangeLinkWidth (
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	unsigned int width
-	){
-
-	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
-
-	ostringstream out;
-	out	<< "VisMsgChangeLinkWidth"       	<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< Helper::ultos(edgekey)		<< ";"
-		<< Helper::ultos(width)			<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visChangeLinkColor (
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	unsigned char r,
-	unsigned char g,
-	unsigned char b
-	){
-
-	ostringstream out;
-	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
-
-	out	<< "VisMsgChangeLinkColor"       	<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< Helper::ultos(edgekey)			<< ";"
-		<< Helper::ultos(r)			<< ";"
-		<< Helper::ultos(g)			<< ";"
-		<< Helper::ultos(b)			<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visChangeLinkColor (
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	NODE_COLORS color
-	){
-
-	unsigned char r = 0;
-	unsigned char g = 0;
-	unsigned char b = 0;
-
-	switch( color ) {
-		case NODE_COLORS_GREY: 	r = 128; g = 128; b = 128; break;
-		case NODE_COLORS_GREEN:	r = 0;   g = 200; b = 0;   break;
-		case NODE_COLORS_RED:	r = 255; g = 0;   b = 0;   break;
-	}
-
-	visChangeLinkColor( network, srcnode, destnode, r, g, b );
-}
-
-void OvlVis::visShowLinkLabel (
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	string label
-	){
-
-	ostringstream out;
-	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
-
-	out	<< "VisMsgShowLinkLabel"       		<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< Helper::ultos(edgekey)			<< ";"
-		<< label				<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visDeleteLinkLabel (
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode
-	){
-
-	if( !networkLinks.exists(network, NodePair(srcnode, destnode))) return;
-
-	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
-	ostringstream out;
-
-	out	<< "VisMsgDeleteLinkLabel"       	<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< Helper::ultos(edgekey)		<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visShowOnLinkIcon (
-                NETWORK_ID network,
-                NodeID& srcnode,
-                NodeID& destnode,
-                ICON_ID iconID
-                ){
-
-	unsigned long iconKey = onLinkIcons.insert(network, NodePair(srcnode, destnode));
-        ostringstream out;
-
-        out	<< "VisMsgShowLinkIcon"      	<< ";"
-                << Helper::ultos(network)   	<< ";"
-                << Helper::ultos(iconKey)       << ";"
-                << srcnode.toString()   	<< ";"
-                << destnode.toString()   	<< ";"
-                << Helper::ultos(iconID)	<< std::endl;
-
-        sendMessage( out.str(), network );
-}
-
-void OvlVis::visDeleteOnLinkIcon (
-                NETWORK_ID network,
-                NodeID& srcnode,
-		NodeID& destnode
-                ){
-
-	if( !onLinkIcons.exists(network, NodePair(srcnode, destnode))) return;
-
-	unsigned long iconKey = onLinkIcons.get( network, NodePair(srcnode, destnode) );
-	onLinkIcons.remove( network, NodePair(srcnode, destnode) );
-
-	ostringstream out;
-
-	out	<< "VisMsgDeleteIcon"           << ";"
-                << Helper::ultos(network) 	<< ";"
-                << Helper::ultos(iconKey)       << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visShowLinkBubble (
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode,
-	string label
-	){
-
-	ostringstream out;
-	unsigned long bubble = linkBubbles.insert( network, NodePair(srcnode, destnode) );
-
-	out	<< "VisMsgShowLinkBubble"	<< ";"
-		<< Helper::ultos(network)	<< ";"
-		<< Helper::ultos(bubble)	<< ";"
-		<< srcnode.toString()   	<< ";"
-		<< destnode.toString()   	<< ";"
-		<< label			<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visDeleteLinkBubble (
-	NETWORK_ID network,
-	NodeID& srcnode,
-	NodeID& destnode
-	){
-
-	if( !linkBubbles.exists(network, NodePair(srcnode, destnode))) return;
-
-	ostringstream out;
-	unsigned long bubble = linkBubbles.get( network, NodePair(srcnode, destnode) );
-	linkBubbles.remove( network, NodePair(srcnode, destnode) );
-
-	out	<< "VisMsgDeleteBubble"		<< ";"
-		<< Helper::ultos(network)	<< ";"
-		<< Helper::ultos(bubble)	<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-//*****************************************************
-//*****************************************************
-//*****************************************************
-
-void OvlVis::visSendMessage (
-	NETWORK_ID network,
-	NodeID& startnode,
-	NodeID& endnode
-	){
-
-	ostringstream out;
-
-	out	<< "VisMsgSendMessage"       		<< ";"
-		<< Helper::ultos(network) 		<< ";"
-		<< startnode.toString()        		<< ";"
-		<< endnode.toString()			<< std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-//*****************************************************
-//*****************************************************
-//*****************************************************
-
-void OvlVis::visCLIOInitMeasurement(
-	NETWORK_ID network,
-	unsigned long edgekey,
-	NodeID& srcnode,
-	NodeID& destnode,
-	string info
-	){
-
-	ostringstream out;
-
-	out << "VisMsgCLIOInitMeasurement" << ";"
-		<< Helper::ultos(network)      << ";"
-		<< Helper::ultos(edgekey)      << ";"
-		<< srcnode.toString()          << ";"
-		<< destnode.toString()         << ";"
-		<< info                        << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-void OvlVis::visCLIOEndMeasurement(
-	NETWORK_ID network,
-	unsigned long edgekey,
-	NodeID& srcnode,
-	NodeID& destnode,
-	string info,
-	string value,
-	string unit
-	){
-
-	ostringstream out;
-
-	out << "VisMsgCLIOEndMeasurement" << ";"
-		<< Helper::ultos(network)     << ";"
-		<< Helper::ultos(edgekey)     << ";"
-		<< srcnode.toString()         << ";"
-		<< destnode.toString()        << ";"
-		<< info                       << ";"
-		<< value		      << ";"
-		<< unit			      << std::endl;
-
-	sendMessage( out.str(), network );
-}
-
-//*****************************************************
-//*****************************************************
-//*****************************************************
-
-}} // namespace ariba, common
Index: source/ariba/utility/misc/OvlVis.h
===================================================================
--- source/ariba/utility/misc/OvlVis.h	(revision 6266)
+++ 	(revision )
@@ -1,443 +1,0 @@
-// [License]
-// The Ariba-Underlay Copyright
-//
-// Copyright (c) 2008-2009, Institute of Telematics, UniversitÃ€t Karlsruhe (TH)
-//
-// Institute of Telematics
-// UniversitÃ€t Karlsruhe (TH)
-// Zirkel 2, 76128 Karlsruhe
-// Germany
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// 1. Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
-// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
-// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// The views and conclusions contained in the software and documentation
-// are those of the authors and should not be interpreted as representing
-// official policies, either expressed or implied, of the Institute of
-// Telematics.
-// [License]
-
-#ifndef OVLVIS_H__
-#define OVLVIS_H__
-
-#include <sstream>
-#include <iostream>
-#include <string>
-#include <map>
-#include <boost/utility.hpp>
-#include <boost/asio.hpp>
-#include "ariba/utility/types/NodeID.h"
-#include "ariba/utility/logging/Logging.h"
-#include "ariba/utility/system/Timer.h"
-#include "ariba/utility/misc/Helper.h"
-#include "ariba/utility/misc/KeyMapping.hpp"
-#include "ariba/utility/configuration/Configuration.h"
-
-using std::string;
-using std::map;
-using std::pair;
-using std::make_pair;
-using std::cout;
-using std::ostringstream;
-using boost::asio::ip::tcp;
-using ariba::utility::NodeID;
-using ariba::utility::Configuration;
-using ariba::utility::KeyMapping;
-using ariba::utility::Timer;
-
-namespace ariba {
-namespace utility {
-
-class OvlVis : private boost::noncopyable {
-	use_logging_h(OvlVis);
-public:
-	static OvlVis& instance() { static OvlVis the_inst; return the_inst; }
-
-	typedef enum _NETWORK_ID {
-		NETWORK_ID_BASE_COMMUNICATION 	= 1,
-		NETWORK_ID_BASE_OVERLAY 	= 2,
-		NETWORK_ID_EONSON 		= 3,
-		NETWORK_ID_MCPO 		= 4,
-		NETWORK_ID_CLIO 		= 5,
-		NETWORK_ID_VIDEOSTREAM 		= 6,
-		NETWORK_ID_GAME 		= 7,
-		NETWORK_ID_SECURITY 		= 8,
-	} NETWORK_ID;
-
-	//****************************************************************
-	// Node creation, node connections, status, node deletion, ...
-	//****************************************************************
-
-	/**
-	 * Create a node in the network that is initially unconnected.
-	 */
-	void visCreate (
-		NETWORK_ID network,
-		NodeID& node,
-		string nodename,
-		string info
-		);
-
-	/**
-	 * Change the status of a node -> enable/disable a node.
-	 */
-	void visChangeStatus(
-		NETWORK_ID network,
-		NodeID& node,
-		bool enable,
-		string info
-		);
-
-	/**
-	 * Connect two nodes using a link.
-	 */
-	void visConnect (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		string info
-		);
-
-	/**
-	 * Disconnect the link between two nodes.
-	 */
-	void visDisconnect (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		string info
-		);
-
-	/**
-	 * Indicate that the connection procedure
-	 * between two nodes failed.
-	 */
-	void visFailedConnect (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		string info
-		);
-
-	/**
-	 * Delete a node from the network.
-	 */
-	void visShutdown (
-		NETWORK_ID network,
-		NodeID& node,
-		string info
-		);
-
-	//****************************************************************
-	// Node manipulation: change color, change icon
-	//****************************************************************
-
-	/**
-	 * Change the color of the node.
-	 */
-	void visChangeNodeColor (
-		NETWORK_ID network,
-		NodeID& node,
-		unsigned char r,
-		unsigned char g,
-		unsigned char b
-		);
-
-	typedef enum _NODE_COLORS {
-		NODE_COLORS_GREY,
-		NODE_COLORS_GREEN,
-		NODE_COLORS_RED,
-	} NODE_COLORS;
-
-	/**
-	 * Change the color of the node.
-	 */
-	void visChangeNodeColor (
-		NETWORK_ID network,
-		NodeID& node,
-		NODE_COLORS color
-		);
-
-	/**
-	 * The available icons for changing the
-	 * icon of a node, showing an icon besides
-	 * a node and showing an icon at a link.
-	 */
-	typedef enum _ICON_ID {
-		ICON_ID_DEFAULT_NODE 	= 0,
-		ICON_ID_PC 		= 1,
-		ICON_ID_PC_WORLD 	= 2,
-		ICON_ID_FAILURE 	= 3,
-		ICON_ID_RED_CROSS 	= 4,
-		ICON_ID_CHARACTER_A 	= 5,
-		ICON_ID_CHARACTER_W 	= 6,
-		ICON_ID_CAMERA          = 7,
-	} ICON_ID;
-
-	/**
-	 * Change the icon of a node.
-	 */
-        void visChangeNodeIcon (
-                NETWORK_ID network,
-                NodeID& node,
-                ICON_ID icon
-                );
-
-	/**
-	 * Show the label of the node.
-	 */
-	void visShowNodeLabel (
-		NETWORK_ID network,
-		NodeID& node,
-		string label
-		);
-
-	/**
-	 * Delete the label of the node.
-	 */
-	void visDeleteNodeLabel (
-		NETWORK_ID network,
-		NodeID& node
-		);
-
-	/**
-	 * Show a bubble at the node.
-	 */
-        void visShowNodeBubble (
-                NETWORK_ID network,
-                NodeID& node,
-                string label
-                );
-
-	/**
-	 * Delete a bubble at the node.
-	 */
-	void visDeleteNodeBubble (
-                NETWORK_ID network,
-		NodeID& node
-                );
-
-	/**
-	 * Show an icon besides the node.
-	 */
-        void visShowShiftedNodeIcon (
-                NETWORK_ID network,
-                NodeID& node,
-                ICON_ID iconID,
-		unsigned int timeout = 0
-                );
-
-	/**
-	 * Delete an icon besides the node
-	 */
-        void visDeleteShiftedNodeIcon (
-                NETWORK_ID network,
-                NodeID& node
-                );
-
-	//****************************************************************
-	// Link manipulation: change width, color, show bubbles, icons, ...
-	//****************************************************************
-
-	/**
-	 * Change the link width
-	 */
-	void visChangeLinkWidth (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		unsigned int width
-		);
-
-	/**
-	 * Change the link color
-	 */
-	void visChangeLinkColor (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		unsigned char r,
-		unsigned char g,
-		unsigned char b
-		);
-
-	/**
-	 * Change the link color
-	 */
-	void visChangeLinkColor (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		NODE_COLORS color
-		);
-
-	/**
-	 * Show a link label
-	 */
-	void visShowLinkLabel (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		string label
-		);
-
-	/**
-	 * Delete a link label
-	 */
-	void visDeleteLinkLabel (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode
-		);
-
-	/**
-	 * Show an icon at the link
-	 */
-        void visShowOnLinkIcon (
-                NETWORK_ID network,
-                NodeID& srcnode,
-                NodeID& destnode,
-                ICON_ID iconID
-                );
-
-	/**
-	 * Delete an icon at the link
-	 */
-        void visDeleteOnLinkIcon (
-                NETWORK_ID network,
-                NodeID& srcnode,
-		NodeID& destnode
-                );
-
-	/**
-	 * Show a bubble besides the link
-	 */
-	void visShowLinkBubble (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode,
-		string label
-		);
-
-	/**
-	 * Delete a bubble besides the link
-	 */
-	void visDeleteLinkBubble (
-		NETWORK_ID network,
-		NodeID& srcnode,
-		NodeID& destnode
-		);
-
-	//****************************************************************
-	// Send message between two nodes
-	//****************************************************************
-
-	/**
-	 * Animate the message sending between two nodes
-	 */
-	void visSendMessage (
-		NETWORK_ID network,
-		NodeID& startnode,
-		NodeID& endnode
-		);
-
-//*******************************************************
-//*
-	void visCLIOInitMeasurement (
-		NETWORK_ID network,
-		unsigned long edgekey,
-		NodeID& srcnode,
-		NodeID& destnode,
-		string info
-		);
-
-	void visCLIOEndMeasurement (
-		NETWORK_ID network,
-		unsigned long edgekey,
-		NodeID& srcnode,
-		NodeID& destnode,
-		string info,
-		string value,
-		string unit
-		);
-//*
-//*******************************************************
-
-protected:
-	OvlVis();
-	~OvlVis();
-
-private:
-	void sendMessage( const string msg, NETWORK_ID nid );
-	void sendSocket( const string msg );
-
-	/**
-	 * boost asio stuff for connecting to ovlvis
-	 */
-	boost::asio::io_service io_service;
-	tcp::socket socket;
-	volatile bool socketOpened;
-
-	typedef pair<NodeID, NodeID> NodePair;
-	typedef KeyMapping<NodePair> NetworkLinks;
-	typedef KeyMapping<NodePair> LinkBubbles;
-	typedef KeyMapping<NodeID>   NodeBubbles;
-	typedef KeyMapping<NodeID>   ShiftedNodeIcons;
-	typedef KeyMapping<NodePair> OnLinkIcons;
-
-	NetworkLinks 		networkLinks;
-	LinkBubbles 		linkBubbles;
-	NodeBubbles 		nodeBubbles;
-	ShiftedNodeIcons 	shiftedNodeIcons;
-	OnLinkIcons 		onLinkIcons;
-
-	class TimedoutIcon : public Timer {
-	private:
-		NETWORK_ID network;
-		NodeID node;
-		unsigned int timeout;
-	public:
-		TimedoutIcon(NETWORK_ID _network, NodeID _node, unsigned int _timeout) :
-			network(_network), node(_node), timeout(_timeout) {
-		}
-
-		virtual ~TimedoutIcon(){
-			Timer::stop();
-		}
-
-		void startIcon(){
-			Timer::setInterval( timeout, true );
-			Timer::start();
-		}
-
-	protected:
-		virtual void eventFunction(){
-			OvlVis::instance().visDeleteShiftedNodeIcon( network, node );
-			delete this;
-		}
-	};
-
-};
-
-}} // namespace ariba, common
-
-#endif // OVLVIS_H__
Index: source/ariba/utility/visual/OvlVis.cpp
===================================================================
--- source/ariba/utility/visual/OvlVis.cpp	(revision 6584)
+++ source/ariba/utility/visual/OvlVis.cpp	(revision 6584)
@@ -0,0 +1,671 @@
+// [License]
+// The Ariba-Underlay Copyright
+//
+// Copyright (c) 2008-2009, Institute of Telematics, UniversitÃ€t Karlsruhe (TH)
+//
+// Institute of Telematics
+// UniversitÃ€t Karlsruhe (TH)
+// Zirkel 2, 76128 Karlsruhe
+// Germany
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
+// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// The views and conclusions contained in the software and documentation
+// are those of the authors and should not be interpreted as representing
+// official policies, either expressed or implied, of the Institute of
+// Telematics.
+// [License]
+
+#include "OvlVis.h"
+
+namespace ariba {
+namespace utility {
+
+//*****************************************************
+//*****************************************************
+//*****************************************************
+
+use_logging_cpp(OvlVis);
+
+OvlVis::OvlVis() : socket(io_service), socketOpened(false) {
+
+	if( ! Configuration::haveConfig() ) return;
+	if( ! Configuration::instance().exists("DEMO_OvlVisIP") )   return;
+	if( ! Configuration::instance().exists("DEMO_OvlVisPort") ) return;
+
+	string serverIP = Configuration::instance().read<string>("DEMO_OvlVisIP");
+	string serverPort = Configuration::instance().read<string>("DEMO_OvlVisPort");
+	if( serverIP.length() == 0 || serverPort.length() == 0) return;
+
+	logging_debug( "connecting to ovlvis " + serverIP + " on " + serverPort );
+
+	tcp::resolver resolver(io_service);
+	tcp::resolver::query query(
+		serverIP,
+		serverPort,
+		tcp::resolver::query::passive |
+		tcp::resolver::query::address_configured |
+		tcp::resolver::query::numeric_service);
+
+	tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
+	tcp::resolver::iterator end;
+
+	boost::system::error_code error = boost::asio::error::host_not_found;
+	while (error && endpoint_iterator != end){
+		socket.close();
+		socket.connect(*endpoint_iterator++, error);
+	}
+
+	if (error){
+		logging_warn( "OvlVis could not connect to GUI" );
+	} else {
+		socketOpened = true;
+	}
+}
+
+OvlVis::~OvlVis(){
+
+	socket.close();
+
+}
+
+void OvlVis::sendMessage( const string msg, NETWORK_ID nid ) {
+
+	sendSocket( msg );
+
+// 	{
+// 		// auto layout
+// 		ostringstream out;
+//
+// 		out 	<< "VisMsgOptimizeView" << ";"
+// 			<< Helper::ultos(nid)     << ";" // network id is ignored in the message renderer, just renders the current viewed network
+// 			<< "0"                  << std::endl;
+//
+// 		sendSocket( out.str() );
+// 	}
+
+// 	{	// auto zoom
+// 		ostringstream out;
+//
+// 		out 	<< "VisMsgOptimizeView" << ";"
+// 			<< Helper::ultos(nid)     << ";" // network id is ignored in the message renderer, just renders the current viewed network
+// 			<< "1"                  << std::endl;
+//
+// 		sendSocket( out.str() );
+// 	}
+
+}
+
+void OvlVis::sendSocket(const string msg){
+	if( socket.is_open() && socketOpened )
+		socket.send( boost::asio::buffer(msg) );
+}
+
+//*****************************************************
+//*****************************************************
+//*****************************************************
+
+void OvlVis::visCreate(
+	NETWORK_ID network,
+	NodeID& node,
+	string nodename,
+	string info
+	){
+
+	ostringstream out;
+
+	out 	<< "VisMsgCreate"         << ";"
+		<< Helper::ultos(network) << ";"
+		<< node.toString()        << ";"
+		<< nodename               << ";"
+		<< "" /*netName*/         << ";"
+		<< "" /*ip*/              << ";"
+		<< "" /*port*/            << ";"
+		<< "0"                    << ";"
+		<< info                   << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visChangeStatus(
+	NETWORK_ID network,
+	NodeID& node,
+	bool enable,
+	string info
+	){
+
+	ostringstream out;
+
+	out 	<< "VisMsgChangeStatus"   << ";"
+		<< Helper::ultos(network) << ";"
+		<< node.toString()        << ";"
+		<< (enable ? "1" : "0")   << ";"
+		<< info                   << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visConnect(
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	string info
+	){
+
+	// if we already have a link between the two nodes
+	// we just ignore the call and leave the old link
+
+	if( networkLinks.exists( network, NodePair(srcnode,destnode) )) return;
+
+	ostringstream out;
+	unsigned long edgekey = networkLinks.insert( network, NodePair(srcnode,destnode) );
+
+	out 	<< "VisMsgConnect"        << ";"
+		<< Helper::ultos(network) << ";"
+		<< edgekey 		  << ";"
+		<< srcnode.toString()     << ";"
+		<< destnode.toString()    << ";"
+		<< "0"                    << ";"
+		<< info                   << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visDisconnect(
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	string info
+	){
+
+	if( !networkLinks.exists(network, NodePair(srcnode, destnode)) ) return;
+
+	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
+	networkLinks.remove( network, NodePair(srcnode, destnode) );
+
+	ostringstream out;
+	out	<< "VisMsgDisconnect"     << ";"
+		<< Helper::ultos(network) << ";"
+		<< Helper::ultos(edgekey) << ";"
+		<< info                   << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visFailedConnect(
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	string info
+	){
+
+	ostringstream out;
+
+	out 	<< "VisMsgFailedConnect"  << ";"
+		<< Helper::ultos(network) << ";"
+		<< srcnode.toString()     << ";"
+		<< destnode.toString()    << ";"
+		<< info                   << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visShutdown(
+	NETWORK_ID network,
+	NodeID& node,
+	string info
+	){
+
+	ostringstream out;
+
+	out	<< "VisMsgShutdown"       << ";"
+		<< Helper::ultos(network) << ";"
+		<< node.toString()        << ";"
+		<< info                   << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+//*****************************************************
+//*****************************************************
+//*****************************************************
+
+void OvlVis::visChangeNodeColor (
+	NETWORK_ID network,
+	NodeID& node,
+	unsigned char r,
+	unsigned char g,
+	unsigned char b
+	){
+
+	ostringstream out;
+
+	out	<< "VisMsgChangeNodeColor"       	<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< node.toString()        		<< ";"
+		<< ariba::utility::Helper::ultos(r) 	<< ";"
+		<< ariba::utility::Helper::ultos(g) 	<< ";"
+		<< ariba::utility::Helper::ultos(b) 	<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visChangeNodeColor (
+	NETWORK_ID network,
+	NodeID& node,
+	NODE_COLORS color
+	){
+
+	unsigned char r = 0;
+	unsigned char g = 0;
+	unsigned char b = 0;
+
+	switch( color ) {
+		case NODE_COLORS_GREY: 	r = 128; g = 128; b = 128; break;
+		case NODE_COLORS_GREEN:	r = 0;   g = 200; b = 0;   break;
+		case NODE_COLORS_RED:	r = 255; g = 0;   b = 0;   break;
+	}
+
+	visChangeNodeColor( network, node, r, g, b );
+}
+
+void OvlVis::visChangeNodeIcon (
+                NETWORK_ID network,
+                NodeID& node,
+                ICON_ID icon
+                ){
+
+        ostringstream out;
+
+        out	<< "VisMsgChangeNodeIcon"               << ";"
+                << Helper::ultos(network) 		<< ";"
+                << node.toString()        		<< ";"
+                << Helper::ultos((unsigned int)icon)	<< std::endl;
+
+        sendMessage( out.str(), network );
+}
+
+void OvlVis::visShowNodeLabel (
+	NETWORK_ID network,
+	NodeID& node,
+	string label
+	){
+
+	ostringstream out;
+
+	out	<< "VisMsgShowNodeLabel"       		<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< node.toString()        		<< ";"
+		<< label				<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visDeleteNodeLabel (
+	NETWORK_ID network,
+	NodeID& node
+	){
+
+	ostringstream out;
+
+	out	<< "VisMsgDeleteNodeLable"       	<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< node.toString()        		<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visShowNodeBubble (
+                NETWORK_ID network,
+                NodeID& node,
+                string label
+                ){
+
+	unsigned long bubbleKey = nodeBubbles.insert( network, node );
+        ostringstream out;
+
+        out       << "VisMsgShowNodeBubble"     << ";"
+                  << Helper::ultos(network)     << ";"
+                  << Helper::ultos(bubbleKey)   << ";"
+                  << node.toString()            << ";"
+                  << label                      << std::endl;
+
+        sendMessage( out.str(), network );
+}
+
+
+void OvlVis::visDeleteNodeBubble (
+	NETWORK_ID network,
+	NodeID& node
+	){
+
+	if( !nodeBubbles.exists(network, node)) return;
+
+	unsigned long bubbleID = nodeBubbles.get( network, node );
+	nodeBubbles.remove( network, node );
+
+	ostringstream out;
+
+	out	<< "VisMsgDeleteBubble"         << ";"
+                << Helper::ultos(network) 	<< ";"
+                << Helper::ultos(bubbleID)      << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visShowShiftedNodeIcon (
+                NETWORK_ID network,
+                NodeID& node,
+                ICON_ID iconID,
+		unsigned int timeout
+                ){
+
+	unsigned long iconKey = shiftedNodeIcons.insert( network, node );
+
+        ostringstream out;
+
+        out	<< "VisMsgShowNodeIcon"      	<< ";"
+                << Helper::ultos(network)   	<< ";"
+                << Helper::ultos(iconKey)       << ";"
+                << node.toString()       	<< ";"
+                << Helper::ultos(iconID)	<< std::endl;
+
+        sendMessage( out.str(), network );
+
+	if( timeout > 0 ){
+		TimedoutIcon* obj = new TimedoutIcon( network, node, timeout );
+		obj->startIcon();
+	}
+}
+
+void OvlVis::visDeleteShiftedNodeIcon (
+                NETWORK_ID network,
+                NodeID& node
+                ){
+
+	if( !shiftedNodeIcons.exists(network, node) )return;
+
+	unsigned long iconKey = shiftedNodeIcons.get( network, node );
+	shiftedNodeIcons.remove( network, node );
+
+	ostringstream out;
+
+	out	<< "VisMsgDeleteIcon"           << ";"
+                << Helper::ultos(network) 	<< ";"
+                << Helper::ultos(iconKey)       << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+//*****************************************************
+//*****************************************************
+//*****************************************************
+
+void OvlVis::visChangeLinkWidth (
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	unsigned int width
+	){
+
+	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
+
+	ostringstream out;
+	out	<< "VisMsgChangeLinkWidth"       	<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< Helper::ultos(edgekey)		<< ";"
+		<< Helper::ultos(width)			<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visChangeLinkColor (
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	unsigned char r,
+	unsigned char g,
+	unsigned char b
+	){
+
+	ostringstream out;
+	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
+
+	out	<< "VisMsgChangeLinkColor"       	<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< Helper::ultos(edgekey)			<< ";"
+		<< Helper::ultos(r)			<< ";"
+		<< Helper::ultos(g)			<< ";"
+		<< Helper::ultos(b)			<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visChangeLinkColor (
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	NODE_COLORS color
+	){
+
+	unsigned char r = 0;
+	unsigned char g = 0;
+	unsigned char b = 0;
+
+	switch( color ) {
+		case NODE_COLORS_GREY: 	r = 128; g = 128; b = 128; break;
+		case NODE_COLORS_GREEN:	r = 0;   g = 200; b = 0;   break;
+		case NODE_COLORS_RED:	r = 255; g = 0;   b = 0;   break;
+	}
+
+	visChangeLinkColor( network, srcnode, destnode, r, g, b );
+}
+
+void OvlVis::visShowLinkLabel (
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	string label
+	){
+
+	ostringstream out;
+	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
+
+	out	<< "VisMsgShowLinkLabel"       		<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< Helper::ultos(edgekey)			<< ";"
+		<< label				<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visDeleteLinkLabel (
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode
+	){
+
+	if( !networkLinks.exists(network, NodePair(srcnode, destnode))) return;
+
+	unsigned long edgekey = networkLinks.get( network, NodePair(srcnode, destnode) );
+	ostringstream out;
+
+	out	<< "VisMsgDeleteLinkLabel"       	<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< Helper::ultos(edgekey)		<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visShowOnLinkIcon (
+                NETWORK_ID network,
+                NodeID& srcnode,
+                NodeID& destnode,
+                ICON_ID iconID
+                ){
+
+	unsigned long iconKey = onLinkIcons.insert(network, NodePair(srcnode, destnode));
+        ostringstream out;
+
+        out	<< "VisMsgShowLinkIcon"      	<< ";"
+                << Helper::ultos(network)   	<< ";"
+                << Helper::ultos(iconKey)       << ";"
+                << srcnode.toString()   	<< ";"
+                << destnode.toString()   	<< ";"
+                << Helper::ultos(iconID)	<< std::endl;
+
+        sendMessage( out.str(), network );
+}
+
+void OvlVis::visDeleteOnLinkIcon (
+                NETWORK_ID network,
+                NodeID& srcnode,
+		NodeID& destnode
+                ){
+
+	if( !onLinkIcons.exists(network, NodePair(srcnode, destnode))) return;
+
+	unsigned long iconKey = onLinkIcons.get( network, NodePair(srcnode, destnode) );
+	onLinkIcons.remove( network, NodePair(srcnode, destnode) );
+
+	ostringstream out;
+
+	out	<< "VisMsgDeleteIcon"           << ";"
+                << Helper::ultos(network) 	<< ";"
+                << Helper::ultos(iconKey)       << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visShowLinkBubble (
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode,
+	string label
+	){
+
+	ostringstream out;
+	unsigned long bubble = linkBubbles.insert( network, NodePair(srcnode, destnode) );
+
+	out	<< "VisMsgShowLinkBubble"	<< ";"
+		<< Helper::ultos(network)	<< ";"
+		<< Helper::ultos(bubble)	<< ";"
+		<< srcnode.toString()   	<< ";"
+		<< destnode.toString()   	<< ";"
+		<< label			<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visDeleteLinkBubble (
+	NETWORK_ID network,
+	NodeID& srcnode,
+	NodeID& destnode
+	){
+
+	if( !linkBubbles.exists(network, NodePair(srcnode, destnode))) return;
+
+	ostringstream out;
+	unsigned long bubble = linkBubbles.get( network, NodePair(srcnode, destnode) );
+	linkBubbles.remove( network, NodePair(srcnode, destnode) );
+
+	out	<< "VisMsgDeleteBubble"		<< ";"
+		<< Helper::ultos(network)	<< ";"
+		<< Helper::ultos(bubble)	<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+//*****************************************************
+//*****************************************************
+//*****************************************************
+
+void OvlVis::visSendMessage (
+	NETWORK_ID network,
+	NodeID& startnode,
+	NodeID& endnode
+	){
+
+	ostringstream out;
+
+	out	<< "VisMsgSendMessage"       		<< ";"
+		<< Helper::ultos(network) 		<< ";"
+		<< startnode.toString()        		<< ";"
+		<< endnode.toString()			<< std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+//*****************************************************
+//*****************************************************
+//*****************************************************
+
+void OvlVis::visCLIOInitMeasurement(
+	NETWORK_ID network,
+	unsigned long edgekey,
+	NodeID& srcnode,
+	NodeID& destnode,
+	string info
+	){
+
+	ostringstream out;
+
+	out << "VisMsgCLIOInitMeasurement" << ";"
+		<< Helper::ultos(network)      << ";"
+		<< Helper::ultos(edgekey)      << ";"
+		<< srcnode.toString()          << ";"
+		<< destnode.toString()         << ";"
+		<< info                        << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+void OvlVis::visCLIOEndMeasurement(
+	NETWORK_ID network,
+	unsigned long edgekey,
+	NodeID& srcnode,
+	NodeID& destnode,
+	string info,
+	string value,
+	string unit
+	){
+
+	ostringstream out;
+
+	out << "VisMsgCLIOEndMeasurement" << ";"
+		<< Helper::ultos(network)     << ";"
+		<< Helper::ultos(edgekey)     << ";"
+		<< srcnode.toString()         << ";"
+		<< destnode.toString()        << ";"
+		<< info                       << ";"
+		<< value		      << ";"
+		<< unit			      << std::endl;
+
+	sendMessage( out.str(), network );
+}
+
+//*****************************************************
+//*****************************************************
+//*****************************************************
+
+}} // namespace ariba, common
Index: source/ariba/utility/visual/OvlVis.h
===================================================================
--- source/ariba/utility/visual/OvlVis.h	(revision 6584)
+++ source/ariba/utility/visual/OvlVis.h	(revision 6584)
@@ -0,0 +1,443 @@
+// [License]
+// The Ariba-Underlay Copyright
+//
+// Copyright (c) 2008-2009, Institute of Telematics, UniversitÃ€t Karlsruhe (TH)
+//
+// Institute of Telematics
+// UniversitÃ€t Karlsruhe (TH)
+// Zirkel 2, 76128 Karlsruhe
+// Germany
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
+// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// The views and conclusions contained in the software and documentation
+// are those of the authors and should not be interpreted as representing
+// official policies, either expressed or implied, of the Institute of
+// Telematics.
+// [License]
+
+#ifndef OVLVIS_H__
+#define OVLVIS_H__
+
+#include <sstream>
+#include <iostream>
+#include <string>
+#include <map>
+#include <boost/utility.hpp>
+#include <boost/asio.hpp>
+#include "ariba/utility/types/NodeID.h"
+#include "ariba/utility/logging/Logging.h"
+#include "ariba/utility/system/Timer.h"
+#include "ariba/utility/misc/Helper.h"
+#include "ariba/utility/misc/KeyMapping.hpp"
+#include "ariba/utility/configuration/Configuration.h"
+
+using std::string;
+using std::map;
+using std::pair;
+using std::make_pair;
+using std::cout;
+using std::ostringstream;
+using boost::asio::ip::tcp;
+using ariba::utility::NodeID;
+using ariba::utility::Configuration;
+using ariba::utility::KeyMapping;
+using ariba::utility::Timer;
+
+namespace ariba {
+namespace utility {
+
+class OvlVis : private boost::noncopyable {
+	use_logging_h(OvlVis);
+public:
+	static OvlVis& instance() { static OvlVis the_inst; return the_inst; }
+
+	typedef enum _NETWORK_ID {
+		NETWORK_ID_BASE_COMMUNICATION 	= 1,
+				NETWORK_ID_BASE_OVERLAY = 2,
+				NETWORK_ID_EONSON 		= 3,
+				NETWORK_ID_MCPO 		= 4,
+				NETWORK_ID_CLIO 		= 5,
+				NETWORK_ID_VIDEOSTREAM 	= 6,
+				NETWORK_ID_GAME 		= 7,
+				NETWORK_ID_SECURITY 	= 8,
+	} NETWORK_ID;
+
+	//****************************************************************
+	// Node creation, node connections, status, node deletion, ...
+	//****************************************************************
+
+	/**
+	 * Create a node in the network that is initially unconnected.
+	 */
+	void visCreate (
+			NETWORK_ID network,
+			NodeID& node,
+			string nodename,
+			string info
+	);
+
+	/**
+	 * Change the status of a node -> enable/disable a node.
+	 */
+	void visChangeStatus(
+			NETWORK_ID network,
+			NodeID& node,
+			bool enable,
+			string info
+	);
+
+	/**
+	 * Connect two nodes using a link.
+	 */
+	void visConnect (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			string info
+	);
+
+	/**
+	 * Disconnect the link between two nodes.
+	 */
+	void visDisconnect (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			string info
+	);
+
+	/**
+	 * Indicate that the connection procedure
+	 * between two nodes failed.
+	 */
+	void visFailedConnect (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			string info
+	);
+
+	/**
+	 * Delete a node from the network.
+	 */
+	void visShutdown (
+			NETWORK_ID network,
+			NodeID& node,
+			string info
+	);
+
+	//****************************************************************
+	// Node manipulation: change color, change icon
+	//****************************************************************
+
+	/**
+	 * Change the color of the node.
+	 */
+	void visChangeNodeColor (
+			NETWORK_ID network,
+			NodeID& node,
+			unsigned char r,
+			unsigned char g,
+			unsigned char b
+	);
+
+	typedef enum _NODE_COLORS {
+		NODE_COLORS_GREY,
+		NODE_COLORS_GREEN,
+		NODE_COLORS_RED,
+	} NODE_COLORS;
+
+	/**
+	 * Change the color of the node.
+	 */
+	void visChangeNodeColor (
+			NETWORK_ID network,
+			NodeID& node,
+			NODE_COLORS color
+	);
+
+	/**
+	 * The available icons for changing the
+	 * icon of a node, showing an icon besides
+	 * a node and showing an icon at a link.
+	 */
+	typedef enum _ICON_ID {
+		ICON_ID_DEFAULT_NODE 	= 0,
+		ICON_ID_PC 				= 1,
+		ICON_ID_PC_WORLD 		= 2,
+		ICON_ID_FAILURE 		= 3,
+		ICON_ID_RED_CROSS 		= 4,
+		ICON_ID_CHARACTER_A 	= 5,
+		ICON_ID_CHARACTER_W 	= 6,
+		ICON_ID_CAMERA          = 7,
+	} ICON_ID;
+
+	/**
+	 * Change the icon of a node.
+	 */
+	void visChangeNodeIcon (
+			NETWORK_ID network,
+			NodeID& node,
+			ICON_ID icon
+	);
+
+	/**
+	 * Show the label of the node.
+	 */
+	void visShowNodeLabel (
+			NETWORK_ID network,
+			NodeID& node,
+			string label
+	);
+
+	/**
+	 * Delete the label of the node.
+	 */
+	void visDeleteNodeLabel (
+			NETWORK_ID network,
+			NodeID& node
+	);
+
+	/**
+	 * Show a bubble at the node.
+	 */
+	void visShowNodeBubble (
+			NETWORK_ID network,
+			NodeID& node,
+			string label
+	);
+
+	/**
+	 * Delete a bubble at the node.
+	 */
+	void visDeleteNodeBubble (
+			NETWORK_ID network,
+			NodeID& node
+	);
+
+	/**
+	 * Show an icon besides the node.
+	 */
+	void visShowShiftedNodeIcon (
+			NETWORK_ID network,
+			NodeID& node,
+			ICON_ID iconID,
+			unsigned int timeout = 0
+	);
+
+	/**
+	 * Delete an icon besides the node
+	 */
+	void visDeleteShiftedNodeIcon (
+			NETWORK_ID network,
+			NodeID& node
+	);
+
+	//****************************************************************
+	// Link manipulation: change width, color, show bubbles, icons, ...
+	//****************************************************************
+
+	/**
+	 * Change the link width
+	 */
+	void visChangeLinkWidth (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			unsigned int width
+	);
+
+	/**
+	 * Change the link color
+	 */
+	void visChangeLinkColor (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			unsigned char r,
+			unsigned char g,
+			unsigned char b
+	);
+
+	/**
+	 * Change the link color
+	 */
+	void visChangeLinkColor (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			NODE_COLORS color
+	);
+
+	/**
+	 * Show a link label
+	 */
+	void visShowLinkLabel (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			string label
+	);
+
+	/**
+	 * Delete a link label
+	 */
+	void visDeleteLinkLabel (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode
+	);
+
+	/**
+	 * Show an icon at the link
+	 */
+	void visShowOnLinkIcon (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			ICON_ID iconID
+	);
+
+	/**
+	 * Delete an icon at the link
+	 */
+	void visDeleteOnLinkIcon (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode
+	);
+
+	/**
+	 * Show a bubble besides the link
+	 */
+	void visShowLinkBubble (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode,
+			string label
+	);
+
+	/**
+	 * Delete a bubble besides the link
+	 */
+	void visDeleteLinkBubble (
+			NETWORK_ID network,
+			NodeID& srcnode,
+			NodeID& destnode
+	);
+
+	//****************************************************************
+	// Send message between two nodes
+	//****************************************************************
+
+	/**
+	 * Animate the message sending between two nodes
+	 */
+	void visSendMessage (
+			NETWORK_ID network,
+			NodeID& startnode,
+			NodeID& endnode
+	);
+
+	//*******************************************************
+	//*
+	void visCLIOInitMeasurement (
+			NETWORK_ID network,
+			unsigned long edgekey,
+			NodeID& srcnode,
+			NodeID& destnode,
+			string info
+	);
+
+	void visCLIOEndMeasurement (
+			NETWORK_ID network,
+			unsigned long edgekey,
+			NodeID& srcnode,
+			NodeID& destnode,
+			string info,
+			string value,
+			string unit
+	);
+	//*
+	//*******************************************************
+
+protected:
+	OvlVis();
+	~OvlVis();
+
+private:
+	void sendMessage( const string msg, NETWORK_ID nid );
+	void sendSocket( const string msg );
+
+	/**
+	 * boost asio stuff for connecting to ovlvis
+	 */
+	boost::asio::io_service io_service;
+	tcp::socket socket;
+	volatile bool socketOpened;
+
+	typedef pair<NodeID, NodeID> NodePair;
+	typedef KeyMapping<NodePair> NetworkLinks;
+	typedef KeyMapping<NodePair> LinkBubbles;
+	typedef KeyMapping<NodeID>   NodeBubbles;
+	typedef KeyMapping<NodeID>   ShiftedNodeIcons;
+	typedef KeyMapping<NodePair> OnLinkIcons;
+
+	NetworkLinks 		networkLinks;
+	LinkBubbles 		linkBubbles;
+	NodeBubbles 		nodeBubbles;
+	ShiftedNodeIcons 	shiftedNodeIcons;
+	OnLinkIcons 		onLinkIcons;
+
+	class TimedoutIcon : public Timer {
+	private:
+		NETWORK_ID network;
+		NodeID node;
+		unsigned int timeout;
+	public:
+		TimedoutIcon(NETWORK_ID _network, NodeID _node, unsigned int _timeout) :
+			network(_network), node(_node), timeout(_timeout) {
+		}
+
+		virtual ~TimedoutIcon(){
+			Timer::stop();
+		}
+
+		void startIcon(){
+			Timer::setInterval( timeout, true );
+			Timer::start();
+		}
+
+	protected:
+		virtual void eventFunction(){
+			OvlVis::instance().visDeleteShiftedNodeIcon( network, node );
+			delete this;
+		}
+	};
+
+};
+
+}} // namespace ariba, common
+
+#endif // OVLVIS_H__
