blob: be5e62bd4f9c6ebf356e0eb6dbadccfb6a7adf4b [file] [log] [blame]
/*
*
* 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.
*
*/
package org.apache.qpid.server.protocol.v0_10;
import static org.apache.qpid.server.transport.util.Functions.str;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.protocol.v0_10.transport.SegmentType;
public final class ServerFrame
{
private static final Logger LOGGER = LoggerFactory.getLogger(ServerFrame.class);
public static final int HEADER_SIZE = 12;
// XXX: enums?
public static final byte L1 = 0;
public static final byte L2 = 1;
public static final byte L3 = 2;
public static final byte L4 = 3;
public static final byte FIRST_SEG = 0x8;
public static final byte LAST_SEG = 0x4;
public static final byte FIRST_FRAME = 0x2;
public static final byte LAST_FRAME = 0x1;
final private byte flags;
final private SegmentType type;
final private byte track;
final private int channel;
final private QpidByteBuffer body;
public ServerFrame(byte flags, SegmentType type, byte track, int channel,
QpidByteBuffer body)
{
this.flags = flags;
this.type = type;
this.track = track;
this.channel = channel;
this.body = body;
}
public QpidByteBuffer getBody()
{
return body;
}
public byte getFlags()
{
return flags;
}
public int getChannel()
{
return channel;
}
public int getSize()
{
return body.remaining();
}
public SegmentType getType()
{
return type;
}
public byte getTrack()
{
return track;
}
private boolean flag(byte mask)
{
return (flags & mask) != 0;
}
public boolean isFirstSegment()
{
return flag(FIRST_SEG);
}
public boolean isLastSegment()
{
return flag(LAST_SEG);
}
public boolean isFirstFrame()
{
return flag(FIRST_FRAME);
}
public boolean isLastFrame()
{
return flag(LAST_FRAME);
}
@Override
public String toString()
{
StringBuilder str = new StringBuilder();
str.append(String.format
("[%05d %05d %1d %s %d%d%d%d] ", getChannel(), getSize(),
getTrack(), getType(),
isFirstSegment() ? 1 : 0, isLastSegment() ? 1 : 0,
isFirstFrame() ? 1 : 0, isLastFrame() ? 1 : 0));
str.append(str(body));
return str.toString();
}
}