2004-01-10 Gernot Hillier <gernot@hillier.de>

* .cvsignore: added stamp-files
        * docs/manual-de.docbook (creating_alaw): small stylistic improvement
        * src/capisuite.conf.in, src/application/capisuite.cpp (CapiSuite,
          readConfiguration): added new options DDI_base, DDI_length and
          DDI_stop_numbers
        * src/application/capisuite.cpp (checkOption): nicer output format
        * src/backend/capi.{cpp,h} (Capi,readMessage): new parameters for DDI,
          enable Called Party Info Element if DDI is used; accept Called
          Party Info Element; pass on DDI options to Connection object
        * src/backend/connection.{cpp,h} (Connection,info_ind_called_party_nr):
          new parameters for DDI; interpret Called Party Info Element, get
          CalledPartyNumber from there instead of CONNECT_IND when DDI is used;
          docu improvements
        * src/modules/connectmodule.h: disabled the automatic adding of CVS log
          messages


git-svn-id: https://svn.ibp.de/svn/capisuite/trunk/capisuite@203 4ebea2bb-67d4-0310-8558-a5799e421b66
This commit is contained in:
gernot 2004-01-10 14:16:40 +00:00
parent 8861fe7d46
commit 08c5fa93fc
11 changed files with 359 additions and 118 deletions

View File

@ -17,4 +17,4 @@ install-sh
missing missing
mkinstalldirs mkinstalldirs
py-compile py-compile
stamp-h*

View File

