diff options
-rw-r--r-- | protocols/Teams/src/teams_endpoint.cpp | 20 | ||||
-rw-r--r-- | protocols/Teams/src/teams_proto.cpp | 6 | ||||
-rw-r--r-- | protocols/Teams/src/teams_proto.h | 1 | ||||
-rw-r--r-- | protocols/Teams/src/teams_trouter.cpp | 8 |
4 files changed, 17 insertions, 18 deletions
diff --git a/protocols/Teams/src/teams_endpoint.cpp b/protocols/Teams/src/teams_endpoint.cpp index 5bf46cfbb8..c53c6f8eea 100644 --- a/protocols/Teams/src/teams_endpoint.cpp +++ b/protocols/Teams/src/teams_endpoint.cpp @@ -168,7 +168,7 @@ void CTeamsProto::SendPresence() void CTeamsProto::OnStatusChanged(MHttpResponse *response, AsyncHttpRequest*) { - if (response == nullptr || response->resultCode != 201) { + if (response == nullptr || response->resultCode != 200) { debugLogA(__FUNCTION__ ": failed to change status"); ProtoBroadcastAck(NULL, ACKTYPE_LOGIN, ACKRESULT_FAILED, NULL, 1001); SetStatus(ID_STATUS_OFFLINE); @@ -182,33 +182,29 @@ void CTeamsProto::OnStatusChanged(MHttpResponse *response, AsyncHttpRequest*) void CTeamsProto::SetServerStatus(int iStatus) { - auto *pReq = new AsyncHttpRequest(REQUEST_PUT, HOST_PRESENCE, "/me/endpoints", &CTeamsProto::OnStatusChanged); - - const char *pszAvailability, *pszActivity; + const char *pszAvailability; switch (iStatus) { case ID_STATUS_OFFLINE: - pszAvailability = pszActivity = "Offline"; + pszAvailability = "Offline"; break; case ID_STATUS_NA: case ID_STATUS_AWAY: - pszAvailability = pszActivity = "Away"; + pszAvailability = "Away"; break; case ID_STATUS_DND: pszAvailability = "DoNotDisturb"; - pszActivity = "Presenting"; break; case ID_STATUS_OCCUPIED: pszAvailability = "Busy"; - pszActivity = "InACall"; break; default: - pszAvailability = pszActivity = "Available"; + pszAvailability = "Available"; } JSONNode node(JSON_NODE); - node << CHAR_PARAM("id", m_szEndpoint) << CHAR_PARAM("availability", pszAvailability) - << CHAR_PARAM("activity", pszActivity) << CHAR_PARAM("activityReporting", "Transport") << CHAR_PARAM("deviceType", "Desktop"); - pReq->m_szParam = node.write().c_str(); + node << CHAR_PARAM("availability", pszAvailability); + auto *pReq = new AsyncHttpRequest(REQUEST_PUT, HOST_PRESENCE, "/me/forceavailability", &CTeamsProto::OnStatusChanged); + pReq->m_szParam = node.write().c_str(); PushRequest(pReq); } diff --git a/protocols/Teams/src/teams_proto.cpp b/protocols/Teams/src/teams_proto.cpp index 4744e9f9a4..16f2b6b0db 100644 --- a/protocols/Teams/src/teams_proto.cpp +++ b/protocols/Teams/src/teams_proto.cpp @@ -117,8 +117,7 @@ INT_PTR CTeamsProto::GetCaps(int type, MCONTACT) return PF1_IM | PF1_AUTHREQ | PF1_CHAT | PF1_BASICSEARCH | PF1_MODEMSG | PF1_FILE | PF1_SERVERCLIST; case PFLAGNUM_2: case PFLAGNUM_3: - // return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; - return PF2_ONLINE; + return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; case PFLAGNUM_4: return PF4_NOAUTHDENYREASON | PF4_SUPPORTTYPING | PF4_AVATARS | PF4_IMSENDOFFLINE | PF4_OFFLINEFILES | PF4_SERVERMSGID | PF4_SERVERFORMATTING; case PFLAG_UNIQUEIDTEXT: @@ -222,9 +221,6 @@ int CTeamsProto::SetStatus(int iNewStatus) if (iNewStatus == m_iDesiredStatus) return 0; - if (iNewStatus != ID_STATUS_OFFLINE) - iNewStatus = ID_STATUS_ONLINE; - debugLogA(__FUNCTION__ ": changing status from %i to %i", m_iStatus, iNewStatus); int old_status = m_iStatus; diff --git a/protocols/Teams/src/teams_proto.h b/protocols/Teams/src/teams_proto.h index 939f6db0a0..7cf8952023 100644 --- a/protocols/Teams/src/teams_proto.h +++ b/protocols/Teams/src/teams_proto.h @@ -362,6 +362,7 @@ private: void ProcessConversationUpdate(const JSONNode &node); void __cdecl GatewayThread(void *); + void GatewayThreadWorker(); void TRouterSendJson(const char *szName, const JSONNode *node = 0); void TRouterSendJson(const JSONNode &node); diff --git a/protocols/Teams/src/teams_trouter.cpp b/protocols/Teams/src/teams_trouter.cpp index e602724c68..a969d35bfe 100644 --- a/protocols/Teams/src/teams_trouter.cpp +++ b/protocols/Teams/src/teams_trouter.cpp @@ -87,6 +87,12 @@ void CTeamsProto::StopTrouter() void CTeamsProto::GatewayThread(void *) { + while (!m_isTerminated) + GatewayThreadWorker(); +} + +void CTeamsProto::GatewayThreadWorker() +{ m_ws = nullptr; MHttpHeaders headers; @@ -108,7 +114,7 @@ void CTeamsProto::GatewayThread(void *) else debugLogA("websocket connection failed: %d", pReply->resultCode); } else debugLogA("websocket connection failed"); - + StopTrouter(); } |