diff options
Diffstat (limited to 'qpid/dotnet/client-010/client/transport/network/Frame.cs')
-rw-r--r-- | qpid/dotnet/client-010/client/transport/network/Frame.cs | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/qpid/dotnet/client-010/client/transport/network/Frame.cs b/qpid/dotnet/client-010/client/transport/network/Frame.cs new file mode 100644 index 0000000000..b8ec36d8b6 --- /dev/null +++ b/qpid/dotnet/client-010/client/transport/network/Frame.cs @@ -0,0 +1,143 @@ +/* +* +* 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; + +namespace org.apache.qpid.transport.network +{ + public sealed class Frame : INetworkEvent + { + internal static int HEADER_SIZE = 12; + + // XXX: enums? + public const byte L1 = 0; + public const byte L2 = 1; + public const byte L3 = 2; + public const byte L4 = 3; + + public static byte RESERVED = 0x0; + + public static byte VERSION = 0x0; + + public static byte FIRST_SEG = 0x8; + public static byte LAST_SEG = 0x4; + public static byte FIRST_FRAME = 0x2; + public static byte LAST_FRAME = 0x1; + + private readonly byte flags; + private readonly SegmentType type; + private readonly byte track; + private readonly int channel; + private readonly MemoryStream body; + private int _bodySize; + + + public Frame(byte flags, SegmentType type, byte track, int channel, int bodySize, + MemoryStream body) + { + this.flags = flags; + this.type = type; + this.track = track; + this.channel = channel; + this.body = body; + _bodySize = bodySize; + } + + public int BodySize + { + get { return _bodySize; } + } + + public MemoryStream Body + { + get { return body; } + } + + public byte Flags + { + get { return flags; } + } + + public int Channel + { + get { return channel; } + } + + public int Size + { + get { return (int) body.Length;} + } + + public SegmentType Type + { + get { return type; } + } + + public byte Track + { + get { return track; } + } + + private bool Flag(byte mask) + { + return (flags & mask) != 0; + } + + public bool IsFirstSegment() + { + return Flag(FIRST_SEG); + } + + public bool IsLastSegment() + { + return Flag(LAST_SEG); + } + + public bool IsFirstFrame() + { + return Flag(FIRST_FRAME); + } + + public bool IsLastFrame() + { + return Flag(LAST_FRAME); + } + + #region INetworkEvent Methods + + public void ProcessNetworkEvent(INetworkDelegate ndelegate) + { + ndelegate.Frame(this); + } + + #endregion + + public override String ToString() + { + return String.Format + ("[{0:d} {1:d} {2:d} {3} {4}{5}{6}{7}] ", Channel, Size, Track, Type, + IsFirstSegment() ? 1 : 0, IsLastSegment() ? 1 : 0, + IsFirstFrame() ? 1 : 0, IsLastFrame() ? 1 : 0); + } + + + } +} |