diff options
-rw-r--r-- | protocols/SkypeWeb/src/http_request.h | 2 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/request_queue.cpp | 2 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/requests/messages.h | 10 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/requests/search.h | 2 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_avatars.cpp | 21 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_chatrooms.cpp | 44 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_messages.cpp | 2 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_options.cpp | 2 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_proto.h | 5 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_request.cpp | 4 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_search.cpp | 7 |
11 files changed, 72 insertions, 29 deletions
diff --git a/protocols/SkypeWeb/src/http_request.h b/protocols/SkypeWeb/src/http_request.h index d754524f55..e94eb200f3 100644 --- a/protocols/SkypeWeb/src/http_request.h +++ b/protocols/SkypeWeb/src/http_request.h @@ -231,7 +231,7 @@ public: va_end(formatArgs);
}
- ~HttpRequest()
+ virtual ~HttpRequest()
{
for (int i = 0; i < headersCount; i++)
{
diff --git a/protocols/SkypeWeb/src/request_queue.cpp b/protocols/SkypeWeb/src/request_queue.cpp index 258fc3d5d4..ac10e9c9c7 100644 --- a/protocols/SkypeWeb/src/request_queue.cpp +++ b/protocols/SkypeWeb/src/request_queue.cpp @@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. RequestQueue::RequestQueue(HANDLE hConnection) :
hConnection(hConnection), requests(1)
{
+ isTerminated = false;
hRequestQueueThread = NULL;
hRequestQueueEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
}
@@ -35,7 +36,6 @@ void RequestQueue::Start() if (!isTerminated)
return;
- isTerminated = false;
if (hRequestQueueThread == NULL)
hRequestQueueThread = mir_forkthread((pThreadFunc)&RequestQueue::WorkerThread, this);
}
diff --git a/protocols/SkypeWeb/src/requests/messages.h b/protocols/SkypeWeb/src/requests/messages.h index cde3abe84d..fe9361a29f 100644 --- a/protocols/SkypeWeb/src/requests/messages.h +++ b/protocols/SkypeWeb/src/requests/messages.h @@ -58,7 +58,7 @@ class SendTypingRequest : public HttpRequest {
public:
SendTypingRequest(const char *regToken, const char *username, bool bstate, const char *server = SKYPE_ENDPOINTS_HOST) :
- HttpRequest(REQUEST_POST, FORMAT, "%s/v1/users/ME/conversations/8:%s/messages", server, mir_urlEncode(username))
+ HttpRequest(REQUEST_POST, FORMAT, "%s/v1/users/ME/conversations/8:%s/messages", server, ptrA(mir_urlEncode(username)))
{
Headers
<< CHAR_VALUE("Accept", "application/json, text/javascript")
@@ -78,7 +78,7 @@ class GetHistoryRequest : public HttpRequest {
public:
GetHistoryRequest(const char *regToken, const char *username, LONGLONG timestamp = 0, const char *server = SKYPE_ENDPOINTS_HOST) :
- HttpRequest(REQUEST_GET, FORMAT, "%s/v1/users/ME/conversations/8:%s/messages?startTime=%d&pageSize=100&view=msnp24Equivalent&targetType=Passport|Skype|Lync|Thread", server, mir_urlEncode(username), timestamp)
+ HttpRequest(REQUEST_GET, FORMAT, "%s/v1/users/ME/conversations/8:%s/messages?startTime=%d&pageSize=100&view=msnp24Equivalent&targetType=Passport|Skype|Lync|Thread", server, ptrA(mir_urlEncode(username)), timestamp)
{
Headers
<< CHAR_VALUE("Accept", "application/json, text/javascript")
@@ -100,10 +100,4 @@ public: }
};
-
-
-
-
-
-
#endif //_SKYPE_REQUEST_MESSAGES_H_
diff --git a/protocols/SkypeWeb/src/requests/search.h b/protocols/SkypeWeb/src/requests/search.h index 3ef28b2b24..c31ceeec75 100644 --- a/protocols/SkypeWeb/src/requests/search.h +++ b/protocols/SkypeWeb/src/requests/search.h @@ -22,7 +22,7 @@ class GetSearchRequest : public HttpRequest {
public:
GetSearchRequest(const char *token, const char *string) :
- HttpRequest(REQUEST_GET, FORMAT, "api.skype.com/search/users/any?keyWord=%s&contactTypes[]=skype", mir_urlEncode(string))
+ HttpRequest(REQUEST_GET, FORMAT, "api.skype.com/search/users/any?keyWord=%s&contactTypes[]=skype", ptrA(mir_urlEncode(string)))
{
Headers
<< CHAR_VALUE("Accept", "application/json")
diff --git a/protocols/SkypeWeb/src/skype_avatars.cpp b/protocols/SkypeWeb/src/skype_avatars.cpp index d3282bb565..3f003b9a5e 100644 --- a/protocols/SkypeWeb/src/skype_avatars.cpp +++ b/protocols/SkypeWeb/src/skype_avatars.cpp @@ -172,8 +172,6 @@ INT_PTR CSkypeProto::SvcSetMyAvatar(WPARAM wParam, LPARAM lParam) return -1;
}
- size_t length;
- char *data;
FILE *hFile = _tfopen(path, L"rb");
if (!hFile)
{
@@ -182,23 +180,30 @@ INT_PTR CSkypeProto::SvcSetMyAvatar(WPARAM wParam, LPARAM lParam) }
fseek(hFile, 0, SEEK_END);
- length = ftell(hFile);
+ size_t length = ftell(hFile);
+ if (length == -1)
+ {
+ debugLogA("CSkypeProto::SvcSetMyAvatar: failed to get avatar file size");
+ fclose(hFile);
+ return -1;
+ }
rewind(hFile);
- data = (char*)mir_alloc(length);
- size_t read = fread(data, sizeof(char), length, hFile);
- if (read != length)
+ char *data = (char*)mir_alloc(length);
+ if (fread(data, sizeof(char), length, hFile) != length)
{
- fclose(hFile);
debugLogA("CSkypeProto::SvcSetMyAvatar: failed to read avatar file");
+ mir_free(data);
+ fclose(hFile);
return -1;
}
fclose(hFile);
-
ptrA token(getStringA("TokenSecret"));
ptrA skypename(getStringA(SKYPE_SETTINGS_ID));
PushRequest(new SetAvatarRequest(token, skypename, data, length), &CSkypeProto::OnSentAvatar);
+
+ mir_free(data);
}
else
{
diff --git a/protocols/SkypeWeb/src/skype_chatrooms.cpp b/protocols/SkypeWeb/src/skype_chatrooms.cpp index 6662f9c786..b49dff041a 100644 --- a/protocols/SkypeWeb/src/skype_chatrooms.cpp +++ b/protocols/SkypeWeb/src/skype_chatrooms.cpp @@ -17,13 +17,51 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "common.h"
-MCONTACT CSkypeProto::FindChatRoom(const char *skypename)
+void CSkypeProto::InitGroupChatModule()
+{
+ GCREGISTER gcr = { sizeof(gcr) };
+ gcr.iMaxText = 0;
+ gcr.ptszDispName = this->m_tszUserName;
+ gcr.pszModule = this->m_szModuleName;
+ CallServiceSync(MS_GC_REGISTER, 0, (LPARAM)&gcr);
+
+ //HookProtoEvent(ME_GC_EVENT, &CSkypeProto::OnGroupChatEventHook);
+ //HookProtoEvent(ME_GC_BUILDMENU, &CSkypeProto::OnGroupChatMenuHook);
+
+ //CreateProtoService(PS_JOINCHAT, &CSkypeProto::OnJoinChatRoom);
+ //CreateProtoService(PS_LEAVECHAT, &CSkypeProto::OnLeaveChatRoom);
+}
+
+void CSkypeProto::CloseAllChatChatSessions()
+{
+ GC_INFO gci = { 0 };
+ gci.Flags = GCF_BYINDEX | GCF_ID | GCF_DATA;
+ gci.pszModule = m_szModuleName;
+
+ int count = CallServiceSync(MS_GC_GETSESSIONCOUNT, 0, (LPARAM)m_szModuleName);
+ for (int i = 0; i < count; i++)
+ {
+ gci.iItem = i;
+ if (!CallServiceSync(MS_GC_GETINFO, 0, (LPARAM)&gci))
+ {
+ GCDEST gcd = { m_szModuleName, gci.pszID, GC_EVENT_CONTROL };
+ GCEVENT gce = { sizeof(gce), &gcd };
+ CallServiceSync(MS_GC_EVENT, SESSION_OFFLINE, (LPARAM)&gce);
+ CallServiceSync(MS_GC_EVENT, SESSION_TERMINATE, (LPARAM)&gce);
+ }
+ }
+}
+
+MCONTACT CSkypeProto::FindChatRoom(const char *chatname)
{
MCONTACT hContact = NULL;
for (hContact = db_find_first(m_szModuleName); hContact; hContact = db_find_next(hContact, m_szModuleName))
{
- ptrA cSkypename(getStringA(hContact, "ChatID"));
- if (mir_strcmpi(skypename, cSkypename) == 0)
+ if (!isChatRoom(hContact))
+ continue;
+
+ ptrA cChatname(getStringA(hContact, "ChatID"));
+ if (mir_strcmpi(chatname, cChatname) == 0)
break;
}
return hContact;
diff --git a/protocols/SkypeWeb/src/skype_messages.cpp b/protocols/SkypeWeb/src/skype_messages.cpp index 183b390d52..15b9f1501e 100644 --- a/protocols/SkypeWeb/src/skype_messages.cpp +++ b/protocols/SkypeWeb/src/skype_messages.cpp @@ -147,7 +147,7 @@ void CSkypeProto::OnMessageSent(const NETLIBHTTPREQUEST *response, void *arg) HANDLE hMessage = (HANDLE)param->hMessage;
delete param;
- if (response->resultCode != 200 && response->resultCode != 201)
+ if (response == NULL || (response->resultCode != 200 && response->resultCode != 201))
{
CMStringA error = "Unknown error";
if (response)
diff --git a/protocols/SkypeWeb/src/skype_options.cpp b/protocols/SkypeWeb/src/skype_options.cpp index 538f914337..fdd6aff5ac 100644 --- a/protocols/SkypeWeb/src/skype_options.cpp +++ b/protocols/SkypeWeb/src/skype_options.cpp @@ -46,7 +46,7 @@ void CSkypeOptionsMain::OnApply() {
m_proto->setString(SKYPE_SETTINGS_ID, m_skypename.GetTextA());
m_proto->setString("Password", m_password.GetTextA());
- TCHAR *group = m_group.GetText();
+ ptrT group(m_group.GetText());
if (mir_tstrlen(group) > 0 && !Clist_GroupExists(group))
Clist_CreateGroup(0, group);
}
diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h index a5c8383fc6..07acb2ec1e 100644 --- a/protocols/SkypeWeb/src/skype_proto.h +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -232,7 +232,10 @@ private: void OnSyncHistory(const NETLIBHTTPREQUEST *response);
//chats
- MCONTACT FindChatRoom(const char *skypename);
+ void InitGroupChatModule();
+ void CloseAllChatChatSessions();
+
+ MCONTACT FindChatRoom(const char *chatname);
MCONTACT AddChatRoom(const char *chatname);
void SetChatStatus(MCONTACT hContact, int iStatus);
diff --git a/protocols/SkypeWeb/src/skype_request.cpp b/protocols/SkypeWeb/src/skype_request.cpp index b9d5702f01..6f911d283e 100644 --- a/protocols/SkypeWeb/src/skype_request.cpp +++ b/protocols/SkypeWeb/src/skype_request.cpp @@ -29,10 +29,10 @@ private: public:
SkypeResponseDelegate(CSkypeProto *proto, SkypeResponseCallback responseCallback)
- : proto(proto), responseCallback(responseCallback), arg(NULL), hasArg(false) {}
+ : proto(proto), responseCallback(responseCallback), responseWithArgCallback(NULL), arg(NULL), hasArg(false) {}
SkypeResponseDelegate(CSkypeProto *proto, SkypeResponseWithArgCallback responseCallback, void *arg)
- : proto(proto), responseWithArgCallback(responseCallback), arg(arg), hasArg(true) { }
+ : proto(proto), responseCallback(NULL), responseWithArgCallback(responseCallback), arg(arg), hasArg(true) { }
void Invoke(const NETLIBHTTPREQUEST *response)
{
diff --git a/protocols/SkypeWeb/src/skype_search.cpp b/protocols/SkypeWeb/src/skype_search.cpp index 8709ab5515..9db84a6ca2 100644 --- a/protocols/SkypeWeb/src/skype_search.cpp +++ b/protocols/SkypeWeb/src/skype_search.cpp @@ -36,7 +36,8 @@ void CSkypeProto::SearchBasicThread(void* id) void CSkypeProto::OnSearch(const NETLIBHTTPREQUEST *response)
{
- if (response == NULL) {
+ if (response == NULL)
+ {
ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
return;
}
@@ -48,7 +49,8 @@ void CSkypeProto::OnSearch(const NETLIBHTTPREQUEST *response) }
JSONROOT root(response->pData);
- if (root == NULL) {
+ if (root == NULL)
+ {
ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
return;
}
@@ -69,6 +71,7 @@ void CSkypeProto::OnSearch(const NETLIBHTTPREQUEST *response) psr.nick = mir_wstrdup(sDisplayName);
ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_DATA, (HANDLE)1, (LPARAM)&psr);
}
+ json_free(items);
ProtoBroadcastAck(0, ACKTYPE_SEARCH, ACKRESULT_SUCCESS, (HANDLE)1, 0);
/*JSONROOT pRoot;
|