@ -1,12 +1,27 @@
2004-01-10 Gernot Hillier <gernot@hillier.de>
* .cvsignore: added stamp-files
* docs/manual-de.docbook (creating_alaw): small stylistic improvement
* src/capisuite.conf.in, src/application/capisuite.cpp (CapiSuite,
readConfiguration): added new options DDI_base, DDI_length and
DDI_stop_numbers
* src/application/capisuite.cpp (checkOption): nicer output format
* src/backend/capi.{cpp,h} (Capi,readMessage): new parameters for DDI,
enable Called Party Info Element if DDI is used; accept Called
Party Info Element; pass on DDI options to Connection object
* src/backend/connection.{cpp,h} (Connection,info_ind_called_party_nr):
new parameters for DDI; interpret Called Party Info Element, get
CalledPartyNumber from there instead of CONNECT_IND when DDI is used;
docu improvements
* src/modules/connectmodule.h: disabled the automatic adding of CVS log
messages
2003-12-31 Gernot Hillier <gernot@hillier.de> 2003-12-31 Gernot Hillier <gernot@hillier.de>
* src/modules/connectmodule.{h,cpp} (ConnectModule): throw * src/modules/connectmodule.{h,cpp} (ConnectModule): throw
CapiExternalError only when connection's already up, otherwise CapiExternalError only when connection's already up, otherwise
use CapiWrongState use CapiWrongState
* scripts/incoming.py (voiceIncoming): include recorded msg length * scripts/incoming.py (voiceIncoming): include recorded msg length
and host name were file is stored in sent mail (closes bug #6, and host name were file is stored in sent mail (closes bug #6,
thx to Achim Bohnet and Thomas Niesel for the feature requests) thx to Achim Bohnet and Thomas Niesel for the feature requests)
* scripts/cs_helpers.pyin (sendMIMEMail): use 16 bit ouput when * scripts/cs_helpers.pyin (sendMIMEMail): use 16 bit ouput when
converting sound files from la to wav. Thx to Holger Krull for converting sound files from la to wav. Thx to Holger Krull for
the fix (closes bug #51)! the fix (closes bug #51)!
@ -15,7 +30,6 @@
* nearly all files (history block): disabled the automatic * nearly all files (history block): disabled the automatic
adding of CVS log messages to source files as we now have adding of CVS log messages to source files as we now have
this nice ChangeLog file this nice ChangeLog file
* src/modules/audioreceive.{h,cpp} (AudioReceive,mainLoop), * src/modules/audioreceive.{h,cpp} (AudioReceive,mainLoop),
src/modules/audiosend.{h,cpp} (AudioSend,mainLoop), src/modules/audiosend.{h,cpp} (AudioSend,mainLoop),
src/modules/callmodule.{h,cpp} (CallModule,mainLoop), src/modules/callmodule.{h,cpp} (CallModule,mainLoop),
@ -25,9 +39,9 @@
src/modules/faxreceive.{h,cpp} (FaxReceive,mainLoop), src/modules/faxreceive.{h,cpp} (FaxReceive,mainLoop),
src/modules/faxsend.{h,cpp} (FaxSend,mainLoop), src/modules/faxsend.{h,cpp} (FaxSend,mainLoop),
src/modules/readDTMF.{h,cpp} (ReadDTMF,mainLoop), src/modules/readDTMF.{h,cpp} (ReadDTMF,mainLoop),
src/modules/switch2faxG3.{h,cpp} (Switch2FaxG3,mainLoop): src/modules/switch2faxG3.{h,cpp} (Switch2FaxG3,mainLoop):
rework of exception handling stuff; many modules were not rework of exception handling stuff; many modules were not
declaring thrown exceptions correctly any more after the declaring thrown exceptions correctly any more after the
re-structuring to not throw exceptions on any disconnect re-structuring to not throw exceptions on any disconnect
2003-12-21 Gernot Hillier <gernot@hillier.de> 2003-12-21 Gernot Hillier <gernot@hillier.de>
@ -38,8 +52,8 @@
2003-12-02 Gernot Hillier <gernot@hillier.de> 2003-12-02 Gernot Hillier <gernot@hillier.de>
* scripts/idle.py (idle): fix a wrong call of ConfigParser::get * scripts/idle.py (idle): fix a wrong call of ConfigParser::get
instead of cs_helpers::get, this means fax_numbers now really instead of cs_helpers::get, this means fax_numbers must not be
is allowed to be empty defined if a user
2003-12-01 Gernot Hillier <gernot@hillier.de> 2003-12-01 Gernot Hillier <gernot@hillier.de>
@ -51,25 +65,19 @@
* docs/manual.docbook (creating_alaw): add note how to convert vbox * docs/manual.docbook (creating_alaw): add note how to convert vbox
to inversed A-Law files (thx to Thomas Niesel) to inversed A-Law files (thx to Thomas Niesel)
* docs/manual-de.docbook (creating_alaw): see above * docs/manual-de.docbook (creating_alaw): see above
* docs/manual.docbook (require_soft): updated link to jpeg2ps (thx to * docs/manual.docbook (require_soft): updated link to jpeg2ps (thx to
Achim Bohnet) Achim Bohnet)
* docs/manual-de.docbook (require_soft): see above * docs/manual-de.docbook (require_soft): see above
* scripts/cs_helpers.pyin (sendMIMEMail): better wording for some error * scripts/cs_helpers.pyin (sendMIMEMail): better wording for some error
messages messages
2003-10-05 Gernot Hillier <gernot@hillier.de> 2003-10-05 Gernot Hillier <gernot@hillier.de>
* started ChangeLog * started ChangeLog
* docs/manual.docbook (require_soft): add note that glibc-locales are
* docs/manual.docbook (require_soft): add note that glibc-locales are necessary if AVM drivers are used for faxing. They're needed for
necessary if AVM drivers are used for faxing. They're needed for
iconv() in Connection::convertToCP437. Thx to M. Koelbl for reporting iconv() in Connection::convertToCP437. Thx to M. Koelbl for reporting
the problem. the problem.
* docs/manual-de.docbook (require_soft): add same note * docs/manual-de.docbook (require_soft): add same note
* suse/capisuite-8.{0,1,2}.spec: add dependancy to glibc-locale
* suse/capisuite-8.0.spec: add dependancy to glibc-locale
* suse/capisuite-8.1.spec: add dependancy to glibc-locale
* suse/capisuite-8.2.spec: add dependancy to glibc-locale

150
NEWS
View File

@ -7,8 +7,8 @@
for the fix; closes bug #51) for the fix; closes bug #51)
* scripts: the mails sent with received voice and fax calls will now * scripts: the mails sent with received voice and fax calls will now
also contain some general information like length of calls, number contain some general information like length of calls, number of
of pages, etc. (thx to Achim Bohnet and Thomas Niesel for the feature pages, etc. (thx to Achim Bohnet and Thomas Niesel for the feature
requests; closes bug #6 finally) requests; closes bug #6 finally)
* core: the Python functions switch_to_faxG3, fax_receive, fax_send, * core: the Python functions switch_to_faxG3, fax_receive, fax_send,
@ -21,13 +21,16 @@
* core: accept incoming color faxes now * core: accept incoming color faxes now
* scripts: fix a bug in faxIncoming which lead to a non-working * scripts/idle.py (idle): fixed a bug which under some circumstances
fax reception after automatic switch from voice to fax mode caused an error message when fax_numbers was not set for a user
(thx to Andreas Scholz and Harald Jansen)
* scripts: fixed a bug which lead to a connection abort when the
answering machine recognized an incoming fax call (thx to Andreas
Scholz and Harald Jansen)
* scripts: added new non-error ISDN cause (0x349f) to fax send routine. * scripts: added new non-error ISDN cause (0x349f) to fax send routine.
It was understood as error by CapiSuite but means "normal call It was wrongly understood as an error before and therefore leading to
clearing, unspecified" (thx to Stefan Brandner for reporting) repeated fax sends (thx to Stefan Brandner for reporting)
* Makefiles: fixed "make" to not trying to create directories any more - * Makefiles: fixed "make" to not trying to create directories any more -
this prevented normal users to call "make" sometimes (thx to Steffen this prevented normal users to call "make" sometimes (thx to Steffen
@ -47,18 +50,18 @@
* scripts & core: support color fax reception (bug #22, thx to * scripts & core: support color fax reception (bug #22, thx to
Axel Schneck) Axel Schneck)
* scripts: added missing file "unbekannt.la" to install targets in * scripts: added missing file "unbekannt.la" to install targets in
Makefiles (thx to Wolfgang Dollendorf) Makefiles (thx to Wolfgang Dollendorf)
* scripts: added missing "+.la" which is necessary for the remote inquiry * scripts: added missing "+.la" which is necessary for the remote
of recorded international calls (bug #27) inquiry of recorded international calls (bug #27)
* scripts: fax_numbers may be now left empty in fax.conf. This makes * scripts: fax_numbers may be now left empty in fax.conf. This makes
it possible to use one MSN for receiving/sending faxes and voice it possible to use one MSN for receiving/sending faxes and voice
calls (fax sending was refused up to now if fax_numbers was empty). calls (fax sending was refused up to now if fax_numbers was empty).
(bug #23) (bug #23)
* scripts: number of needed tries reported after sending a fax was * scripts: number of needed tries reported after sending a fax was
wrong (bug #29, thx to Eckhard Rüggeberg) wrong (bug #29, thx to Eckhard Rüggeberg)
* scripts: fax jobs can be given a literal addressee and a subject * scripts: fax jobs can be given a literal addressee and a subject
@ -68,19 +71,22 @@
so that special characters like german umlauts are working now so that special characters like german umlauts are working now
(thx to Eckhard Rüggeberg for reporting) (thx to Eckhard Rüggeberg for reporting)
* scripts: Sander Roest found a workaround for the odd Python error * scripts: Sander Roest found a workaround for the odd Python error
"cannot unmarshal code objects in restricted execution mode" which mainly "cannot unmarshal code objects in restricted execution mode" which
hit Redhat users for any reason beyond my understanding and prevented mainly hit Redhat users for any reason beyond my understanding and
CapiSuite from sending mails sometimes/always... prevented CapiSuite from sending mails sometimes/always...
* switched from BerliOS bug tracker to Mantis installed on http://www.
capisuite.de
0.4.2 (CVS tag CAPISUITE_042): 0.4.2 (CVS tag CAPISUITE_042):
============================== ==============================
* manual now available as PDF * manual now available as PDF
* scripts: fixed an overflow in cs_helpery.py which caused hangs for * scripts: fixed an overflow in cs_helpery.py which caused hangs for
the receive of long (more than about 40 pages) fax documents the receive of long (more than about 40 pages) fax documents
* scripts: fixed a bug in idle.py which caused a fax send delay of one * scripts: fixed a bug in idle.py which caused a fax send delay of one
hour when daylight saving time is in effect hour when daylight saving time is in effect
* scripts: attachments to sent e-mails now get a valid filename * scripts: attachments to sent e-mails now get a valid filename
@ -92,20 +98,20 @@
now support the special sign "-" for "no destination number available" now support the special sign "-" for "no destination number available"
(e.g. needed for the austrian "Global Call") (e.g. needed for the austrian "Global Call")
* scripts: capisuitefax now handles filenames and dialstrings with * scripts: capisuitefax now handles filenames and dialstrings with
special chars (spaces etc.) correctly special chars (spaces etc.) correctly
* scripts: new parameter "--user" added to capisuitefax; thx to Wolfgang * scripts: new parameter "--user" added to capisuitefax; thx to Wolfgang
Eul for the patch! Eul for the patch!
* core: use "-" instead of "??" for "no number available", e.g. important * core: use "-" instead of "??" for "no number available", e.g.
for the call_from and call_to parameters of scripts important for the call_from and call_to parameters of scripts
* core: small bug which lead to a wrong outgoing MSN in rare cases fixed * core: small bug which lead to a wrong outgoing MSN in rare cases fixed
0.4.1a (tag CAPISUITE_041a): 0.4.1a (tag CAPISUITE_041a):
============================ ============================
* fixed a bug in the rc-script of CapiSuite which made * fixed a bug in the rc-script of CapiSuite which made
"capisuite start" unfunctional in 0.4.1 (path of executable changed) "capisuite start" unfunctional in 0.4.1 (path of executable changed)
* included tests and changes for gcc-2.95, no patch necessary * included tests and changes for gcc-2.95, no patch necessary
@ -127,16 +133,16 @@
* core: fixed problems when doing "make install" to an arbitrary prefix * core: fixed problems when doing "make install" to an arbitrary prefix
* core: moved "capisuite" to <prefix>/sbin instead of bin * core: moved "capisuite" to <prefix>/sbin instead of bin
* scripts: fixed idle.py freezing which lead to CapiSuite not sending * scripts: fixed idle.py freezing which lead to CapiSuite not sending
faxes any more after some time (#527) faxes any more after some time (#527)
* scripts: fixed remote inquiry: mixed new and old messages sometimes * scripts: fixed remote inquiry: mixed new and old messages sometimes
* scripts: stricter permissions of received files and dirs (#544) * scripts: stricter permissions of received files and dirs (#544)
* scripts: new option dial_prefix implemented (#537) * scripts: new option dial_prefix implemented (#537)
* scripts: better check for options read from config files, (#531) * scripts: better check for options read from config files, (#531)
many options are optional now with a resonable default many options are optional now with a resonable default
* scripts: capisuitefax shebang corrected (#536) * scripts: capisuitefax shebang corrected (#536)
Thanks goes mainly to Achim Bohnet and Dieter Pelzel for reporting bugs Thanks goes mainly to Achim Bohnet and Dieter Pelzel for reporting bugs
0.4 (first public release, tag CAPISUITE_04): 0.4 (first public release, tag CAPISUITE_04):
============================================= =============================================
@ -149,25 +155,26 @@ Thanks goes mainly to Achim Bohnet and Dieter Pelzel for reporting bugs
======================== ========================
* core: finally got rid of the CommonC++ library: * core: finally got rid of the CommonC++ library:
- threading implemented using native pthread_* calls - threading implemented using native pthread_* calls
- rewritten CapiSuite::parseConfigFile() to use STL string routines - rewritten CapiSuite::parseConfigFile() to use STL strings
- changed Connection class to use pthread_mutex_* - changed Connection class to use pthread_mutex_*
* scripts: fixed bug which lead to hanging processes of externally started * scripts: fixed bug which lead to hanging processes of externally
progs like sendmail started progs like sendmail
* scripts: minor fixes * scripts: minor fixes
0.3.1 (internal release): 0.3.1 (internal release):
========================= =========================
* dist: included spec and init file in CVS and dist * dist: included spec and init file in CVS and dist
* scripts: use different sendqueues for each user * scripts: use different sendqueues for each user
* core: fixed some bugs: * core: fixed some bugs:
- capisuite.error() didn't work, - capisuite.error() didn't work,
- logging in outgoing connections didn't work - logging in outgoing connections didn't work
- callingParty wasn't set correctly - callingParty wasn't set correctly
* scripts: answering machine switches to fax when incoming service indicator says fax * scripts: answering machine switches to fax when incoming service
* scripts: sayNumber can now handle all number from 0 to 99, so all dates and times are indicator says fax
now said nearly correctly for the remote inquiry * scripts: sayNumber can now handle all numbers from 0 to 99, so all
dates and times are now said nearly correctly for the remote inquiry
* scripts: fixed a typo in incoming.py * scripts: fixed a typo in incoming.py
* docs: added ISDN/CAPI error codes to manual * docs: added ISDN/CAPI error codes to manual
0.3 (internal release): 0.3 (internal release):
======================= =======================
@ -180,18 +187,20 @@ Thanks goes mainly to Achim Bohnet and Dieter Pelzel for reporting bugs
0.2 (internal release): 0.2 (internal release):
======================= =======================
* log improvements: log-level configurable (see capisuite.conf), appending log-file instead of re-creating * log improvements: log-level configurable (see capisuite.conf),
* configure allows to set docdir with --with-docdir appending log-file instead of re-creating
* CapiSuite can be finished using Ctrl-C and SIGTERM nicely * configure allows to set docdir with --with-docdir
* very limited support for reload (kill -1) - only re-activates de-actived idle script yet, * CapiSuite can be finished using Ctrl-C and SIGTERM nicely
no reload of configuration * very limited support for reload (kill -1) - only re-activates
* all configuration for the scripts put in own config file de-actived idle script yet, no reload of configuration
* support for various new configuration options, multi-user-ready scripts (different user dirs in spool_dir/users) * all configuration for the scripts put in own config file
* audio_receive does truncate recorded silence away * support for various new configuration options, multi-user-ready
scripts (different user dirs in spool_dir/users)
* audio_receive does truncate recorded silence away
* remote inquiry supports recording of own announcement * remote inquiry supports recording of own announcement
* commandline option "-d" runs CapiSuite as daemon * commandline option "-d" runs CapiSuite as daemon
* new python commands: capisuite.log and capisuite.error let scripts write messages to the CapiSuite log * new python commands: capisuite.log and capisuite.error let scripts
and error log write messages to the CapiSuite log and error log
0.1 (internal release): 0.1 (internal release):
======================= =======================
@ -209,27 +218,30 @@ Thanks goes mainly to Achim Bohnet and Dieter Pelzel for reporting bugs
======================== ========================
* improvement in idle script handling, own class for it (IdleScript) * improvement in idle script handling, own class for it (IdleScript)
* new classes for Python script handling (PythonScript) and derived classes * new classes for Python script handling (PythonScript) and derived
(IncomingScript & IdleScript) classes (IncomingScript & IdleScript)
* new python functions call_voice and call_faxG3 to initiate outgoing calls * new python functions call_voice and call_faxG3 to initiate outgoing
* changed python exception handling to allow multiple calls in one script to be calls
handled correctly * changed python exception handling to allow multiple calls in one
* python functions disconnect() and reject() wait for complete disconnection and script to be handled correctly
return the disconnect cause now * python functions disconnect() and reject() wait for complete
disconnection and return the disconnect cause now
* assure nice disconnection in any error case (hopefully) * assure nice disconnection in any error case (hopefully)
* when error occured in script, physical connection is finished immediately leading * when error occured in script, physical connection is finished
to an error visible at the sending side (e.g. when using the fax protocol) immediately leading to an error visible at the sending side (e.g.
* cleaned up python reference counting and threads, no known memory leaks any more when using the fax protocol)
* many changes to support outgoing calls (new module, many small changes) * cleaned up python reference counting and threads, no known memory
* Connection objects will be destroyed by application level now so dangling pointers leaks any more
are avoided * many changes to support outgoing calls (new module, small changes)
* Connection objects will be destroyed by application level now so
dangling pointers are avoided
* exception handling generally improved * exception handling generally improved
0.02 (internal release): 0.02 (internal release):
======================== ========================
* many bug fixes as usual (SEGV, ...) * many bug fixes as usual (SEGV, ...)
* service constants SERVICE_VOICE, SERVICE_FAXG3 and SERVICE_OTHER * service constants SERVICE_VOICE, SERVICE_FAXG3 and SERVICE_OTHER
available in python now, no need to use CIP values any more available in python now, no need to use CIP values any more
* audio_send and audio_receive return length in seconds now * audio_send and audio_receive return length in seconds now
* added support for idle script which can initiate outgoing calls * added support for idle script which can initiate outgoing calls
@ -237,7 +249,9 @@ Thanks goes mainly to Achim Bohnet and Dieter Pelzel for reporting bugs
0.01 (internal release): 0.01 (internal release):
======================== ========================
* changed name from CapiCom to CapiSuite (name conflict with MS crypto API) * changed name from CapiCom to CapiSuite (name conflict with MS crypto
* added doxygen-created documentation for classes and python exported functions API)
* added doxygen-created documentation for classes and python exported
functions
* get_DTMF() was renamed to read_DTMF() and can wait for DTMF now * get_DTMF() was renamed to read_DTMF() and can wait for DTMF now
* connect_telephony() renamed to connect_voice() * connect_telephony() renamed to connect_voice()

View File

@ -1708,7 +1708,7 @@ is not present, current time as returned by localtime() is used.
Qualität. Empfehlenswert ist auch, die Aufnahme auf maximal 50% der maximalen Amplitude Qualität. Empfehlenswert ist auch, die Aufnahme auf maximal 50% der maximalen Amplitude
zu normalisieren.</para> zu normalisieren.</para>
<para>Sie können WAV in inverstiert A-Law konvertieren, indem Sie aufrufen (danke an Carsten Heesch für den Tipp):</para> <para>Sie können WAV mit folgendem Kommando in invertiertes A-Law konvertieren (danke an Carsten Heesch für den Tipp):</para>
<screen><command>sox myfile.wav -r 8000 -c 1 -b outfile.la resample -ql</command></screen> <screen><command>sox myfile.wav -r 8000 -c 1 -b outfile.la resample -ql</command></screen>

View File

@ -2,7 +2,7 @@
@brief Contains CapiSuite - Main application class, implements ApplicationInterface @brief Contains CapiSuite - Main application class, implements ApplicationInterface
@author Gernot Hillier <gernot@hillier.de> @author Gernot Hillier <gernot@hillier.de>
$Revision: 1.6 $ $Revision: 1.7 $
*/ */
/*************************************************************************** /***************************************************************************
@ -72,8 +72,22 @@ CapiSuite::CapiSuite(int argc,char **argv)
(*debug) << prefix() << "CapiSuite " << VERSION << " started." << endl; (*debug) << prefix() << "CapiSuite " << VERSION << " started." << endl;
(*error) << prefix() << "CapiSuite " << VERSION << " started." << endl; (*error) << prefix() << "CapiSuite " << VERSION << " started." << endl;
string DDIStopListS=config["DDI_stop_numbers"];
vector<string> DDIStopList;
DDIStopList.push_back("");
int j=0;
for (int i=0;i<DDIStopListS.length();i++) {
if (DDIStopListS[i]==',') {
DDIStopList.push_back("");
j++;
} else {
DDIStopList[j]+=DDIStopListS[i];
}
}
// backend init // backend init
capi=new Capi(*debug,debug_level,*error); capi=new Capi(*debug,debug_level,*error,atoi(config["DDI_length"].c_str()),atoi(config["DDI_base_length"].c_str()),DDIStopList);
capi->registerApplicationInterface(this); capi->registerApplicationInterface(this);
string info; string info;
@ -259,7 +273,7 @@ void
CapiSuite::checkOption(string key, string value) CapiSuite::checkOption(string key, string value)
{ {
if (!config.count(key)) { if (!config.count(key)) {
cerr << "Warning: Can't find " << key << " variable. Using default (" << value << ")." << endl; cerr << "Warning: Can't find " << key << " variable. Using default (\"" << value << "\")." << endl;
config[key]=value; config[key]=value;
} }
} }
@ -304,11 +318,14 @@ CapiSuite::readConfiguration()
checkOption("log_file",string(LOCALSTATEDIR)+"/log/capisuite.log"); checkOption("log_file",string(LOCALSTATEDIR)+"/log/capisuite.log");
checkOption("log_level","2"); checkOption("log_level","2");
checkOption("log_error",string(LOCALSTATEDIR)+"/log/capisuite.error"); checkOption("log_error",string(LOCALSTATEDIR)+"/log/capisuite.error");
checkOption("DDI_length","0");
checkOption("DDI_base_length","0");
checkOption("DDI_stop_numbers","");
string t(config["idle_script_interval"]); string t(config["idle_script_interval"]);
for (int i=0;i<t.size();i++) for (int i=0;i<t.size();i++)
if (t[i]<'0' || t[i]>'9') if (t[i]<'0' || t[i]>'9')
throw ApplicationError("Invalid idle_script_interval given.","main()"); throw ApplicationError("Invalid idle_script_interval given.","readConfiguration()");
if (config["log_file"]!="" && config["log_file"]!="-") { if (config["log_file"]!="" && config["log_file"]!="-") {
debug = new ofstream(config["log_file"].c_str(),ios::app); debug = new ofstream(config["log_file"].c_str(),ios::app);
@ -334,6 +351,21 @@ CapiSuite::readConfiguration()
} else } else
error=&cerr; error=&cerr;
t=config["DDI_length"];
for (int i=0;i<t.size();i++)
if (t[i]<'0' || t[i]>'9')
throw ApplicationError("Invalid DDI_length given.","readConfiguration()");
t=config["DDI_base_length"];
for (int i=0;i<t.size();i++)
if (t[i]<'0' || t[i]>'9')
throw ApplicationError("Invalid DDI_base_length given.","readConfiguration()");
t=config["DDI_stop_numbers"];
for (int i=0;i<t.size();i++)
if ((t[i]<'0' || t[i]>'9') && t[i]!=',')
throw ApplicationError("Invalid DDI_stop_numbers given.","readConfiguration()");
if (daemonmode) { if (daemonmode) {
if (debug==&cout) { if (debug==&cout) {
cerr << "FATAL error: not allowed to write to stdout in daemon mode." << endl; cerr << "FATAL error: not allowed to write to stdout in daemon mode." << endl;
@ -398,6 +430,19 @@ CapiSuite::help()
/* History /* History
Old Log (for new changes see ChangeLog): Old Log (for new changes see ChangeLog):
Revision 1.5.2.3 2003/11/06 18:32:15 gernot
- implemented DDIStopNumbers
Revision 1.5.2.2 2003/11/02 14:58:16 gernot
- use DDI_base_length instead of DDI_base
- added DDI_stop_numbers option
- use DDI_* options in the Connection class
- call the Python script if number is complete
Revision 1.5.2.1 2003/10/26 16:51:55 gernot
- begin implementation of DDI, get DDI Info Elements
Revision 1.5 2003/04/03 21:09:46 gernot Revision 1.5 2003/04/03 21:09:46 gernot
- Capi::getInfo isn't static any longer - Capi::getInfo isn't static any longer

View File

@ -2,7 +2,7 @@
@brief Contains Capi - Main Class for communication with CAPI @brief Contains Capi - Main Class for communication with CAPI
@author Gernot Hillier <gernot@hillier.de> @author Gernot Hillier <gernot@hillier.de>
$Revision: 1.6 $ $Revision: 1.7 $
*/ */
/*************************************************************************** /***************************************************************************
@ -31,8 +31,9 @@ void* capi_exec_handler(void* arg)
instance->run(); instance->run();
} }
Capi::Capi (ostream& debug, unsigned short debug_level, ostream &error, unsigned maxLogicalConnection, unsigned maxBDataBlocks,unsigned maxBDataLen) throw (CapiError, CapiMsgError) Capi::Capi (ostream& debug, unsigned short debug_level, ostream &error, unsigned short DDILength, unsigned short DDIBaseLength, vector<string> DDIStopNumbers, unsigned maxLogicalConnection, unsigned maxBDataBlocks,unsigned maxBDataLen) throw (CapiError, CapiMsgError)
:debug(debug),debug_level(debug_level),error(error),messageNumber(0),usedInfoMask(0x10),usedCIPMask(0),numControllers(0) :debug(debug),debug_level(debug_level),error(error),messageNumber(0),usedInfoMask(0x10),usedCIPMask(0),numControllers(0),
DDILength(DDILength),DDIBaseLength(DDIBaseLength),DDIStopNumbers(DDIStopNumbers)
{ {
if (debug_level >= 2) if (debug_level >= 2)
debug << prefix() << "Capi object created" << endl; debug << prefix() << "Capi object created" << endl;
@ -45,6 +46,9 @@ Capi::Capi (ostream& debug, unsigned short debug_level, ostream &error, unsigned
if (applId == 0 || info!=0) if (applId == 0 || info!=0)
throw (CapiMsgError(info,"Error while registering application: "+describeParamInfo(info),"Capi::Capi()")); throw (CapiMsgError(info,"Error while registering application: "+describeParamInfo(info),"Capi::Capi()"));
if (DDILength)
usedInfoMask|=0x80; // enable Called Party Number Info Element for PtP configuration
for (int i=1;i<=numControllers;i++) for (int i=1;i<=numControllers;i++)
listen_req(i, usedInfoMask, usedCIPMask); // can throw CapiMsgError listen_req(i, usedInfoMask, usedCIPMask); // can throw CapiMsgError
@ -548,9 +552,10 @@ Capi::readMessage (void) throw (CapiMsgError, CapiError, CapiWrongState, CapiExt
if (connections.count(plci)>0) if (connections.count(plci)>0)
throw(CapiError("PLCI used twice from CAPI in CONNECT_IND","Capi::readMessage()")); throw(CapiError("PLCI used twice from CAPI in CONNECT_IND","Capi::readMessage()"));
else { else {
Connection *c=new Connection(nachricht,this); Connection *c=new Connection(nachricht,this,DDILength,DDIBaseLength,DDIStopNumbers);
connections[plci]=c; connections[plci]=c;
application->callWaiting(c); if (!DDILength) // if we have PtP then wait until DDI is complete
application->callWaiting(c);
} }
} break; } break;
@ -647,6 +652,21 @@ Capi::readMessage (void) throw (CapiMsgError, CapiError, CapiWrongState, CapiExt
connections[plci]->info_ind_alerting(nachricht); connections[plci]->info_ind_alerting(nachricht);
} break; } break;
case 0x70: { // Called Party Number
_cdword plci=INFO_IND_PLCI(&nachricht);
if (debug_level >= 2)
debug << prefix() << "<INFO_IND: PLCI 0x" << hex << plci << ", InfoNumber CalledPartyNr " << endl;
bool nrComplete;
if (connections.count(plci)==0)
throw(CapiError("PLCI unknown in INFO_IND","Capi::readMessage()"));
else {
nrComplete=connections[plci]->info_ind_called_party_nr(nachricht);
if (nrComplete && DDILength)
application->callWaiting(connections[plci]);
}
} break;
default: default:
if (debug_level >= 2) if (debug_level >= 2)
debug << prefix() << "<INFO_IND: Controller/PLCI 0x" << hex << INFO_IND_PLCI(&nachricht) << ", InfoNumber " << INFO_IND_INFONUMBER(&nachricht) << " (ignoring)" << endl; debug << prefix() << "<INFO_IND: Controller/PLCI 0x" << hex << INFO_IND_PLCI(&nachricht) << ", InfoNumber " << INFO_IND_INFONUMBER(&nachricht) << " (ignoring)" << endl;
@ -951,6 +971,22 @@ Capi::getInfo(bool verbose)
/* History /* History
Old Log (for new changes see ChangeLog): Old Log (for new changes see ChangeLog):
Revision 1.5.2.4 2003/11/06 18:32:15 gernot
- implemented DDIStopNumbers
Revision 1.5.2.3 2003/11/02 14:58:16 gernot
- use DDI_base_length instead of DDI_base
- added DDI_stop_numbers option
- use DDI_* options in the Connection class
- call the Python script if number is complete
Revision 1.5.2.2 2003/11/01 22:59:33 gernot
- read CalledPartyNr InfoElements
Revision 1.5.2.1 2003/10/26 16:51:55 gernot
- begin implementation of DDI, get DDI Info Elements
Revision 1.5 2003/04/17 10:39:42 gernot Revision 1.5 2003/04/17 10:39:42 gernot
- support ALERTING notification (to know when it's ringing on the other side) - support ALERTING notification (to know when it's ringing on the other side)
- cosmetical fixes in capi.cpp - cosmetical fixes in capi.cpp

View File

@ -2,7 +2,7 @@
@brief Contains Capi - Main Class for communication with CAPI @brief Contains Capi - Main Class for communication with CAPI
@author Gernot Hillier <gernot@hillier.de> @author Gernot Hillier <gernot@hillier.de>
$Revision: 1.6 $ $Revision: 1.7 $
*/ */
/*************************************************************************** /***************************************************************************
@ -67,13 +67,16 @@ class Capi {
@param debug reference to a ostream object where debug info should be written to @param debug reference to a ostream object where debug info should be written to
@param debug_level verbosity level for debug messages @param debug_level verbosity level for debug messages
@param error reference to a ostream object where errors should be written to @param error reference to a ostream object where errors should be written to
@param DDILength if ISDN interface is in PtP mode, the length of the DDI must be set here. 0 means disabled (PtMP)
@param DDIBaseLength the base number length w/o extension (and w/o 0) if DDI is used
@param DDIStopNumbers list of DDIs shorter than DDILength we will accept
@param maxLogicalConnection max. number of logical connections we will handle @param maxLogicalConnection max. number of logical connections we will handle
@param maxBDataBlocks max. number of unconfirmed B3-datablocks, 7 is the maximum supported by CAPI @param maxBDataBlocks max. number of unconfirmed B3-datablocks, 7 is the maximum supported by CAPI
@param maxBDataLen max. B3-Datablocksize, 2048 is the maximum supported by CAPI @param maxBDataLen max. B3-Datablocksize, 2048 is the maximum supported by CAPI
@throw CapiError Thrown if no ISDN controller is reported by CAPI @throw CapiError Thrown if no ISDN controller is reported by CAPI
@throw CapiMsgError Thrown if registration at CAPI wasn't successful. @throw CapiMsgError Thrown if registration at CAPI wasn't successful.
*/ */
Capi (ostream &debug, unsigned short debug_level, ostream &error, unsigned maxLogicalConnection=2, unsigned maxBDataBlocks=7,unsigned maxBDataLen=2048) throw (CapiError, CapiMsgError); Capi (ostream &debug, unsigned short debug_level, ostream &error, unsigned short DDILength=0, unsigned short DDIBaseLength=0, vector<string> DDIStopNumbers=vector<string>(), unsigned maxLogicalConnection=2, unsigned maxBDataBlocks=7,unsigned maxBDataLen=2048) throw (CapiError, CapiMsgError);
/** @brief Destructor. Unregister App at CAPI /** @brief Destructor. Unregister App at CAPI
@ -416,6 +419,10 @@ class Capi {
string capiManufacturer, ///< manufacturer of the general CAPI driver string capiManufacturer, ///< manufacturer of the general CAPI driver
capiVersion; ///< version of the general CAPI driver capiVersion; ///< version of the general CAPI driver
unsigned short DDILength; ///< length of extension number (DDI) when ISDN PtP mode is used (0=PtMP)
unsigned short DDIBaseLength; ///< base number length for the ISDN interface if PtP mode is used
vector<string> DDIStopNumbers; ///< list of DDIs shorten than DDILength we'll accept
vector <CardProfileT> profiles; ///< vector containing profiles for all found cards (ATTENTION: starts with index 0, vector <CardProfileT> profiles; ///< vector containing profiles for all found cards (ATTENTION: starts with index 0,
///< while CAPI numbers controllers starting by 1 (sigh) ///< while CAPI numbers controllers starting by 1 (sigh)
@ -441,6 +448,19 @@ class Capi {
/* History /* History
Old Log (for new changes see ChangeLog): Old Log (for new changes see ChangeLog):
Revision 1.5.2.3 2003/11/06 18:32:15 gernot
- implemented DDIStopNumbers
Revision 1.5.2.2 2003/11/02 14:58:16 gernot
- use DDI_base_length instead of DDI_base
- added DDI_stop_numbers option
- use DDI_* options in the Connection class
- call the Python script if number is complete
Revision 1.5.2.1 2003/10/26 16:51:55 gernot
- begin implementation of DDI, get DDI Info Elements
Revision 1.5 2003/04/17 10:39:42 gernot Revision 1.5 2003/04/17 10:39:42 gernot
- support ALERTING notification (to know when it's ringing on the other side) - support ALERTING notification (to know when it's ringing on the other side)
- cosmetical fixes in capi.cpp - cosmetical fixes in capi.cpp

View File

@ -2,7 +2,7 @@
@brief Contains Connection - Encapsulates a CAPI connection with all its states and methods. @brief Contains Connection - Encapsulates a CAPI connection with all its states and methods.
@author Gernot Hillier <gernot@hillier.de> @author Gernot Hillier <gernot@hillier.de>
$Revision: 1.14 $ $Revision: 1.15 $
*/ */
/*************************************************************************** /***************************************************************************
@ -27,18 +27,23 @@
using namespace std; using namespace std;
Connection::Connection (_cmsg& message, Capi* capi_in): Connection::Connection (_cmsg& message, Capi *capi, unsigned short DDILength, unsigned short DDIBaseLength, std::vector<std::string> DDIStopNumbers):
call_if(NULL),capi(capi_in),plci_state(P2),ncci_state(N0), buffer_start(0), buffers_used(0), call_if(NULL),capi(capi),plci_state(P2),ncci_state(N0), buffer_start(0), buffers_used(0),
file_for_reception(NULL), file_to_send(NULL), received_dtmf(""), keepPhysicalConnection(false), file_for_reception(NULL), file_to_send(NULL), received_dtmf(""), keepPhysicalConnection(false),
disconnect_cause(0),debug(capi->debug), debug_level(capi->debug_level), error(capi->error), disconnect_cause(0),debug(capi->debug), debug_level(capi->debug_level), error(capi->error),
our_call(false), disconnect_cause_b3(0), fax_info(NULL) our_call(false), disconnect_cause_b3(0), fax_info(NULL), DDILength(DDILength),
DDIBaseLength(DDIBaseLength), DDIStopNumbers(DDIStopNumbers)
{ {
pthread_mutex_init(&send_mutex, NULL); pthread_mutex_init(&send_mutex, NULL);
pthread_mutex_init(&receive_mutex, NULL); pthread_mutex_init(&receive_mutex, NULL);
plci=CONNECT_IND_PLCI(&message); // Physical Link Connection Identifier plci=CONNECT_IND_PLCI(&message); // Physical Link Connection Identifier
call_from = getNumber(CONNECT_IND_CALLINGPARTYNUMBER(&message),true); call_from = getNumber(CONNECT_IND_CALLINGPARTYNUMBER(&message),true);
call_to = getNumber(CONNECT_IND_CALLEDPARTYNUMBER(&message),false); if (DDILength)
call_to=""; // we enable the CalledParty InfoElement when using DDI and will get the number later again
else
call_to=getNumber(CONNECT_IND_CALLEDPARTYNUMBER(&message),false);
if (debug_level >= 1) { if (debug_level >= 1) {
debug << prefix() << "Connection object created for incoming call PLCI " << plci; debug << prefix() << "Connection object created for incoming call PLCI " << plci;
debug << " from " << call_from << " to " << call_to << " CIP 0x" << hex << CONNECT_IND_CIPVALUE(&message) << endl; debug << " from " << call_from << " to " << call_to << " CIP 0x" << hex << CONNECT_IND_CIPVALUE(&message) << endl;
@ -59,11 +64,12 @@ Connection::Connection (_cmsg& message, Capi* capi_in):
connect_ind_msg_nr=message.Messagenumber; // this is needed as connect_resp is given later connect_ind_msg_nr=message.Messagenumber; // this is needed as connect_resp is given later
} }
Connection::Connection (Capi* capi, _cdword controller, string call_from_in, bool clir, string call_to_in, service_t service, string faxStationID, string faxHeadline) throw (CapiExternalError, CapiMsgError) Connection::Connection (Capi* capi, _cdword controller, string call_from, bool clir, string call_to, service_t service, string faxStationID, string faxHeadline) throw (CapiExternalError, CapiMsgError)
:call_if(NULL),capi(capi),plci_state(P01),ncci_state(N0),plci(0),service(service), buffer_start(0), buffers_used(0), :call_if(NULL),capi(capi),plci_state(P01),ncci_state(N0),plci(0),service(service),
file_for_reception(NULL), file_to_send(NULL), call_from(call_from_in), call_to(call_to_in), connect_ind_msg_nr(0), buffer_start(0), buffers_used(0), file_for_reception(NULL), file_to_send(NULL),
disconnect_cause(0), debug(capi->debug), debug_level(capi->debug_level), error(capi->error), keepPhysicalConnection(false), call_from(call_from), call_to(call_to), connect_ind_msg_nr(0), disconnect_cause(0),
our_call(true), disconnect_cause_b3(0), fax_info(NULL) debug(capi->debug), debug_level(capi->debug_level), error(capi->error), keepPhysicalConnection(false),
our_call(true), disconnect_cause_b3(0), fax_info(NULL), DDILength(0), DDIBaseLength(0)
{ {
pthread_mutex_init(&send_mutex, NULL); pthread_mutex_init(&send_mutex, NULL);
pthread_mutex_init(&receive_mutex, NULL); pthread_mutex_init(&receive_mutex, NULL);
@ -585,6 +591,41 @@ Connection::info_ind_alerting(_cmsg &message) throw (CapiWrongState)
call_if->alerting(); call_if->alerting();
} }
bool
Connection::info_ind_called_party_nr(_cmsg &message) throw (CapiWrongState)
{
if (plci_state!=P2)
throw CapiWrongState("INFO_IND for CalledPartyNr received in wrong state","Connection::info_ind_called_party_nr()");
if (plci!=INFO_IND_PLCI(&message))
throw CapiError("INFO_IND received with wrong PLCI","Connection::info_ind_called_party_nr()");
try {
capi->info_resp(message.Messagenumber,plci);
}
catch (CapiMsgError e) {
error << prefix() << "WARNING: Can't send info_resp. Message was: " << e << endl;
}
call_to+=getNumber(INFO_IND_INFOELEMENT(&message),false);
string currDDI=call_to.substr(DDIBaseLength);
for (int i=0;i<DDIStopNumbers.size();i++)
if (DDIStopNumbers[i]==currDDI) {
if (debug_level >= 1)
debug << prefix() << "got DDI, nr is now " << call_to << " (complete,stop_nr)" << endl;
return true;
}
if (call_to.length()>=DDIBaseLength+DDILength) {
if (debug_level >=1)
debug << prefix() << "got DDI, nr is now " << call_to << " (complete)" << endl;
return true;
} else {
if (debug_level >=1)
debug << prefix() << "got DDI, nr is now " << call_to << " (incomplete)" << endl;
return false;
}
}
void void
Connection::connect_conf(_cmsg& message) throw (CapiWrongState, CapiMsgError) Connection::connect_conf(_cmsg& message) throw (CapiWrongState, CapiMsgError)
@ -1089,6 +1130,24 @@ Revision 1.13 2003/12/21 21:15:10 gernot
Revision 1.12 2003/07/20 19:08:19 gernot Revision 1.12 2003/07/20 19:08:19 gernot
- added missing include of errno.h - added missing include of errno.h
Revision 1.11.2.5 2003/11/06 18:32:15 gernot
- implemented DDIStopNumbers
Revision 1.11.2.4 2003/11/02 14:58:16 gernot
- use DDI_base_length instead of DDI_base
- added DDI_stop_numbers option
- use DDI_* options in the Connection class
- call the Python script if number is complete
Revision 1.11.2.3 2003/11/01 22:59:33 gernot
- read CalledPartyNr InfoElements
Revision 1.11.2.2 2003/10/26 16:52:55 gernot
- begin implementation of DDI; get DDI info elements
Revision 1.11.2.1 2003/07/20 19:08:44 gernot
- added missing include of errno.h
Revision 1.11 2003/06/29 06:18:13 gernot Revision 1.11 2003/06/29 06:18:13 gernot
- don't take a wrong character too serious... - don't take a wrong character too serious...

View File

@ -2,7 +2,7 @@
@brief Contains Connection - Encapsulates a CAPI connection with all its states and methods. @brief Contains Connection - Encapsulates a CAPI connection with all its states and methods.
@author Gernot Hillier <gernot@hillier.de> @author Gernot Hillier <gernot@hillier.de>
$Revision: 1.7 $ $Revision: 1.8 $
*/ */
/*************************************************************************** /***************************************************************************
@ -18,6 +18,7 @@
#define CONNECTION_H #define CONNECTION_H
#include <capi20.h> #include <capi20.h>
#include <vector>
#include <string> #include <string>
#include <fstream> #include <fstream>
#include "capiexception.h" #include "capiexception.h"
@ -70,8 +71,8 @@ class Connection
This constructor is used when the application creates a Connection object manually to initiate an outgoing connection. This constructor is used when the application creates a Connection object manually to initiate an outgoing connection.
It constructs the necessary information elements (B channel protocol settings, Number elements) and calls Capi::connect_req It constructs the necessary information elements (B channel protocol settings, Number elements) and calls
to initiate a call. Capi::connect_req to initiate a call.
@param capi pointer to the Capi Object @param capi pointer to the Capi Object
@param controller number of the controller which should initiate the call @param controller number of the controller which should initiate the call
@ -355,11 +356,15 @@ class Connection
when we receive a CONNECT_IND message. when we receive a CONNECT_IND message.
It only extracts some data (numbers, services, etc.) from the message and saves it in private attributes. It only extracts some data (numbers, services, etc.) from the message and saves it in private attributes.
The answer to CONNECT_IND (i.e. CONNECT_RESP) is given later by the Connection object.
@param message the received CONNECT_IND message @param message the received CONNECT_IND message
@param capi pointer to the Capi Object @param capi pointer to the Capi Object
@param DDILength set the length of DDI extension numbers (0=default means disable DDI)
@param DDIBaseLength the length of the base number of the PtP interface
@param DDIStopNumbers a vector of strings listing complete DDI extension numbers which are shorter than DDILength
*/ */
Connection (_cmsg& message, Capi *capi); Connection (_cmsg& message, Capi *capi, unsigned short DDILength=0, unsigned short DDIBaseLength=0, std::vector<std::string> DDIStopNumbers=std::vector<std::string>());
/********************************************************************************/ /********************************************************************************/
/* methods handling CAPI messages - called by the Capi class */ /* methods handling CAPI messages - called by the Capi class */
@ -427,6 +432,18 @@ class Connection
*/ */
void info_ind_alerting(_cmsg& message) throw (CapiWrongState); void info_ind_alerting(_cmsg& message) throw (CapiWrongState);
/** @brief called when we get INFO_IND from CAPI with Info number saying it's ALERTING
This method will understand additional Called Party Number Info Elements to get the DDI
(necessary for getting the whole number in PtP configuration as the DDI is signalled
*after* CONNECT_IND.
@param message the received INFO_IND message
@return true if the CalledPartyNumber is complete (DDI length fulfilled or stop_number found)
@throw CapiWrongState Thrown when the message is received unexpected (i.e. in a wrong plci_state)
*/
bool info_ind_called_party_nr(_cmsg& message) throw (CapiWrongState);
/** @brief called when we get DISCONNECT_B3_IND from CAPI /** @brief called when we get DISCONNECT_B3_IND from CAPI
This method will also send a response to Capi and stop_file_transmission and stop_file_reception(). This method will also send a response to Capi and stop_file_transmission and stop_file_reception().
@ -661,7 +678,11 @@ class Connection
unsigned short buffer_start, ///< holds the index for the first buffer currently used unsigned short buffer_start, ///< holds the index for the first buffer currently used
buffers_used; ///< holds the number of currently used buffers buffers_used; ///< holds the number of currently used buffers
fax_info_t* fax_info; fax_info_t* fax_info; ///< holds some data about fax connections
unsigned short DDILength; ///< the length of DDI extension numbers. 0 means DDI disabled
unsigned short DDIBaseLength; ///< the length of the base number for a PtP interface
vector<string> DDIStopNumbers; ///< list of complete DDI extensions shorter than DDILength
}; };
#endif #endif
@ -669,6 +690,22 @@ class Connection
/* History /* History
Old Log (for new changes see ChangeLog): Old Log (for new changes see ChangeLog):
Revision 1.6.2.4 2003/11/11 21:05:41 gernot
- fix typo in comment
Revision 1.6.2.3 2003/11/02 14:58:16 gernot
- use DDI_base_length instead of DDI_base
- added DDI_stop_numbers option
- use DDI_* options in the Connection class
- call the Python script if number is complete
Revision 1.6.2.2 2003/11/01 22:59:33 gernot
- read CalledPartyNr InfoElements
Revision 1.6.2.1 2003/10/26 16:51:55 gernot
- begin implementation of DDI, get DDI Info Elements
Revision 1.6 2003/06/28 12:49:47 gernot Revision 1.6 2003/06/28 12:49:47 gernot
- convert fax headline to CP437, so that german umlauts and other special - convert fax headline to CP437, so that german umlauts and other special
characters will work now characters will work now

View File

@ -1,4 +1,4 @@
# $Id: capisuite.conf.in,v 1.2 2003/03/20 09:15:53 gernot Exp $ # $Id: capisuite.conf.in,v 1.3 2004/01/10 14:16:40 gernot Exp $
# #
# This is the global configuration file for CapiSuite # This is the global configuration file for CapiSuite
# #
@ -68,3 +68,26 @@ log_level="1"
# #
log_error="@localstatedir@/log/capisuite.error" log_error="@localstatedir@/log/capisuite.error"
# DDI_base, DDI_length and DDI_stop_numbers
#
# The following two options are only important if you've your ISDN card connected
# to an ISDN interface which is configured in "Point to Point"-mode (in Germany
# this is called "Anlagenanschluss"). This means you don't have several
# specific numbers (so called MSNs) but only one base number and you can define
# extensions as you like. As the length of these extensions is up to you, CapiSuite
# can't know it. Therefore you must configure it here. Sometimes, there are also
# shorter numbers you want to allow, for example the extension "0" instead of "000".
# These extension numbers can be listed (separated by commas) in DDI_stop_numbers.
#
# If you don't understand what this all means, then you most likely have no PtP
# interface and you can leave the default values.
#
# As an example, if you've numbers like 12345-123 and 12345-111, then your
# DDI_base_length would be "5" and DDI_length would be 3. If you also want to
# receive calls to 12345-0, you should set DDI_stop_numbers to "0".
#
# A value of 0 for DDI_length disables this feature and the other settings are
# ignored then (default).
DDI_length="0"
DDI_base_length="0"
DDI_stop_numbers=""

View File

@ -2,7 +2,7 @@
@brief Contains ConnectModule - Call Module for connection establishment at incoming connection @brief Contains ConnectModule - Call Module for connection establishment at incoming connection
@author Gernot Hillier <gernot@hillier.de> @author Gernot Hillier <gernot@hillier.de>
$Revision: 1.4 $ $Revision: 1.5 $
*/ */
/*************************************************************************** /***************************************************************************
@ -67,7 +67,8 @@ class ConnectModule: public CallModule
/* History /* History
$Log: connectmodule.h,v $ Old Log (for new changes see ChangeLog):
Revision 1.4 2003/12/31 16:28:55 gernot Revision 1.4 2003/12/31 16:28:55 gernot
* src/modules/connectmodule.{h,cpp} (ConnectModule): throw * src/modules/connectmodule.{h,cpp} (ConnectModule): throw
CapiExternalError only when connection's already up, otherwise CapiExternalError only when connection's already up, otherwise
@ -76,8 +77,6 @@ Revision 1.4 2003/12/31 16:28:55 gernot
Revision 1.3 2003/12/28 21:01:04 gernot Revision 1.3 2003/12/28 21:01:04 gernot
- reworked TODO, disabled automatic log message adding to source files - reworked TODO, disabled automatic log message adding to source files
Old Log (for new changes see ChangeLog):
Revision 1.1.1.1 2003/02/19 08:19:53 gernot Revision 1.1.1.1 2003/02/19 08:19:53 gernot
initial checkin of 0.4 initial checkin of 0.4