summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--protocols/Teams/src/stdafx.h2
-rw-r--r--protocols/Teams/src/teams_endpoint.cpp4
-rw-r--r--protocols/Teams/src/teams_http.cpp12
-rw-r--r--protocols/Teams/src/teams_proto.cpp7
-rw-r--r--protocols/Teams/src/teams_proto.h4
-rw-r--r--protocols/Teams/src/teams_server.cpp2
6 files changed, 22 insertions, 9 deletions
diff --git a/protocols/Teams/src/stdafx.h b/protocols/Teams/src/stdafx.h
index 72d39a9909..542f889615 100644
--- a/protocols/Teams/src/stdafx.h
+++ b/protocols/Teams/src/stdafx.h
@@ -72,6 +72,7 @@ enum SkypeHost
HOST_GRAPH,
HOST_LOGIN,
HOST_TEAMS,
+ HOST_CHATS,
HOST_PRESENCE,
HOST_OTHER
};
@@ -84,6 +85,7 @@ struct AsyncHttpRequest : public MTHttpRequest<CTeamsProto>
AsyncHttpRequest(int type, SkypeHost host, LPCSTR url = nullptr, MTHttpRequestHandler pFunc = nullptr);
void AddAuthentication(CTeamsProto *ppro);
+ void AddRegistration(CTeamsProto *ppro);
};
#include "teams_proto.h"
diff --git a/protocols/Teams/src/teams_endpoint.cpp b/protocols/Teams/src/teams_endpoint.cpp
index 5687c81e5f..18ae90d816 100644
--- a/protocols/Teams/src/teams_endpoint.cpp
+++ b/protocols/Teams/src/teams_endpoint.cpp
@@ -68,7 +68,7 @@ void CTeamsProto::OnEndpointCreated(MHttpResponse *response, AsyncHttpRequest*)
CMStringA val = szToken.Mid(iStart2);
if (name == "registrationToken")
- m_szToken = val.Detach();
+ m_szRegToken = val;
else if (name == "endpointId") {
val.Replace("{", "");
val.Replace("}", "");
@@ -83,5 +83,5 @@ void CTeamsProto::OnEndpointCreated(MHttpResponse *response, AsyncHttpRequest*)
void CTeamsProto::OnEndpointDeleted(MHttpResponse *, AsyncHttpRequest *)
{
m_szEndpoint.Empty();
- m_szToken = nullptr;
+ m_szRegToken.Empty();
}
diff --git a/protocols/Teams/src/teams_http.cpp b/protocols/Teams/src/teams_http.cpp
index 72480d0f94..015b294036 100644
--- a/protocols/Teams/src/teams_http.cpp
+++ b/protocols/Teams/src/teams_http.cpp
@@ -26,6 +26,7 @@ AsyncHttpRequest::AsyncHttpRequest(int type, SkypeHost host, LPCSTR url, MTHttpR
case HOST_GRAPH: m_szUrl = "skypegraph.skype.com"; break;
case HOST_LOGIN: m_szUrl = "login.microsoftonline.com"; break;
case HOST_TEAMS: m_szUrl = TEAMS_BASE_HOST; break;
+ case HOST_CHATS: m_szUrl = TEAMS_BASE_HOST "/api/chatsvc/consumer/v1"; break;
case HOST_PRESENCE: m_szUrl = "presence." TEAMS_BASE_HOST "/v1"; break;
case HOST_DEFAULT_V2:
@@ -54,6 +55,11 @@ void AsyncHttpRequest::AddAuthentication(CTeamsProto *ppro)
AddHeader("Authentication", CMStringA("skypetoken=") + ppro->m_szSkypeToken);
}
+void AsyncHttpRequest::AddRegistration(CTeamsProto *ppro)
+{
+ AddHeader("RegistrationToken", "registrationToken=" + ppro->m_szRegToken);
+}
+
/////////////////////////////////////////////////////////////////////////////////////////
void CTeamsProto::StartQueue()
@@ -127,6 +133,12 @@ MHttpResponse* CTeamsProto::DoSend(AsyncHttpRequest *pReq)
pReq->AddHeader("Referer", "https://teams.live.com/");
break;
+ case HOST_CHATS:
+ pReq->AddAuthentication(this);
+ pReq->AddRegistration(this);
+ pReq->AddHeader("Accept", "application/json");
+ break;
+
case HOST_API:
case HOST_GRAPH:
if (m_szSkypeToken)
diff --git a/protocols/Teams/src/teams_proto.cpp b/protocols/Teams/src/teams_proto.cpp
index 76fcc06505..9c773120fe 100644
--- a/protocols/Teams/src/teams_proto.cpp
+++ b/protocols/Teams/src/teams_proto.cpp
@@ -248,13 +248,12 @@ int CTeamsProto::SetStatus(int iNewStatus)
int CTeamsProto::UserIsTyping(MCONTACT hContact, int iState)
{
- auto *pReq = new AsyncHttpRequest(REQUEST_POST, HOST_DEFAULT, "/users/ME/conversations/" + mir_urlEncode(getId(hContact)) + "/messages");
-
JSONNode node;
- node << INT64_PARAM("clientmessageid", getRandomId()) << CHAR_PARAM("contenttype", "text") << CHAR_PARAM("content", "")
+ node << INT64_PARAM("clientmessageid", getRandomId()) << CHAR_PARAM("contenttype", "Application/Message") << CHAR_PARAM("content", "")
<< CHAR_PARAM("messagetype", (iState == PROTOTYPE_SELFTYPING_ON) ? "Control/Typing" : "Control/ClearTyping");
- pReq->m_szParam = node.write().c_str();
+ auto *pReq = new AsyncHttpRequest(REQUEST_POST, HOST_CHATS, "/users/ME/conversations/" + mir_urlEncode(getId(hContact)) + "/messages");
+ pReq->m_szParam = node.write().c_str();
PushRequest(pReq);
return 0;
}
diff --git a/protocols/Teams/src/teams_proto.h b/protocols/Teams/src/teams_proto.h
index 597ff28775..f3c33b727c 100644
--- a/protocols/Teams/src/teams_proto.h
+++ b/protocols/Teams/src/teams_proto.h
@@ -165,8 +165,8 @@ public:
// other data
int m_iPollingId, m_iMessageId = 1;
- ptrA m_szToken, m_szOwnSkypeId;
- CMStringA m_szSkypename, m_szMyname, m_szSkypeToken, m_szEndpoint;
+ ptrA m_szOwnSkypeId;
+ CMStringA m_szSkypename, m_szMyname, m_szRegToken, m_szSkypeToken, m_szEndpoint;
MCONTACT m_hMyContact;
__forceinline CMStringA getId(MCONTACT hContact) {
diff --git a/protocols/Teams/src/teams_server.cpp b/protocols/Teams/src/teams_server.cpp
index 472360eac7..16acce435d 100644
--- a/protocols/Teams/src/teams_server.cpp
+++ b/protocols/Teams/src/teams_server.cpp
@@ -66,7 +66,7 @@ void CTeamsProto::SendPresence()
auto *pReq = new AsyncHttpRequest(REQUEST_PUT, HOST_DEFAULT, "/users/ME/endpoints/" + mir_urlEncode(m_szEndpoint) + "/presenceDocs/messagingService",
&CTeamsProto::OnCapabilitiesSended);
pReq->m_szParam = node.write().c_str();
- pReq->AddHeader("RegistrationToken", CMStringA("registrationToken=") + m_szToken);
+ pReq->AddRegistration(this);
PushRequest(pReq);
}