LCOV - code coverage report
Current view: top level - src/network - networkpacket.h (source / functions) Hit Total Coverage
Test: report Lines: 11 13 84.6 %
Date: 2015-07-11 18:23:49 Functions: 17 22 77.3 %

          Line data    Source code
       1             : /*
       2             : Minetest
       3             : Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
       4             : 
       5             : This program is free software; you can redistribute it and/or modify
       6             : it under the terms of the GNU Lesser General Public License as published by
       7             : the Free Software Foundation; either version 2.1 of the License, or
       8             : (at your option) any later version.
       9             : 
      10             : This program is distributed in the hope that it will be useful,
      11             : but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13             : GNU Lesser General Public License for more details.
      14             : 
      15             : You should have received a copy of the GNU Lesser General Public License along
      16             : with this program; if not, write to the Free Software Foundation, Inc.,
      17             : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             : */
      19             : 
      20             : #ifndef NETWORKPACKET_HEADER
      21             : #define NETWORKPACKET_HEADER
      22             : 
      23             : #include "util/pointer.h"
      24             : #include "util/numeric.h"
      25             : #include "networkprotocol.h"
      26             : 
      27             : class NetworkPacket
      28             : {
      29             : 
      30             : public:
      31             :                 NetworkPacket(u16 command, u32 datasize, u16 peer_id);
      32             :                 NetworkPacket(u16 command, u32 datasize);
      33        2511 :                 NetworkPacket(): m_datasize(0), m_read_offset(0), m_command(0),
      34        2511 :                                 m_peer_id(0) {}
      35             :                 ~NetworkPacket();
      36             : 
      37             :                 void putRawPacket(u8 *data, u32 datasize, u16 peer_id);
      38             : 
      39             :                 // Getters
      40        2100 :                 u32 getSize() { return m_datasize; }
      41        1321 :                 u16 getPeerId() { return m_peer_id; }
      42        4624 :                 u16 getCommand() { return m_command; }
      43             : 
      44             :                 // Returns a c-string without copying.
      45             :                 // A better name for this would be getRawString()
      46             :                 char* getString(u32 from_offset);
      47             :                 // major difference to putCString(): doesn't write len into the buffer
      48             :                 void putRawString(const char* src, u32 len);
      49             : 
      50             :                 NetworkPacket& operator>>(std::string& dst);
      51             :                 NetworkPacket& operator<<(std::string src);
      52             : 
      53             :                 void putLongString(std::string src);
      54             : 
      55             :                 NetworkPacket& operator>>(std::wstring& dst);
      56             :                 NetworkPacket& operator<<(std::wstring src);
      57             : 
      58             :                 std::string readLongString();
      59             : 
      60             :                 char getChar(u32 offset);
      61             :                 NetworkPacket& operator>>(char& dst);
      62             :                 NetworkPacket& operator<<(char src);
      63             : 
      64             :                 NetworkPacket& operator>>(bool& dst);
      65             :                 NetworkPacket& operator<<(bool src);
      66             : 
      67             :                 u8 getU8(u32 offset);
      68             : 
      69             :                 NetworkPacket& operator>>(u8& dst);
      70             :                 NetworkPacket& operator<<(u8 src);
      71             : 
      72             :                 u8* getU8Ptr(u32 offset);
      73             : 
      74             :                 u16 getU16(u32 from_offset);
      75             :                 NetworkPacket& operator>>(u16& dst);
      76             :                 NetworkPacket& operator<<(u16 src);
      77             : 
      78             :                 NetworkPacket& operator>>(u32& dst);
      79             :                 NetworkPacket& operator<<(u32 src);
      80             : 
      81             :                 NetworkPacket& operator>>(u64& dst);
      82             :                 NetworkPacket& operator<<(u64 src);
      83             : 
      84             :                 NetworkPacket& operator>>(float& dst);
      85             :                 NetworkPacket& operator<<(float src);
      86             : 
      87             :                 NetworkPacket& operator>>(v2f& dst);
      88             :                 NetworkPacket& operator<<(v2f src);
      89             : 
      90             :                 NetworkPacket& operator>>(v3f& dst);
      91             :                 NetworkPacket& operator<<(v3f src);
      92             : 
      93             :                 NetworkPacket& operator>>(s16& dst);
      94             :                 NetworkPacket& operator<<(s16 src);
      95             : 
      96             :                 NetworkPacket& operator>>(s32& dst);
      97             :                 NetworkPacket& operator<<(s32 src);
      98             : 
      99             :                 NetworkPacket& operator>>(v2s32& dst);
     100             :                 NetworkPacket& operator<<(v2s32 src);
     101             : 
     102             :                 NetworkPacket& operator>>(v3s16& dst);
     103             :                 NetworkPacket& operator<<(v3s16 src);
     104             : 
     105             :                 NetworkPacket& operator>>(v3s32& dst);
     106             :                 NetworkPacket& operator<<(v3s32 src);
     107             : 
     108             :                 NetworkPacket& operator>>(video::SColor& dst);
     109             :                 NetworkPacket& operator<<(video::SColor src);
     110             : 
     111             :                 // Temp, we remove SharedBuffer when migration finished
     112             :                 Buffer<u8> oldForgePacket();
     113             : private:
     114             :                 void checkReadOffset(u32 from_offset);
     115             : 
     116        4880 :                 template<typename T> void checkDataSize()
     117             :                 {
     118        4880 :                         if (m_read_offset + sizeof(T) > m_datasize) {
     119           0 :                                 m_datasize = m_read_offset + sizeof(T);
     120           0 :                                 m_data.resize(m_datasize);
     121             :                         }
     122        4880 :                 }
     123             : 
     124        6399 :                 template<typename T> void incrOffset()
     125             :                 {
     126        6399 :                         m_read_offset += sizeof(T);
     127        6399 :                 }
     128             : 
     129             :                 std::vector<u8> m_data;
     130             :                 u32 m_datasize;
     131             :                 u32 m_read_offset;
     132             :                 u16 m_command;
     133             :                 u16 m_peer_id;
     134             : };
     135             : 
     136             : #endif

Generated by: LCOV version 1.11