Mercurial > pidgin
view src/protocols/icq/stdpackets.h @ 3752:b32474e522fa
[gaim-migrate @ 3890]
From: "William T. Mahan" <wtm2@duke.edu>
This patch, against CVS HEAD, fixes three bugs in Oscar File Transfer
support. I can split it up further if desired.
* Send a null checksum when initiating a file transfer, which fixes
"files don't match" warnings produced by some versions of WinAIM; add
a compile-time option to actually compute the checksum, which is
slow but necessary when sending to some Mac clients.
* Don't allow sending files to oneself, because it causes all kinds of
subtle problems and it's not useful.
* Don't crash when there is an error writing to the output file when
receiving.
From: "William T. Mahan" <wtm2@duke.edu>
This patch 2 of 3, which applies on top of the first, adds support for
reverse connections for Oscar File Transfer, the lack of which has
been the biggest complaint so far. Reverse connections are used by
newer AIM clients when there is difficulty verifying the IP of the
sender.
From: "William T. Mahan" <wtm2@duke.edu>
This patch 3 of 3, which applies on top of the first 2, removes the
alarm() and sigaction() calls that were added by my original FT patch
to detect transfer timeouts. Besides apparently not working on
Windows, they involved a lot of ugly code to handle a special case.
My new approach is to add destructors that can called when SNACs are
freed; a timeout is detected when a request SNAC is cleaned up before
the transfer is accepted. Although this touches several files, it is
more generic than the old method. I tried to implement this in an
unintrusive manner, so that there is little preformance penalty for
SNACs that do not use destructors.
My first two patches should work fine without this. If there are any
objections to the third patch, I ask that the first two patches be
applied, in which case I will set up a SourceForge page for this one.
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Sat, 19 Oct 2002 05:22:30 +0000 |
| parents | 424a40f12a6c |
| children |
line wrap: on
line source
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* * $Id: stdpackets.h 2096 2001-07-31 01:00:39Z warmenhoven $ * * Copyright (C) 1998-2001, Denis V. Dmitrienko <denis@null.net> and * Bill Soudan <soudan@kde.org> * * 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. * */ #ifndef _ICQTCPPACKETS_H #define _ICQTCPPACKETS_H #ifdef HAVE_CONFIG_H #include <config.h> #endif #define ICQ_UDP_VER 0x0005 #define ICQ_TCP_VER 0x0003 /* TCP Packet Commands */ #define ICQ_TCP_HELLO 0xFF #define ICQ_TCP_CANCEL 0x07D0 #define ICQ_TCP_ACK 0x07DA #define ICQ_TCP_MESSAGE 0x07EE /* TCP Message Types */ #define ICQ_TCP_MSG_MSG 0x0001 #define ICQ_TCP_MSG_CHAT 0x0002 #define ICQ_TCP_MSG_FILE 0x0003 #define ICQ_TCP_MSG_URL 0x0004 #define ICQ_TCP_MSG_CONTACTLIST 0x0013 #define ICQ_TCP_MSG_READAWAY 0x03E8 #define ICQ_TCP_MSG_READOCCUPIED 0x03E9 #define ICQ_TCP_MSG_READNA 0x03EA #define ICQ_TCP_MSG_READDND 0x03EB #define ICQ_TCP_MSG_READFFC 0x03EC #define ICQ_TCP_MASS_MASK 0x8000 /* TCP Message Command Types */ #define ICQ_TCP_MSG_ACK 0x0000 #define ICQ_TCP_MSG_AUTO 0x0000 #define ICQ_TCP_MSG_REAL 0x0010 #define ICQ_TCP_MSG_LIST 0x0020 #define ICQ_TCP_MSG_URGENT 0x0040 #define ICQ_TCP_MSG_INVISIBLE 0x0090 #define ICQ_TCP_MSG_UNK_1 0x00A0 #define ICQ_TCP_MSG_AWAY 0x0110 #define ICQ_TCP_MSG_OCCUPIED 0x0210 #define ICQ_TCP_MSG_UNK_2 0x0802 #define ICQ_TCP_MSG_NA 0x0810 #define ICQ_TCP_MSG_NA_2 0x0820 #define ICQ_TCP_MSG_DND 0x1010 /* TCP Message Statuses */ #define ICQ_TCP_STATUS_ONLINE 0x0000 #define ICQ_TCP_STATUS_REFUSE 0x0001 #define ICQ_TCP_STATUS_AWAY 0x0004 #define ICQ_TCP_STATUS_OCCUPIED 0x0009 #define ICQ_TCP_STATUS_DND 0x000A #define ICQ_TCP_STATUS_NA 0x000E #define ICQ_TCP_STATUS_FREE_CHAT ICQ_TCP_STATUS_ONLINE #define ICQ_TCP_STATUS_INVISIBLE ICQ_TCP_STATUS_ONLINE #include "tcplink.h" icq_Packet *icq_TCPCreateInitPacket(icq_TCPLink *plink); icq_Packet *icq_TCPCreateStdPacket(icq_TCPLink *plink, WORD icq_TCPCommand, WORD type, const char *msg, WORD status, WORD msg_command); icq_Packet *icq_TCPCreateMessagePacket(icq_TCPLink *plink, const char *message); icq_Packet *icq_TCPCreateURLPacket(icq_TCPLink *plink, const char *message, const char *url); icq_Packet *icq_TCPCreateAwayReqPacket(icq_TCPLink *plink, WORD statusMode); icq_Packet *icq_TCPCreateChatReqPacket(icq_TCPLink *plink, const char *message); icq_Packet *icq_TCPCreateFileReqPacket(icq_TCPLink *plink, const char *message, const char *filename, DWORD size); void icq_TCPAppendSequence(icq_Link *icqlink, icq_Packet *p); void icq_TCPAppendSequenceN(icq_Link *icqlink, icq_Packet *p, DWORD seq); icq_Packet *icq_TCPCreateMessageAck(icq_TCPLink *plink, const char *message); icq_Packet *icq_TCPCreateURLAck(icq_TCPLink *plink, const char *message); icq_Packet *icq_TCPCreateContactListAck(icq_TCPLink *plink, const char *message); icq_Packet *icq_TCPCreateWebPagerAck(icq_TCPLink *plink, const char *message); icq_Packet *icq_TCPCreateChatReqAck(icq_TCPLink *plink, WORD port); icq_Packet *icq_TCPCreateChatReqCancel(icq_TCPLink *plink, WORD port); icq_Packet *icq_TCPCreateChatReqRefuse(icq_TCPLink *plink, WORD port, const char *reason); icq_Packet *icq_TCPCreateFileReqAck(icq_TCPLink *plink, WORD port); icq_Packet *icq_TCPCreateFileReqCancel(icq_TCPLink *plink, WORD port); icq_Packet *icq_TCPCreateFileReqRefuse(icq_TCPLink *plink, WORD port, const char *reason); icq_Packet *icq_TCPCreateChatInfoPacket(icq_TCPLink *plink, const char *name, DWORD foreground, DWORD background); icq_Packet *icq_TCPCreateChatInfo2Packet(icq_TCPLink *plink, const char *name, DWORD foreground, DWORD background); icq_Packet *icq_TCPCreateChatFontInfoPacket(icq_TCPLink *plink); icq_Packet *icq_TCPCreateFile00Packet(DWORD num_files, DWORD total_bytes, DWORD speed, const char *name); icq_Packet *icq_TCPCreateFile01Packet(DWORD speed, const char *name); icq_Packet *icq_TCPCreateFile02Packet(const char *filename, DWORD filesize, DWORD speed); icq_Packet *icq_TCPCreateFile03Packet(DWORD filesize, DWORD speed); icq_Packet *icq_TCPCreateFile04Packet(DWORD filenum); icq_Packet *icq_TCPCreateFile05Packet(DWORD speed); icq_Packet *icq_TCPCreateFile06Packet(int length, void *data); icq_Packet *icq_UDPCreateStdPacket(icq_Link *icqlink, WORD cmd); icq_Packet *icq_UDPCreateStdSeqPacket(icq_Link *icqlink, WORD cmd, WORD seq); #endif /* _ICQTCPPACKETS_H */ /* From `tcppackets.c': */
