EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
StreamPacketizer.cpp
Go to the documentation of this file.
1 /*
2  ------------------------------------------------------------------------------------
3  LICENSE:
4  ------------------------------------------------------------------------------------
5  This file is part of EVEmu: EVE Online Server Emulator
6  Copyright 2006 - 2021 The EVEmu Team
7  For the latest information visit https://evemu.dev
8  ------------------------------------------------------------------------------------
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13 
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public License along with
19  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20  Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21  http://www.gnu.org/copyleft/lesser.txt.
22  ------------------------------------------------------------------------------------
23  Author: Zhur
24 */
25 
26 #include "eve-core.h"
27 
29 
31 {
32  ClearBuffers();
33 }
34 
36 {
37  mBuffer.AppendSeq( data.begin<uint8>(), data.end<uint8>() );
38 }
39 
41 {
43  while( true ) {
44  if (sizeof(uint32) > (end - cur))
45  break;
46 
47  const Buffer::const_iterator<uint32> len = cur.As<uint32>();
48  const Buffer::const_iterator<uint8> start = ( len + 1 ).As<uint8>();
49 
50  if (*len > (uint32)(end - start))
51  break;
52 
53  mPackets.push( new Buffer(start, start + *len));
54  cur = (start + *len);
55  }
56 
57  if( cur != mBuffer.begin<uint8>() )
58  mBuffer.AssignSeq( cur, end );
59 }
60 
62 {
63  Buffer* buf(nullptr);
64  if (!mPackets.empty()) {
65  buf = mPackets.front();
66  mPackets.pop();
67  }
68 
69  return buf;
70 }
71 
73 {
74  Buffer* buf(nullptr);
75  while ((buf = PopPacket()))
76  SafeDelete( buf );
77 }
unsigned __int8 uint8
Definition: eve-compat.h:46
std::queue< Buffer * > mPackets
const_iterator< T2 > As() const
Converts const_iterator to another const_iterator with different type.
Definition: Buffer.h:108
void SafeDelete(T *&p)
Deletes and nullifies a pointer.
Definition: SafeMem.h:83
iterator< T > begin()
Definition: Buffer.h:381
Generic class for buffers.
Definition: Buffer.h:40
void AppendSeq(Iter first, Iter last)
Appends a sequence of elements to buffer.
Definition: Buffer.h:455
unsigned __int32 uint32
Definition: eve-compat.h:50
void InputData(const Buffer &data)
void AssignSeq(Iter first, Iter last)
Assigns a sequence of elements to buffer.
Definition: Buffer.h:504
iterator< T > end()
Definition: Buffer.h:387