summaryrefslogtreecommitdiff
path: root/Protocols
diff options
context:
space:
mode:
authorpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-12-20 18:29:42 +0000
committerpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-12-20 18:29:42 +0000
commit044399a4bae5664bebc3ef18d54220c11ab809de (patch)
treed9e60cd7c146433d91a1357c08c42bd3501d62e2 /Protocols
parenta58cfe0f832c25ea4f09ddf4bf78b3c8df906a5f (diff)
iax: dtmf calling
git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@188 c086bb3d-8645-0410-b8da-73a8550f86e7
Diffstat (limited to 'Protocols')
-rw-r--r--Protocols/IAX/IAXProto.cpp40
-rw-r--r--Protocols/IAX/IAXProto.h1
2 files changed, 41 insertions, 0 deletions
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;
diff --git a/Protocols/IAX/IAXProto.h b/Protocols/IAX/IAXProto.h
index 1fc261c..3c0c786 100644
--- a/Protocols/IAX/IAXProto.h
+++ b/Protocols/IAX/IAXProto.h
@@ -134,6 +134,7 @@ private:
int __cdecl VoiceAnswerCall(WPARAM wParam,LPARAM lParam);
int __cdecl VoiceDropCall(WPARAM wParam,LPARAM lParam);
int __cdecl VoiceHoldCall(WPARAM wParam,LPARAM lParam);
+ int __cdecl VoiceSendDTMF(WPARAM wParam,LPARAM lParam);
int __cdecl VoiceCallStringValid(WPARAM wParam,LPARAM lParam);
};