[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 14:48:36
Message-ID: E1BMpbY-00079G-1w () 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-serv27416

Modified Files:
	msn.cpp msn.h msnpacket.cpp msnpacket.h 
Log Message:
Send typing notification for MSN.


Index: msn.cpp
===================================================================
RCS file: /cvsroot/licq/msn/src/msn.cpp,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- msn.cpp	9 May 2004 11:24:14 -0000	1.18
+++ msn.cpp	9 May 2004 14:48:32 -0000	1.19
@@ -297,9 +297,16 @@
     case PROTOxLOGOFF:
     case PROTOxADD_USER:
     case PROTOxREM_USER:
+    
     case PROTOxSENDxTYPING_NOTIFICATION:
+    {
+      CTypingNotificationSignal *sig =
+        static_cast<CTypingNotificationSignal *>(s);
+      if (sig->Active())
+        MSNSendTypingNotification(sig->Id());
       break;
-
+    }
+    
     case PROTOxSENDxMSG:
     {
       CSendMessageSignal *sig = static_cast<CSendMessageSignal *>(s);
@@ -476,7 +483,15 @@
       
       if (pStart)
       {
-        MSNSendMessage(pStart->m_szUser, pStart->m_szMsg, pStart->m_tPlugin);
+        if (pStart->m_pEvent)
+          m_pEvents.push_back(pStart->m_pEvent);
+        if (pStart->m_pSignal)
+          m_pDaemon->PushPluginSignal(pStart->m_pSignal);
+        
+        string strUser(pStart->m_szUser);
+        Send_SB_Packet(strUser, pStart->m_pPacket, false);
+        
+        free(pStart->m_szUser);
         delete pStart;
       }
     }
@@ -873,16 +888,16 @@
   int nSockDesc = u->SocketDesc(ICQ_CHNxNONE);
   gUserManager.DropUser(u);
   
+  CMSNPacket *pSend = new CPS_MSNMessage(_szMsg);
+  CEventMsg *m = new CEventMsg(_szMsg, 0, TIME_NOW, 0);
+  m->m_eDir = D_SENDER;
+  ICQEvent *e = new ICQEvent(m_pDaemon, 0, pSend, CONNECT_SERVER, strdup(_szUser), MSN_PPID, m);
+  e->thread_plugin = _tPlugin;  
+  CICQSignal *s = new CICQSignal(SIGNAL_EVENTxID, 0, strdup(_szUser), MSN_PPID, e->EventId());
+  
   if (nSockDesc > 0)
   {
-    CMSNPacket *pSend = new CPS_MSNMessage(_szMsg);
-    CEventMsg *m = new CEventMsg(_szMsg, 0, TIME_NOW, 0);
-    m->m_eDir = D_SENDER;
-    ICQEvent *e = new ICQEvent(m_pDaemon, 0, pSend, CONNECT_SERVER, strdup(_szUser), MSN_PPID, m);
     m_pEvents.push_back(e);
-    
-    CICQSignal *s = new CICQSignal(SIGNAL_EVENTxID, 0, strdup(_szUser), MSN_PPID, e->EventId());
-    e->thread_plugin = _tPlugin;
     m_pDaemon->PushPluginSignal(s);
       
     Send_SB_Packet(strUser, pSend, false);
@@ -890,18 +905,47 @@
   else
   {
     // Must connect to the SB and call the user
-    CMSNPacket *pSend = new CPS_MSNXfr();
+    CMSNPacket *pSB = new CPS_MSNXfr();
       
     SStartMessage *p = new SStartMessage;
+    p->m_pPacket = pSend;
+    p->m_pEvent = e;
+    p->m_pSignal = s;
     p->m_szUser = strdup(_szUser);
-    p->m_szMsg = strdup(_szMsg);
-    p->m_tPlugin = _tPlugin;
     m_lStart.push_back(p);
    
-    SendPacket(pSend);
+    SendPacket(pSB);
   }  
 }
 
+void CMSN::MSNSendTypingNotification(char *_szUser)
+{
+  ICQUser *u = gUserManager.FetchUser(_szUser, MSN_PPID, LOCK_R);
+  if (!u) return;
+  int nSockDesc = u->SocketDesc(ICQ_CHNxNONE);
+  gUserManager.DropUser(u);
+  
+  string strUser(_szUser);
+  CMSNPacket *pSend = new CPS_MSNTypingNotification(m_szUserName);
+    
+  if (nSockDesc > 0)
+    Send_SB_Packet(strUser, pSend, false);
+  else
+  {
+    // Must connect to the SB and call the user
+    CMSNPacket *pSB = new CPS_MSNXfr();
+      
+    SStartMessage *p = new SStartMessage;
+    p->m_pPacket = pSend;
+    p->m_pEvent = 0;
+    p->m_pSignal = 0;
+    p->m_szUser = strdup(_szUser);
+    m_lStart.push_back(p);
+   
+    SendPacket(pSB);    
+  }
+}
+
 void CMSN::MSNChangeStatus(unsigned long _nStatus)
 {
   CMSNPacket *pSend = new CPS_MSNChangeStatus(_nStatus);

Index: msn.h
===================================================================
RCS file: /cvsroot/licq/msn/src/msn.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- msn.h	9 May 2004 11:24:14 -0000	1.9
+++ msn.h	9 May 2004 14:48:32 -0000	1.10
@@ -49,9 +49,10 @@
 
 struct SStartMessage
 {
+  CMSNPacket *m_pPacket;
+  ICQEvent *m_pEvent;
+  CICQSignal *m_pSignal;
   char *m_szUser;
-  char *m_szMsg;
-  pthread_t m_tPlugin;
 };
 
 typedef list<SStartMessage *> StartList;
@@ -83,8 +84,9 @@
   bool MSNSBConnectAnswer(string &, string &, string &, string &);
   
   void MSNSendMessage(char *, char *, pthread_t);
+  void MSNSendTypingNotification(char *);
   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.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- msnpacket.cpp	9 May 2004 11:24:14 -0000	1.11
+++ msnpacket.cpp	9 May 2004 14:48:32 -0000	1.12
@@ -54,7 +54,7 @@
   m_pBuffer->Pack(buf, strlen(buf));
 }
 
-CMSNPayloadPacket::CMSNPayloadPacket() : CMSNPacket()
+CMSNPayloadPacket::CMSNPayloadPacket(bool _bAck) : CMSNPacket(), m_bAck(_bAck)
 {
   m_nPayloadSize = 0;
 }
@@ -65,7 +65,8 @@
     return;
   char buf[32];
   
-  m_nSize = snprintf(buf, 32, "%s %lu A %lu\r\n", m_szCommand, m_nSequence, m_nPayloadSize);
+  m_nSize = snprintf(buf, 32, "%s %lu %c %lu\r\n", m_szCommand, m_nSequence,
+    m_bAck ? 'A' : 'N', m_nPayloadSize);
   m_nSize += m_nPayloadSize;
   
   m_pBuffer = new CMSNBuffer(m_nSize);
@@ -296,7 +297,7 @@
   m_pBuffer->Pack("\r\n", 2);
 }
 
