/****************************************************************************/
/* $Id$             */
/*                                                                          */
/*   (c) 2009  Universite de Rennes 1                                       */
/*                                                                          */
/* Contributors:                                                            */
/*  - Anthony BAIRE                                                         */
/*                                                                          */
/* Contact address: <t3devkit@irisa.fr>                                     */
/*                                                                          */
/*                                                                          */
/* This file is part of application examples provided along with T3DevKit,  */
/* a free toolkit for building TTCN-3 tests.                                */
/*                                                                          */
/* This software is governed by the CeCILL-B license under French law and   */
/* abiding by the rules of distribution of free software.  You can  use,    */
/* modify and/or redistribute the software under the terms of the CeCILL-B  */
/* license as circulated by CEA, CNRS and INRIA at the following URL        */
/* "http://www.cecill.info".                                                */
/*                                                                          */
/* As a counterpart to the access to the source code and  rights to copy,   */
/* modify and redistribute granted by the license, users are provided only  */
/* with a limited warranty  and the software's author,  the holder of the   */
/* economic rights,  and the successive licensors  have only  limited       */
/* liability.                                                               */
/*                                                                          */
/* In this respect, the user's attention is drawn to the risks associated   */
/* with loading,  using,  modifying and/or developing or reproducing the    */
/* software by the user in light of its specific status of free software,   */
/* that may mean  that it is complicated to manipulate,  and  that  also    */
/* therefore means  that it is reserved for developers  and  experienced    */
/* professionals having in-depth computer knowledge. Users are therefore    */
/* encouraged to load and test the software's suitability as regards their  */
/* requirements in conditions enabling the security of their systems and/or */ 
/* data to be ensured and,  more generally, to use and operate it in the    */
/* same conditions as regards security.                                     */
/*                                                                          */
/* The fact that you are presently reading this means that you have had     */
/* knowledge of the CeCILL-B license and that you accept its terms.         */
/****************************************************************************/
#include <fstream>
#include "SipTorturePort.h"
using namespace t3devlib;
using namespace std;

SipTorturePort::SipTorturePort (PortId& id) :
	Port (id)
{ 
}

SipTorturePort::~SipTorturePort() 
{
}

bool SipTorturePort::Map (const PortId& connected_port_id) 
{
	string filename ("data/");
	filename += GetTestcaseId().GetObjectName();
	filename += ".dat";

	cout << "Reading testcase data from " << filename << endl;

	ifstream in (filename.c_str(), ios_base::in | ios_base::binary);

	if (!in) {
		cerr << "Cannot open " << filename << endl;
		return false;
	}

	in.seekg (0, ios_base::end);
	streampos size = in.tellg();
	in.seekg (0, ios_base::beg);

	char* buff = new char[size];
	in.read (buff, size);

	EnqueueMsg (connected_port_id, MappedBitstring (buff, size*8));

	delete buff;

	return in.good(); 
} 
 
bool SipTorturePort::Unmap (const PortId& connected_port_id) 
{ 
  return true; 
}

bool SipTorturePort::Send (const ComponentId& from,const Bitstring& msg) {
  cerr << "cannot send data to the Sip 'Torture' Port" << endl;
  return false;
}
