summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--protocols/Teams/src/teams_endpoint.cpp20
-rw-r--r--protocols/Teams/src/teams_proto.cpp6
-rw-r--r--protocols/Teams/src/teams_proto.h1
-rw-r--r--protocols/Teams/src/teams_trouter.cpp8
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();
}