/*************************************************************************** * Copyright (C) 2005 by Joris Guisson * * joris.guisson@gmail.com * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef BTPACKET_H #define BTPACKET_H #include "globals.h" class TQString; namespace bt { class BitSet; class Request; class Chunk; class Peer; /** * @author Joris Guisson * * Packet off data, which gets sent to a Peer */ class Packet { Uint8* data; Uint32 size; Uint32 written; public: Packet(Uint8 type); Packet(Uint16 port); Packet(Uint32 chunk,Uint8 type); Packet(const BitSet & bs); Packet(const Request & req,Uint8 type); Packet(Uint32 index,Uint32 begin,Uint32 len,Chunk* ch); Packet(Uint8 ext_id,const TQByteArray & ext_data); // extension protocol packet virtual ~Packet(); Uint8 getType() const {return data ? data[4] : 0;} bool isOK() const; const Uint8* getData() const {return data;} Uint32 getDataLength() const {return size;} Uint32 isSent() const {return written == size;} /** * If this packet is a piece, make a reject for it. * @return The newly created Packet, 0 if this is not a piece */ Packet* makeRejectOfPiece(); /// Are we sending this packet ? bool sending() const {return written > 0;} /** * Is this a piece packet which matches a request * @param req The request * @return If this is a piece in response of this request */ bool isPiece(const Request & req) const; /** * Put the packet in an output buffer. * @param buf The buffer * @param max_to_put Maximum bytes to put * @param piece Set to true if this is a piece * @return The number of bytes put in the buffer */ Uint32 putInOutputBuffer(Uint8* buf,Uint32 max_to_put,bool & piece); }; } #endif