From 044399a4bae5664bebc3ef18d54220c11ab809de Mon Sep 17 00:00:00 2001 From: pescuma Date: Sun, 20 Dec 2009 18:29:42 +0000 Subject: iax: dtmf calling git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@188 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Protocols/IAX/IAXProto.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'Protocols/IAX/IAXProto.cpp') diff --git a/Protocols/IAX/IAXProto.cpp b/Protocols/IAX/IAXProto.cpp index 925c3fb..85eb6c9 100644 --- a/Protocols/IAX/IAXProto.cpp +++ b/Protocols/IAX/IAXProto.cpp @@ -62,6 +62,7 @@ IAXProto::IAXProto(const char *aProtoName, const TCHAR *aUserName) CreateProtoService(PS_VOICE_ANSWERCALL, &IAXProto::VoiceAnswerCall); CreateProtoService(PS_VOICE_DROPCALL, &IAXProto::VoiceDropCall); CreateProtoService(PS_VOICE_HOLDCALL, &IAXProto::VoiceHoldCall); + CreateProtoService(PS_VOICE_SEND_DTMF, &IAXProto::VoiceSendDTMF); CreateProtoService(PS_VOICE_CALL_STRING_VALID, &IAXProto::VoiceCallStringValid); } @@ -755,6 +756,45 @@ int __cdecl IAXProto::VoiceHoldCall(WPARAM wParam, LPARAM lParam) } +static bool IsValidDTMF(TCHAR c) +{ + if (c >= _T('A') && c <= _T('D')) + return true; + if (c >= _T('0') && c <= _T('9')) + return true; + if (c == _T('#') || c == _T('*')) + return true; + + return false; +} + + +int __cdecl IAXProto::VoiceSendDTMF(WPARAM wParam, LPARAM lParam) +{ + char *id = (char *) wParam; + TCHAR c = (TCHAR) lParam; + if (id == NULL || id[0] == 0 || c == 0) + return 1; + + int callNo = atoi(id); + if (callNo < 0 || callNo >= NUM_LINES) + return 2; + + if (callNo != iaxc_selected_call()) + return 3; + + if (c >= _T('a') && c <= _T('d')) + c += _T('A') - _T('a'); + + if (!IsValidDTMF(c)) + return 4; + + iaxc_send_dtmf((char) c); + + return 0; +} + + int __cdecl IAXProto::VoiceCallStringValid(WPARAM wParam, LPARAM lParam) { TCHAR *number = (TCHAR *) wParam; -- cgit v1.2.3