00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <bogotel/portability.h>
00011 #include <bogotel/getdigop.h>
00012 #include <bogotel/TermParms.h>
00013
00014 #include <sys/stat.h>
00015 #include <sys/types.h>
00016
00017 #include <bogotel/BgtErrors.h>
00018
00019 namespace bogotel {
00020
00021 const char *CGetDigOp::s_szName = "CGetDigOp";
00022
00023 CGetDigOp::CGetDigOp(CVoiceDev* pVD, const DV_TPT* pTPT, DV_DIGIT *pDigit)
00024 throw (std::invalid_argument) :
00025 CIOOp(pVD),
00026 m_pTermParms(NULL),
00027 m_pDigit(pDigit)
00028 {
00029 char method[] = "CGetDigOp::CGetDigOp";
00030 if (pTPT != NULL) {
00031 try {
00032 m_pTermParms = new CTermParms(pVD, this, pTPT);
00033 } catch (std::invalid_argument& except) {
00034 log(3, "%s: new CTermParms threw exception", method, except.what());
00035 throw;
00036 }
00037 }
00038 }
00039
00040 CGetDigOp::~CGetDigOp()
00041 {
00042 delete m_pTermParms;
00043 CIOOp::~CIOOp();
00044 }
00045
00046 void CGetDigOp::start()
00047 {
00048 if (m_pTermParms) {
00049 m_pTermParms->start();
00050 }
00051 }
00052
00053 std::string CGetDigOp::toString()
00054 {
00055 return CTimerTarget::toString() + " " + s_szName;
00056 }
00057
00058 void CGetDigOp::terminate(long lTermMsk)
00059 {
00060
00061 m_pVD->getDigits(m_pDigit, m_pTermParms->getNumberDtmfsPressed());
00062
00063 CIOOp::terminate(lTermMsk);
00064 }
00065
00066 long CGetDigOp::terminationEvent()
00067 {
00068 return TDX_GETDIG;
00069 }
00070
00071 void CGetDigOp::_timerExpired(int timerType, int stateId)
00072 {
00073 char method[] = "CGetDigOp::_timerExpired";
00074 switch (timerType) {
00075 case CTermParms::timerType::MaxSil:
00076 case CTermParms::timerType::MaxTime:
00077 case CTermParms::timerType::IddTime:
00078 m_pTermParms->timerExpired(timerType, stateId);
00079 break;
00080 default:
00081 log(3, "%s: Invalid timerType %d", method, timerType);
00082 break;
00083 }
00084 }
00085 }