ProtocolVersion pv = session.getProtocolVersion();
if(pv.equals(ProtocolVersion.v8_0))
{
MethodRegistry_8_0 methodRegistry = (MethodRegistry_8_0) MethodRegistry.getMethodRegistry(ProtocolVersion.v8_0);
response = methodRegistry.createChannelOpenOkBody();
}
else if(pv.equals(ProtocolVersion.v0_9))
{
MethodRegistry_0_9 methodRegistry = (MethodRegistry_0_9) MethodRegistry.getMethodRegistry(ProtocolVersion.v0_9);
UUID uuid = UUID.randomUUID();
ByteArrayOutputStream output = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(output);
try
{
dataOut.writeLong(uuid.getMostSignificantBits());
dataOut.writeLong(uuid.getLeastSignificantBits());
dataOut.flush();
dataOut.close();
}
catch (IOException e)
{
// This *really* shouldn't happen as we're not doing any I/O
throw new ConnectionScopedRuntimeException("I/O exception when writing to byte array", e);
}
// should really associate this channelId to the session
byte[] channelName = output.toByteArray();
response = methodRegistry.createChannelOpenOkBody(channelName);
}
else if(pv.equals(ProtocolVersion.v0_91))
{
MethodRegistry_0_91 methodRegistry = (MethodRegistry_0_91) MethodRegistry.getMethodRegistry(ProtocolVersion.v0_91);
UUID uuid = UUID.randomUUID();
ByteArrayOutputStream output = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(output);
try
{
dataOut.writeLong(uuid.getMostSignificantBits());
dataOut.writeLong(uuid.getLeastSignificantBits());
dataOut.flush();
dataOut.close();
}
catch (IOException e)
{
// This *really* shouldn't happen as we're not doing any I/O
throw new ConnectionScopedRuntimeException("I/O exception when writing to byte array", e);
}
// should really associate this channelId to the session
byte[] channelName = output.toByteArray();
response = methodRegistry.createChannelOpenOkBody(channelName);
}
else
{
throw new AMQException(AMQConstant.INTERNAL_ERROR, "Got channel open for protocol version not catered for: " + pv, null);
}