/* ==================================================================== * 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 * . * */ static const char* const StateMain_cpp_Version = "$Id: StateMain.cxx,v 1.2 2000/12/18 23:49:46 bko Exp $"; #include "StateMain.h" #include "StateRecordMessage.h" StateMain::StateMain (string Name):MenuState (Name) { } StateMain::~StateMain () { cpLog(LOG_DEBUG,"~StateMain"); } /** State setup */ int StateMain::Process (VmSession * session) { setSession(session); /** Save session pointer */ AddTermDigit('#',DTMF_HASH); AddTermDigit('*',DTMF_STAR); AddTermString("2",2); AddTermString("4",4); AddTermString("6",6); AddTermString("76",76); getSession()->setIntVar((string)"%MsgNum",getSession()->getMail()->Messages()); if( getSession()->getMail()->Messages() > 0 ) { PlayPrompt("Header"); } else { PlayPrompt("MailboxEmpty"); } cpLog(LOG_DEBUG,"Check for AutoPlay"); if( getSession()->getMail()->Messages() > 0 && getSession()->getCfg()->m_iAutoPlay ) { cpLog(LOG_DEBUG,"AutoPlay"); for(int i=0;igetMail()->Messages();i++) { cpLog(LOG_DEBUG,"Message %d",i); getSession()->getMail()->gotoMessage(i); PlayHeader(); PlayMessage(); } PlayPrompt("EndOfMailbox"); } else if( getSession()->getMail()->Messages() > 0 ) { getSession()->getMail()->gotoMessage(0); PlayHeader(); } if (!getSession()->playStart ()) /** Start player */ { return StateEndOfSession; } return MenuState::Process (session); /** Process state */ } void StateMain::PlayMessage() { getSession()->getMail()->envelope(); if( memcmp(getSession()->getMail()->env->subject,"VoiceMail",9) ) { cpLog(LOG_DEBUG,"Not a voicemail"); PlayPrompt("NotAVoiceMail"); } else { cpLog(LOG_DEBUG,"VoiceMail"); string msgFile=getSession()->CreateTemp("PlayerMessage.XXXXXX",".wav"); getSession()->setStringVar("$CurrentMessage",msgFile); getSession()->getMail()->decodeAndSave(msgFile); PlayPromptPath("CurrentMessage",""); } PlayPrompt("EndOfMessage"); getSession()->playStart (); } void StateMain::NextMessage() { if( !getSession()->getMail()->nextMessage() ) { PlayPrompt("EndOfMailbox"); } else { PlayHeader(); } getSession()->playStart(); } void StateMain::PrevMessage() { if( !getSession()->getMail()->prevMessage() ) { PlayPrompt("StartOfMailbox"); } else { PlayHeader(); } getSession()->playStart(); } void StateMain::DeleteRestore() { if( getSession()->getMail()->messageDeleted() ) { getSession()->getMail()->restoreMessage(); PlayPrompt("MessageRestored"); } else { getSession()->getMail()->deleteMessage(); PlayPrompt("MessageDeleted"); } getSession()->playStart(); } void StateMain::PlayHeader() { getSession()->setIntVar("%CurMsg",getSession()->getMail()->currentMessage()+1); PlayPrompt("MessageHeader"); } int StateMain::ProcessDTMFTermination(unsigned int code) { getSession()->getCfg()->m_iAutoPlay=false; getSession()->getLine()->getVmcp()->stopPlay(); stateTimer.stop(); switch(code) { case DTMF_HASH: stateCounter=0; getSession()->dtmf.Clear(); return StateStay; case DTMF_STAR: stateCounter=0; getSession()->dtmf.Clear(); return StateStay; case 2: stateCounter=0; getSession()->dtmf.Clear(); PlayMessage(); return StateStay; case 4: stateCounter=0; getSession()->dtmf.Clear(); PrevMessage(); return StateStay; case 6: stateCounter=0; getSession()->dtmf.Clear(); NextMessage(); return StateStay; case 76: stateCounter=0; getSession()->dtmf.Clear(); DeleteRestore(); NextMessage(); return StateStay; } stateCounter++; if( stateCounter == 3 ) { return StateReturn; } return MenuState::ProcessDTMFTermination(code); }