[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-27 7:32:36
Message-ID: E1BTFNU-0008AT-9v () 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-serv31154

Modified Files:
	msn.cpp msn.h msnpacket.cpp msnpacket.h 
Log Message:
* Start using a basic config file (internal use only at the moment)
* Support authorizing users to add you to their buddy list.  Fixes the problem of \
                always being offline to them.
* Add users


Index: msn.cpp
===================================================================
RCS file: /cvsroot/licq/msn/src/msn.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- msn.cpp	19 May 2004 14:30:58 -0000	1.21
+++ msn.cpp	27 May 2004 07:32:16 -0000	1.22
@@ -43,6 +43,24 @@
   m_pPacketBuf = 0;
   m_szUserName = 0;
   m_szPassword = 0;
+  
+  // Config file
+  char szFileName[MAX_FILENAME_LEN];
+  sprintf(szFileName, "%s/licq_msn.conf", BASE_DIR);
+  CIniFile msnConf;
+  if (!msnConf.LoadFile(szFileName))
+  {
+    FILE *f = fopen(szFileName, "w");
+    fprintf(f, "[network]");
+    fclose(f);
+    msnConf.LoadFile(szFileName);
+  }  
+  
+  msnConf.SetSection("network");
+  
+  msnConf.ReadNum("ListVersion", m_nListVersion, 0);
+  
+  msnConf.CloseFile();
 }
 
 CMSN::~CMSN()
@@ -53,6 +71,19 @@
     free(m_szUserName);
   if (m_szPassword)
     free(m_szPassword);
+    
+  // Config file
+  char szFileName[MAX_FILENAME_LEN];
+  sprintf(szFileName, "%s/licq_msn.conf", BASE_DIR);
+  CIniFile msnConf;
+  if (msnConf.LoadFile(szFileName))
+  {
+    msnConf.SetSection("network");
+    
+    msnConf.WriteNum("ListVersion", m_nListVersion);
+    msnConf.FlushFile();
+    msnConf.CloseFile();
+  }
 }
 
 void CMSN::StorePacket(SBuffer *_pBuf, int _nSock)
@@ -295,8 +326,21 @@
     }
     
     case PROTOxLOGOFF:
+    {
+      break;
+    }
+    
     case PROTOxADD_USER:
+    {
+      CAddUserSignal *sig = static_cast<CAddUserSignal *>(s);
+      MSNAddUser(sig->Id());
+      break;
+    }
+    
     case PROTOxREM_USER:
+    {
+      break;
+    }
     
     case PROTOxSENDxTYPING_NOTIFICATION:
     {
@@ -313,6 +357,13 @@
       MSNSendMessage(sig->Id(), sig->Message(), sig->Thread());
       break;
     }
+
+    case PROTOxSENDxGRANTxAUTH:
+    {
+      CGrantAuthSignal *sig = static_cast<CGrantAuthSignal *>(s);
+      MSNGrantAuth(sig->Id());
+      break;
+    }
   }
 }
 
