ReadDTMF::ReadDTMF(Connection *conn, int timeout, int min_digits, int max_digits) :CallModule(conn, timeout, false),min_digits(min_digits),max_digits(max_digits) { if (conn->getState()!=Connection::UP) throw CapiWrongState("Disconnection occured.","ReadDTMF::ReadDTMF()"); digit_count=conn->getDTMF().size(); }
ConnectModule::ConnectModule(Connection *conn_in, Connection::service_t service, string faxStationID, string faxHeadline) throw (CapiWrongState,CapiExternalError) :CallModule(conn_in,-1,false,false),service(service),faxStationID(faxStationID),faxHeadline(faxHeadline) { if (conn->getState()==Connection::UP) throw CapiExternalError("Call is already connected","ConnectModule::ConnectModule()"); if (conn->getState()!=Connection::WAITING) throw CapiWrongState("Can't connect because call not waiting","ConnectModule::ConnectModule()"); }
void CallModule::mainLoop() throw (CapiWrongState,CapiMsgError,CapiExternalError,CapiError) { if (! (DTMF_exit && (conn->getDTMF()!="") ) ) { exit_time=getTime()+timeout; timespec delay_time; delay_time.tv_sec=0; delay_time.tv_nsec=100000000; // 100 msec while(!finish && !abort && ( (timeout==-1) || (getTime() <= exit_time) ) ) nanosleep(&delay_time,NULL); } if (abort) throw CapiWrongState("call abort detected","CallModule::mainLoop()"); }