public static uint GetPacketCode(this AriesPacketType type) { switch (type) { case AriesPacketType.Voltron: return(0); case AriesPacketType.Electron: return(1000); case AriesPacketType.Gluon: return(1001); case AriesPacketType.RequestChallenge: return(1002); case AriesPacketType.RequestChallengeResponse: return(1003); case AriesPacketType.AnswerChallenge: return(1004); case AriesPacketType.AnswerAccepted: return(1005); case AriesPacketType.RequestClientSession: return(22); case AriesPacketType.RequestClientSessionResponse: return(21); default: throw new Exception("Unknown aries packet type " + type.ToString()); } }
private void EncodeAries(IoSession session, object message, IProtocolEncoderOutput output) { IAriesPacket ariesPacket = (IAriesPacket)message; AriesPacketType ariesPacketType = ariesPacket.GetPacketType(); var payload = IoBuffer.Allocate(128); payload.Order = ByteOrder.LittleEndian; payload.AutoExpand = true; ariesPacket.Serialize(payload, Context); payload.Flip(); int payloadSize = payload.Remaining; IoBuffer headers = IoBuffer.Allocate(12); headers.Order = ByteOrder.LittleEndian; /** * Aries header * uint32 type * uint32 timestamp * uint32 payloadSize */ uint timestamp = (uint)TimeSpan.FromTicks(DateTime.Now.Ticks - session.CreationTime.Ticks).TotalMilliseconds; headers.PutUInt32(ariesPacketType.GetPacketCode()); headers.PutUInt32(timestamp); headers.PutUInt32((uint)payloadSize); if (payloadSize > 0) { headers.AutoExpand = true; headers.Put(payload); } headers.Flip(); output.Write(headers); //output.Flush(); }
private void EncodeVoltronStylePackets(IoSession session, IProtocolEncoderOutput output, AriesPacketType ariesType, ushort packetType, IoBufferSerializable message) { var payload = IoBuffer.Allocate(512); payload.Order = ByteOrder.BigEndian; payload.AutoExpand = true; message.Serialize(payload, Context); payload.Flip(); int payloadSize = payload.Remaining; IoBuffer headers = IoBuffer.Allocate(18); headers.Order = ByteOrder.LittleEndian; /** * Aries header * uint32 type * uint32 timestamp * uint32 payloadSize */ uint timestamp = (uint)TimeSpan.FromTicks(DateTime.Now.Ticks - session.CreationTime.Ticks).TotalMilliseconds; headers.PutUInt32(ariesType.GetPacketCode()); headers.PutUInt32(timestamp); headers.PutUInt32((uint)payloadSize + 6); /** * Voltron header * uint16 type * uint32 payloadSize */ headers.Order = ByteOrder.BigEndian; headers.PutUInt16(packetType); headers.PutUInt32((uint)payloadSize + 6); if (payloadSize > 0) { headers.AutoExpand = true; headers.Put(payload); } headers.Flip(); output.Write(headers); //output.Flush(); }