Example usage for io.netty.channel.socket DatagramPacket content

List of usage examples for io.netty.channel.socket DatagramPacket content

Introduction

In this page you can find the example usage for io.netty.channel.socket DatagramPacket content.

Prototype

ByteBuf content();

Source Link

Document

Return the data which is held by this ByteBufHolder .

Usage

From source file:com.whizzosoftware.hobson.lifx.api.codec.LIFXFrameDecoder.java

License:Open Source License

@Override
protected void decode(ChannelHandlerContext context, Object o, List list) throws Exception {
    if (o instanceof DatagramPacket) {
        DatagramPacket p = (DatagramPacket) o;
        ByteBuf buf = p.content();
        if (buf.readableBytes() >= 32) {
            int length = buf.getByte(0) + (buf.getByte(1) << 8);
            int type = buf.getByte(32) + (buf.getByte(33) << 8);

            if (buf.readableBytes() >= length) {
                switch (type) {
                case DeviceStateService.TYPE:
                    list.add(readDeviceStateService(p.sender(), buf));
                    break;
                case LightState.TYPE:
                    list.add(readLightState(p.sender(), buf));
                    break;
                case LightStatePower.TYPE:
                    list.add(readLightStatePower(p.sender(), buf));
                    break;
                default:
                    logger.debug("Unknown message type received: {}", type);
                }/*w w  w.  j  av  a  2s  .  com*/
            } else {
                logger.trace("Ignoring datagram with invalid length: {}", length);
            }
        } else {
            logger.trace("Ignoring datagram with invalid length: {}", buf.readableBytes());
        }
    }
}

From source file:com.whizzosoftware.hobson.lifx.api.codec.LIFXFrameEncoderTest.java

License:Open Source License

@Test
public void testSetColorTest() throws Exception {
    byte[] expected = { 0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
            (byte) 0xFF, (byte) 0xAC, 0x0D, 0x00, 0x04, 0x00, 0x00 };
    LIFXFrameEncoder d = new LIFXFrameEncoder();
    List<Object> list = new ArrayList<>();
    d.encode(null, new LightSetColor(null, new HSBK(21845, 65535, 65535, 3500), 1024), list);
    assertEquals(1, list.size());// www  .  j  a v a  2  s  . c  o m
    assertTrue(list.get(0) instanceof DatagramPacket);
    DatagramPacket dp = (DatagramPacket) list.get(0);
    byte[] b = dp.content().array();
    assertEquals(expected.length, b.length);
    for (int i = 0; i < expected.length; i++) {
        assertEquals(expected[i], b[i]);
    }
}

From source file:com.whizzosoftware.hobson.ssdp.SSDPInboundHandler.java

License:Open Source License

@Override
public void channelRead(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
    final DatagramPacket p = (io.netty.channel.socket.DatagramPacket) o;
    ByteBuf buf = p.content();
    byte[] b = new byte[buf.readableBytes()];
    buf.readBytes(b);/*www.  j  a  va2  s.c o  m*/
    final String data = new String(b, 0, b.length, "UTF8");
    buf.release();
    logger.trace("Received data from {}: {}", p.sender().getHostString(), data);

    // publish the advertisement
    try {
        final SSDPPacket packet = SSDPPacket.createWithData(data);
        // ignore packets that originated from Hobson
        if (!p.sender().getAddress().equals(InetAddress.getLocalHost())) {
            if ("M-SEARCH".equals(packet.getMethod())) {
                context.executeInEventLoop(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            context.processDiscoveryRequest(p.sender(), packet);
                        } catch (Throwable e) {
                            logger.error("Error processing discovery packet", e);
                        }
                    }
                });
            } else if (packet.getUSN() != null && packet.getLocation() != null) {
                // execute this in the event loop so we can get on with processing UDP packets as
                // quickly as possible
                context.executeInEventLoop(new Runnable() {
                    @Override
                    public void run() {
                        context.publishDeviceAdvertisement(
                                new DeviceAdvertisement.Builder(packet.getUSN(), SSDPPacket.PROTOCOL_ID)
                                        .rawData(data).object(packet).build(),
                                false);
                    }
                });
            } else {
                logger.trace("Ignoring SSDP packet with USN {} and location: {}", packet.getUSN(),
                        packet.getLocation());
            }
        }
    } catch (Throwable e) {
        logger.error("Error creating SSDP packet", e);
    }
}

From source file:com.zhaopeng.timeserver.protocol.udp.ChineseProverbClientHandler.java

License:Apache License

