@Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.buffer(singularArguments.size() * 10); encode(buffer); buffer.resetReaderIndex(); byte[] bytes = new byte[buffer.readableBytes()]; buffer.readBytes(bytes); sb.append(" [buffer=").append(new String(bytes)); sb.append(']'); buffer.release(); return sb.toString(); }
final ByteBuf intermediate = UnpooledByteBufAllocator.DEFAULT.buffer(intermediateBytes.length); try { intermediate.setBytes(0, intermediateBytes);
@Override public ByteBuf transform(String source) { return UnpooledByteBufAllocator.DEFAULT.buffer().writeBytes(source.getBytes(Charset.defaultCharset())); } }
/** * Construct a new packet data serializer. * @return The packet data serializer. */ public static ByteBuf createPacketBuffer() { ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.buffer(); Class<?> packetSerializer = MinecraftReflection.getPacketDataSerializerClass(); try { return (ByteBuf) packetSerializer.getConstructor(ByteBuf.class).newInstance(buffer); } catch (Exception e) { throw new RuntimeException("Cannot construct packet serializer.", e); } }
public static <T> ByteBuf toByteBufJson(T value) { try { ByteBuf byteBuf = UnpooledByteBufAllocator.DEFAULT.buffer(); MAPPER.writeValue(new ByteBufOutputStream(byteBuf), value); return byteBuf; } catch (IOException e) { throw new IllegalArgumentException("Value of type " + value.getClass().getName() + " could not be serialized into JSON", e); } } }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.buffer(singularArguments.size() * 10); encode(buffer); buffer.resetReaderIndex(); byte[] bytes = new byte[buffer.readableBytes()]; buffer.readBytes(bytes); sb.append(" [buffer=").append(new String(bytes)); sb.append(']'); buffer.release(); return sb.toString(); }
private ByteBuf makeResponseBuffer(ByteBuffer requestBuffer) throws InvalidProtocolBufferException, StatusException { GrpcRequest grpcRequest = requestParser.parse(requestBuffer); GrpcResponse grpcResponse = appLogic.apply(grpcRequest); byte[] dataBytes = grpcResponse.toByteArray(); int length = dataBytes.length; byte[] lengthByteBuffer = ByteBuffer.allocate(4).putInt(length).array(); byte[] compressedByteBuffer = ByteBuffer.allocate(1).put((byte) 0).array(); ByteBuf responseBuffer = UnpooledByteBufAllocator.DEFAULT.buffer(length + METADATA_SIZE, length + METADATA_SIZE); responseBuffer.writeBytes(compressedByteBuffer); responseBuffer.writeBytes(lengthByteBuffer); responseBuffer.writeBytes(dataBytes); return responseBuffer; }
private ByteBuf handshake() { ByteBuf buf = UnpooledByteBufAllocator.DEFAULT.buffer(); buf.writeInt( 1 ); buf.writeInt( 0 ); buf.writeInt( 0 ); buf.writeInt( 0 ); return buf; }
private void serializeQueueBody(MultipartReplyBody body, ByteBuf outBuffer) { MultipartReplyQueueCase queueCase = (MultipartReplyQueueCase) body; MultipartReplyQueue queue = queueCase.getMultipartReplyQueue(); for (QueueStats queueStats : queue.getQueueStats()) { ByteBuf queueStatsBuff = UnpooledByteBufAllocator.DEFAULT.buffer(); queueStatsBuff.writeShort(EncodeConstants.EMPTY_LENGTH); queueStatsBuff.writeZero(QUEUE_PADDING); queueStatsBuff.writeInt(queueStats.getQueueId().intValue()); queueStatsBuff.writeLong(queueStats.getTxBytes().longValue()); queueStatsBuff.writeLong(queueStats.getTxPackets().longValue()); queueStatsBuff.writeLong(queueStats.getTxErrors().longValue()); queueStatsBuff.setShort(QUEUE_STATS_LENGTH_INDEX, queueStatsBuff.readableBytes()); outBuffer.writeBytes(queueStatsBuff); } }
private void serializeMeterBody(final MultipartReplyBody body, final ByteBuf outBuffer) { MultipartReplyMeterCase meterCase = (MultipartReplyMeterCase) body; MultipartReplyMeter meter = meterCase.getMultipartReplyMeter(); for (MeterStats meterStats : meter.getMeterStats()) { ByteBuf meterStatsBuff = UnpooledByteBufAllocator.DEFAULT.buffer(); meterStatsBuff.writeInt(meterStats.getMeterId().getValue().intValue()); meterStatsBuff.writeInt(EncodeConstants.EMPTY_LENGTH); meterStatsBuff.writeZero(METER_PADDING); meterStatsBuff.writeInt(meterStats.getFlowCount().intValue()); meterStatsBuff.writeLong(meterStats.getPacketInCount().longValue()); meterStatsBuff.writeLong(meterStats.getByteInCount().longValue()); meterStatsBuff.writeInt(meterStats.getDurationSec().intValue()); meterStatsBuff.writeInt(meterStats.getDurationNsec().intValue()); for (MeterBandStats meterBandStats : meterStats.getMeterBandStats()) { meterStatsBuff.writeLong(meterBandStats.getPacketBandCount().longValue()); meterStatsBuff.writeLong(meterBandStats.getByteBandCount().longValue()); } meterStatsBuff.setInt(METER_LENGTH_INDEX, meterStatsBuff.readableBytes()); outBuffer.writeBytes(meterStatsBuff); } }
private ByteBuf bufferFor( com.google.protobuf.GeneratedMessageV3 protoObject, boolean compressed) { byte[] dataBytes = protoObject.toByteArray(); int length = dataBytes.length; byte[] lengthByteBuffer = ByteBuffer.allocate(4).putInt(length).array(); int compressedFlag = compressed ? 1 : 0; byte[] compressedByteBuffer = ByteBuffer.allocate(1).put((byte) compressedFlag).array(); ByteBuf grpcRequestBuffer = UnpooledByteBufAllocator.DEFAULT.buffer(length + 5, length + 5); grpcRequestBuffer.writeBytes(compressedByteBuffer); grpcRequestBuffer.writeBytes(lengthByteBuffer); grpcRequestBuffer.writeBytes(dataBytes); return grpcRequestBuffer; }
private void serializeGroupBody(final MultipartReplyBody body, final ByteBuf outBuffer) { MultipartReplyGroupCase groupCase = (MultipartReplyGroupCase) body; MultipartReplyGroup group = groupCase.getMultipartReplyGroup(); for (GroupStats groupStats : group.getGroupStats()) { ByteBuf groupStatsBuff = UnpooledByteBufAllocator.DEFAULT.buffer(); groupStatsBuff.writeShort(EncodeConstants.EMPTY_LENGTH); groupStatsBuff.writeZero(GROUP_STATS_PADDING_1); groupStatsBuff.writeInt(groupStats.getGroupId().getValue().intValue()); groupStatsBuff.writeInt(groupStats.getRefCount().intValue()); groupStatsBuff.writeZero(GROUP_STATS_PADDING_2); groupStatsBuff.writeLong(groupStats.getPacketCount().longValue()); groupStatsBuff.writeLong(groupStats.getByteCount().longValue()); groupStatsBuff.writeInt(groupStats.getDurationSec().intValue()); groupStatsBuff.writeInt(groupStats.getDurationNsec().intValue()); for (BucketStats bucketStats : groupStats.getBucketStats()) { groupStatsBuff.writeLong(bucketStats.getPacketCount().longValue()); groupStatsBuff.writeLong(bucketStats.getByteCount().longValue()); } groupStatsBuff.setShort(GROUP_STATS_LENGTH_INDEX, groupStatsBuff.readableBytes()); outBuffer.writeBytes(groupStatsBuff); } }
private void serializeGroupDescBody(final MultipartReplyBody body, final ByteBuf outBuffer, final MultipartReplyMessage message) { MultipartReplyGroupDescCase groupDescCase = (MultipartReplyGroupDescCase) body; MultipartReplyGroupDesc group = groupDescCase.getMultipartReplyGroupDesc(); for (GroupDesc groupDesc : group.getGroupDesc()) { ByteBuf groupDescBuff = UnpooledByteBufAllocator.DEFAULT.buffer(); groupDescBuff.writeShort(EncodeConstants.EMPTY_LENGTH); groupDescBuff.writeByte(groupDesc.getType().getIntValue()); groupDescBuff.writeZero(GROUP_DESC_PADDING); groupDescBuff.writeInt(groupDesc.getGroupId().getValue().intValue()); for (BucketsList bucket : groupDesc.getBucketsList()) { ByteBuf bucketBuff = UnpooledByteBufAllocator.DEFAULT.buffer(); bucketBuff.writeShort(EncodeConstants.EMPTY_LENGTH); bucketBuff.writeShort(bucket.getWeight()); bucketBuff.writeInt(bucket.getWatchPort().getValue().intValue()); bucketBuff.writeInt(bucket.getWatchGroup().intValue()); bucketBuff.writeZero(BUCKET_PADDING); ListSerializer.serializeList(bucket.getAction(), TypeKeyMakerFactory.createActionKeyMaker(message.getVersion()), registry, bucketBuff); bucketBuff.setShort(BUCKET_LENGTH_INDEX, bucketBuff.readableBytes()); groupDescBuff.writeBytes(bucketBuff); } groupDescBuff.setShort(GROUP_DESC_LENGTH_INDEX, groupDescBuff.readableBytes()); outBuffer.writeBytes(groupDescBuff); } }
private void serializeFlowBody(MultipartReplyBody body, ByteBuf outBuffer, MultipartReplyMessage message) { MultipartReplyFlowCase flowCase = (MultipartReplyFlowCase) body; MultipartReplyFlow flow = flowCase.getMultipartReplyFlow(); for (FlowStats flowStats : flow.getFlowStats()) { ByteBuf flowStatsBuff = UnpooledByteBufAllocator.DEFAULT.buffer(); flowStatsBuff.writeShort(EncodeConstants.EMPTY_LENGTH); flowStatsBuff.writeByte(new Long(flowStats.getTableId()).byteValue()); flowStatsBuff.writeZero(FLOW_STATS_PADDING_1); OFSerializer<MatchV10> matchSerializer = registry .getSerializer(new MessageTypeKey<>(message.getVersion(), MatchV10.class)); matchSerializer.serialize(flowStats.getMatchV10(), flowStatsBuff); flowStatsBuff.writeInt(flowStats.getDurationSec().intValue()); flowStatsBuff.writeInt(flowStats.getDurationNsec().intValue()); flowStatsBuff.writeShort(flowStats.getPriority()); flowStatsBuff.writeShort(flowStats.getIdleTimeout()); flowStatsBuff.writeShort(flowStats.getHardTimeout()); flowStatsBuff.writeZero(FLOW_STATS_PADDING_2); flowStatsBuff.writeLong(flowStats.getCookie().longValue()); flowStatsBuff.writeLong(flowStats.getPacketCount().longValue()); flowStatsBuff.writeLong(flowStats.getByteCount().longValue()); ListSerializer.serializeList(flowStats.getAction(), ACTION_KEY_MAKER, registry, flowStatsBuff); flowStatsBuff.setShort(FLOW_STATS_LENGTH_INDEX, flowStatsBuff.readableBytes()); outBuffer.writeBytes(flowStatsBuff); } }
private <T extends GeneratedMessageV3> T protoObjectFor( ByteBuf originalBuffer, GrpcRequestParser<T> parser) { int size = originalBuffer.slice(1, 4).readInt(); ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.buffer(size, size); buffer.writeBytes(originalBuffer.slice(5, size)); try { return parser.parse(buffer.nioBuffer()); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); throw new RuntimeException(e); } }
@Override public byte[] getPayload() { SerializerRegistry registry = new SerializerRegistryImpl(); registry.init(); SerializationFactory factory = new SerializationFactory(); factory.setSerializerTable(registry); ByteBuf output = UnpooledByteBufAllocator.DEFAULT.buffer(); factory.messageToBuffer(getOfVersion(), output, getOfMessage()); byte[] rawPayload = new byte[output.readableBytes()]; output.getBytes(0, rawPayload); return rawPayload; }
public void sendOpenFlowMessageToCore(ZeroMQBaseConnector coreConnector, DataObject msg, short ofVersion, long xId, long datapathId, int moduleId) { SerializationFactory factory = createSerializationFactory(); SerializerRegistry registry = new SerializerRegistryImpl(); registry.init(); ByteBuf output = UnpooledByteBufAllocator.DEFAULT.buffer(); factory.setSerializerTable(registry); factory.messageToBuffer(ofVersion, output, msg); byte[] bytes = new byte[output.readableBytes()]; output.readBytes(bytes); Message message = new Message(NetIPUtils.StubHeaderFromPayload(bytes), bytes); message.getHeader().setMessageType(MessageType.OPENFLOW); message.getHeader().setDatapathId(datapathId); message.getHeader().setModuleId(moduleId); message.getHeader().setTransactionId((int) xId); coreConnector.SendData(message.toByteRepresentation()); }
ByteBuf grpcRequestBuffer = UnpooledByteBufAllocator.DEFAULT.buffer(length + 5, length + 5);
@Test public void testIndicatedSizeSmallerThanActualSizeSingleChunk() { HelloRequest grpcRequest = HelloRequest.newBuilder().setName("myName").build(); byte[] dataBytes = grpcRequest.toByteArray(); byte[] lengthByteBuffer = ByteBuffer.allocate(4).putInt(2).array(); byte[] compressedByteBuffer = ByteBuffer.allocate(1).put((byte) 0).array(); int streamId = 567; int length = dataBytes.length; ByteBuf grpcRequestBuffer = UnpooledByteBufAllocator.DEFAULT.buffer(length + 5, length + 5); grpcRequestBuffer.writeBytes(compressedByteBuffer); grpcRequestBuffer.writeBytes(lengthByteBuffer); grpcRequestBuffer.writeBytes(dataBytes); channel.writeInbound(fullGrpcRequest(grpcRequestBuffer, streamId, true)); Response response = channel.readOutbound(); SegmentedData segmentedData = channel.readOutbound(); assertEquals(HttpResponseStatus.OK, response.status()); assertEquals(streamId, response.streamId()); assertEquals("application/grpc+proto", response.headers().get(HttpHeaderNames.CONTENT_TYPE)); assertEquals("13", Objects.requireNonNull(segmentedData.trailingHeaders()).get("grpc-status")); String actualMessage = grpcDecodedString( Objects.requireNonNull( Objects.requireNonNull(segmentedData.trailingHeaders()).get("grpc-message"))); assertEquals("indicated payload size does not match actual payload size", actualMessage); assertEquals(streamId, segmentedData.streamId()); assertTrue(segmentedData.endOfMessage()); }
@Test public void testDidNotGetAllMetaData() { byte[] lengthByteBuffer = ByteBuffer.allocate(4).putInt(0).array(); int streamId = 456; ByteBuf grpcRequestBuffer = UnpooledByteBufAllocator.DEFAULT.buffer(4, 4); grpcRequestBuffer.writeBytes(lengthByteBuffer); channel.writeInbound(fullGrpcRequest(grpcRequestBuffer, streamId, true)); Response response = channel.readOutbound(); SegmentedData segmentedData = channel.readOutbound(); assertEquals(HttpResponseStatus.OK, response.status()); assertEquals(streamId, response.streamId()); assertEquals("application/grpc+proto", response.headers().get(HttpHeaderNames.CONTENT_TYPE)); assertEquals("13", Objects.requireNonNull(segmentedData.trailingHeaders()).get("grpc-status")); String actualMessage = grpcDecodedString( Objects.requireNonNull( Objects.requireNonNull(segmentedData.trailingHeaders()).get("grpc-message"))); assertEquals("metadata not provided", actualMessage); assertEquals(streamId, segmentedData.streamId()); assertTrue(segmentedData.endOfMessage()); }