VendorMessage.h

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (C) 2007 by Peter Dimov.
00004 
00005 This file is part of Calitko (http://www.calitko.org).
00006 
00007 Calitko is free software; you can redistribute it and/or modify
00008 it under the terms of the GNU General Public License as published by
00009 the Free Software Foundation; either version 2 of the License, or
00010 (at your option) any later version.
00011 
00012 Calitko is distributed in the hope that it will be useful,
00013 but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Calitko; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 
00021 */
00022 
00023 #ifndef PROTOCOLS__GNUTELLA__PACKETS__VENDOR_MESSAGE__VENDOR_MESSAGE_H
00024 #define PROTOCOLS__GNUTELLA__PACKETS__VENDOR_MESSAGE__VENDOR_MESSAGE_H
00025 
00026 #include "Imports.h"
00027 
00028 namespace Gnutella {
00029 namespace Packets {
00030 namespace VendorMessages {
00031 
00033 
00048 class VendorMessage : public Packet
00049 {
00050 public:
00051     static VendorMessage &          castFrom (Packet & packet)              { return dynamic_cast <VendorMessage &> (packet); }
00052     static const VendorMessage &    castFrom (const Packet & packet)        { return dynamic_cast <const VendorMessage &> (packet); }
00053 
00054     static Packet *         fromRawData (const QByteArray &rawHeader,
00055                                          const QByteArray &rawPayload);
00056 
00057                             VendorMessage (PayloadDescriptor, VendorCode,
00058                                            quint16 messageType,
00059                                            quint16 verionNumber);
00060                             VendorMessage (const QByteArray &rawHeader,
00061                                            const QByteArray &rawPayload);
00062                             ~VendorMessage();
00063 
00064     VendorCode              vendorCode() const;
00065     quint16                 messageType() const;
00066     quint16                 versionNumber() const;
00067 
00068 protected:
00069     virtual bool    prepareReadPayload (const QByteArray &rawPayload) = 0;
00070     virtual void    readPayload (QDataStream &stream) = 0;
00071     virtual int     prepareWritePayload() const = 0;
00072     virtual void    writePayload (QDataStream &stream) const = 0;
00073 
00074     struct Data
00075     {
00076         VendorCode  vendorCode;
00077         quint16     messageType;
00078         quint16     versionNumber;
00079     } p;
00080 };
00081 
00082 inline VendorCode VendorMessage::vendorCode() const
00083 { return p.vendorCode; }
00084 
00085 inline quint16 VendorMessage::messageType() const
00086 { return p.messageType; }
00087 
00088 inline quint16 VendorMessage::versionNumber() const
00089 { return p.versionNumber; }
00090 
00091 } // namespace VendorMessages
00092 } // namespace Packets
00093 } // namespace Gnutella
00094 
00095 #endif // PROTOCOLS__GNUTELLA__PACKETS__VENDOR_MESSAGE__VENDOR_MESSAGE_H