* Adding Packet.BuildPacket() function back, OpenSim uses it

* Converted ParcelAccessEntry.Flags to AccessList enum

git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@2359 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
John Hurliman
2008-11-17 20:29:13 +00:00
parent d4cc4e96e6
commit aede2ea203
3 changed files with 451 additions and 39 deletions

View File

@@ -75,13 +75,13 @@ namespace mapgenerator
writer.WriteLine(" public byte[] " + field.Name + Environment.NewLine + " {");
writer.WriteLine(" get { return _" + field.Name.ToLower() + "; }");
writer.WriteLine(" set" + Environment.NewLine + " {");
writer.WriteLine(" if (value == null) { _" +
writer.WriteLine(" if (value == null) { _" +
field.Name.ToLower() + " = null; return; }");
writer.WriteLine(" if (value.Length > " +
((field.Count == 1) ? "255" : "1100") + ") { throw new OverflowException(" +
writer.WriteLine(" if (value.Length > " +
((field.Count == 1) ? "255" : "1100") + ") { throw new OverflowException(" +
"\"Value exceeds " + ((field.Count == 1) ? "255" : "1100") + " characters\"); }");
writer.WriteLine(" else { _" + field.Name.ToLower() +
" = new byte[value.Length]; Buffer.BlockCopy(value, 0, _" +
" = new byte[value.Length]; Buffer.BlockCopy(value, 0, _" +
field.Name.ToLower() + ", 0, value.Length); }");
writer.WriteLine(" }" + Environment.NewLine + " }");
}
@@ -110,7 +110,7 @@ namespace mapgenerator
break;
case FieldType.IPADDR:
case FieldType.U32:
writer.WriteLine(" " + field.Name +
writer.WriteLine(" " + field.Name +
" = (uint)(bytes[i++] + (bytes[i++] << 8) + (bytes[i++] << 16) + (bytes[i++] << 24));");
break;
case FieldType.IPPORT:
@@ -119,7 +119,7 @@ namespace mapgenerator
" = (ushort)((bytes[i++] << 8) + bytes[i++]);");
break;
case FieldType.U16:
writer.WriteLine(" " + field.Name +
writer.WriteLine(" " + field.Name +
" = (ushort)(bytes[i++] + (bytes[i++] << 8));");
break;
case FieldType.LLQuaternion:
@@ -195,7 +195,7 @@ namespace mapgenerator
writer.WriteLine("Utils.DoubleToBytes(" + field.Name + ", bytes, i); i += 8;");
break;
case FieldType.Fixed:
writer.WriteLine("Buffer.BlockCopy(" + field.Name + ", 0, bytes, i, " + field.Count + ");" +
writer.WriteLine("Buffer.BlockCopy(" + field.Name + ", 0, bytes, i, " + field.Count + ");" +
"i += " + field.Count + ";");
break;
case FieldType.IPPORT:
@@ -247,10 +247,10 @@ namespace mapgenerator
else
{
writer.WriteLine("bytes[i++] = (byte)(" + field.Name + ".Length % 256);");
writer.WriteLine(" bytes[i++] = (byte)((" +
writer.WriteLine(" bytes[i++] = (byte)((" +
field.Name + ".Length >> 8) % 256);");
}
writer.WriteLine(" Buffer.BlockCopy(" + field.Name + ", 0, bytes, i, " +
writer.WriteLine(" Buffer.BlockCopy(" + field.Name + ", 0, bytes, i, " +
field.Name + ".Length); " + "i += " + field.Name + ".Length;");
break;
default:
@@ -261,7 +261,7 @@ namespace mapgenerator
static int GetFieldLength(TextWriter writer, MapField field)
{
switch(field.Type)
switch (field.Type)
{
case FieldType.BOOL:
case FieldType.U8:
@@ -315,7 +315,7 @@ namespace mapgenerator
writer.WriteLine("");
//writer.WriteLine(" /// <summary>Length of this block serialized in bytes</summary>");
writer.WriteLine(" public override int Length" + Environment.NewLine +
" {" + Environment.NewLine +
" {" + Environment.NewLine +
" get" + Environment.NewLine +
" {");
int length = 0;
@@ -354,13 +354,13 @@ namespace mapgenerator
// Constructor for building the class from bytes
//writer.WriteLine(" /// <summary>Constructor for building the block from a byte array</summary>");
writer.WriteLine(" public " + block.Name + "Block(byte[] bytes, ref int i)" + Environment.NewLine +
" {" + Environment.NewLine +
" FromBytes(bytes, ref i);" + Environment.NewLine +
writer.WriteLine(" public " + block.Name + "Block(byte[] bytes, ref int i)" + Environment.NewLine +
" {" + Environment.NewLine +
" FromBytes(bytes, ref i);" + Environment.NewLine +
" }" + Environment.NewLine);
// Initiates instance variables from a byte message
writer.WriteLine(" public override void FromBytes(byte[] bytes, ref int i)" + Environment.NewLine +
writer.WriteLine(" public override void FromBytes(byte[] bytes, ref int i)" + Environment.NewLine +
" {");
// Declare a length variable if we need it for variable fields in this constructor
@@ -374,15 +374,15 @@ namespace mapgenerator
WriteFieldFromBytes(writer, field);
}
writer.WriteLine(" }" + Environment.NewLine +
writer.WriteLine(" }" + Environment.NewLine +
" catch (Exception)" + Environment.NewLine +
" {" + Environment.NewLine +
" {" + Environment.NewLine +
" throw new MalformedDataException();" + Environment.NewLine +
" }" + Environment.NewLine + " }" + Environment.NewLine);
// ToBytes() function
//writer.WriteLine(" /// <summary>Serialize this block to a byte array</summary>");
writer.WriteLine(" public override void ToBytes(byte[] bytes, ref int i)" + Environment.NewLine +
writer.WriteLine(" public override void ToBytes(byte[] bytes, ref int i)" + Environment.NewLine +
" {");
foreach (MapField field in block.Fields)
@@ -438,7 +438,7 @@ namespace mapgenerator
// PacketType member
//writer.WriteLine(" /// <summary>Will return PacketType." + packet.Name+ "</summary>");
writer.WriteLine(" public override PacketType Type { get { return PacketType." +
writer.WriteLine(" public override PacketType Type { get { return PacketType." +
packet.Name + "; } }");
// Block members
@@ -534,7 +534,7 @@ namespace mapgenerator
else
{
// Multiple count block
writer.WriteLine(" if(" + sanitizedName + ".Length < " + block.Count+") {");
writer.WriteLine(" if(" + sanitizedName + ".Length < " + block.Count + ") {");
writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[" + block.Count + "];");
writer.WriteLine(" for(int j = 0; j < " + block.Count + "; j++) " + sanitizedName + "[j] = new " + block.Name + "Block();");
writer.WriteLine(" }");
@@ -593,7 +593,7 @@ namespace mapgenerator
else
{
// Multiple count block
writer.WriteLine(" if(" + sanitizedName + ".Length < " + block.Count+") {");
writer.WriteLine(" if(" + sanitizedName + ".Length < " + block.Count + ") {");
writer.WriteLine(" " + sanitizedName + " = new " + block.Name + "Block[" + block.Count + "];");
writer.WriteLine(" for(int j = 0; j < " + block.Count + "; j++) " + sanitizedName + "[j] = new " + block.Name + "Block();");
writer.WriteLine(" }");
@@ -687,9 +687,9 @@ namespace mapgenerator
if (block.Count == -1)
{
// Variable count block
writer.WriteLine(" for (int j = 0; j < " +
writer.WriteLine(" for (int j = 0; j < " +
sanitizedName + ".Length; j++)" + Environment.NewLine + " {");
writer.WriteLine(" output += " + sanitizedName +
writer.WriteLine(" output += " + sanitizedName +
"[j].ToString() + Environment.NewLine;" + Environment.NewLine + " }");
}
else if (block.Count == 1)
@@ -699,9 +699,9 @@ namespace mapgenerator
else
{
// Multiple count block
writer.WriteLine(" for (int j = 0; j < " +
writer.WriteLine(" for (int j = 0; j < " +
block.Count + "; j++)" + Environment.NewLine + " {");
writer.WriteLine(" output += " + sanitizedName +
writer.WriteLine(" output += " + sanitizedName +
"[j].ToString() + Environment.NewLine;" + Environment.NewLine + " }");
}
}
@@ -730,9 +730,9 @@ namespace mapgenerator
protocol = new ProtocolManager(args[0]);
// Build a list of unused packets
using (StreamReader unusedReader = new StreamReader(args[2]))
using (StreamReader unusedReader = new StreamReader(args[2]))
{
while (unusedReader.Peek() >= 0)
while (unusedReader.Peek() >= 0)
{
unused.Add(unusedReader.ReadLine().Trim());
}
@@ -780,7 +780,7 @@ namespace mapgenerator
" Default,");
foreach (MapPacket packet in protocol.LowMaps)
if (packet != null)
writer.WriteLine(" " + packet.Name + " = " + (0x10000 | packet.ID) + ",");
writer.WriteLine(" " + packet.Name + " = " + (0x10000 | packet.ID) + ",");
foreach (MapPacket packet in protocol.MediumMaps)
if (packet != null)
writer.WriteLine(" " + packet.Name + " = " + (0x20000 | packet.ID) + ",");
@@ -791,10 +791,10 @@ namespace mapgenerator
// Write the base Packet class
writer.WriteLine(
" public abstract partial class Packet" + Environment.NewLine + " {" + Environment.NewLine +
" public abstract partial class Packet" + Environment.NewLine + " {" + Environment.NewLine +
" public abstract Header Header { get; set; }" + Environment.NewLine +
" public abstract PacketType Type { get; }" + Environment.NewLine +
" public abstract void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer);" + Environment.NewLine +
" public abstract void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer);" + Environment.NewLine +
" public abstract void FromBytes(Header header, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer);" + Environment.NewLine +
" public abstract byte[] ToBytes();"
);
@@ -804,22 +804,22 @@ namespace mapgenerator
writer.WriteLine(
" public static PacketType GetType(ushort id, PacketFrequency frequency)" + Environment.NewLine +
" {" + Environment.NewLine +
" switch (frequency)" + Environment.NewLine +
" {" + Environment.NewLine +
" switch (frequency)" + Environment.NewLine +
" {" + Environment.NewLine +
" case PacketFrequency.Low:" + Environment.NewLine +
" switch (id)" + Environment.NewLine +
" switch (id)" + Environment.NewLine +
" {");
foreach (MapPacket packet in protocol.LowMaps)
if (packet != null)
writer.WriteLine(" case " + packet.ID + ": return PacketType." + packet.Name + ";");
writer.WriteLine(" }" + Environment.NewLine +
writer.WriteLine(" }" + Environment.NewLine +
" break;" + Environment.NewLine +
" case PacketFrequency.Medium:" + Environment.NewLine +
" switch (id)" + Environment.NewLine + " {");
foreach (MapPacket packet in protocol.MediumMaps)
if (packet != null)
writer.WriteLine(" case " + packet.ID + ": return PacketType." + packet.Name + ";");
writer.WriteLine(" }" + Environment.NewLine +
writer.WriteLine(" }" + Environment.NewLine +
" break;" + Environment.NewLine +
" case PacketFrequency.High:" + Environment.NewLine +
" switch (id)" + Environment.NewLine + " {");
@@ -830,11 +830,26 @@ namespace mapgenerator
" break;" + Environment.NewLine + " }" + Environment.NewLine + Environment.NewLine +
" return PacketType.Default;" + Environment.NewLine + " }" + Environment.NewLine);
// Write the Packet.BuildPacket(PacketType) function
writer.WriteLine(" public static Packet BuildPacket(PacketType type)");
writer.WriteLine(" {");
foreach (MapPacket packet in protocol.HighMaps)
if (packet != null)
writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();");
foreach (MapPacket packet in protocol.MediumMaps)
if (packet != null)
writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();");
foreach (MapPacket packet in protocol.LowMaps)
if (packet != null)
writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();");
writer.WriteLine(" return null;" + Environment.NewLine);
writer.WriteLine(" }" + Environment.NewLine);
// Write the Packet.BuildPacket() function
writer.WriteLine(
" public static Packet BuildPacket(byte[] packetBuffer, ref int packetEnd, byte[] zeroBuffer)" + Environment.NewLine +
" {" + Environment.NewLine +
" byte[] bytes; ushort id; PacketFrequency freq;" + Environment.NewLine +
" byte[] bytes; ushort id; PacketFrequency freq;" + Environment.NewLine +
" int i = 0;" + Environment.NewLine +
" Header header = Header.BuildHeader(packetBuffer, ref i, ref packetEnd);" + Environment.NewLine +
" if (header.Zerocoded)" + Environment.NewLine +
@@ -856,7 +871,7 @@ namespace mapgenerator
foreach (MapPacket packet in protocol.LowMaps)
if (packet != null)
writer.WriteLine(" case " + packet.ID + ": return new " + packet.Name + "Packet(header, bytes, ref i);");
writer.WriteLine(" }" + Environment.NewLine + " }" + Environment.NewLine +
writer.WriteLine(" }" + Environment.NewLine + " }" + Environment.NewLine +
" else" + Environment.NewLine +
" {" + Environment.NewLine + " id = (ushort)bytes[7]; freq = PacketFrequency.Medium;" + Environment.NewLine +
" switch (id)" + Environment.NewLine + " {");