public void messageReceived(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception {
    String response = msg.content().toString(CharsetUtil.UTF_8);
    if (response.startsWith(": ")) {
        System.out.println(response);
        ctx.close();//from   w  ww . ja va 2 s. c  o  m
    }
}

From source file:com.zhaopeng.timeserver.protocol.udp.ChineseProverbServerHandler.java

License:Apache License

public void messageReceived(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {
    String req = packet.content().toString(CharsetUtil.UTF_8);
    System.out.println(req);//from  www  . j  a  v  a 2s.com
    if ("?".equals(req)) {
        ctx.writeAndFlush(new DatagramPacket(
                Unpooled.copiedBuffer(": " + nextQuote(), CharsetUtil.UTF_8),
                packet.sender()));
    }
}

From source file:de.jackwhite20.apex.udp.pipeline.DatagramDownstreamHandler.java

License:Open Source License

@Override
protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket datagramPacket) throws Exception {

    if (channel.isActive()) {
        channel.writeAndFlush(new DatagramPacket(datagramPacket.content().retain(), sender));
    }/*from   w  ww. j a va 2  s .c  om*/
}

From source file:de.jackwhite20.apex.udp.pipeline.DatagramUpstreamHandler.java

License:Open Source License

@Override
protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket datagramPacket) throws Exception {

    BackendInfo backendInfo = ApexDatagram.getBalancingStrategy().selectBackend("", 0);

    if (backendInfo == null) {
        logger.error("Unable to select a backend server. All down?");
        return;//from w  w w.  jav  a  2s  .c  om
    }

    // Only copy if there is at least one backend server
    ByteBuf copy = datagramPacket.content().copy().retain();

    Bootstrap bootstrap = new Bootstrap().channel(PipelineUtils.getDatagramChannel())
            .handler(new DatagramDownstreamHandler(ctx.channel(), datagramPacket.sender()))
            .group(ctx.channel().eventLoop());

    ChannelFuture channelFuture = bootstrap.bind(0);

    // Add the traffic shaping handler to the channel pipeline
    GlobalTrafficShapingHandler trafficShapingHandler = Apex.getInstance().getTrafficShapingHandler();
    if (trafficShapingHandler != null) {
        // The handler needs to be the first handler in the pipeline
        channelFuture.channel().pipeline().addFirst(trafficShapingHandler);
    }

    channelFuture.addListener((ChannelFutureListener) channelFuture1 -> {

        Channel channel = channelFuture1.channel();
        if (channelFuture1.isSuccess()) {
            channel.writeAndFlush(new DatagramPacket(copy,
                    new InetSocketAddress(backendInfo.getHost(), backendInfo.getPort())));
        } else {
            ChannelUtil.close(channel);
        }

        // Release the buffer
        copy.release();
    });

    // Keep track of request per second
    if (connectionsPerSecondTask != null) {
        connectionsPerSecondTask.inc();
    }
}

From source file:dorkbox.network.pipeline.discovery.ClientDiscoverHostHandler.java

License:Apache License

@Override
protected void channelRead0(final ChannelHandlerContext context, final DatagramPacket message)
        throws Exception {
    ByteBuf byteBuf = message.content();

    InetAddress remoteAddress = message.sender().getAddress();

    if (BroadcastServer.isDiscoveryResponse(byteBuf, remoteAddress, context.channel())) {
        // the state/ports/etc are set inside the isDiscoveryResponse() method...
        context.channel().close();//from  w  ww . j  a  v  a  2 s.c om
    }
}

From source file:dorkbox.network.pipeline.udp.KryoDecoderUdpCrypto.java

License:Apache License

@Override
public void decode(ChannelHandlerContext context, DatagramPacket in, List<Object> out) throws Exception {
    try {//from w  w  w. j  av  a2s .c o  m
        Connection_ last = (Connection_) context.pipeline().last();
        ByteBuf data = in.content();
        Object object = serializationManager.readWithCrypto(last, data, data.readableBytes());
        out.add(object);
    } catch (IOException e) {
        String message = "Unable to deserialize object";
        LoggerFactory.getLogger(this.getClass()).error(message, e);
        throw new IOException(message, e);
    }
}

From source file:eu.xworlds.util.raknet.RaknetDecoder.java

License:Open Source License

@Override
protected void decode(ChannelHandlerContext ctx, DatagramPacket msg, List<Object> out) throws Exception {
    final ByteBuf buf = msg.content();
    buf.order(ByteOrder.BIG_ENDIAN);
    final byte id = buf.readByte();
    final Constructor<? extends RaknetMessage> ctor = this.messages.get(Byte.valueOf(id));
    if (ctor == null) {
        final RaknetMessage result = new InvalidRaknetMessage(id, buf, msg.sender(), msg.recipient());
        out.add(result);/*www.  jav a  2 s.  co m*/
    } else {
        try {
            final RaknetMessage result = ctor.newInstance(buf, msg.sender(), msg.recipient());
            out.add(result);
        } catch (Exception ex) {
            final RaknetMessage result = new InvalidRaknetMessage(id, buf, msg.sender(), msg.recipient(), ex);
            out.add(result);
        }
    }
}