-CPS_MSNMessage::CPS_MSNMessage(const char *szMsg) : CMSNPayloadPacket()
+CPS_MSNMessage::CPS_MSNMessage(const char *szMsg) : CMSNPayloadPacket(true)
 {
   m_szCommand = strdup("MSG");
   char szParams[] = "MIME-Version: 1.0\r\n"
@@ -341,3 +342,20 @@
   m_pBuffer->Pack(m_szUser, strlen(m_szUser));
   m_pBuffer->Pack("\r\n", 2);
 }
+
+CPS_MSNTypingNotification::CPS_MSNTypingNotification(const char *szEmail)
+  : CMSNPayloadPacket(false)
+{
+  m_szCommand = strdup("MSG");
+  char szParams1[] = "MIME-Version: 1.0\r\n"
+    "Content-Type: text/x-msmsgscontrol\r\n"
+    "TypingUser: ";
+  char szParams2[] = "\r\n\r\n\r\n";    
+  m_nPayloadSize = strlen(szParams1) + strlen(szParams2) +
+    strlen(szEmail);
+  CMSNPayloadPacket::InitBuffer();  
+
+  m_pBuffer->Pack(szParams1, strlen(szParams1));
+  m_pBuffer->Pack(szEmail, strlen(szEmail));
+  m_pBuffer->Pack(szParams2, strlen(szParams2));
+}

Index: msnpacket.h
===================================================================
RCS file: /cvsroot/licq/msn/src/msnpacket.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- msnpacket.h	9 May 2004 11:24:14 -0000	1.9
+++ msnpacket.h	9 May 2004 14:48:32 -0000	1.10
@@ -57,7 +57,7 @@
 class CMSNPayloadPacket : public CMSNPacket
 {
 public:
-  CMSNPayloadPacket();
+  CMSNPayloadPacket(bool);
   virtual ~CMSNPayloadPacket() { }
   
   void InitBuffer();
@@ -65,6 +65,7 @@
 protected:
 
   unsigned long m_nPayloadSize;
+  bool m_bAck;
 };
 
 class CPS_MSNVersion : public CMSNPacket
@@ -207,5 +208,11 @@
   char *m_szUser;
 };
 
+class CPS_MSNTypingNotification : public CMSNPayloadPacket
+{
+public:
+  CPS_MSNTypingNotification(const char *);
+};
+
 #endif // __MSNPACKET_H
 



-------------------------------------------------------
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