blob: 245a39c7c841471801a637c35ff7467a00951ba9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Created on: 26 févr. 2011
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#include "ComProtocol.h"
#include <util/avm_string.h>
namespace sep
{
ComProtocol::PROTOCOL_KIND ComProtocol::to_cast(PROTOCOL_KIND protocol)
{
switch( protocol )
{
case PROTOCOL_ENVIRONMENT_KIND : return( PROTOCOL_UNDEFINED_KIND );
case PROTOCOL_TRANSFERT_KIND : return( PROTOCOL_UNDEFINED_KIND );
case PROTOCOL_BUFFER_KIND : return( PROTOCOL_UNDEFINED_KIND );
case PROTOCOL_RDV_KIND : return( PROTOCOL_UNICAST_KIND );
case PROTOCOL_MULTIRDV_KIND : return( PROTOCOL_MULTICAST_KIND );
case PROTOCOL_FLOW_KIND : return( PROTOCOL_UNDEFINED_KIND );
case PROTOCOL_BROADCAST_KIND : return( protocol );
case PROTOCOL_MULTICAST_KIND : return( protocol );
case PROTOCOL_UNICAST_KIND : return( protocol );
case PROTOCOL_ANYCAST_KIND : return( protocol );
case PROTOCOL_UNDEFINED_KIND : return( protocol );
default : return( PROTOCOL_UNDEFINED_KIND );
}
}
std::string ComProtocol::to_string(PROTOCOL_KIND protocol)
{
switch( protocol )
{
case PROTOCOL_ENVIRONMENT_KIND : return( "env" );
case PROTOCOL_TRANSFERT_KIND : return( "transfert" );
case PROTOCOL_BUFFER_KIND : return( "buffer" );
case PROTOCOL_RDV_KIND : return( "rdv" );
case PROTOCOL_MULTIRDV_KIND : return( "multirdv" );
case PROTOCOL_FLOW_KIND : return( "flow" );
case PROTOCOL_BROADCAST_KIND : return( "broadcast" );
case PROTOCOL_MULTICAST_KIND : return( "multicast" );
case PROTOCOL_UNICAST_KIND : return( "unicast" );
case PROTOCOL_ANYCAST_KIND : return( "anycast" );
case PROTOCOL_UNDEFINED_KIND : return( "undefined<protocol#kind>" );
default : return( "unknown<protocol#kind>" );
}
}
std::string ComProtocol::strProtocol(
PROTOCOL_KIND aProtocol, PROTOCOL_KIND aCast)
{
switch ( aProtocol )
{
case PROTOCOL_ENVIRONMENT_KIND:
{
return( "env" );
}
case PROTOCOL_BUFFER_KIND:
{
return( OSS() << "buffer , " << ComProtocol::strCast(aCast) );
}
case PROTOCOL_RDV_KIND:
{
return( OSS() << "rdv , " << ComProtocol::strCast(aCast) );
}
case PROTOCOL_MULTIRDV_KIND:
{
return( OSS() << "multirdv , " << ComProtocol::strCast(aCast) );
}
case PROTOCOL_FLOW_KIND:
{
return( OSS() << "flow , " << ComProtocol::strCast(aCast) );
}
case PROTOCOL_UNDEFINED_KIND:
{
return( OSS() << "undefined<protocol#kind> , "
<< ComProtocol::strCast(aCast) );
}
default :
{
return( OSS() << "unexpected<"
<< to_string(aProtocol) << " , "
<< to_string(aCast) << ">" );
}
}
}
std::string ComProtocol::strProtocol(PROTOCOL_KIND aProtocol)
{
switch ( aProtocol )
{
case PROTOCOL_ENVIRONMENT_KIND:
{
return( "env" );
}
case PROTOCOL_BUFFER_KIND:
{
return( "buffer" );
}
case PROTOCOL_RDV_KIND:
{
return( "rdv" );
}
case PROTOCOL_MULTIRDV_KIND:
{
return( "multirdv" );
}
case PROTOCOL_FLOW_KIND:
{
return( "flow" );
}
case PROTOCOL_ANYCAST_KIND:
{
return( "anycast" );
}
case PROTOCOL_UNICAST_KIND:
{
return( "unicast" );
}
case PROTOCOL_BROADCAST_KIND:
{
return( "broadcast" );
}
case PROTOCOL_MULTICAST_KIND:
{
return( "multicast" );
}
case PROTOCOL_UNDEFINED_KIND:
{
return( "undefined<protocol#kind>" );
}
default :
{
return( OSS() << "unexpected<"
<< to_string(aProtocol) << ">" );
}
}
}
std::string ComProtocol::strCast(PROTOCOL_KIND aCast)
{
switch ( aCast )
{
case PROTOCOL_UNICAST_KIND:
{
return( "unicast" );
}
case PROTOCOL_ANYCAST_KIND:
{
return( "anycast" );
}
case PROTOCOL_BROADCAST_KIND:
{
return( "broadcast" );
}
case PROTOCOL_MULTICAST_KIND:
{
return( "multicast" );
}
case PROTOCOL_UNDEFINED_KIND:
{
return( "undefined<cast#kind>" );
}
default :
{
return( OSS() << "unexpected<"
<< to_string(aCast) << ">" );
}
}
}
OutStream & ComProtocol::toStreamProtocolCast(
OutStream & out, bool mustBeDefined) const
{
if( mProtocol == PROTOCOL_UNDEFINED_KIND )
{
if( (mCast != PROTOCOL_UNDEFINED_KIND) || mustBeDefined )
{
out << "< " << ComProtocol::strCast(mCast) << " >";
}
}
else
{
out << "< ";
switch ( mProtocol )
{
case PROTOCOL_ENVIRONMENT_KIND:
{
out << "env";
break;
}
case PROTOCOL_BUFFER_KIND:
{
out << "buffer";
if( mBuffer != NULL )
{
out << ": ";
if( mBuffer->isAnonymID() )
{
out << Buffer::str(mBuffer->getPolicySpecifierKind(),
mBuffer->getSize());
}
else
{
out << mBuffer->getNameID();
}
}
else if( mBufferUfid.valid() )
{
out << ": " << mBufferUfid.str();
}
else
{
out << " , " << ComProtocol::strCast(mCast);
}
break;
}
case PROTOCOL_RDV_KIND:
{
out << "rdv" << " , " << ComProtocol::strCast(mCast);
break;
}
case PROTOCOL_MULTIRDV_KIND:
{
out << "multirdv" << " , " << ComProtocol::strCast(mCast);
break;
}
case PROTOCOL_FLOW_KIND:
{
out << "flow" << " , " << ComProtocol::strCast(mCast);
break;
}
case PROTOCOL_UNDEFINED_KIND:
{
out << "undefined<protocol#kind>" << " , "
<< ComProtocol::strCast(mCast);
break;
}
default :
{
out << "unexpected<" << to_string(mProtocol)
<< " , " << to_string(mCast) << ">";
break;
}
}
out << " >";
}
return( out );
}
}