diff options
Diffstat (limited to 'protocols/SkypeWeb/src/request_queue.cpp')
| -rw-r--r-- | protocols/SkypeWeb/src/request_queue.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/protocols/SkypeWeb/src/request_queue.cpp b/protocols/SkypeWeb/src/request_queue.cpp index 45e58d92da..a463c275e4 100644 --- a/protocols/SkypeWeb/src/request_queue.cpp +++ b/protocols/SkypeWeb/src/request_queue.cpp @@ -52,6 +52,68 @@ void CSkypeProto::SendRequest(AsyncHttpRequest *request) mir_forkthreadowner(&CSkypeProto::AsyncSendThread, this, request, nullptr);
}
+/////////////////////////////////////////////////////////////////////////////////////////
+
+NETLIBHTTPREQUEST* CSkypeProto::DoSend(AsyncHttpRequest *pReq)
+{
+ if (pReq->m_szUrl.Find("://") == -1)
+ pReq->m_szUrl.Insert(0, ((pReq->flags & NLHRF_SSL) ? "https://" : "http://"));
+
+ if (!pReq->m_szParam.IsEmpty()) {
+ switch (pReq->requestType) {
+ case REQUEST_GET:
+ case REQUEST_DELETE:
+ pReq->m_szUrl.AppendChar('?');
+ pReq->m_szUrl.Append(pReq->m_szParam.c_str());
+ break;
+
+ case REQUEST_PUT:
+ case REQUEST_POST:
+ if (Netlib_GetHeader(pReq, "Content-Type") == nullptr) {
+ if (pReq->m_szParam[0] == '[' || pReq->m_szParam[0] == '{')
+ pReq->AddHeader("Content-Type", "application/json; charset=UTF-8");
+ else
+ pReq->AddHeader("Content-Type", "application/x-www-form-urlencoded");
+ }
+ __fallthrough;
+
+ default:
+ pReq->pData = pReq->m_szParam.Detach();
+ pReq->dataLength = (int)mir_strlen(pReq->pData);
+ }
+ }
+
+ switch (pReq->m_host) {
+ case HOST_API:
+ case HOST_CONTACTS:
+ if (m_szApiToken)
+ pReq->AddHeader("X-Skypetoken", m_szApiToken);
+ pReq->AddHeader("Accept", "application/json; ver=1.0;");
+ pReq->AddHeader("X-Stratus-Caller", SKYPEWEB_CLIENTINFO_NAME);
+ pReq->AddHeader("X-Stratus-Request", "abcd1234");
+ pReq->AddHeader("Origin", "https://web.skype.com");
+ pReq->AddHeader("Referer", "https://web.skype.com/main");
+ break;
+
+ case HOST_GRAPH:
+ if (m_szApiToken)
+ pReq->AddHeader("X-Skypetoken", m_szApiToken);
+ pReq->AddHeader("Accept", "application/json");
+ break;
+
+ case HOST_DEFAULT:
+ if (m_szToken)
+ pReq->AddHeader("RegistrationToken", CMStringA(FORMAT, "registrationToken=%s", m_szToken.get()));
+ pReq->AddHeader("Accept", "application/json, text/javascript");
+ break;
+ }
+
+ pReq->szUrl = pReq->m_szUrl.GetBuffer();
+ debugLogA("Send request to %s", pReq->szUrl);
+
+ return Netlib_HttpTransaction(m_hNetlibUser, pReq);
+}
+
void CSkypeProto::Execute(AsyncHttpRequest *item)
{
NLHR_PTR response(DoSend(item));
|
