Hi, All
In 15 Feb 2002 Yip, Wai Peng ([EMAIL PROTECTED]) send bugreport, that
licq crash then search for a new user by UIN. This patch seems fix this
problem and searching by UIN work correctly now.
P.S. This and other my patches you can find at
ftp://heaven.kiyavia.crimea.ua/pub/patches/licq/latest/
SergK.
diff -urN licq/include/licq_packets.h licq-sk8/include/licq_packets.h
--- licq/include/licq_packets.h Mon Jan 28 11:22:28 2002
+++ licq-sk8/include/licq_packets.h Fri Feb 15 10:29:55 2002
@@ -340,10 +340,12 @@
//-----SearchByUin--------------------------------------------------------------
-class CPU_SearchByUin : public CPacketUdp
+class CPU_SearchByUin : public CPU_CommonFamily
{
public:
CPU_SearchByUin(unsigned long nUin);
+protected:
+ unsigned long m_nMetaCommand;
};
diff -urN licq/src/icqd-srv.cpp licq-sk8/src/icqd-srv.cpp
--- licq/src/icqd-srv.cpp Mon Jan 28 11:22:29 2002
+++ licq-sk8/src/icqd-srv.cpp Fri Feb 15 10:29:15 2002
@@ -200,6 +200,17 @@
return e->EventId();
}
+//-----icqSearchByUin-----------------------------------------------------------
+unsigned long CICQDaemon::icqSearchByUin(unsigned long nUin)
+{
+ CPU_SearchByUin *p = new CPU_SearchByUin(nUin);
+ gLog.Info("%sStarting search by uin for user (#%ld/#%d)...\n", L_SRVxSTR,
+ p->Sequence(), p->SubSequence());
+ ICQEvent *e = SendExpectEvent_Server(0, p, NULL);
+ PushExtendedEvent(e);
+ return e->EventId();
+}
+
//-----icqSearchByInfo-----------------------------------------------------------
unsigned long CICQDaemon::icqSearchByInfo(const char *nick, const char *first,
const char *last, const char *email)
diff -urN licq/src/icqpacket.cpp licq-sk8/src/icqpacket.cpp
--- licq/src/icqpacket.cpp Mon Jan 28 11:22:29 2002
+++ licq-sk8/src/icqpacket.cpp Fri Feb 15 10:29:20 2002
@@ -1149,17 +1149,25 @@
buffer->Pack(szEmail, nLenEmail);
}
+
//-----SearchByUin--------------------------------------------------------------
CPU_SearchByUin::CPU_SearchByUin(unsigned long nUin)
- : CPacketUdp(ICQ_CMDxSND_SEARCHxUIN)
+ : CPU_CommonFamily(ICQ_SNACxFAM_VARIOUS, ICQ_SNACxSEARCH)
{
+ m_nMetaCommand = 0x1F05;
- m_nSize += 6;
+ int packetSize = 2+2+2+4+2+2+2+4;
+ m_nSize += packetSize;
InitBuffer();
-#if ICQ_VERSION == 2
- buffer->PackUnsignedShort(m_nSubSequence);
-#endif
+ buffer->PackUnsignedShortBE(1);
+ buffer->PackUnsignedShortBE(packetSize-2-2); // TLV 1
+
+ buffer->PackUnsignedShort(packetSize-2-2-2); // bytes remaining
+ buffer->PackUnsignedLong(gUserManager.OwnerUin());
+ buffer->PackUnsignedShortBE(0xD007); // type
+ buffer->PackUnsignedShortBE(m_nSubSequence);
+ buffer->PackUnsignedShortBE(0x1F05); // subtype
buffer->PackUnsignedLong(nUin);
}