public void Test_UnPack32() { /* Example table from documentation * Value NumHeader16 NumHeader32 * 0 "\x00" "\x00" * 127 "\x7F" "\x7F" * 128 "\x80\x80" "\x80\x00\x00\x80" * 32767 "\xFF\FF" "\x80\x00\x7F\xFF" * 32768 "\x80\00" "\x80\x00\x80\x00" * 32895 "\x80\7F" "\x80\x00\x80\x7F" * 2147483647 - "\xFF\xFF\xFF\xFF" */ uint res = NumHeader.unpack32(new byte[] { 0x00 }); Assert.IsTrue(res == 0); res = NumHeader.unpack32(new byte[] { 0x7F }); Assert.IsTrue(res == 127); res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x00, 0x80 }); Assert.IsTrue(res == 128); res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x7F, 0xFF }); Assert.IsTrue(res == 32767); res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x80, 0x00 }); Assert.IsTrue(res == 32768); res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x80, 0x7F }); Assert.IsTrue(res == 32895); res = NumHeader.unpack32(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }); Assert.IsTrue(res == 2147483647); }
public void Test_Pack32() { /* Example table from documentation * Value NumHeader16 NumHeader32 * 0 "\x00" "\x00" * 127 "\x7F" "\x7F" * 128 "\x80\x80" "\x80\x00\x00\x80" * 32767 "\xFF\FF" "\x80\x00\x7F\xFF" * 32768 "\x80\00" "\x80\x00\x80\x00" * 32895 "\x80\7F" "\x80\x00\x80\x7F" * 2147483647 - "\xFF\xFF\xFF\xFF" */ byte[] res = NumHeader.pack32(0x00); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x00 })); res = NumHeader.pack32(127); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x7F })); res = NumHeader.pack32(128); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x00, 0x80 })); res = NumHeader.pack32(32767); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x7F, 0xFF })); res = NumHeader.pack32(32768); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x00 })); res = NumHeader.pack32(32895); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x7F })); res = NumHeader.pack32(2147483647); Assert.IsTrue(res.SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF })); }
public void Test_decode_32() { NumHeader.decodeReturn ret = NumHeader.decode(new List <byte> { 0x00 }, 0, 32); Assert.AreEqual(ret.value, (uint)0x00); Assert.AreEqual(ret.bytesParsed, 1); ret = NumHeader.decode(new List <byte> { 0x7F }, 0, 32); Assert.AreEqual(ret.value, (uint)0x7F); Assert.AreEqual(ret.bytesParsed, 1); ret = NumHeader.decode(new List <byte> { 0x80, 0x00, 0x00, 0x80 }, 0, 32); Assert.AreEqual(ret.value, (uint)0x80); Assert.AreEqual(ret.bytesParsed, 4); ret = NumHeader.decode(new List <byte> { 0x80, 0x00, 0x7F, 0xFF }, 0, 32); Assert.AreEqual(ret.value, (uint)0x7FFF); Assert.AreEqual(ret.bytesParsed, 4); ret = NumHeader.decode(new List <byte> { 0x80, 0x00, 0x80, 0x00 }, 0, 32); Assert.AreEqual(ret.value, (uint)0x8000); Assert.AreEqual(ret.bytesParsed, 4); ret = NumHeader.decode(new List <byte> { 0xFF, 0xFF, 0xFF, 0xFF }, 0, 32); Assert.AreEqual(ret.value, (uint)0x7FFFFFFF); Assert.AreEqual(ret.bytesParsed, 4); }
public void Test_encode_32() { byte[] res = NumHeader.pack32(0x00); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x00 })); res = NumHeader.pack32(127); //8b res = NumHeader.encode(0, 32).ToArray(); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x00 })); res = NumHeader.encode(0x7F, 32).ToArray(); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x7F })); // 32b /* * 32767 "\xFF\FF" "\x80\x00\x7F\xFF" * 32768 "\x80\00" "\x80\x00\x80\x00" * 32895 "\x80\7F" "\x80\x00\x80\x7F" */ res = NumHeader.encode(0x80, 32).ToArray(); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x00, 0x80 })); res = NumHeader.encode(0x7FFF, 32).ToArray(); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x7F, 0xFF })); res = NumHeader.encode(0x8000, 32).ToArray(); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x00 })); res = NumHeader.encode(0x807F, 32).ToArray(); Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x7F })); res = NumHeader.encode(0x7FFFFFFF, 32).ToArray(); Assert.IsTrue(res.SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF })); }
public int _parseMessage(List <byte> data, int iBegin) { NumHeader.decodeReturn ret = NumHeader.decode(data, iBegin, 32); int iNext; if (ret.bytesParsed < 0) { return(ret.bytesParsed); } else if (ret.bytesParsed == 0) { return(iBegin); } else { iNext = iBegin + (int)ret.bytesParsed; if (iNext + ret.value <= data.Count) { List <byte> msg = data.GetRange(iNext, (int)ret.value); if (isAcknowledgeSeen == false) { if (msg.Count == 8 && (msg.SequenceEqual(new byte[] { 0xbf, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00 }))) { // We are connected isAcknowledgeSeen = true; receiveHandler.onConnected(this); return(iNext + (int)ret.value); } else { throw new ArgumentException("expected acknowledge from apx_server but something else"); } } else if (receiveHandler != null) { receiveHandler.onMsgReceived(msg); return(iNext + (int)ret.value); } else { throw new ArgumentException("receiveHandler is null"); } } else { return(iBegin); } } }
public override void send(List <byte> msg) { List <byte> data = NumHeader.encode((uint)msg.Count, 32); data.AddRange(msg); if (tcpStream != null && tcpStream.CanWrite) { tcpStream.Write(data.ToArray(), 0, data.Count); Console.WriteLine("sending: " + data.Count + " bytes"); } else { Console.WriteLine("Sending rejected, tcpStream not available"); } //Console.WriteLine("_Data_" + Encoding.Default.GetString(data.ToArray()) + "_End_"); }