summaryrefslogtreecommitdiff
path: root/protocols/WhatsAppWeb
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/WhatsAppWeb')
-rw-r--r--protocols/WhatsAppWeb/src/proto.cpp25
-rw-r--r--protocols/WhatsAppWeb/src/proto.h1
-rw-r--r--protocols/WhatsAppWeb/src/server.cpp10
3 files changed, 19 insertions, 17 deletions
diff --git a/protocols/WhatsAppWeb/src/proto.cpp b/protocols/WhatsAppWeb/src/proto.cpp
index 8e94628b92..c29a7d60d9 100644
--- a/protocols/WhatsAppWeb/src/proto.cpp
+++ b/protocols/WhatsAppWeb/src/proto.cpp
@@ -118,7 +118,7 @@ INT_PTR WhatsAppProto::GetCaps(int type, MCONTACT)
case PFLAGNUM_1:
return PF1_IM | PF1_FILE | PF1_CHAT | PF1_BASICSEARCH | PF1_ADDSEARCHRES | PF1_MODEMSGRECV;
case PFLAGNUM_2:
- return PF2_ONLINE | PF2_INVISIBLE;
+ return PF2_ONLINE;
case PFLAGNUM_3:
return 0;
case PFLAGNUM_4:
@@ -141,22 +141,20 @@ int WhatsAppProto::SetStatus(int new_status)
// Routing statuses not supported by WhatsApp
switch (new_status) {
- case ID_STATUS_INVISIBLE:
case ID_STATUS_OFFLINE:
m_iDesiredStatus = new_status;
break;
case ID_STATUS_ONLINE:
case ID_STATUS_FREECHAT:
- m_iDesiredStatus = ID_STATUS_ONLINE;
- break;
-
default:
- m_iDesiredStatus = ID_STATUS_INVISIBLE;
+ m_iDesiredStatus = ID_STATUS_ONLINE;
break;
}
if (m_iDesiredStatus == ID_STATUS_OFFLINE) {
+ SetServerStatus(m_iDesiredStatus);
+
if (m_hServerConn != nullptr)
Netlib_Shutdown(m_hServerConn);
@@ -170,17 +168,10 @@ int WhatsAppProto::SetStatus(int new_status)
ForkThread(&WhatsAppProto::ServerThread);
}
else if (m_hServerConn != nullptr) {
- if (m_iDesiredStatus == ID_STATUS_ONLINE) {
- // m_pConn->sendAvailableForChat();
- m_iStatus = ID_STATUS_ONLINE;
- ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus);
- }
- else if (m_iStatus == ID_STATUS_ONLINE && m_iDesiredStatus == ID_STATUS_INVISIBLE) {
- // m_pConn->sendClose();
- m_iStatus = ID_STATUS_INVISIBLE;
- setAllContactStatuses(ID_STATUS_OFFLINE);
- ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus);
- }
+ SetServerStatus(m_iDesiredStatus);
+
+ m_iStatus = m_iDesiredStatus;
+ ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus);
}
else ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)oldStatus, m_iStatus);
diff --git a/protocols/WhatsAppWeb/src/proto.h b/protocols/WhatsAppWeb/src/proto.h
index ff1d4fe18e..14ef70bd94 100644
--- a/protocols/WhatsAppWeb/src/proto.h
+++ b/protocols/WhatsAppWeb/src/proto.h
@@ -195,6 +195,7 @@ class WhatsAppProto : public PROTO<WhatsAppProto>
void ShutdownSession(void);
void SendKeepAlive();
+ void SetServerStatus(int iStatus);
/// Request handlers ///////////////////////////////////////////////////////////////////
diff --git a/protocols/WhatsAppWeb/src/server.cpp b/protocols/WhatsAppWeb/src/server.cpp
index cf53d72896..1ac49b6037 100644
--- a/protocols/WhatsAppWeb/src/server.cpp
+++ b/protocols/WhatsAppWeb/src/server.cpp
@@ -231,6 +231,8 @@ void WhatsAppProto::OnLoggedIn()
{
debugLogA("WhatsAppProto::OnLoggedIn");
+ SetServerStatus(m_iDesiredStatus);
+
ProtoBroadcastAck(0, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)m_iStatus, m_iDesiredStatus);
m_iStatus = m_iDesiredStatus;
@@ -269,6 +271,14 @@ void WhatsAppProto::SendKeepAlive()
}
}
+void WhatsAppProto::SetServerStatus(int iStatus)
+{
+ WANode iq("presence");
+ iq << CHAR_PARAM("name", getMStringA("Nick")) << CHAR_PARAM("type", (iStatus == ID_STATUS_ONLINE) ? "available" : "unavailable");
+ WSSendNode(iq);
+}
+
+
/////////////////////////////////////////////////////////////////////////////////////////
void WhatsAppProto::ShutdownSession()