[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