diff --git a/src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml b/src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml index ec02ca7ba6..45268f304b 100644 --- a/src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml +++ b/src/mod/endpoints/mod_khomp/Install/files/khomp.conf.xml @@ -412,6 +412,12 @@ to be used to initialize a call transfer using PBX-to-PBX signaling. --> + + diff --git a/src/mod/endpoints/mod_khomp/docs/Manual.html b/src/mod/endpoints/mod_khomp/docs/Manual.html index d0699551f6..863ef76847 100644 --- a/src/mod/endpoints/mod_khomp/docs/Manual.html +++ b/src/mod/endpoints/mod_khomp/docs/Manual.html @@ -60,6 +60,7 @@
  • suppression-delay: Ativa ("yes") ou desativa ("no") o delay necessário para supressão DTMF. Se desativado ("no"), também desativa supressão de DTMFs;
  • trace: Define opções de depuração. Não deve ser utilizado em produção a não ser que estritamente necessário;
  • user-transfer-digits: Define uma seqüência de dígitos DTMF para iniciar a transferencia entre o FreeSWITCH® e um outro PABX (utilizando sinalização de usuário, como QSig ou FXO FLASH); +
  • flash-to-digits: Define os dígitos para serem enviados quando o FLASH é detectado na FXS;

  • @@ -119,7 +120,8 @@
  • accountcode;
  • calleridnum;
  • calleridname; -
  • mailbox. +
  • mailbox; +
  • flash-to-digits.
  • Cada opção é separada uma da outra por um pipe "|" ou uma barra "/" e definidas após dois pontos ":", exemplo:

    diff --git a/src/mod/endpoints/mod_khomp/docs/Manual.pdf b/src/mod/endpoints/mod_khomp/docs/Manual.pdf index 665be58ee3..935b299dbc 100644 Binary files a/src/mod/endpoints/mod_khomp/docs/Manual.pdf and b/src/mod/endpoints/mod_khomp/docs/Manual.pdf differ diff --git a/src/mod/endpoints/mod_khomp/docs/README.pdf b/src/mod/endpoints/mod_khomp/docs/README.pdf index a65cc28d66..2b95cfaad4 100644 Binary files a/src/mod/endpoints/mod_khomp/docs/README.pdf and b/src/mod/endpoints/mod_khomp/docs/README.pdf differ diff --git a/src/mod/endpoints/mod_khomp/docs/README_en.pdf b/src/mod/endpoints/mod_khomp/docs/README_en.pdf index 2864e403fc..25be8ab0b2 100644 Binary files a/src/mod/endpoints/mod_khomp/docs/README_en.pdf and b/src/mod/endpoints/mod_khomp/docs/README_en.pdf differ diff --git a/src/mod/endpoints/mod_khomp/docs/User_Guide.html b/src/mod/endpoints/mod_khomp/docs/User_Guide.html index ceb520b0d2..eb5cfc6c4e 100644 --- a/src/mod/endpoints/mod_khomp/docs/User_Guide.html +++ b/src/mod/endpoints/mod_khomp/docs/User_Guide.html @@ -61,6 +61,7 @@ If you need to set advanced parameters of the board and/or signaling, the progra
  • suppression-delay (former suppressiondelay): Activate ("yes") or disables ("no") the delay necessary to suppress DTMF. If disabled ("no"), also disables suppression of DTMF (local option);
  • trace: Set debugging options. Should not be used in production unless absolutely necessary;
  • user-transfer-digits: Defines a sequence of DTMF digits to initiate the transfer between FreeSWITCH® and another PBX (using user signaling, like QSig or FXO FLASH). +
  • flash-to-digits: Defines the digits to be sent when the FLASH is detected on FXS channels..

  • @@ -123,7 +124,8 @@ For details, please refer to the configuration file for examples.
  • accountcode;
  • calleridnum;
  • calleridname; -
  • mailbox. +
  • mailbox; +
  • flash-to-digits.
  • Each option is separated from each other by a pipe "|" or a slash "/" and defined after the colon ":". Example:

    diff --git a/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf b/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf index fd8027ba2b..832596bdb2 100644 Binary files a/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf and b/src/mod/endpoints/mod_khomp/docs/User_Guide.pdf differ diff --git a/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h b/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h index 85b1af0e17..722bd80737 100644 --- a/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h +++ b/src/mod/endpoints/mod_khomp/include/khomp_pvt_kxe1.h @@ -995,6 +995,7 @@ struct KhompPvtFXS: public KhompPvt std::string _language; std::string _accountcode; std::string _mailbox; + std::string _flash; static Opt::OrigToNseqMapType generateNseqMap(); static void dialTimer(KhompPvt * pvt); diff --git a/src/mod/endpoints/mod_khomp/include/opt.h b/src/mod/endpoints/mod_khomp/include/opt.h index 0f93215a2b..3458f9e9de 100644 --- a/src/mod/endpoints/mod_khomp/include/opt.h +++ b/src/mod/endpoints/mod_khomp/include/opt.h @@ -155,6 +155,7 @@ public: static unsigned int _transferdigittimeout; + static std::string _flash; static std::string _blindxfer; static std::string _atxfer; diff --git a/src/mod/endpoints/mod_khomp/include/revision.h b/src/mod/endpoints/mod_khomp/include/revision.h index bbb7f6b61b..fe9ef9eb47 100644 --- a/src/mod/endpoints/mod_khomp/include/revision.h +++ b/src/mod/endpoints/mod_khomp/include/revision.h @@ -1 +1 @@ -#define MOD_KHOMP_VERSION "1.0 - (rev: 5823)" +#define MOD_KHOMP_VERSION "1.0 - (rev: 5841)" diff --git a/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp b/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp index b5acfd18e6..c0eb1a3403 100644 --- a/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp +++ b/src/mod/endpoints/mod_khomp/src/khomp_pvt_kxe1.cpp @@ -2055,6 +2055,7 @@ void BoardE1::KhompPvtFXS::loadOptions() _language = Opt::_global_language; _accountcode = Opt::_accountcode; _mailbox.clear(); + _flash = Opt::_flash; Opt::BranchToOptMapType::iterator it3 = Opt::_branch_options.find(_fxs_orig_addr); @@ -2181,6 +2182,10 @@ bool BoardE1::KhompPvtFXS::parseBranchOptions(std::string options_str) { _mailbox = opt_value; } + else if (opt_name == "flash-to-digits") + { + _flash = opt_value; + } else { DBG(FUNC, PVT_FMT(_target, "[fxs-options] invalid option on branch %s: \"%s\".") % _fxs_orig_addr.c_str() % opt_name.c_str()); @@ -3001,12 +3006,23 @@ bool BoardE1::KhompPvtFXS::onDtmfSendFinish(K3L_EVENT *e) bool BoardE1::KhompPvtFXS::onFlashDetected(K3L_EVENT *e) { - DBG(FUNC, PVT_FMT(_target, "(FXS) c")); + DBG(FUNC, PVT_FMT(_target, "(FXS) c (%s)") % _flash); try { ScopedPvtLock lock(this); + for(std::string::const_iterator it = _flash.begin(); it != _flash.end(); it++) + { + signalDTMF(*it); + } + + DBG(FUNC, PVT_FMT(_target, "(FXS) r")); + + return true; + +/******************************************************************************/ + //Old implementation, not used if(callFXS()->_flags.check(Kflags::FXS_FLASH_TRANSFER)) { DBG(FUNC, PVT_FMT(_target, "(FXS) transfer canceled")); @@ -3043,6 +3059,7 @@ bool BoardE1::KhompPvtFXS::onFlashDetected(K3L_EVENT *e) DBG(FUNC, PVT_FMT(target(), "(FXS) r (unable to start transfer)")); return false; } +/******************************************************************************/ } catch (ScopedLockFailed & err) diff --git a/src/mod/endpoints/mod_khomp/src/opt.cpp b/src/mod/endpoints/mod_khomp/src/opt.cpp index 946f508528..8a08023b37 100644 --- a/src/mod/endpoints/mod_khomp/src/opt.cpp +++ b/src/mod/endpoints/mod_khomp/src/opt.cpp @@ -79,6 +79,7 @@ unsigned int Opt::_fxs_digit_timeout; unsigned int Opt::_transferdigittimeout; +std::string Opt::_flash; std::string Opt::_atxfer; std::string Opt::_blindxfer; @@ -154,7 +155,9 @@ void Opt::initialize(void) Globals::options.add(ConfigOption("transferdigittimeout", _transferdigittimeout, 3000u, 0u, 90000u)); - Globals::options.add(ConfigOption("atxfer", _atxfer, "")); + Globals::options.add(ConfigOption("flash-to-digits", _flash, "*1")); + + Globals::options.add(ConfigOption("atxfer", _atxfer, "")); Globals::options.add(ConfigOption("blindxfer", _blindxfer, "")); Globals::options.add(ConfigOption("delay-ringback-co", _ringback_co_delay, 1500u, 0u, 999000u)); diff --git a/src/mod/endpoints/mod_khomp/src/utils.cpp b/src/mod/endpoints/mod_khomp/src/utils.cpp index a0e6856322..cc6eaef082 100644 --- a/src/mod/endpoints/mod_khomp/src/utils.cpp +++ b/src/mod/endpoints/mod_khomp/src/utils.cpp @@ -249,6 +249,12 @@ bool MatchExtension::canMatch(std::string & context, std::string & exten, if(finished != std::string::npos) { + if(exten.size() <= 1) + { + DBG(FUNC, FMT("exten=%s size=%d") % exten % exten.size()); + return true; + } + exten.erase(finished); DBG(FUNC, FMT("match exact!!! exten=%s") % exten); return false;