diff options
-rw-r--r-- | protocols/SkypeWeb/src/requests/trouter.h | 4 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_messages.cpp | 2 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_polling.cpp | 46 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_proto.cpp | 1 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_trouter.cpp | 50 |
5 files changed, 54 insertions, 49 deletions
diff --git a/protocols/SkypeWeb/src/requests/trouter.h b/protocols/SkypeWeb/src/requests/trouter.h index 30cd906992..0e64aa9590 100644 --- a/protocols/SkypeWeb/src/requests/trouter.h +++ b/protocols/SkypeWeb/src/requests/trouter.h @@ -52,7 +52,7 @@ public: class RegisterTrouterRequest : public HttpRequest
{
public:
- RegisterTrouterRequest(const char *token, const char *trouterUrl) :
+ RegisterTrouterRequest(const char *token, const char *trouterUrl, const char *id) :
HttpRequest(REQUEST_POST, "prod.registrar.skype.com/v2/registrations")
{
Headers
@@ -60,7 +60,7 @@ public: << CHAR_VALUE("X-Skypetoken", token);
CMStringA data;
- data.AppendFormat("{\"clientDescription\":{\"aesKey\":\"\",\"languageId\":\"en-US\",\"platform\":\"SWX\",\"templateKey\":\"SkypeWeb_1.0\"},\"registrationId\":\"eafc0311-7bb4-4a93-4f32-7fce2496d724\",\"nodeId\":\"\",\"transports\":{\"TROUTER\":[{\"context\":\"\",\"path\":\"%s\",\"ttl\":3600}]}}", trouterUrl);
+ data.AppendFormat("{\"clientDescription\":{\"aesKey\":\"\",\"languageId\":\"en-US\",\"platform\":\"SWX\",\"templateKey\":\"SkypeWeb_1.0\"},\"registrationId\":\"%s\",\"nodeId\":\"\",\"transports\":{\"TROUTER\":[{\"context\":\"\",\"path\":\"%s\",\"ttl\":3600}]}}", id, trouterUrl);
Body << VALUE(data);
}
diff --git a/protocols/SkypeWeb/src/skype_messages.cpp b/protocols/SkypeWeb/src/skype_messages.cpp index d259963bc3..2082370811 100644 --- a/protocols/SkypeWeb/src/skype_messages.cpp +++ b/protocols/SkypeWeb/src/skype_messages.cpp @@ -70,7 +70,7 @@ MEVENT CSkypeProto::AddCallToDb(MCONTACT hContact, DWORD timestamp, DWORD flags, {
const char *message = Translate("Incoming call");
size_t callIdLength = mir_strlen(callId);
- size_t messageLength = mir_strlen(message);
+ size_t messageLength = mir_strlen(message) + 1;
size_t cbBlob = messageLength + callIdLength;
PBYTE pBlob = (PBYTE)mir_alloc(cbBlob);
memcpy(pBlob, message, messageLength);
diff --git a/protocols/SkypeWeb/src/skype_polling.cpp b/protocols/SkypeWeb/src/skype_polling.cpp index 5c069c06a4..df80efc787 100644 --- a/protocols/SkypeWeb/src/skype_polling.cpp +++ b/protocols/SkypeWeb/src/skype_polling.cpp @@ -73,33 +73,41 @@ void CSkypeProto::PollingThread(void*) continue;
}
- if (response->resultCode != 200)
+ if (response->resultCode == 200)
{
- errors++;
+ if (response->pData)
+ {
+ JSONROOT root(response->pData);
+ JSONNODE *events = json_get(root, "eventMessages");
+ if (events != NULL)
+ {
+ ParsePollData(root);
+ }
+ }
}
-
- if (response->pData)
+ else
{
- JSONROOT root(response->pData);
- JSONNODE *eventMsgs = json_get(root, "eventMessages");
- JSONNODE *errorCode = json_get(root, "errorCode");
-
- if (eventMsgs != NULL)
- ParsePollData(root);
+ errors++;
- else if (errorCode != NULL)
+ if (response->pData)
{
- errors++;
- debugLogA(__FUNCTION__": polling error %d", json_as_int(errorCode));
- if (json_as_int(errorCode) == 729)
+ JSONROOT root(response->pData);
+ JSONNODE *error = json_get(root, "errorCode");
+ if (error != NULL)
{
- SendRequest(new CreateEndpointRequest(TokenSecret), &CSkypeProto::OnEndpointCreated);
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
- delete request;
- break;
- }
+ int errorCode = json_as_int(error);
+
+ if (errorCode == 729)
+ {
+ SendRequest(new CreateEndpointRequest(TokenSecret), &CSkypeProto::OnEndpointCreated);
+ CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
+ delete request;
+ break;
+ }
+ }
}
}
+
m_pollingConnection = response->nlc;
CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
delete request;
diff --git a/protocols/SkypeWeb/src/skype_proto.cpp b/protocols/SkypeWeb/src/skype_proto.cpp index 0d3b1f7578..70124ca692 100644 --- a/protocols/SkypeWeb/src/skype_proto.cpp +++ b/protocols/SkypeWeb/src/skype_proto.cpp @@ -218,7 +218,6 @@ int CSkypeProto::SetStatus(int iNewStatus) delSetting("registrationRoken");
delSetting("endpointId");
delSetting("expires");
-
}
requestQueue->Stop();
diff --git a/protocols/SkypeWeb/src/skype_trouter.cpp b/protocols/SkypeWeb/src/skype_trouter.cpp index 854a4e75d7..0f22c3d98f 100644 --- a/protocols/SkypeWeb/src/skype_trouter.cpp +++ b/protocols/SkypeWeb/src/skype_trouter.cpp @@ -72,7 +72,7 @@ void CSkypeProto::OnGetTrouter(const NETLIBHTTPREQUEST *response) CMStringA szToken = data.Tokenize(":", iStart).Trim();
setString("Trouter_SessId", szToken);
m_hTrouterThread = ForkThreadEx(&CSkypeProto::TRouterThread, 0, NULL);
- SendRequest(new RegisterTrouterRequest(TokenSecret, ptrA(getStringA("Trouter_url"))));
+ SendRequest(new RegisterTrouterRequest(TokenSecret, ptrA(getStringA("Trouter_url")), szToken));
}
void CSkypeProto::OnHealth(const NETLIBHTTPREQUEST*)
@@ -158,34 +158,32 @@ void CSkypeProto::TRouterThread(void*) request->nlc = m_TrouterConnection;
NETLIBHTTPREQUEST *response = request->Send(m_hNetlibUser);
- if (response == NULL)
+ if (response != NULL)
{
- errors++;
- delete request;
- continue;
- }
-
- if (response->resultCode != 200)
- {
- SendRequest(new HealthTrouterRequest(ccid), &CSkypeProto::OnHealth);
- break;
- }
-
- if (response->pData)
- {
- char *json = strstr(response->pData, "{");
-
- if (json == NULL) continue;
+ if (response->resultCode == 200)
+ {
+ if (response->pData)
+ {
+ char *json = strstr(response->pData, "{");
+
+ if (json == NULL)
+ continue;
+
+ JSONROOT root(json);
+ ptrA szBody(mir_t2a(ptrT(json_as_string(json_get(root, "body")))));
+ JSONNODE *headers = json_get(root, "headers");
+ JSONNODE *body = json_parse(szBody);
+ OnTrouterEvent(body, headers);
+ }
+ }
+ else
+ {
+ SendRequest(new HealthTrouterRequest(ccid), &CSkypeProto::OnHealth);
+ }
- JSONROOT root(json);
- ptrA szBody(mir_t2a(ptrT(json_as_string(json_get(root, "body")))));
- JSONNODE *headers = json_get(root, "headers");
- JSONNODE *body = json_parse(szBody);
- OnTrouterEvent(body, headers);
+ m_TrouterConnection = response->nlc;
+ CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
}
-
- m_TrouterConnection = response->nlc;
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
delete request;
}
m_hTrouterThread = NULL;
|