package org.apache.qpid.framing; /* * * 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. * */ import org.apache.mina.common.ByteBuffer; import org.apache.qpid.AMQChannelException; import org.apache.qpid.AMQConnectionException; import org.apache.qpid.AMQException; import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.protocol.AMQVersionAwareProtocolSession; public abstract class AMQMethodBodyImpl implements AMQMethodBody { public static final byte TYPE = 1; public AMQMethodBodyImpl() { } public byte getFrameType() { return TYPE; } /** unsigned short */ abstract protected int getBodySize(); public AMQFrame generateFrame(int channelId) { return new AMQFrame(channelId, this); } /** * Creates an AMQChannelException for the corresponding body type (a channel exception should include the class and * method ids of the body it resulted from). */ /** * Convenience Method to create a channel not found exception * * @param channelId The channel id that is not found * * @return new AMQChannelException */ public AMQChannelException getChannelNotFoundException(int channelId) { return getChannelException(AMQConstant.NOT_FOUND, "Channel not found for id:" + channelId); } public AMQChannelException getChannelException(AMQConstant code, String message) { return new AMQChannelException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), null); } public AMQChannelException getChannelException(AMQConstant code, String message, Throwable cause) { return new AMQChannelException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), cause); } public AMQConnectionException getConnectionException(AMQConstant code, String message) { return new AMQConnectionException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), null); } public AMQConnectionException getConnectionException(AMQConstant code, String message, Throwable cause) { return new AMQConnectionException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), cause); } public void handle(final int channelId, final AMQVersionAwareProtocolSession session) throws AMQException { session.methodFrameReceived(channelId, this); } public int getSize() { return 2 + 2 + getBodySize(); } public void writePayload(ByteBuffer buffer) { EncodingUtils.writeUnsignedShort(buffer, getClazz()); EncodingUtils.writeUnsignedShort(buffer, getMethod()); writeMethodPayload(buffer); } protected byte readByte(ByteBuffer buffer) { return buffer.get(); } protected AMQShortString readAMQShortString(ByteBuffer buffer) { return EncodingUtils.readAMQShortString(buffer); } protected int getSizeOf(AMQShortString string) { return EncodingUtils.encodedShortStringLength(string); } protected void writeByte(ByteBuffer buffer, byte b) { buffer.put(b); } protected void writeAMQShortString(ByteBuffer buffer, AMQShortString string) { EncodingUtils.writeShortStringBytes(buffer, string); } protected int readInt(ByteBuffer buffer) { return buffer.getInt(); } protected void writeInt(ByteBuffer buffer, int i) { buffer.putInt(i); } protected FieldTable readFieldTable(ByteBuffer buffer) throws AMQFrameDecodingException { return EncodingUtils.readFieldTable(buffer); } protected int getSizeOf(FieldTable table) { return EncodingUtils.encodedFieldTableLength(table); //To change body of created methods use File | Settings | File Templates. } protected void writeFieldTable(ByteBuffer buffer, FieldTable table) { EncodingUtils.writeFieldTableBytes(buffer, table); } protected long readLong(ByteBuffer buffer) { return buffer.getLong(); } protected void writeLong(ByteBuffer buffer, long l) { buffer.putLong(l); } protected int getSizeOf(byte[] response) { return (response == null) ? 4 : response.length + 4; } protected void writeBytes(ByteBuffer buffer, byte[] data) { EncodingUtils.writeBytes(buffer,data); } protected byte[] readBytes(ByteBuffer buffer) { return EncodingUtils.readBytes(buffer); } protected short readShort(ByteBuffer buffer) { return EncodingUtils.readShort(buffer); } protected void writeShort(ByteBuffer buffer, short s) { EncodingUtils.writeShort(buffer, s); } protected Content readContent(ByteBuffer buffer) { return null; //To change body of created methods use File | Settings | File Templates. } protected int getSizeOf(Content body) { return 0; //To change body of created methods use File | Settings | File Templates. } protected void writeContent(ByteBuffer buffer, Content body) { //To change body of created methods use File | Settings | File Templates. } protected byte readBitfield(ByteBuffer buffer) { return readByte(buffer); //To change body of created methods use File | Settings | File Templates. } protected int readUnsignedShort(ByteBuffer buffer) { return buffer.getUnsignedShort(); //To change body of created methods use File | Settings | File Templates. } protected void writeBitfield(ByteBuffer buffer, byte bitfield0) { buffer.put(bitfield0); } protected void writeUnsignedShort(ByteBuffer buffer, int s) { EncodingUtils.writeUnsignedShort(buffer, s); } protected long readUnsignedInteger(ByteBuffer buffer) { return buffer.getUnsignedInt(); } protected void writeUnsignedInteger(ByteBuffer buffer, long i) { EncodingUtils.writeUnsignedInteger(buffer, i); } protected short readUnsignedByte(ByteBuffer buffer) { return buffer.getUnsigned(); } protected void writeUnsignedByte(ByteBuffer buffer, short unsignedByte) { EncodingUtils.writeUnsignedByte(buffer, unsignedByte); } protected long readTimestamp(ByteBuffer buffer) { return EncodingUtils.readTimestamp(buffer); } protected void writeTimestamp(ByteBuffer buffer, long t) { EncodingUtils.writeTimestamp(buffer, t); } }