/* ====================================================================
 * The Vovida Software License, Version 1.0 
 * 
 * Copyright (c) 2000 Vovida Networks, 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:
 * 
 * 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.
 * 
 * 3. The names "VOCAL", "Vovida Open Communication Application Library",
 *    and "Vovida Open Communication Application Library (VOCAL)" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written
 *    permission, please contact vocal@vovida.org.
 *
 * 4. Products derived from this software may not be called "VOCAL", nor
 *    may "VOCAL" appear in their name, without prior written
 *    permission of Vovida Networks, Inc.
 * 
 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
 * NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
 * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
 * IN EXCESS OF $1,000, NOR FOR ANY 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.
 * 
 * ====================================================================
 * 
 * This software consists of voluntary contributions made by Vovida
 * Networks, Inc. and many individuals on behalf of Vovida Networks,
 * Inc.  For more information on Vovida Networks, Inc., please see
 * <http://www.vovida.org/>.
 *
 */
static const char* const VmSession_cpp_Version =
"$Id: test.cxx,v 1.2 2000/12/18 23:49:47 bko Exp $";
 
#include <unistd.h>
#include "global.h"
#include "VmSession.h"
#include "StateSetup.h"
 
extern string g_xCfgPath;         

VmSession::VmSession ()
{
  vector<string> a;
  a.push_back("SS");
}        

VmSession::~VmSession ()
{
 
  cpLog(LOG_DEBUG,"~VmSession");
  /** Remove temporary files created.*/
 
  getMail()->update();

  for (vector<string>::iterator itr = m_xTemporaryFiles.begin();
               itr != m_xTemporaryFiles.end(); itr++)
  {
    cpLog (LOG_DEBUG, "Removing file %s", (*itr).c_str ());
    unlink ((*itr).c_str ());
  }

}            

int
VmSession::Start (Vmcp *vmcp,bool interactive)
{
 
  m_xCfg.parse (g_xCfgPath);
 
  if( !m_xPromptServer.loadTable(getCfg()->m_xPromptTable) )
  {
      cpLog(LOG_ERR,"Can't load prompt table %s",getCfg()->m_xPromptTable.c_str());
      return false;
  }
 
  m_xInteractive=interactive;
  LineVMCP line;
  setLine(&line);
  getLine()->assign(vmcp);
 
  /** start it */
  getLine()->start ();
 
  /** Start session */
  return Run ();
}                         


int
VmSession::Run ()
{
 
  /** Create StateSetup state */
  StateSetup setup ("StateSetup");
 
  /** Run it */
  setup.Process (this);
 
  /** Make shure that the line is closed */
  getLine()->getVmcp ()->sendClose ();
  /** End of session */
  return true;
}
 
/** Add a file to the player queue */
int
VmSession::playFile (const string & fileName)
{
  cpLog (LOG_DEBUG, "Searching %s", fileName.c_str ());
 
  /** Check if the given file is exists. */
  if (access (fileName.c_str (), 0))
    return false;
 
  /** Add it to the queue */
  getLine()->getVmcp ()->playFile (fileName.c_str());
  return true;
}                                                                             


int
VmSession::playStart ()
{
  getLine()->getVmcp ()->startPlay ();
  return true;
}
 
/** Get configuration */
Configuration *
VmSession::getCfg ()
{
  return &m_xCfg;
}
 
/** Add a file from a common directory to the player queue*/
int
VmSession::playFileCommon (const string & fileName)
{
  return playFile (getCfg ()->m_xVoiceRoot + fileName);
}
 
/** Get user configuration */
const UserConfiguration *
VmSession::getUserCfg ()
{
  return &m_xUserCfg;
}                              

/** Add a file from a private user directory to the player queue*/
int
VmSession::playFileUser (const string & fileName)
{
  return playFile (getCfg ()->m_xHomeRoot + m_xUser + "/" + fileName);
}
 
/** Get user name */
string& VmSession::getUser ()
{
  return m_xUser;
}
 
/** Set active user name */
void
VmSession::setUser (const string & user)
{
  m_xUser = user;
}                                                       

string VmSession::CreateTemp (const char *tpl, const char *ext)
{
 
//  /** Allocate temporary storage */
//  char *  buffer = (char *) malloc (strlen (tpl) + 1);
//  /** Copy template string to it */
//  sprintf (buffer, tpl);
 
//  /** Make a temporary file name */
//  char * s;
//  s = mktemp (buffer);
 
//  /** Add an extention to it */
//  string name = (string) s;
//  name += ext;
 
//  string pathName=getCfg()->m_xTempRoot + name;
 
  /** Save it in the temporary files list */
/*
  m_xTemporaryFiles.push_back (pathName);
*/
  m_xTemporaryFiles.push_back("xx");
  //vector<string> a;
  //a.push_back("SS");
 
  /** Free temporary storage */
//  free (buffer);
//  return pathName;
    return "A";
}                                                                 

int VmSession::PlayPrompt(const string& PromptName)
{
/*SP
    if(!m_xPromptServer.conv(PromptName,&m_xPromptFiles,getCfg()->m_xVoiceRoot) )
    {
        m_xPromptFiles.clear();
        return false;
    }
    for(unsigned int i=0;i<m_xPromptFiles.size();i++)
    {
        //getLine()->getVmcp()->playFile(m_xPromptFiles[i].c_str());
    }
    m_xPromptFiles.clear();
*/
    return true;
}
 
int VmSession::PlayPromptUser(const string& PromptName)
{
/*SP
    if(!m_xPromptServer.conv(PromptName,&m_xPromptFiles,getCfg()->m_xHomeRoot + m_xUser + "/") )
    {
        m_xPromptFiles.clear();
        return false;
    }
    for(unsigned int i=0;i<m_xPromptFiles.size();i++)
    {
        //getLine()->getVmcp()->playFile(m_xPromptFiles[i].c_str());
    }
    m_xPromptFiles.clear();
*/
    return true;
}                                                                

int VmSession::PlayPromptPath(const string& PromptName,const string& path)
{
/*SP
    if(!m_xPromptServer.conv(PromptName,&m_xPromptFiles,path) )
    {
        m_xPromptFiles.clear();
        return false;
    }
    for(unsigned int i=0;i<m_xPromptFiles.size();i++)
    {
        //getLine()->getVmcp()->playFile(m_xPromptFiles[i].c_str());
    }
    m_xPromptFiles.clear();
*/
    return true;
} 
                        


void VmSession::setStringVar(const string& varName,const string& var)
{
    m_xPromptServer.m_xStrVar[varName]=var;
}
 
void VmSession::setIntVar(const string& varName,const int var)
{
    m_xPromptServer.m_xIntVar[varName]=var;
}
 
 
bool VmSession::getInteractive()
{
    return m_xInteractive;
}
 
Mail * VmSession::getMail()
{
    return &m_xMail;
}                               

/*
main()
{
//  string a("haaHaa");
//  _vectorString.push_back("haaHaa");
//  _vectorString.push_back(a);
}
*/


syntax highlighted by Code2HTML, v. 0.9.1