diff options
| -rw-r--r-- | protocols/Teams/src/stdafx.h | 2 | ||||
| -rw-r--r-- | protocols/Teams/src/teams_endpoint.cpp | 4 | ||||
| -rw-r--r-- | protocols/Teams/src/teams_http.cpp | 12 | ||||
| -rw-r--r-- | protocols/Teams/src/teams_proto.cpp | 7 | ||||
| -rw-r--r-- | protocols/Teams/src/teams_proto.h | 4 | ||||
| -rw-r--r-- | protocols/Teams/src/teams_server.cpp | 2 |
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); } |
