package org.couchbase.mock.memcached.protocol;
import java.net.ProtocolException;
import java.nio.ByteBuffer;
protected final CommandCode cc;
protected final short keylen;
protected final byte extlen;
protected final short vbucket;
protected final int bodylen;
protected final int opaque;
protected final long cas;
protected final ByteBuffer bodyBuffer;
protected BinaryCommand(ByteBuffer header)
throws ProtocolException {
header.rewind();
header.get();
cc = CommandCode.valueOf(header.get());
keylen = header.getShort();
extlen = header.get();
if (header.get() != 0) {
throw new ProtocolException("Illegal datatype");
}
vbucket = header.getShort();
bodylen = header.getInt();
opaque = header.getInt();
cas = header.getLong();
if (bodylen > 0) {
bodyBuffer = ByteBuffer.allocate(bodylen);
} else {
bodyBuffer = null;
}
}
return bodyBuffer;
}
return cc;
}
return opaque;
}
return vbucket;
}
return cas;
}
if (keylen == 0) {
return null;
} else {
return new String(bodyBuffer.array(), extlen, keylen);
}
}
byte ret[] = new byte[bodylen - extlen - keylen];
System.arraycopy(bodyBuffer.array(), extlen + keylen, ret, 0, ret.length);
return ret;
}
return bodylen == 0 || !bodyBuffer.hasRemaining();
}
}