capisuite/src/modules/audiosend.h

174 lines
6.0 KiB
C++

/** @file audiosend.h
@brief Contains AudioSend - Call Module for sending an A-Law file
@author Gernot Hillier <gernot@hillier.de>
$Revision: 1.3 $
*/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef AUDIOSEND_H
#define AUDIOSEND_H
#include <string>
#include "callmodule.h"
class Connection;
using namespace std;
/** @brief Call Module for sending an A-Law file.
This module handles the sending of an audio file. The audio file must be in
bit-inversed A-Law format. It can be created for example with sox using the
suffix ".la". It supports abortion if DTMF signal is received.
If DTMF abort is enabled, the module will abort immediately if the DTMF
receiving buffer (see Connection::getDTMF) isn't empty when it is created.
That allows the user to abort subsequent audio receive and send commands
with one DTMF signal w/o needing to check for received DTMF after each
command.
The connction must be in audio mode (by connecting with service VOICE),
otherwise an exception will be caused.
CapiWrongState will only be thrown if connection is not up at startup,
not later on. We see a later disconnect as normal event, no error.
@author Gernot Hillier
*/
class AudioSend: public CallModule
{
public:
/** @brief Constructor. Test if we are in speech mode and create an object.
@param conn reference to Connection object
@param file name of file to send
@param DTMF_exit set to true, if you want to finish when DTMF signal is received
@throw CapiExternalError Thrown if speech mode isn't established before.
@throw CapiWrongState Thrown if connection is not up (thrown by base class constructor)
*/
AudioSend(Connection *conn, string file, bool DTMF_exit) throw (CapiWrongState,CapiExternalError);
/** @brief Start file transmission, wait for the end of the file or the connection, stop file transmission
@throw CapiExternalError Thrown by Connection::start_file_transmission, see there for explanation.
@throw CapiMsgError Thrown by Connection::start_file_transmission, see there for explanation.
@throw CapiWrongState Thrown if connection is not up at start of transfer (thrown by Connection::start_file_transmission)
*/
void mainLoop() throw (CapiWrongState,CapiExternalError,CapiMsgError);
/** @brief finish main loop if file is completely received
*/
void transmissionComplete();
/** @brief Return the time in seconds since start of mainLoop()
@return time in seconds since start of mainLoop()
*/
long duration();
private:
string file; ///< name of the file to send
long start_time; ///< time in seconds since the epoch when the module was started
};
#endif
/* History
Old Log (for new changes see ChangeLog):
Revision 1.1.1.1 2003/02/19 08:19:53 gernot
initial checkin of 0.4
Revision 1.13 2002/12/04 11:38:50 ghillie
- added time measurement: save time in start_time at the begin of mainLoop() and return difference to getTime() in duration()
Revision 1.12 2002/12/02 12:32:21 ghillie
renamed Connection::SPEECH to Connection::VOICE
Revision 1.11 2002/11/29 10:27:44 ghillie
- updated comments, use doxygen format now
Revision 1.10 2002/11/25 21:00:53 ghillie
- improved documentation, now doxygen-readabl
Revision 1.9 2002/11/25 11:54:35 ghillie
- tests for speech mode before receiving now
- small performance improvement (use string::empty() instead of comparison to "")
Revision 1.8 2002/11/22 15:16:20 ghillie
added support for finishing when DTMF is received
Revision 1.7 2002/11/21 15:32:40 ghillie
- moved code from constructor/destructor to overwritten mainLoop() method
Revision 1.6 2002/11/19 15:57:19 ghillie
- Added missing throw() declarations
- phew. Added error handling. All exceptions are caught now.
Revision 1.5 2002/11/14 17:05:19 ghillie
major structural changes - much is easier, nicer and better prepared for the future now:
- added DisconnectLogical handler to CallInterface
- DTMF handling moved from CallControl to Connection
- new call module ConnectModule for establishing connection
- python script reduced from 2 functions to one (callWaiting, callConnected
merged to callIncoming)
- call modules implement the CallInterface now, not CallControl any more
=> this freed CallControl from nearly all communication stuff
Revision 1.4 2002/11/13 15:26:28 ghillie
removed unnecessary member attribute filename
Revision 1.3 2002/11/13 08:34:54 ghillie
moved history to the bottom
Revision 1.2 2002/10/29 14:28:22 ghillie
added stop_file_* calls to make sure transmission is cancelled when it's time...
Revision 1.1 2002/10/25 13:29:39 ghillie
grouped files into subdirectories
Revision 1.10 2002/10/23 15:37:50 ghillie
typo...
Revision 1.9 2002/10/23 14:10:27 ghillie
callmodules must register itself at connection class now
Revision 1.8 2002/10/10 12:45:40 gernot
added AudioReceive module, some small details changed
Revision 1.7 2002/10/09 14:36:22 gernot
added CallModule base class for all call handling modules
Revision 1.6 2002/10/05 20:43:32 gernot
quick'n'dirty, but WORKS
Revision 1.5 2002/10/04 15:48:03 gernot
structure changes completed & compiles now!
Revision 1.4 2002/10/04 13:27:15 gernot
some restructuring to get it to a working state ;-)
does not do anything useful yet nor does it even compile...
Revision 1.3 2002/10/02 14:10:07 gernot
first version
Revision 1.2 2002/10/01 09:02:04 gernot
changes for compilation with gcc3.2
Revision 1.1 2002/09/22 14:55:21 gernot
adding audio send module
*/