[go: up one dir, main page]

Menu

[r2]: / DOLBase / PacketIn.cs  Maximize  Restore  History

Download this file

159 lines (146 with data), 4.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
* DAWN OF LIGHT - The first free open source DAoC server emulator
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
using System.IO;
namespace DOL
{
/// <summary>
/// Class reads data from incoming incoming packets
/// </summary>
public class PacketIn : MemoryStream
{
/// <summary>
/// Default constructor
/// </summary>
public PacketIn() : base()
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="size">Size of the internal buffer</param>
public PacketIn(int size) : base(size)
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="buf">Buffer containing packet data to read from</param>
public PacketIn(byte[] buf) : base(buf)
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="buf">Buffer containing packet data to read from</param>
/// <param name="canwrite">True if writing to the buffer is allowed</param>
public PacketIn(byte[] buf, bool canwrite) : base(buf, canwrite)
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="buf">Buffer containing packet data to read from</param>
/// <param name="start">Starting index into buf</param>
/// <param name="size">Number of bytes to read from buf</param>
public PacketIn(byte[] buf, int start, int size) : base(buf, start, size)
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="buf">Buffer containing packet data to read from</param>
/// <param name="start">Starting index into buf</param>
/// <param name="size">Number of bytes to read from buf</param>
/// <param name="canwrite">True if writing to the buffer is allowed</param>
public PacketIn(byte[] buf, int start, int size, bool canwrite) : base(buf, start, size, canwrite)
{
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="buf">Buffer containing packet data to read from</param>
/// <param name="start">Starting index into buf</param>
/// <param name="size">Number of bytes to read from buf</param>
/// <param name="canwrite">True if writing to the buffer is allowed</param>
/// <param name="getbuf">True if you can retrieve a copy of the internal buffer</param>
public PacketIn(byte[] buf, int start, int size, bool canwrite, bool getbuf) : base(buf, start, size, canwrite, getbuf)
{
}
/// <summary>
/// Reads in 2 bytes and converts it from network to host byte order
/// </summary>
/// <returns>A 2 byte (short) value</returns>
public virtual ushort ReadShort()
{
byte v1 = (byte)ReadByte();
byte v2 = (byte)ReadByte();
return Marshal.ConvertToUInt16(v1, v2);
}
/// <summary>
/// Reads in 2 bytes
/// </summary>
/// <returns>A 2 byte (short) value in network byte order</returns>
public virtual ushort ReadShortLowEndian()
{
byte v1 = (byte) ReadByte();
byte v2 = (byte) ReadByte();
return Marshal.ConvertToUInt16(v2, v1);
}
/// <summary>
/// Reads in 4 bytes and converts it from network to host byte order
/// </summary>
/// <returns>A 4 byte value</returns>
public virtual uint ReadInt()
{
byte v1 = (byte) ReadByte();
byte v2 = (byte) ReadByte();
byte v3 = (byte) ReadByte();
byte v4 = (byte) ReadByte();
return Marshal.ConvertToUInt32(v1, v2, v3, v4);
}
/// <summary>
/// Skips 'num' bytes ahead in the stream
/// </summary>
/// <param name="num">Number of bytes to skip ahead</param>
public void Skip(long num)
{
Seek(num, SeekOrigin.Current);
}
/// <summary>
/// Reads a null-terminated string from the stream
/// </summary>
/// <param name="maxlen">Maximum number of bytes to read in</param>
/// <returns>A string of maxlen or less</returns>
public virtual string ReadString(int maxlen)
{
byte[] buf = new byte[maxlen];
Read(buf, 0, maxlen);
return Marshal.ConvertToString(buf);
}
/// <summary>
/// Reads in a pascal style string
/// </summary>
/// <returns>A string from the stream</returns>
public virtual string ReadPascalString()
{
int size = ReadByte();
return ReadString(size);
}
}
}