@@ -386,7 +437,7 @@
     {
       packet->SkipParameter(); // Seq
       packet->SkipParameter(); // current user to add
-      packet->SkipParameter(); // total usrers in conversation
+      packet->SkipParameter(); // total users in conversation
       string strUser = packet->GetParameter();
       
       gLog.Info("%s%s joined the conversation.\n", L_MSNxSTR, strUser.c_str());
@@ -598,7 +649,7 @@
         string strNick = m_pPacketBuf->GetParameter();
         gLog.Info("%s%s logged in.\n", L_MSNxSTR, strNick.c_str());
         
-        pReply = new CPS_MSNSync();
+        pReply = new CPS_MSNSync(m_nListVersion);
       }
       else
       {
@@ -620,17 +671,18 @@
     {
       m_pPacketBuf->SkipParameter();
       string strVersion = m_pPacketBuf->GetParameter();
+      m_nListVersion = atol(strVersion.c_str());
       
       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
+      //FOR_EACH_PROTO_USER_START(MSN_PPID, LOCK_R)
+      //{
+      //  pReply = new CPS_MSNAddUser(pUser->IdString());
+      //  SendPacket(pReply);
+      //}
+      //FOR_EACH_PROTO_USER_END
       
       pReply = 0;
     }
@@ -638,12 +690,37 @@
     {
       // Add user
       string strUser = m_pPacketBuf->GetParameter();
-      m_pDaemon->AddUserToList(strUser.c_str(), MSN_PPID);
+      if (!gUserManager.IsOnList(strUser.c_str(), MSN_PPID))
+        m_pDaemon->AddUserToList(strUser.c_str(), MSN_PPID);
     }
     else if (strCmd == "LSG")
     {
       // Add group
     }
+    else if (strCmd == "ADD")
+    {
+      m_pPacketBuf->SkipParameter(); // What's this?
+      string strList = m_pPacketBuf->GetParameter();
+      m_pPacketBuf->SkipParameter(); // What's this?
+      string strUser = m_pPacketBuf->GetParameter();
+      string strNick = m_pPacketBuf->GetParameter();
+      
+      if (strList == "RL")
+      {
+        CUserEvent *e = new CEventAuthRequest(strUser.c_str(), MSN_PPID,
+          strNick.c_str(), "", "", "", "", ICQ_CMDxRCV_SYSxMSGxONLINE, time(0), 0);
+      
+        ICQOwner *o = gUserManager.FetchOwner(MSN_PPID, LOCK_W);
+        if (m_pDaemon->AddUserEvent(o, e))
+        {
+          gUserManager.DropOwner(MSN_PPID);
+          e->AddToHistory(NULL, D_RECEIVER);
+          m_pDaemon->m_xOnEventManager.Do(ON_EVENT_SYSMSG, NULL);
+        }
+        else
+          gUserManager.DropOwner(MSN_PPID);
+      }
+    }
     else if (strCmd == "CHG")
     {
       string strStatus = m_pPacketBuf->GetParameter();
@@ -966,6 +1043,18 @@
   SendPacket(pSend);
 }
 
+void CMSN::MSNAddUser(char *szUser)
+{
+  CMSNPacket *pSend = new CPS_MSNAddUser(szUser, CONTACT_LIST);
+  SendPacket(pSend);
+}
+
+void CMSN::MSNGrantAuth(char *szUser)
+{
+  CMSNPacket *pSend = new CPS_MSNAddUser(szUser, ALLOW_LIST);
+  SendPacket(pSend);
+}
+
 void CMSN::MSNPing()
 {
   CMSNPacket *pSend = new CPS_MSNPing();

Index: msn.h
===================================================================
RCS file: /cvsroot/licq/msn/src/msn.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- msn.h	9 May 2004 14:48:32 -0000	1.10
+++ msn.h	27 May 2004 07:32:16 -0000	1.11
@@ -28,6 +28,10 @@
 #define MSN_PPID 0x4D534E5F
 #define L_MSNxSTR "[MSN] "
 
+const char CONTACT_LIST[] = "FL";
+const char ALLOW_LIST[] = "AL";
+const char BLOCK_LIST[] = "BL";
+
 #include <string>
 #include <list>
 #include <vector>
@@ -86,7 +90,8 @@
   void MSNSendMessage(char *, char *, pthread_t);
   void MSNSendTypingNotification(char *);
   void MSNChangeStatus(unsigned long);
-  
+  void MSNAddUser(char *);
+  void MSNGrantAuth(char *);
   
   // Internal functions
   int HashValue(int n) { return n % 211; }
@@ -94,7 +99,10 @@
   void RemovePacket(string, int);
   SBuffer *RetrievePacket(string, int);
   ICQEvent *RetrieveEvent(unsigned long);
-  
+
+  // Config
+  unsigned long m_nListVersion;
+    
   // Variables
   CICQDaemon *m_pDaemon;
   bool m_bExit;

Index: msnpacket.cpp
===================================================================
RCS file: /cvsroot/licq/msn/src/msnpacket.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- msnpacket.cpp	9 May 2004 14:48:32 -0000	1.12
+++ msnpacket.cpp	27 May 2004 07:32:16 -0000	1.13
@@ -199,14 +199,15 @@
   m_pBuffer->Pack("\r\n", 2);
 }
 
-CPS_MSNSync::CPS_MSNSync() : CMSNPacket()
+CPS_MSNSync::CPS_MSNSync(unsigned long nVersion) : CMSNPacket()
 {
   m_szCommand = strdup("SYN");
-  char szParams[] = "0";
-  m_nSize += 1;
+  char szParams[15];
+  int nSize = sprintf(szParams, "%lu", nVersion);
+  m_nSize += nSize;
   InitBuffer();
   
-  m_pBuffer->Pack(szParams, 1);
+  m_pBuffer->Pack(szParams, nSize);
   m_pBuffer->Pack("\r\n", 2);
 }
 
@@ -245,16 +246,18 @@
   m_pBuffer->Pack("\r\n", 2);
 }
 
-CPS_MSNAddUser::CPS_MSNAddUser(const char *szUser) : CMSNPacket()
+CPS_MSNAddUser::CPS_MSNAddUser(const char *szUser, const char *szList)
+  : CMSNPacket()
 {
   m_szCommand = strdup("ADD");
-  char szParams[] = "FL ";
-  m_nSize += strlen(szParams) + (strlen(szUser) * 2) + 1;
+  m_nSize += strlen(szList) + (strlen(szUser) * 2) + 2;
   InitBuffer();
   
   m_szUser = strdup(szUser);
+  m_szList = strdup(szList);
   
-  m_pBuffer->Pack(szParams, strlen(szParams));
+  m_pBuffer->Pack(m_szList, strlen(m_szList));
+  m_pBuffer->Pack(" ", 1);
   m_pBuffer->Pack(m_szUser, strlen(m_szUser));
   m_pBuffer->Pack(" ", 1);
   m_pBuffer->Pack(m_szUser, strlen(m_szUser));

Index: msnpacket.h
===================================================================
RCS file: /cvsroot/licq/msn/src/msnpacket.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- msnpacket.h	9 May 2004 14:48:32 -0000	1.10
+++ msnpacket.h	27 May 2004 07:32:16 -0000	1.11
@@ -123,7 +123,7 @@
 class CPS_MSNSync : public CMSNPacket
 {
 public:
-  CPS_MSNSync();
+  CPS_MSNSync(unsigned long);
 };
 
 class CPS_MSNChallenge : public CMSNPacket
@@ -141,11 +141,12 @@
 class CPS_MSNAddUser : public CMSNPacket
 {
 public:
-  CPS_MSNAddUser(const char *);
-  virtual ~CPS_MSNAddUser() { if (m_szUser) free(m_szUser); }
+  CPS_MSNAddUser(const char *, const char *szList);
+  virtual ~CPS_MSNAddUser() { if (m_szUser) free(m_szUser); if (m_szList) \
free(m_szList); }  
 protected:
   char *m_szUser;
+  char *m_szList;
 };
 
 class CPS_MSN_SBStart : public CMSNPacket



-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
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