diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp index 7a2d5109e3458bede06a2fe024b0c8bd5f577232..e40b404d1da6b6465537796de70b0b9104bcb96c 100644 --- a/daemon/src/sip/sipvoiplink.cpp +++ b/daemon/src/sip/sipvoiplink.cpp @@ -1467,7 +1467,20 @@ dtmfSend(SIPCall &call, char code, const std::string &dtmf) int duration = Manager::instance().voipPreferences.getPulseLength(); char dtmf_body[1000]; - snprintf(dtmf_body, sizeof dtmf_body - 1, "Signal=%c\r\nDuration=%d\r\n", code, duration); + + const char *normal_str= "Signal=%c\r\nDuration=%d\r\n"; + const char *flash_str = "Signal=%d\r\nDuration=%d\r\n"; + const char *str; + + // handle flash code + if (code == '!') { + str = flash_str; + code = 16; + } else { + str = normal_str; + } + + snprintf(dtmf_body, sizeof dtmf_body - 1, str, code, duration); sendSIPInfo(call, dtmf_body, "dtmf-relay"); }