diff -r f108642d2da6 -r 77d18e17199b plugins/icq/udp.c --- a/plugins/icq/udp.c Tue May 29 09:46:05 2001 +0000 +++ b/plugins/icq/udp.c Tue May 29 10:32:53 2001 +0000 @@ -1,123 +1,24 @@ -/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* -$Id: udp.c 1535 2001-03-03 00:26:04Z warmenhoven $ -$Log$ -Revision 1.5 2001/03/03 00:26:04 warmenhoven -icqlib updates. beginnings of system logging. - -Revision 1.29 2001/03/01 05:37:15 bills -rewrote icq_UDPEncode and icq_UDPCheckCode functions to do their work in -a seperate buffer so original icq_Packet isn't corrupted, fixed bug where -UDP_CMD_ACKs were being queued on the UDP packet queue - -Revision 1.28 2001/02/22 05:40:04 bills -port tcp connect timeout code and UDP queue to new timeout manager - -Revision 1.27 2001/01/16 00:10:13 denis -Invisible list has been finished. - -Revision 1.26 2000/12/19 06:00:07 bills -moved members from ICQLINK to ICQLINK_private struct - -Revision 1.25 2000/11/02 07:29:07 denis -Ability to disable TCP protocol has been added. - -Revision 1.24 2000/08/13 00:59:52 denis -Patch #101057 have been applied. - -Revision 1.23 2000/07/09 22:19:35 bills -added new *Close functions, use *Close functions instead of *Delete -where correct, and misc cleanup - -Revision 1.22 2000/07/09 18:25:44 denis -icq_UpdateNewUserInfo() now returns seq1 instead of seq2 since it -isn't META function. - -Revision 1.21 2000/06/25 16:43:19 denis -icq_SendMetaInfoReq() was added. -All icq_*Meta*() functions now returns sequence number 2 because their -replies from the server are synced with it. - -Revision 1.20 2000/06/15 01:50:39 bills -removed *Seq functions - -Revision 1.19 2000/05/10 19:06:59 denis -UDP outgoing packet queue was implemented. - -Revision 1.18 2000/05/03 18:34:43 denis -icq_UpdateNewUserInfo() was added. -All icq_UpdateMetaInfo*() now return their sequence number. - -Revision 1.17 2000/04/10 16:36:04 denis -Some more Win32 compatibility from Guillaume Rosanis - -Revision 1.16 2000/04/06 19:03:07 denis -return sequence number - -Revision 1.15 2000/04/06 16:36:18 denis -So called "Online List problem" bug with Long Contact List was fixed. -icq_*Send*Seq() functions with specified sequence number were added. +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -Revision 1.14 2000/04/05 14:37:02 denis -Applied patch from "Guillaume R." for basic Win32 -compatibility. - -Revision 1.13 1999/12/27 11:12:35 denis -icq_UpdateMetaInfoSecurity() added for setting "My authorization is -required", "Web Aware" and "IP Publishing". - -Revision 1.12 1999/10/14 11:43:28 denis -icq_UpdateMetaInfo* functions added. - -Revision 1.11 1999/10/07 18:36:27 denis -proxy.h file removed. - -Revision 1.10 1999/10/04 13:36:17 denis -Cleanups. - -Revision 1.9 1999/09/29 20:15:30 bills -tcp port wasn't being sent properly in login packet - -Revision 1.8 1999/09/29 17:13:45 denis -Webaware functions enabled without success even with UDP v5 - need more -investigations. - -Revision 1.7 1999/07/18 20:22:16 bills -changed to use new byte-order functions & contact list functions - -Revision 1.6 1999/07/16 15:46:00 denis -Cleaned up. - -Revision 1.5 1999/07/16 12:40:53 denis -ICQ UDP v5 implemented. -Encription for ICQ UDP v5 implemented. -icq_Packet* unified interface for UDP packets implemented. -Multipacket support of ICQ UDP v5 support added. - -Revision 1.4 1999/07/12 15:13:43 cproch -- added definition of ICQLINK to hold session-specific global variabled - applications which have more than one connection are now possible -- changed nearly every function defintion to support ICQLINK parameter - -Revision 1.3 1999/04/29 09:40:52 denis -Unsuccessful attempt to implement web presence (webaware) feature - -Revision 1.2 1999/04/14 15:04:13 denis -Cleanups for "strict" compiling (-ansi -pedantic) -Switched from icq_Log callback to icq_Fmt function. - -Revision 1.1 1999/03/24 11:37:38 denis -Underscored files with TCP stuff renamed. -TCP stuff cleaned up -Function names changed to corresponding names. -icqlib.c splitted to many small files by subject. -C++ comments changed to ANSI C comments. - -*/ - -#ifndef _WIN32 -#include -#endif +/* + * Copyright (C) 1998-2001, Denis V. Dmitrienko and + * Bill Soudan + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ #ifdef _WIN32 #include @@ -125,7 +26,6 @@ #include -#include "icqtypes.h" #include "icqlib.h" #include "udp.h" #include "queue.h" @@ -133,6 +33,8 @@ #include "stdpackets.h" #include "icqbyteorder.h" +#include "contacts.h" + static const BYTE icq_UDPTable[] = { 0x59, 0x60, 0x37, 0x6B, 0x65, 0x62, 0x46, 0x48, 0x53, 0x61, 0x4C, 0x59, 0x60, 0x57, 0x5B, 0x3D, 0x5E, 0x34, 0x6D, 0x36, 0x50, 0x3F, 0x6F, 0x67, 0x53, 0x61, 0x4C, 0x59, 0x40, 0x47, 0x63, 0x39, @@ -199,7 +101,7 @@ return a[0] + a[1] + a[2] + a[3] + a[4]; } -void icq_UDPEncode(icq_Packet *p, void *buffer) +void icq_UDPEncode(icq_Packet *p, char *buffer) { DWORD checkcode = icq_UDPCalculateCheckCode(p); DWORD code1, code2, code3; @@ -227,24 +129,24 @@ icq_UDPSockWrite and icq_UDPSockRead are for _UDP_ packets proxy support for TCP sockets is different! *********************************************************/ -int icq_UDPSockWriteDirect(ICQLINK *link, icq_Packet *p) +int icq_UDPSockWriteDirect(icq_Link *icqlink, icq_Packet *p) { char tmpbuf[ICQ_PACKET_DATA_SIZE+10]; - if(link->icq_UDPSok <= 3) + if(icqlink->icq_UDPSok <= 3) { - icq_FmtLog(link, ICQ_LOG_ERROR, "Bad socket!\n"); + icq_FmtLog(icqlink, ICQ_LOG_ERROR, "Bad socket!\n"); return -1; } icq_UDPEncode(p, tmpbuf+10); - if(!link->icq_UseProxy) + if(!icqlink->icq_UseProxy) { #ifdef _WIN32 - return send(link->icq_UDPSok, tmpbuf+10, p->length, 0); + return send(icqlink->icq_UDPSok, tmpbuf+10, p->length, 0); #else - return write(link->icq_UDPSok, tmpbuf+10, p->length); + return write(icqlink->icq_UDPSok, tmpbuf+10, p->length); #endif } else @@ -253,34 +155,34 @@ tmpbuf[1] = 0; /* reserved */ tmpbuf[2] = 0; /* standalone packet */ tmpbuf[3] = 1; /* address type IP v4 */ - *(unsigned long*)&tmpbuf[4] = htonl(link->icq_ProxyDestIP); - *(unsigned short*)&tmpbuf[8] = htons(link->icq_ProxyDestPort); + *(unsigned long*)&tmpbuf[4] = htonl(icqlink->icq_ProxyDestIP); + *(unsigned short*)&tmpbuf[8] = htons(icqlink->icq_ProxyDestPort); #ifdef _WIN32 - return send(link->icq_UDPSok, tmpbuf, p->length+10, 0)-10; + return send(icqlink->icq_UDPSok, tmpbuf, p->length+10, 0)-10; #else - return write(link->icq_UDPSok, tmpbuf, p->length+10)-10; + return write(icqlink->icq_UDPSok, tmpbuf, p->length+10)-10; #endif } } -int icq_UDPSockWrite(ICQLINK *link, icq_Packet *p) +int icq_UDPSockWrite(icq_Link *icqlink, icq_Packet *p) { - icq_UDPQueuePut(link, p); + icq_UDPQueuePut(icqlink, p); - return icq_UDPSockWriteDirect(link, p); + return icq_UDPSockWriteDirect(icqlink, p); } -int icq_UDPSockRead(ICQLINK *link, icq_Packet *p) +int icq_UDPSockRead(icq_Link *icqlink, icq_Packet *p) { int res; char tmpbuf[ICQ_PACKET_DATA_SIZE]; - if(!link->icq_UseProxy) + if(!icqlink->icq_UseProxy) { #ifdef _WIN32 - res = recv(link->icq_UDPSok, p->data, ICQ_PACKET_DATA_SIZE, 0); + res = recv(icqlink->icq_UDPSok, p->data, ICQ_PACKET_DATA_SIZE, 0); #else - res = read(link->icq_UDPSok, p->data, ICQ_PACKET_DATA_SIZE); + res = read(icqlink->icq_UDPSok, p->data, ICQ_PACKET_DATA_SIZE); #endif p->length = res; return res; @@ -288,9 +190,9 @@ else { #ifdef _WIN32 - res = recv(link->icq_UDPSok, tmpbuf, ICQ_PACKET_DATA_SIZE, 0); + res = recv(icqlink->icq_UDPSok, tmpbuf, ICQ_PACKET_DATA_SIZE, 0); #else - res = read(link->icq_UDPSok, tmpbuf, ICQ_PACKET_DATA_SIZE); + res = read(icqlink->icq_UDPSok, tmpbuf, ICQ_PACKET_DATA_SIZE); #endif if(res<0) return res; @@ -306,40 +208,40 @@ JAVA client sends two different commands so we do also :) *****************************************/ -WORD icq_KeepAlive(ICQLINK *link) /* V5 */ +WORD icq_KeepAlive(icq_Link *icqlink) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_KEEP_ALIVE, link->d->icq_UDPSeqNum1++); + icq_Packet *p = icq_UDPCreateStdSeqPacket(icqlink, UDP_CMD_KEEP_ALIVE, icqlink->d->icq_UDPSeqNum1++); icq_PacketAppend32(p, rand()); - icq_UDPSockWriteDirect(link, p); /* don't queue keep alive packets! */ + icq_UDPSockWriteDirect(icqlink, p); /* don't queue keep alive packets! */ icq_PacketDelete(p); - icq_FmtLog(link, ICQ_LOG_MESSAGE, "Send Keep Alive packet to the server\n"); + icq_FmtLog(icqlink, ICQ_LOG_MESSAGE, "Send Keep Alive packet to the server\n"); - return link->d->icq_UDPSeqNum1-1; + return icqlink->d->icq_UDPSeqNum1-1; } /********************************** This must be called to remove messages from the server ***********************************/ -void icq_SendGotMessages(ICQLINK *link) /* V5 */ +void icq_SendGotMessages(icq_Link *icqlink) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_ACK_MESSAGES); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_ACK_MESSAGES); icq_PacketAppend32(p, rand()); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); } /************************************* this sends over the contact list *************************************/ -void icq_SendContactList(ICQLINK *link) /* V5 */ +void icq_SendContactList(icq_Link *icqlink) /* V5 */ { char num_used; - icq_ContactItem *ptr = icq_ContactGetFirst(link); + icq_ContactItem *ptr = icq_ContactGetFirst(icqlink); while(ptr) { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_CONT_LIST); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_CONT_LIST); num_used = 0; icq_PacketAdvance(p,1); @@ -351,15 +253,15 @@ } icq_PacketGotoUDPOutData(p, 0); icq_PacketAppend8(p, num_used); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); } } -void icq_SendNewUser(ICQLINK *link, unsigned long uin) /* V5 */ +void icq_SendNewUser(icq_Link *icqlink, unsigned long uin) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_ADD_TO_LIST); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_ADD_TO_LIST); icq_PacketAppend32(p, uin); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); } /************************************* @@ -367,11 +269,11 @@ that allows certain users to see you if you're invisible. *************************************/ -void icq_SendVisibleList(ICQLINK *link) /* V5 */ +void icq_SendVisibleList(icq_Link *icqlink) /* V5 */ { char num_used; - icq_ContactItem *ptr = icq_ContactGetFirst(link); - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_VIS_LIST); + icq_ContactItem *ptr = icq_ContactGetFirst(icqlink); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_VIS_LIST); num_used = 0; icq_PacketAdvance(p,1); @@ -388,16 +290,17 @@ { icq_PacketGotoUDPOutData(p, 0); icq_PacketAppend8(p, num_used); - icq_UDPSockWrite(link, p); - } else + icq_UDPSockWrite(icqlink, p); + } + else icq_PacketDelete(p); } -void icq_SendInvisibleList(ICQLINK *link) /* V5 */ +void icq_SendInvisibleList(icq_Link *icqlink) /* V5 */ { char num_used; - icq_ContactItem *ptr = icq_ContactGetFirst(link); - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_INVIS_LIST); + icq_ContactItem *ptr = icq_ContactGetFirst(icqlink); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_INVIS_LIST); num_used = 0; icq_PacketAdvance(p,1); @@ -414,8 +317,9 @@ { icq_PacketGotoUDPOutData(p, 0); icq_PacketAppend8(p, num_used); - icq_UDPSockWrite(link, p); - } else + icq_UDPSockWrite(icqlink, p); + } + else icq_PacketDelete(p); } @@ -423,11 +327,11 @@ This sends the second login command this is necessary to finish logging in. ***************************************/ -void icq_SendLogin1(ICQLINK *link) /* V5 */ +void icq_SendLogin1(icq_Link *icqlink) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_LOGIN_1); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_LOGIN_1); icq_PacketAppend32(p, rand()); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); } /************************************ @@ -435,38 +339,38 @@ on the socket icq_Sok and gives our ip and port. It does NOT wait for any kind of a response. *************************************/ -void icq_Login(ICQLINK *link, DWORD status) /* V5 */ +void icq_Login(icq_Link *icqlink, DWORD status) /* V5 */ { icq_Packet *p; - memset(link->d->icq_UDPServMess, FALSE, sizeof(link->d->icq_UDPServMess)); - link->d->icq_UDPSession = rand() & 0x3FFFFFFF; - link->d->icq_UDPSeqNum1 = rand() & 0x7FFF; - link->d->icq_UDPSeqNum2 = 1; + memset(icqlink->d->icq_UDPServMess, FALSE, sizeof(icqlink->d->icq_UDPServMess)); + icqlink->d->icq_UDPSession = rand() & 0x3FFFFFFF; + icqlink->d->icq_UDPSeqNum1 = rand() & 0x7FFF; + icqlink->d->icq_UDPSeqNum2 = 1; - p = icq_UDPCreateStdPacket(link, UDP_CMD_LOGIN); + p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_LOGIN); icq_PacketAppend32(p, time(0L)); - icq_PacketAppend32n(p, link->icq_TCPSrvPort); + icq_PacketAppend32n(p, icqlink->icq_TCPSrvPort); /*icq_PacketAppend16(p, 0); - icq_PacketAppend16n(p, htons(link->icq_OurPort));*/ - icq_PacketAppendString(p, link->icq_Password); + icq_PacketAppend16n(p, htons(icqlink->icq_OurPort));*/ + icq_PacketAppendString(p, icqlink->icq_Password); icq_PacketAppend32(p, LOGIN_X1_DEF); - if(link->icq_UseTCP) + if(icqlink->icq_UseTCP) { - if(link->icq_UseProxy) + if(icqlink->icq_UseProxy) { - icq_PacketAppend32n(p, htonl(link->icq_ProxyIP)); + icq_PacketAppend32n(p, htonl(icqlink->icq_ProxyIP)); icq_PacketAppend8(p, LOGIN_SNDONLY_TCP); } else { - icq_PacketAppend32n(p, htonl(link->icq_OurIP)); + icq_PacketAppend32n(p, htonl(icqlink->icq_OurIP)); icq_PacketAppend8(p, LOGIN_SNDRCV_TCP); } } else { - icq_PacketAppend32n(p, htonl(link->icq_ProxyIP)); + icq_PacketAppend32n(p, htonl(icqlink->icq_ProxyIP)); icq_PacketAppend8(p, LOGIN_NO_TCP); } icq_PacketAppend32(p, status); @@ -474,19 +378,19 @@ icq_PacketAppend32(p, LOGIN_X4_DEF); icq_PacketAppend32(p, LOGIN_X5_DEF); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); } /********************** Logs off ICQ ***********************/ -void icq_Logout(ICQLINK *link) /* V5 */ +void icq_Logout(icq_Link *icqlink) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_SEND_TEXT_CODE, link->d->icq_UDPSeqNum1++); + icq_Packet *p = icq_UDPCreateStdSeqPacket(icqlink, UDP_CMD_SEND_TEXT_CODE, icqlink->d->icq_UDPSeqNum1++); icq_PacketAppendString(p, "B_USER_DISCONNECTED"); icq_PacketAppend8(p, 5); icq_PacketAppend8(p, 0); - icq_UDPSockWriteDirect(link, p); /* don't queue */ + icq_UDPSockWriteDirect(icqlink, p); /* don't queue */ icq_PacketDelete(p); } @@ -495,20 +399,21 @@ server it appears that this must be done after everything the server sends us *******************************/ -void icq_UDPAck(ICQLINK *link, int seq) /* V5 */ +void icq_UDPAck(icq_Link *icqlink, int seq) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_ACK, seq); + icq_Packet *p = icq_UDPCreateStdSeqPacket(icqlink, UDP_CMD_ACK, seq); icq_PacketAppend32(p, rand()); - icq_FmtLog(link, ICQ_LOG_MESSAGE, "Acking\n"); - icq_UDPSockWriteDirect(link, p); + icq_FmtLog(icqlink, ICQ_LOG_MESSAGE, "Acking\n"); + icq_UDPSockWriteDirect(icqlink, p); + icq_PacketDelete(p); } /*************************************************** Sends a message thru the server to uin. Text is the message to send. ***************************************************/ -WORD icq_UDPSendMessage(ICQLINK *link, DWORD uin, const char *text) /* V5 */ +WORD icq_UDPSendMessage(icq_Link *icqlink, DWORD uin, const char *text) /* V5 */ { char buf[512]; /* message may be only 450 bytes long */ icq_Packet *p; @@ -516,16 +421,16 @@ strncpy(buf, text, 512); icq_RusConv("kw", buf); - p = icq_UDPCreateStdPacket(link, UDP_CMD_SEND_THRU_SRV); + p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_SEND_THRU_SRV); icq_PacketAppend32(p, uin); icq_PacketAppend16(p, TYPE_MSG); icq_PacketAppendString(p, buf); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum1-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum1-1; } -WORD icq_UDPSendURL(ICQLINK *link, DWORD uin, const char *url, const char *descr) /* V5 */ +WORD icq_UDPSendURL(icq_Link *icqlink, DWORD uin, const char *url, const char *descr) /* V5 */ { char buf1[512], buf2[512]; icq_Packet *p; @@ -534,96 +439,96 @@ icq_RusConv("kw", buf1); strncpy(buf2, url, 512); - p = icq_UDPCreateStdPacket(link, UDP_CMD_SEND_THRU_SRV); + p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_SEND_THRU_SRV); icq_PacketAppend32(p, uin); icq_PacketAppend16(p, TYPE_URL); icq_PacketAppend16(p, strlen(buf1)+strlen(buf2)+2); /* length + the NULL + 0xFE delimiter */ icq_PacketAppendStringFE(p, buf1); icq_PacketAppendString0(p, buf2); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum1-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum1-1; } /************************************************** Sends a authorization to the server so the Mirabilis client can add the user. ***************************************************/ -WORD icq_SendAuthMsg(ICQLINK *link, DWORD uin) /* V5 */ +WORD icq_SendAuthMsg(icq_Link *icqlink, DWORD uin) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_SEND_THRU_SRV); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_SEND_THRU_SRV); icq_PacketAppend32(p, uin); icq_PacketAppend32(p, TYPE_AUTH); icq_PacketAppend16(p, 0); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); - return link->d->icq_UDPSeqNum1-1; + return icqlink->d->icq_UDPSeqNum1-1; } /************************************************** Changes the users status on the server ***************************************************/ -void icq_ChangeStatus(ICQLINK *link, DWORD status) /* V5 */ +void icq_ChangeStatus(icq_Link *icqlink, DWORD status) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_STATUS_CHANGE); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_STATUS_CHANGE); icq_PacketAppend32(p, status); - link->icq_Status = status; - icq_UDPSockWrite(link, p); + icqlink->icq_Status = status; + icq_UDPSockWrite(icqlink, p); } /******************************************************** Sends a request to the server for info on a specific user *********************************************************/ -WORD icq_SendInfoReq(ICQLINK *link, DWORD uin) /* V5 */ +WORD icq_SendInfoReq(icq_Link *icqlink, DWORD uin) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_INFO_REQ); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_INFO_REQ); icq_PacketAppend32(p, uin); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum1-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum1-1; } /******************************************************** Sends a request to the server for info on a specific user *********************************************************/ -WORD icq_SendExtInfoReq(ICQLINK *link, DWORD uin) /* V5 */ +WORD icq_SendExtInfoReq(icq_Link *icqlink, DWORD uin) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_EXT_INFO_REQ); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_EXT_INFO_REQ); icq_PacketAppend32(p, uin); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum1-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum1-1; } /************************************************************** Initializes a server search for the information specified ***************************************************************/ -void icq_SendSearchReq(ICQLINK *link, const char *email, const char *nick, const char *first, +void icq_SendSearchReq(icq_Link *icqlink, const char *email, const char *nick, const char *first, const char *last) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_SEARCH_USER); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_SEARCH_USER); icq_PacketAppendString(p, nick); icq_PacketAppendString(p, first); icq_PacketAppendString(p, last); icq_PacketAppendString(p, email); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); } /************************************************************** Initializes a server search for the information specified ***************************************************************/ -void icq_SendSearchUINReq(ICQLINK *link, DWORD uin) /* V5 */ +void icq_SendSearchUINReq(icq_Link *icqlink, DWORD uin) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_SEARCH_UIN); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_SEARCH_UIN); icq_PacketAppend32(p, uin); - icq_UDPSockWrite(link, p); + icq_UDPSockWrite(icqlink, p); } /************************************************** Registers a new uin in the ICQ network ***************************************************/ -void icq_RegNewUser(ICQLINK *link, const char *pass) /* V5 */ +void icq_RegNewUser(icq_Link *icqlink, const char *pass) /* V5 */ { char pass8[9]; - icq_Packet *p = icq_UDPCreateStdSeqPacket(link, UDP_CMD_REG_NEW_USER, link->d->icq_UDPSeqNum1++); + icq_Packet *p = icq_UDPCreateStdSeqPacket(icqlink, UDP_CMD_REG_NEW_USER, icqlink->d->icq_UDPSeqNum1++); strncpy(pass8, pass, 8); icq_PacketAppendString(p, pass8); icq_PacketAppend32(p, 0xA0); @@ -633,38 +538,38 @@ icq_PacketGoto(p, 6); icq_PacketAppend32(p, 0); icq_PacketAppend32(p, rand()); - icq_UDPSockWrite(link, p); - icq_FmtLog(link, ICQ_LOG_MESSAGE, "Send RegNewUser packet to the server\n"); + icq_UDPSockWrite(icqlink, p); + icq_FmtLog(icqlink, ICQ_LOG_MESSAGE, "Send RegNewUser packet to the server\n"); } -WORD icq_UpdateUserInfo(ICQLINK *link, const char *nick, const char *first, const char *last, +WORD icq_UpdateUserInfo(icq_Link *icqlink, const char *nick, const char *first, const char *last, const char *email) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_UPDATE_INFO); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_UPDATE_INFO); icq_PacketAppendString(p, nick); icq_PacketAppendString(p, first); icq_PacketAppendString(p, last); icq_PacketAppendString(p, email); /* auth (byte)? */ - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum1-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum1-1; } -WORD icq_UpdateAuthInfo(ICQLINK *link, DWORD auth) /* V5 */ +WORD icq_UpdateAuthInfo(icq_Link *icqlink, DWORD auth) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_UPDATE_AUTH); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_UPDATE_AUTH); icq_PacketAppend32(p, auth); /* NOT auth? */ - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum1-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum1-1; } -WORD icq_UpdateMetaInfoSet(ICQLINK *link, const char *nick, const char *first, const char *last, +WORD icq_UpdateMetaInfoSet(icq_Link *icqlink, const char *nick, const char *first, const char *last, const char *email, const char *email2, const char *email3, const char *city, const char *state, const char *phone, const char *fax, const char *street, const char *cellular, unsigned long zip, unsigned short cnt_code, unsigned char cnt_stat, unsigned char emailhide) { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_META_USER); icq_PacketAppend16(p, META_CMD_SET_INFO); icq_PacketAppendString(p, nick); icq_PacketAppendString(p, first); @@ -682,15 +587,18 @@ icq_PacketAppend16(p, cnt_code); icq_PacketAppend8(p, cnt_stat); icq_PacketAppend8(p, emailhide); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum2-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum2-1; } -WORD icq_UpdateMetaInfoHomepage(ICQLINK *link, unsigned char age, const char *homepage, +WORD icq_UpdateMetaInfoHomepage(icq_Link *icqlink, unsigned char age, const char *homepage, unsigned char year, unsigned char month, unsigned char day, unsigned char lang1, unsigned char lang2, unsigned char lang3) { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_META_USER); + (void)lang1; + (void)lang2; + (void)lang3; icq_PacketAppend16(p, META_CMD_SET_HOMEPAGE); icq_PacketAppend8(p, age); icq_PacketAppend16(p, 0x0200); @@ -701,35 +609,35 @@ icq_PacketAppend8(p, 0xFF /* lang1 */); icq_PacketAppend8(p, 0xFF /* lang2 */); icq_PacketAppend8(p, 0xFF /* lang3 */); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum2-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum2-1; } -WORD icq_UpdateMetaInfoAbout(ICQLINK *link, const char *about) +WORD icq_UpdateMetaInfoAbout(icq_Link *icqlink, const char *about) { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_META_USER); icq_PacketAppend16(p, META_CMD_SET_ABOUT); icq_PacketAppendString(p, about); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum2-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum2-1; } -WORD icq_UpdateMetaInfoSecurity(ICQLINK *link, unsigned char reqauth, unsigned char webpresence, +WORD icq_UpdateMetaInfoSecurity(icq_Link *icqlink, unsigned char reqauth, unsigned char webpresence, unsigned char pubip) { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_META_USER); icq_PacketAppend16(p, META_CMD_SET_SECURE); icq_PacketAppend8(p, !reqauth); icq_PacketAppend8(p, webpresence); icq_PacketAppend8(p, pubip); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum2-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum2-1; } -WORD icq_UpdateNewUserInfo(ICQLINK *link, const char *nick, const char *first, const char *last, +WORD icq_UpdateNewUserInfo(icq_Link *icqlink, const char *nick, const char *first, const char *last, const char *email) /* V5 */ { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_NEW_USER_INFO); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_NEW_USER_INFO); icq_PacketAppendString(p, nick); icq_PacketAppendString(p, first); icq_PacketAppendString(p, last); @@ -737,15 +645,15 @@ icq_PacketAppend8(p, 1); icq_PacketAppend8(p, 1); icq_PacketAppend8(p, 1); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum1-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum1-1; } -WORD icq_SendMetaInfoReq(ICQLINK *link, unsigned long uin) +WORD icq_SendMetaInfoReq(icq_Link *icqlink, unsigned long uin) { - icq_Packet *p = icq_UDPCreateStdPacket(link, UDP_CMD_META_USER); + icq_Packet *p = icq_UDPCreateStdPacket(icqlink, UDP_CMD_META_USER); icq_PacketAppend16(p, META_CMD_REQ_INFO); icq_PacketAppend32(p, uin); - icq_UDPSockWrite(link, p); - return link->d->icq_UDPSeqNum2-1; + icq_UDPSockWrite(icqlink, p); + return icqlink->d->icq_UDPSeqNum2-1; }