[prev in list] [next in list] [prev in thread] [next in thread] 

List:       licq-cvs
Subject:    [Licq-cvs] msn/src
From:       Jon Keating <emostar () users ! sourceforge ! net>
Date:       2004-05-09 11:24:17
Message-ID: E1BMmPp-0004hC-GB () sc8-pr-cvs1 ! sourceforge ! net
[Download RAW message or body]

Update of /cvsroot/licq/msn/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17670

Modified Files:
	msn.cpp msn.h msnpacket.cpp msnpacket.h 
Log Message:
Support changing your status.


Index: msn.cpp
===================================================================
RCS file: /cvsroot/licq/msn/src/msn.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- msn.cpp	7 May 2004 15:30:18 -0000	1.17
+++ msn.cpp	9 May 2004 11:24:14 -0000	1.18
@@ -288,6 +288,12 @@
     }
     
     case PROTOxCHANGE_STATUS:
+    {
+      CChangeStatusSignal *sig = static_cast<CChangeStatusSignal *>(s);
+      MSNChangeStatus(sig->Status());
+      break;
+    }
+    
     case PROTOxLOGOFF:
     case PROTOxADD_USER:
     case PROTOxREM_USER:
@@ -588,7 +594,18 @@
       m_pPacketBuf->SkipParameter();
       string strVersion = m_pPacketBuf->GetParameter();
       
-      pReply = new CPS_MSNChangeStatus();
+      pReply = new CPS_MSNChangeStatus(ICQ_STATUS_ONLINE);
+      SendPacket(pReply);
+      
+      // Send our local list now
+      FOR_EACH_PROTO_USER_START(MSN_PPID, LOCK_R)
+      {
+        pReply = new CPS_MSNAddUser(pUser->IdString());
+        SendPacket(pReply);
+      }
+      FOR_EACH_PROTO_USER_END
+      
+      pReply = 0;
     }
     else if (strCmd == "LST")
     {
@@ -602,15 +619,21 @@
     }
     else if (strCmd == "CHG")
     {
-      // Send our local list now
-      FOR_EACH_PROTO_USER_START(MSN_PPID, LOCK_R)
-      {
-        pReply = new CPS_MSNAddUser(pUser->IdString());
-        SendPacket(pReply);
-      }
-      FOR_EACH_PROTO_USER_END
+      string strStatus = m_pPacketBuf->GetParameter();
+      ICQUser *o = gUserManager.FetchOwner(MSN_PPID, LOCK_W);
+      unsigned long nStatus;
       
-      pReply = 0;
+      if (strStatus == "NLN")
+        nStatus = ICQ_STATUS_ONLINE;
+      else if (strStatus == "BSY")
+        nStatus = ICQ_STATUS_DND;
+      else if (strStatus == "HDN")
+        nStatus = ICQ_STATUS_ONLINE | ICQ_STATUS_FxPRIVATE;
+      else
+        nStatus = ICQ_STATUS_AWAY;
+        
+      m_pDaemon->ChangeUserStatus(o, nStatus);
+      gUserManager.DropOwner(MSN_PPID);
     }
     else if (strCmd == "ILN" || strCmd == "NLN")
     {
@@ -879,6 +902,11 @@
   }  
 }
 
+void CMSN::MSNChangeStatus(unsigned long _nStatus)
+{
+  CMSNPacket *pSend = new CPS_MSNChangeStatus(_nStatus);
+  SendPacket(pSend);
+}
 
 void CMSN::MSNPing()
 {

Index: msn.h
===================================================================
RCS file: /cvsroot/licq/msn/src/msn.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- msn.h	13 Mar 2004 11:02:08 -0000	1.8
+++ msn.h	9 May 2004 11:24:14 -0000	1.9
@@ -83,8 +83,8 @@
   bool MSNSBConnectAnswer(string &, string &, string &, string &);
   
   void MSNSendMessage(char *, char *, pthread_t);
+  void MSNChangeStatus(unsigned long);
  
-
   
   // Internal functions
   int HashValue(int n) { return n % 211; }

Index: msnpacket.cpp
===================================================================
RCS file: /cvsroot/licq/msn/src/msnpacket.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- msnpacket.cpp	13 Mar 2004 11:02:08 -0000	1.10
+++ msnpacket.cpp	9 May 2004 11:24:14 -0000	1.11
@@ -161,13 +161,39 @@
   m_pBuffer->Pack("\r\n", 2);
 }
 
-CPS_MSNChangeStatus::CPS_MSNChangeStatus() : CMSNPacket()
+CPS_MSNChangeStatus::CPS_MSNChangeStatus(unsigned long _nStatus) : CMSNPacket()
 {
   m_szCommand = strdup("CHG");
-  char szParams[] = "NLN 268435500";
-  m_nSize += strlen(szParams);
+  char szParams[] = " 268435500";
+  m_nSize += strlen(szParams) + 3;
   InitBuffer();
   
+  char szStatus[4];
+  
+  if (_nStatus & ICQ_STATUS_FxPRIVATE)
+    strcpy(szStatus, "HDN");
+  else
+  {
+    switch (_nStatus & 0x0000FFFF)
+    {
+      case ICQ_STATUS_ONLINE:
+      case ICQ_STATUS_FREEFORCHAT:
+        strcpy(szStatus, "NLN");
+        break;
+      
+      case ICQ_STATUS_OCCUPIED:
+      case ICQ_STATUS_DND:
+        strcpy(szStatus, "BSY");
+        break;
+      
+      default:
+        strcpy(szStatus, "AWY");
+        break;
+    } 
+  }
+  szStatus[3] = '\0';
+  
+  m_pBuffer->Pack(szStatus, strlen(szStatus));
   m_pBuffer->Pack(szParams, strlen(szParams));
   m_pBuffer->Pack("\r\n", 2);
 }

Index: msnpacket.h
===================================================================
RCS file: /cvsroot/licq/msn/src/msnpacket.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- msnpacket.h	13 Mar 2004 11:02:08 -0000	1.8
+++ msnpacket.h	9 May 2004 11:24:14 -0000	1.9
@@ -116,7 +116,7 @@
 class CPS_MSNChangeStatus : public CMSNPacket
 {
 public:
-  CPS_MSNChangeStatus();
+  CPS_MSNChangeStatus(unsigned long);
 };
 
 class CPS_MSNSync : public CMSNPacket



-------------------------------------------------------
This SF.Net email is sponsored by Sleepycat Software
Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to 
deliver higher performing products faster, at low TCO.
http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3
_______________________________________________
Licq-cvs mailing list
Licq-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/licq-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic