diff options
author | pescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7> | 2009-12-20 18:29:42 +0000 |
---|---|---|
committer | pescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7> | 2009-12-20 18:29:42 +0000 |
commit | 044399a4bae5664bebc3ef18d54220c11ab809de (patch) | |
tree | d9e60cd7c146433d91a1357c08c42bd3501d62e2 /Protocols | |
parent | a58cfe0f832c25ea4f09ddf4bf78b3c8df906a5f (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.cpp | 40 | ||||
-rw-r--r-- | Protocols/IAX/IAXProto.h | 1 |
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);
};
|