Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
packetmem.cpp
Go to the documentation of this file.
1 #include <config.h>
2 #include <assert.h>
3 #include <ctype.h>
4 #include <stdio.h>
5 #if !defined(WIN32)
6 #include <unistd.h>
7 #endif
8 #include <string.h>
9 #include <iomanip>
10 
11 #include "packetmem.h"
12 
13 using std::ostream;
14 using std::endl;
15 
16 LOCALCONST_DEF(PacketMem,bool,TakeOwnership,1)
17 LOCALCONST_DEF(PacketMem,bool,LeaveOwnership,0)
18 
19 /***********************************************************************
20  * PacketMem - definition
21  ***********************************************************************/
22 
23 PacketMem::PacketMem( )
24 {
26  _len = 0;
27 }
28 
30 {
32  _buffer = orig._buffer;
33  _len = orig._len;
34 }
35 
36 PacketMem::PacketMem( size_t bytesize )
37 {
39  _buffer = ptr( new char[bytesize] );
40  _len = bytesize;
41 }
42 
43 PacketMem::PacketMem( const void* buffer, size_t size )
44 {
46  if( buffer != NULL )
47  {
48  char* v = new char[size];
49  _len = size;
50  memcpy( v, buffer, size );
51  _buffer = ptr( v );
52  }
53  else
54  {
55  _len = 0;
56  }
57 }
58 
59 PacketMem::PacketMem( void* buffer, size_t size, bool own )
60 {
62  inner_set( buffer, size, own );
63 }
64 
66 {
69 }
70 
71 void PacketMem::set( void* buffer, size_t size, bool own )
72 {
74  inner_set( buffer, size, own );
75 }
76 
78 {
80  _buffer = orig._buffer;
81  _len = orig._len;
82  return *this;
83 }
84 
85 void PacketMem::inner_set( void* buffer, size_t size, bool own )
86 {
88  if( buffer != NULL )
89  {
90  if( own == false )
91  {
92  char* v = new char[size];
93  _len = size;
94  memcpy( v, buffer, size );
95  _buffer = ptr( v );
96  }
97  else
98  {
99  _buffer = ptr( (char*)buffer );
100  _len = size;
101  }
102  }
103  else
104  {
105  _buffer.reset( 0 );
106  _len = 0;
107  }
108 }
109 
110 void PacketMem::dump( ostream& ostr, size_t indent_depth ) const
111 {
113  static const size_t LEN = 16;
114 
115  char x[LEN];
116  char* buf = _buffer.get();
117  size_t len = _len;
118  size_t i=0;
119  while( len > 0 )
120  {
121  for( i=0; i<indent_depth; i++ ) ostr << " ";
122  memset( x, 0, LEN );
123  for( i=0; i<LEN && len>0; i++ )
124  {
125  x[i] = *buf;
126  buf++;
127  len--;
128  }
129  for( i=0; i<LEN; i++ )
130  {
131  ostr << " " << std::setw(2) << std::hex << (((unsigned int)x[i])&0xff);
132  }
133  ostr << " ";
134  for( i=0; i<LEN; i++ )
135  {
136  int v = x[i];
137  if( isprint(v) ) ostr << x[i]; else ostr << "@";
138  }
139  ostr << endl;
140  }
141  ostr << std::dec;
142 }
143 
144 bool PacketMem::operator==( const PacketMem& r ) const
145 {
147  if( _buffer == r._buffer ) return true;
148  if( _len != r._len ) return false;
149  if( memcmp( _buffer.get(), r._buffer.get(), _len ) == 0 ) return true;
150  return false;
151 }
152 
153 size_t PacketMem::len() const
154 {
156  return _len;
157 }
158 
159 const char* PacketMem::getConstBuf() const
160 {
162  return _buffer.get();
163 }
164 
166 {
168  return _buffer.get();
169 }
170