Esempio n. 1
0
        /// <summary>
        /// Encodes a message object.
        /// The format looks as follows: 28 bit P2P version, 4 bit message type, 32 bit message ID, 8 bit message command,
        /// 160 bit senderSocket ID, 16 bit senderSocket TCP port, 16 bit senderSocket UDP port, 160 bit recipientSocket ID, 32 bit content types, 8 bit options.
        /// In total, the header is of size 58 bytes.
        /// </summary>
        /// <param name="buffer">The buffer to encode to.</param>
        /// <param name="message">The message with the header that will be encoded.</param>
        public static void EncodeHeader(AlternativeCompositeByteBuf buffer, Message message)
        {
            // TODO add log statemet, also in Java version
            int versionAndType = message.Version << 4 | ((int)message.Type & Utils.Utils.Mask0F); // TODO check if ordinal works

            buffer.WriteInt(versionAndType);                                                      // 4
            buffer.WriteInt(message.MessageId);                                                   // 8
            buffer.WriteByte(message.Command);                                                    // 9
            buffer.WriteBytes(message.Sender.PeerId.ToByteArray());                               // 29
            buffer.WriteShort((short)message.Sender.TcpPort);                                     // 31
            buffer.WriteShort((short)message.Sender.UdpPort);                                     // 33
            buffer.WriteBytes(message.Recipient.PeerId.ToByteArray());                            // 53
            buffer.WriteInt(EncodeContentTypes(message.ContentTypes));                            // 57
            buffer.WriteByte((sbyte)(message.Sender.Options << 4 | message.Options));             // 58 // TODO check if works
        }
Esempio n. 2
0
        /// <summary>
        /// Encodes a message object.
        /// The format looks as follows: 28 bit P2P version, 4 bit message type, 32 bit message ID, 8 bit message command,
        /// 160 bit senderSocket ID, 16 bit senderSocket TCP port, 16 bit senderSocket UDP port, 160 bit recipientSocket ID, 32 bit content types, 8 bit options.
        /// In total, the header is of size 58 bytes.
        /// </summary>
        /// <param name="buffer">The buffer to encode to.</param>
        /// <param name="message">The message with the header that will be encoded.</param>
        public static void EncodeHeader(AlternativeCompositeByteBuf buffer, Message message)
        {
            // TODO add log statemet, also in Java version
            int versionAndType = message.Version << 4 | ((int)message.Type & Utils.Utils.Mask0F); // TODO check if ordinal works

            buffer.WriteInt(versionAndType); // 4
            buffer.WriteInt(message.MessageId); // 8
            buffer.WriteByte(message.Command); // 9
            buffer.WriteBytes(message.Sender.PeerId.ToByteArray()); // 29
            buffer.WriteShort((short) message.Sender.TcpPort); // 31 
            buffer.WriteShort((short) message.Sender.UdpPort); // 33
            buffer.WriteBytes(message.Recipient.PeerId.ToByteArray()); // 53
            buffer.WriteInt(EncodeContentTypes(message.ContentTypes)); // 57
            buffer.WriteByte((sbyte) (message.Sender.Options << 4 | message.Options)); // 58 // TODO check if works
        }
Esempio n. 3
0
        /// <summary>
        /// Converts data to a byte buffer. The first two bytes contain the size of this simple bloom filter. Thus, the bloom filter can only be of length 65536.
        /// </summary>
        /// <param name="buffer"></param>
        public void ToByteBuffer(AlternativeCompositeByteBuf buffer)
        {
            sbyte[] tmp = BitArray.ToByteArray();
            int     currentByteArraySize = tmp.Length;

            buffer.WriteShort((short)(_byteArraySize + SizeHeader));
            buffer.WriteInt(ExpectedElements);
            buffer.WriteBytes(tmp);
            buffer.WriteZero(_byteArraySize - currentByteArraySize);
        }
Esempio n. 4
0
        public void TestEncodeShort()
        {
            AlternativeCompositeByteBuf buffer = AlternativeCompositeByteBuf.CompBuffer();

            buffer.WriteShort(short.MinValue); // -32,768
            buffer.WriteShort(-256);
            buffer.WriteShort(-255);
            buffer.WriteShort(-128);
            buffer.WriteShort(-127);
            buffer.WriteShort(-1);
            buffer.WriteShort(0);
            buffer.WriteShort(1);
            buffer.WriteShort(127);
            buffer.WriteShort(128);
            buffer.WriteShort(255);
            buffer.WriteShort(256);
            buffer.WriteShort(short.MaxValue);  // 32,767

            var bytes = InteropUtil.ExtractBytes(buffer);

            bool interopResult = JarRunner.WriteBytesAndTestInterop(bytes);

            Assert.IsTrue(interopResult);
        }