diff options
author | Kirill Volinsky <mataes2007@gmail.com> | 2012-07-23 13:52:57 +0000 |
---|---|---|
committer | Kirill Volinsky <mataes2007@gmail.com> | 2012-07-23 13:52:57 +0000 |
commit | 89c5b2369413025e1fe7dfe5c5d0bf3bedd8558d (patch) | |
tree | 18f09394ce3b811e3df7d15de747e842000bd4ad /!NotAdopted/Skype/voiceservice.c | |
parent | a9580df150d799246eaecbf3c1fb5cecf9f8ab49 (diff) |
git-svn-id: http://svn.miranda-ng.org/main/trunk@1123 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to '!NotAdopted/Skype/voiceservice.c')
-rw-r--r-- | !NotAdopted/Skype/voiceservice.c | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/!NotAdopted/Skype/voiceservice.c b/!NotAdopted/Skype/voiceservice.c new file mode 100644 index 0000000000..b13ac097c1 --- /dev/null +++ b/!NotAdopted/Skype/voiceservice.c @@ -0,0 +1,156 @@ +#include "skype.h"
+#include "skypeapi.h"
+#include "skypesvc.h"
+#include "voiceservice.h"
+#include "sdk/m_voiceservice.h"
+
+#pragma warning (push)
+#pragma warning (disable: 4100) // unreferenced formal parameter
+#include "../../include/m_utils.h"
+#pragma warning (pop)
+
+HANDLE hVoiceNotify = NULL;
+BOOL has_voice_service = FALSE;
+
+extern char g_szProtoName[];
+
+
+BOOL HasVoiceService()
+{
+ return has_voice_service;
+}
+
+void NofifyVoiceService(HANDLE hContact, char *callId, int state)
+{
+ VOICE_CALL vc = {0};
+ vc.cbSize = sizeof(vc);
+ vc.szModule = SKYPE_PROTONAME;
+ vc.id = callId;
+ vc.flags = VOICE_CALL_CONTACT;
+ vc.state = state;
+ vc.hContact = hContact;
+ NotifyEventHooks(hVoiceNotify, (WPARAM) &vc, 0);
+}
+
+static INT_PTR VoiceGetInfo(WPARAM wParam, LPARAM lParam)
+{
+ UNREFERENCED_PARAMETER(wParam);
+ UNREFERENCED_PARAMETER(lParam);
+
+ return VOICE_SUPPORTED | VOICE_CALL_CONTACT | VOICE_CAN_HOLD;
+}
+
+static HANDLE FindContactByCallId(char *callId)
+{
+ HANDLE hContact;
+ int iCmpRes;
+ for (hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+ hContact != NULL;
+ hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0))
+ {
+ char *szProto = (char*) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+
+ DBVARIANT dbv;
+ if (szProto != NULL
+ && !strcmp(szProto, SKYPE_PROTONAME)
+ && DBGetContactSettingByte(hContact, SKYPE_PROTONAME, "ChatRoom", 0) == 0
+ && !DBGetContactSettingString(hContact, SKYPE_PROTONAME, "CallId", &dbv))
+ {
+ iCmpRes = strcmp(callId, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ if (iCmpRes == 0) return hContact;
+ }
+ }
+
+ return NULL;
+}
+
+static INT_PTR VoiceCall(WPARAM wParam, LPARAM lParam)
+{
+ DBVARIANT dbv;
+
+ UNREFERENCED_PARAMETER(lParam);
+
+ if (!wParam) return -1;
+
+ if (DBGetContactSettingString((HANDLE)wParam, SKYPE_PROTONAME, SKYPE_NAME, &dbv))
+ return -1;
+
+ SkypeSend("CALL %s", dbv.pszVal);
+ DBFreeVariant (&dbv);
+
+ return 0;
+}
+
+static INT_PTR VoiceAnswer(WPARAM wParam, LPARAM lParam)
+{
+ char *callId = (char *) wParam;
+
+ UNREFERENCED_PARAMETER(lParam);
+
+ if (!wParam) return -1;
+
+ if (FindContactByCallId(callId) == NULL)
+ return -1;
+
+ SkypeSend("SET %s STATUS INPROGRESS", callId);
+ testfor("ERROR", 200);
+
+ return 0;
+}
+
+static INT_PTR VoiceDrop(WPARAM wParam, LPARAM lParam)
+{
+ char *callId = (char *) wParam;
+
+ UNREFERENCED_PARAMETER(lParam);
+
+ if (!wParam) return -1;
+
+ if (FindContactByCallId(callId) == NULL)
+ return -1;
+
+ SkypeSend("SET %s STATUS FINISHED", callId);
+
+ return 0;
+}
+
+static INT_PTR VoiceHold(WPARAM wParam, LPARAM lParam)
+{
+ char *callId = (char *) wParam;
+
+ UNREFERENCED_PARAMETER(lParam);
+
+ if (!wParam) return -1;
+
+ if (FindContactByCallId(callId) == NULL)
+ return -1;
+
+ SkypeSend("SET %s STATUS ONHOLD", callId);
+
+ return 0;
+}
+
+void VoiceServiceInit()
+{
+ // leecher, 26.03.2011: Did this ever work in the old versions??
+ char szEvent[MAXMODULELABELLENGTH];
+
+ _snprintf (szEvent, sizeof(szEvent), "%s%s", SKYPE_PROTONAME, PE_VOICE_CALL_STATE);
+ hVoiceNotify = CreateHookableEvent( szEvent );
+ CreateProtoService( PS_VOICE_GETINFO, VoiceGetInfo );
+ CreateProtoService( PS_VOICE_CALL, VoiceCall );
+ CreateProtoService( PS_VOICE_ANSWERCALL, VoiceAnswer );
+ CreateProtoService( PS_VOICE_DROPCALL, VoiceDrop );
+ CreateProtoService( PS_VOICE_HOLDCALL, VoiceHold );
+}
+
+void VoiceServiceExit()
+{
+ DestroyHookableEvent(hVoiceNotify);
+}
+
+void VoiceServiceModulesLoaded()
+{
+ has_voice_service = ServiceExists(MS_VOICESERVICE_REGISTER);
+}
\ No newline at end of file |