blob: 0ab47790e664b3dd9bfb4db8d2909266b97f3697 [file] [log] [blame]
/*
* Copyright (c) 2014 Netflix, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 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 NETFLIX, INC. AND CONTRIBUTORS "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 NETFLIX 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.
*/
#include "DialClientInput.h"
#include "DialServer.h"
#include <iostream>
#include <fstream>
using namespace std;
bool DialClientInput::init(std::string file)
{
if( file.empty() ) file = DialClientInput::getDefaultFilename();
ATRACE("DialClientInput::%s, opening %s\n", __FUNCTION__, file.c_str());
string line;
ifstream myfile (file.c_str());
if (myfile.is_open())
{
// first fill _actions with commands from the input file
while ( myfile.good() )
{
getline (myfile,line);
if( line[0] != '#' && !line.empty() )
{
if( line.find("addApplication") != line.npos )
{
// add an application
size_t pos = line.find_first_of('=');
_applist.push_back( line.substr(pos+1, line.length()));
ATRACE("Adding app: %s\n", line.substr(pos+1, line.length()).c_str());
}
else if( line.find("addErrorApplication") != line.npos )
{
// add an application
size_t pos = line.find_first_of('=');
_errorapplist.push_back( line.substr(pos+1, line.length()));
ATRACE("Adding error app: %s\n", line.substr(pos+1, line.length()).c_str());
}
else
{
// add a command
size_t pos = line.find_first_of(" ");
std::string params = line.substr(pos+1, line.length());
std::pair<std::string, std::string>
action_to_push(line.substr(0, pos),
pos == line.npos ? "":params);
_actions.push_back(action_to_push);
ATRACE("command: %s params: %s\n",
line.substr(0, pos).c_str(), params.c_str() );
}
}
#ifdef DEBUG
//else ATRACE("COMMENT: %s\n", line.c_str());
#endif
}
myfile.close();
}
else
{
fprintf(stderr, "Unable to open file\n");
return false;
}
return true;
}
bool DialClientInput::addApplication( string& application )
{
// see if the application exits
vector<string>::iterator it;
for( it = _applist.begin(); it < _applist.end(); it ++ )
if( !((*it).compare( application )) ) break;
// if not, add it
if( it < _applist.end() ) _applist.push_back(application);
else return false; // already in the list
return true;
}
bool DialClientInput::getNextAction( string& command, vector<string>& parameters )
{
if (_actions.empty()) return false;
pair<string, string> action = _actions.front();
_actions.erase(_actions.begin());
command = action.first;
string params = action.second;
size_t pos = params.find_first_of(" "), start = 0;
// Parse out the parameters from the string
while (1)
{
parameters.push_back(params.substr( start, pos-start ));
if( pos == params.npos ) break;
start = pos+1;
pos = params.find_first_of(" ", start);
}
return true;
}
void DialClientInput::getApplicationList( vector<string> &list )
{
list = _applist;
}
void DialClientInput::getErrorApplicationList(vector<string> &list)
{
list = _errorapplist;
}