/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ using System; using System.IO; using System.Text; using org.apache.qpid.transport.network; using Frame = org.apache.qpid.transport.network.Frame; namespace org.apache.qpid.transport { /// ProtocolHeader /// /// public sealed class ProtocolHeader : INetworkEvent, IProtocolEvent { private readonly char[] AMQP = new char[] {'A', 'M', 'Q', 'P'}; private const byte CLASS = 1; private readonly byte instance; private readonly byte major; private readonly byte minor; private int channel; public ProtocolHeader(byte instance, byte major, byte minor) { this.instance = instance; this.major = major; this.minor = minor; } public ProtocolHeader(int instance, int major, int minor) : this((byte)instance, (byte)major, (byte)minor) { } #region INetworkEvent Methods public void ProcessNetworkEvent(INetworkDelegate ndelegate) { ndelegate.Init(this); } #endregion #region IProtocolEvent Methods public int Channel { get { return channel; } set { channel = value; } } public byte EncodedTrack { get { return Frame.L1; } set { throw new NotImplementedException(); } } public void ProcessProtocolEvent(C context, IProtocolDelegate protocoldelegate) { protocoldelegate.Init(context, this); } #endregion public byte Instance { get { return instance; } } public byte Major { get { return major; } } public byte Minor { get { return minor; } } public MemoryStream ToMemoryStream() { MemoryStream buf = new MemoryStream(8); BinaryWriter writer = new BinaryWriter(buf); writer.Write(AMQP); writer.Write(CLASS); writer.Write(instance); writer.Write((sbyte) major); writer.Write((sbyte) minor); return buf; } public override String ToString() { return String.Format("AMQP.{0:d} {1:d}-{2:d}", instance, major, minor); } } }