Java Examples for io.netty.channel.socket.DatagramChannel

The following java examples will help you to understand the usage of io.netty.channel.socket.DatagramChannel. These source code samples are taken from different open source projects.

Example 1
Project: openflowjava-master  File: UdpSimpleClientInitializer.java View source code
@Override
public void initChannel(DatagramChannel ch) throws Exception {
    ChannelPipeline pipeline = ch.pipeline();
    SimpleClientHandler simpleClientHandler = new SimpleClientHandler(isOnlineFuture, scenarioHandler);
    simpleClientHandler.setScenario(scenarioHandler);
    pipeline.addLast("framer", new UdpSimpleClientFramer());
    pipeline.addLast("handler", simpleClientHandler);
    isOnlineFuture = null;
}
Example 2
Project: netty4.0.27Learn-master  File: NioDatagramChannel.java View source code
private static DatagramChannel newSocket(SelectorProvider provider) {
    try {
        /**
             *  Use the {@link SelectorProvider} to open {@link SocketChannel} and so remove condition in
             *  {@link SelectorProvider#provider()} which is called by each DatagramChannel.open() otherwise.
             *
             *  See <a href="See https://github.com/netty/netty/issues/2308">#2308</a>.
             */
        return provider.openDatagramChannel();
    } catch (IOException e) {
        throw new ChannelException("Failed to open a socket.", e);
    }
}
Example 3
Project: usc-master  File: EchoServerUdp.java View source code
@Override
public void initChannel(DatagramChannel ch) throws Exception {
    ChannelPipeline p = ch.pipeline();
    System.out.println("EchoServerUdp initChannel");
    if (enableEncryption) {
        p.addLast(new LoggingHandler("EchoServerUdp Handler 3", LogLevel.TRACE));
        p.addLast(secureService.getUdpServerHandler(ch));
    }
    p.addLast(new LoggingHandler("EchoServerUdp Handler 2", LogLevel.TRACE));
    p.addLast(new EchoServerUdpHandler());
    p.addLast(new LoggingHandler("EchoServerUdp Handler 1", LogLevel.TRACE));
}
Example 4
Project: mediaserver-master  File: UdpNetworkManagerTest.java View source code
@Test
public void testBindChannel() throws InterruptedException {
    // given
    final String address = "127.0.0.1";
    final int port = 60000;
    final ChannelHandler handler = mock(ChannelHandler.class);
    this.manager = new UdpNetworkManager();
    // when - activate manager and bind channel
    manager.activate();
    final ChannelFuture future = manager.bindDatagramChannel(address, port, handler);
    final DatagramChannel channel = (DatagramChannel) future.sync().channel();
    // then
    assertTrue(manager.isActive());
    assertTrue(future.isSuccess());
    assertNotNull(channel);
    assertTrue(channel.isOpen());
    assertTrue(channel.isActive());
    assertFalse(channel.isConnected());
    assertEquals(new InetSocketAddress(address, port), channel.localAddress());
    // when - deactivate manager
    manager.deactivate();
    Thread.sleep(UdpNetworkManager.SHUTDOWN_TIME * 1000);
    // then
    assertFalse(manager.isActive());
    assertFalse(channel.isOpen());
    assertFalse(channel.isActive());
}
Example 5
Project: mpush-master  File: NettyUDPConnector.java View source code
private void createServer(Listener listener, EventLoopGroup eventLoopGroup, ChannelFactory<? extends DatagramChannel> channelFactory) {
    this.eventLoopGroup = eventLoopGroup;
    try {
        Bootstrap b = new Bootstrap();
        //默认是根据机器情况创建Channel,如果机器支持ipv6,则无法使用ipv4的地址加入组播
        b.group(eventLoopGroup).channelFactory(channelFactory).option(ChannelOption.SO_BROADCAST, true).handler(getChannelHandler());
        initOptions(b);
        //直接绑定端口,不要指定host,不然收不到组播消息
        b.bind(port).addListener( future -> {
            if (future.isSuccess()) {
                logger.info("udp server start success on:{}", port);
                if (listener != null)
                    listener.onSuccess(port);
            } else {
                logger.error("udp server start failure on:{}", port, future.cause());
                if (listener != null)
                    listener.onFailure(future.cause());
            }
        });
    } catch (Exception e) {
        logger.error("udp server start exception", e);
        if (listener != null)
            listener.onFailure(e);
        throw new ServiceException("udp server start exception, port=" + port, e);
    }
}
Example 6
Project: TomP2P-master  File: Decoder.java View source code
public boolean decode(ChannelHandlerContext ctx, final ByteBuf buf, InetSocketAddress recipient, final InetSocketAddress sender) {
    LOG.debug("Decoding of TomP2P starts now. Readable: {}.", buf.readableBytes());
    try {
        final int readerBefore = buf.readerIndex();
        // set the sender of this message for handling timeout
        final Attribute<InetSocketAddress> attributeInet = ctx.attr(INET_ADDRESS_KEY);
        attributeInet.set(sender);
        if (!headerDone) {
            headerDone = decodeHeader(buf, recipient, sender);
            if (headerDone) {
                // store the sender as an attribute
                final Attribute<PeerAddress> attributePeerAddress = ctx.attr(PEER_ADDRESS_KEY);
                attributePeerAddress.set(message.sender());
                message.udp(ctx.channel() instanceof DatagramChannel);
                if (message.isFireAndForget() && message.isUdp()) {
                    //TODO: find better place for this
                    Dispatcher.removeTimeout(ctx);
                }
            } else {
                return false;
            }
        }
        final boolean donePayload = decodePayload(buf);
        decodeSignature(buf, readerBefore, donePayload);
        // see https://github.com/netty/netty/issues/1976
        buf.discardSomeReadBytes();
        return donePayload;
    } catch (Exception e) {
        ctx.fireExceptionCaught(e);
        e.printStackTrace();
        return true;
    }
}
Example 7
Project: MINA-master  File: Netty4UdpBenchmarkServer.java View source code
@Override
protected void initChannel(DatagramChannel ch) throws Exception {
    ch.pipeline().addLast(new SimpleChannelInboundHandler<DatagramPacket>() {

        @Override
        public void channelActive(ChannelHandlerContext ctx) throws Exception {
            ctx.attr(STATE_ATTRIBUTE).set(State.WAIT_FOR_FIRST_BYTE_LENGTH);
        }

        @Override
        protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket message) throws Exception {
            ByteBuf buffer = message.content();
            State state = ctx.attr(STATE_ATTRIBUTE).get();
            int length = 0;
            Attribute<Integer> lengthAttribute = ctx.attr(LENGTH_ATTRIBUTE);
            if (lengthAttribute.get() != null) {
                length = lengthAttribute.get();
            }
            while (buffer.readableBytes() > 0) {
                switch(state) {
                    case WAIT_FOR_FIRST_BYTE_LENGTH:
                        length = (buffer.readByte() & 255) << 24;
                        state = State.WAIT_FOR_SECOND_BYTE_LENGTH;
                        break;
                    case WAIT_FOR_SECOND_BYTE_LENGTH:
                        length += (buffer.readByte() & 255) << 16;
                        state = State.WAIT_FOR_THIRD_BYTE_LENGTH;
                        break;
                    case WAIT_FOR_THIRD_BYTE_LENGTH:
                        length += (buffer.readByte() & 255) << 8;
                        state = State.WAIT_FOR_FOURTH_BYTE_LENGTH;
                        break;
                    case WAIT_FOR_FOURTH_BYTE_LENGTH:
                        length += (buffer.readByte() & 255);
                        state = State.READING;
                        if ((length == 0) && (buffer.readableBytes() == 0)) {
                            ctx.writeAndFlush(new DatagramPacket(ACK.retain(1).resetReaderIndex(), message.sender()));
                            state = State.WAIT_FOR_FIRST_BYTE_LENGTH;
                        }
                        break;
                    case READING:
                        int remaining = buffer.readableBytes();
                        if (length > remaining) {
                            length -= remaining;
                            buffer.skipBytes(remaining);
                        } else {
                            buffer.skipBytes(length);
                            ctx.writeAndFlush(new DatagramPacket(ACK.retain(1).resetReaderIndex(), message.sender()));
                            state = State.WAIT_FOR_FIRST_BYTE_LENGTH;
                            length = 0;
                        }
                }
            }
            ctx.attr(STATE_ATTRIBUTE).set(state);
            ctx.attr(LENGTH_ATTRIBUTE).set(length);
        }
    });
}
Example 8
Project: DroidNavi-master  File: TeleLogServer.java View source code
public RESULT start() {
    logger.entry();
    RESULT result = RESULT.SUCCESS;
    try {
        // TCP Server
        ServerBootstrap server = new ServerBootstrap();
        server.channel(NioServerSocketChannel.class).group(m_tcpEventLoop).childHandler(new ChannelInitializer<SocketChannel>() {

            @Override
            protected void initChannel(SocketChannel ch) throws Exception {
                m_pool.add(ch);
                ch.pipeline().addFirst(new PacketHandler());
                ch.pipeline().addLast(new HandshakeHandler());
            }

            ;

            @Override
            public void channelInactive(ChannelHandlerContext ctx) throws Exception {
                m_pool.remove(ctx.channel());
            }
        }).option(ChannelOption.SO_BACKLOG, 3).childOption(ChannelOption.SO_KEEPALIVE, true);
        m_tcpFuture = server.bind(TCP_LISTEN_PORT).sync();
        // MultiCast Server
        InetSocketAddress remoteAddr = new InetSocketAddress(InetAddress.getByName("224.1.1.1"), MULTI_LIST_PORT);
        Bootstrap b = new Bootstrap();
        b.group(m_multiEventLoop).option(ChannelOption.SO_BROADCAST, true).option(ChannelOption.SO_REUSEADDR, true).option(ChannelOption.IP_MULTICAST_TTL, 2).option(ChannelOption.SO_RCVBUF, 1048576).channelFactory(new ChannelFactory<OioDatagramChannel>() {

            @Override
            public OioDatagramChannel newChannel() {
                OioDatagramChannel ch = new OioDatagramChannel();
                return ch;
            }
        });
        b.handler(new ChannelInitializer<OioDatagramChannel>() {

            @Override
            protected void initChannel(OioDatagramChannel ch) throws Exception {
                ch.pipeline().addFirst(new PacketHandler());
                ch.pipeline().addLast(new MulticastInbound());
            }
        });
        m_multiFuture = b.bind(MULTI_LIST_PORT).sync();
        DatagramChannel ch = (DatagramChannel) m_multiFuture.channel();
        // Join Group on all active interfaces
        Enumeration<NetworkInterface> nics = NetworkInterface.getNetworkInterfaces();
        while (nics.hasMoreElements()) {
            NetworkInterface nic = nics.nextElement();
            if (nic.isUp() && !nic.isVirtual()) {
                ch.joinGroup(remoteAddr, nic);
            }
        }
        // Set multi in order to relay TCP events
        EventOperator.instance().setMultiCast(ch);
        logger.info("Servers started.");
    } catch (BindException e) {
        shutdown();
        result = (m_tcpFuture != null && m_tcpFuture.isSuccess()) ? RESULT.MULTI_BIND_EXCEPTION.cause(e) : RESULT.TCP_BIND_EXCEPTION.cause(e);
    } catch (Throwable e) {
        shutdown();
        result = RESULT.OTHER_EXCEPTION.cause(e);
    }
    logger.exit(result);
    return result;
}
Example 9
Project: camel-master  File: SingleUDPNettyServerBootstrapFactory.java View source code
protected void startServerBootstrap() throws Exception {
    // create non-shared worker pool
    EventLoopGroup wg = configuration.getWorkerGroup();
    if (wg == null) {
        // create new pool which we should shutdown when stopping as its not shared
        workerGroup = new NettyWorkerPoolBuilder().withNativeTransport(configuration.isNativeTransport()).withWorkerCount(configuration.getWorkerCount()).withName("NettyServerTCPWorker").build();
        wg = workerGroup;
    }
    Bootstrap bootstrap = new Bootstrap();
    if (configuration.isNativeTransport()) {
        bootstrap.group(wg).channel(EpollDatagramChannel.class);
    } else {
        bootstrap.group(wg).channel(NioDatagramChannel.class);
    }
    // We cannot set the child option here      
    bootstrap.option(ChannelOption.SO_REUSEADDR, configuration.isReuseAddress());
    bootstrap.option(ChannelOption.SO_SNDBUF, configuration.getSendBufferSize());
    bootstrap.option(ChannelOption.SO_RCVBUF, configuration.getReceiveBufferSize());
    bootstrap.option(ChannelOption.SO_BROADCAST, configuration.isBroadcast());
    bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, configuration.getConnectTimeout());
    // only set this if user has specified
    if (configuration.getReceiveBufferSizePredictor() > 0) {
        bootstrap.option(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(configuration.getReceiveBufferSizePredictor()));
    }
    if (configuration.getBacklog() > 0) {
        bootstrap.option(ChannelOption.SO_BACKLOG, configuration.getBacklog());
    }
    Map<String, Object> options = configuration.getOptions();
    if (options != null) {
        for (Map.Entry<String, Object> entry : options.entrySet()) {
            String value = entry.getValue().toString();
            ChannelOption<Object> option = ChannelOption.valueOf(entry.getKey());
            //TODO: find a way to add primitive Netty options without having to add them to the Camel registry.
            if (EndpointHelper.isReferenceParameter(value)) {
                String name = value.substring(1);
                Object o = CamelContextHelper.mandatoryLookup(camelContext, name);
                bootstrap.option(option, o);
            } else {
                bootstrap.option(option, value);
            }
        }
    }
    LOG.debug("Created Bootstrap {}", bootstrap);
    // set the pipeline factory, which creates the pipeline for each newly created channels
    bootstrap.handler(pipelineFactory);
    InetSocketAddress hostAddress = new InetSocketAddress(configuration.getHost(), configuration.getPort());
    SubnetUtils multicastSubnet = new SubnetUtils(MULTICAST_SUBNET);
    if (multicastSubnet.getInfo().isInRange(configuration.getHost())) {
        ChannelFuture channelFuture = bootstrap.bind(configuration.getPort()).sync();
        channel = channelFuture.channel();
        DatagramChannel datagramChannel = (DatagramChannel) channel;
        String networkInterface = configuration.getNetworkInterface() == null ? LOOPBACK_INTERFACE : configuration.getNetworkInterface();
        multicastNetworkInterface = NetworkInterface.getByName(networkInterface);
        ObjectHelper.notNull(multicastNetworkInterface, "No network interface found for '" + networkInterface + "'.");
        LOG.info("ConnectionlessBootstrap joining {}:{} using network interface: {}", new Object[] { configuration.getHost(), configuration.getPort(), multicastNetworkInterface.getName() });
        datagramChannel.joinGroup(hostAddress, multicastNetworkInterface).syncUninterruptibly();
        allChannels.add(datagramChannel);
    } else {
        LOG.info("ConnectionlessBootstrap binding to {}:{}", configuration.getHost(), configuration.getPort());
        ChannelFuture channelFuture = bootstrap.bind(hostAddress).sync();
        channel = channelFuture.channel();
        allChannels.add(channel);
    }
}
Example 10
Project: hawkular-metrics-master  File: PTrans.java View source code
/**
     * Starts this PTrans instance. the calling thread will be blocked until another thread calls {@link #stop()}.
     */
public void start() throws InterruptedException {
    log.infoStarting();
    group = new NioEventLoopGroup();
    workerGroup = new NioEventLoopGroup();
    URI metricsUrl = configuration.getMetricsUrl();
    VertxHawkularOptions metricsOptions = new VertxHawkularOptions().setEnabled(true).setHost(metricsUrl.getHost()).setPort(metricsUrl.getPort()).setMetricsServiceUri(metricsUrl.getPath()).setHttpOptions(new HttpClientOptions().setMaxPoolSize(configuration.getMaxConnections()).setSsl("https".equalsIgnoreCase(metricsUrl.getScheme()))).setTenant(configuration.getTenant()).setSendTenantHeader(configuration.isSendTenant()).setAuthenticationOptions(new AuthenticationOptions().setEnabled(configuration.isAuthEnabled()).setId(configuration.getAuthId()).setSecret(configuration.getAuthSecret())).setHttpHeaders(configuration.getHttpHeaders()).setBatchSize(configuration.getBatchSize()).setMetricsBridgeEnabled(true).setMetricsBridgeAddress(Constants.METRIC_ADDRESS);
    vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(metricsOptions));
    nettyToVertxHandler = new NettyToVertxHandler(vertx.eventBus());
    Set<Service> services = configuration.getServices();
    List<ChannelFuture> closeFutures = new ArrayList<>(services.size());
    if (services.contains(Service.TCP)) {
        ServerBootstrap serverBootstrap = new ServerBootstrap().group(group, workerGroup).channel(NioServerSocketChannel.class).localAddress(configuration.getTcpPort()).childHandler(new TcpChannelInitializer(nettyToVertxHandler));
        ChannelFuture tcpBindFuture = serverBootstrap.bind().syncUninterruptibly();
        log.infoServerListening("Server", "TCP", tcpBindFuture.channel().localAddress());
        closeFutures.add(tcpBindFuture.channel().closeFuture());
    }
    if (services.contains(Service.UDP)) {
        Bootstrap udpBootstrap = new Bootstrap().group(group).channel(NioDatagramChannel.class).localAddress(configuration.getUdpPort()).handler(new UdpChannelInitializer(nettyToVertxHandler));
        ChannelFuture udpBindFuture = udpBootstrap.bind().syncUninterruptibly();
        log.infoServerListening("Syslogd", "UDP", udpBindFuture.channel().localAddress());
        closeFutures.add(udpBindFuture.channel().closeFuture());
    }
    if (services.contains(Service.GANGLIA)) {
        NetworkInterface mcIf;
        try {
            String multicastIfOverride = configuration.getMulticastIfOverride();
            if (multicastIfOverride == null) {
                Inet4Address hostAddr = (Inet4Address) InetAddress.getLocalHost();
                mcIf = NetworkInterface.getByInetAddress(hostAddr);
            } else {
                mcIf = NetworkInterface.getByName(multicastIfOverride);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        InetSocketAddress gangliaSocket = new InetSocketAddress(configuration.getGangliaGroup(), configuration.getGangliaPort());
        Bootstrap gangliaBootstrap = new Bootstrap().group(group).channel(NioDatagramChannel.class).option(ChannelOption.SO_REUSEADDR, true).option(ChannelOption.IP_MULTICAST_IF, mcIf).localAddress(gangliaSocket).handler(new GangliaChannelInitializer(nettyToVertxHandler));
        log.tracef("Ganglia bootstrap is %s", gangliaBootstrap);
        ChannelFuture gangliaBindFuture = gangliaBootstrap.bind().syncUninterruptibly();
        log.infoServerListening("Ganglia", "UDP", gangliaBindFuture.channel().localAddress());
        DatagramChannel gangliaChannel = (DatagramChannel) gangliaBindFuture.channel();
        gangliaChannel.joinGroup(gangliaSocket, mcIf);
        log.trace("Joined the Ganglia group");
        closeFutures.add(gangliaChannel.closeFuture());
    }
    if (services.contains(Service.STATSD)) {
        Bootstrap statsdBootstrap = new Bootstrap().group(group).channel(NioDatagramChannel.class).localAddress(configuration.getStatsDport()).handler(new StatsdChannelInitializer(nettyToVertxHandler));
        ChannelFuture statsdBindFuture = statsdBootstrap.bind().syncUninterruptibly();
        log.infoServerListening("Statsd", "UDP", statsdBindFuture.channel().localAddress());
        closeFutures.add(statsdBindFuture.channel().closeFuture());
    }
    if (services.contains(Service.GRAPHITE)) {
        CountDownLatch latch = new CountDownLatch(1);
        vertx.deployVerticle(new GraphiteServer(configuration),  handler -> {
            log.infoServerListening("Graphite", "TCP", configuration.getGraphitePort());
            latch.countDown();
        });
        latch.await();
    }
    if (services.contains(Service.COLLECTD)) {
        vertx.deployVerticle(new CollectdServer(configuration),  handler -> {
            log.infoServerListening("Collectd", "UDP", configuration.getCollectdPort());
        });
    }
    log.infoStarted();
    closeFutures.forEach(ChannelFuture::syncUninterruptibly);
}
Example 11
Project: pbase-master  File: ClusterStatusPublisher.java View source code
@Override
public void connect(Configuration conf) throws IOException {
    String mcAddress = conf.get(HConstants.STATUS_MULTICAST_ADDRESS, HConstants.DEFAULT_STATUS_MULTICAST_ADDRESS);
    int port = conf.getInt(HConstants.STATUS_MULTICAST_PORT, HConstants.DEFAULT_STATUS_MULTICAST_PORT);
    final InetAddress ina;
    try {
        ina = InetAddress.getByName(mcAddress);
    } catch (UnknownHostException e) {
        close();
        throw new IOException("Can't connect to " + mcAddress, e);
    }
    final InetSocketAddress isa = new InetSocketAddress(mcAddress, port);
    InternetProtocolFamily family;
    InetAddress localAddress;
    if (ina instanceof Inet6Address) {
        localAddress = Addressing.getIp6Address();
        family = InternetProtocolFamily.IPv6;
    } else {
        localAddress = Addressing.getIp4Address();
        family = InternetProtocolFamily.IPv4;
    }
    NetworkInterface ni = NetworkInterface.getByInetAddress(localAddress);
    Bootstrap b = new Bootstrap();
    b.group(group).channelFactory(new HBaseDatagramChannelFactory<Channel>(NioDatagramChannel.class, family)).option(ChannelOption.SO_REUSEADDR, true).handler(new ClusterStatusEncoder(isa));
    try {
        channel = (DatagramChannel) b.bind(new InetSocketAddress(0)).sync().channel();
        channel.joinGroup(ina, ni, null, channel.newPromise()).sync();
        channel.connect(isa).sync();
    } catch (InterruptedException e) {
        close();
        throw ExceptionUtil.asInterrupt(e);
    }
}
Example 12
Project: vert.x-master  File: DnsResolverProvider.java View source code
@Override
protected NameResolver<InetAddress> newNameResolver(EventLoop eventLoop, ChannelFactory<? extends DatagramChannel> channelFactory, DnsServerAddresses nameServerAddresses) throws Exception {
    DnsNameResolverBuilder builder = new DnsNameResolverBuilder((EventLoop) executor);
    builder.hostsFileEntriesResolver( inetHost -> {
        InetAddress addr = entries.get(inetHost);
        if (addr == null) {
            addr = entries.get(inetHost.toLowerCase(Locale.ENGLISH));
        }
        return addr;
    });
    builder.channelType(NioDatagramChannel.class);
    builder.nameServerAddresses(nameServerAddresses);
    builder.optResourceEnabled(options.isOptResourceEnabled());
    builder.ttl(options.getCacheMinTimeToLive(), options.getCacheMaxTimeToLive());
    builder.negativeTtl(options.getCacheNegativeTimeToLive());
    builder.queryTimeoutMillis(options.getQueryTimeout());
    builder.maxQueriesPerResolve(options.getMaxQueries());
    builder.recursionDesired(options.getRdFlag());
    if (options.getSearchDomains() != null) {
        builder.searchDomains(options.getSearchDomains());
        int ndots = options.getNdots();
        if (ndots == -1) {
            ndots = AddressResolver.DEFAULT_NDOTS_RESOLV_OPTION;
        }
        builder.ndots(ndots);
    }
    return builder.build();
}
Example 13
Project: tomp2p_5-master  File: TomP2PDecoder.java View source code
public boolean decode0(ChannelHandlerContext ctx, final ByteBuf buf, InetSocketAddress recipient, final InetSocketAddress sender) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException {
    // set the sender of this message for handling timeout
    final Attribute<InetSocketAddress> attributeInet = ctx.attr(INET_ADDRESS_KEY);
    attributeInet.set(sender);
    // we don't have the header yet, we need the full header first
    if (message == null) {
        if (buf.readableBytes() < MessageHeaderCodec.HEADER_SIZE) {
            // wait for more data
            return false;
        }
        message = MessageHeaderCodec.decodeHeader(buf, recipient, sender);
        // store the sender as an attribute
        final Attribute<PeerAddress> attributePeerAddress = ctx.attr(PEER_ADDRESS_KEY);
        attributePeerAddress.set(message.getSender());
        // we have set the content types already
        message.presetContentTypes(true);
        message.udp(ctx.channel() instanceof DatagramChannel);
        for (Content content : message.getContentTypes()) {
            if (content == Content.EMPTY) {
                break;
            }
            if (content == Content.PUBLIC_KEY_SIGNATURE) {
                message.setHintSign();
            }
            contentTypes.offer(content);
        }
        // in the future
        if (message.isKeepAlive()) {
            if (ctx.channel().pipeline().names().contains("timeout-server0")) {
                ctx.channel().pipeline().remove("timeout-server0");
            }
            if (ctx.channel().pipeline().names().contains("timeout-server1")) {
                ctx.channel().pipeline().remove("timeout-server1");
            }
        }
        LOG.debug("parsed message {}", message);
    }
    LOG.debug("about to pass message {} to {}", message, message.senderSocket());
    if (!message.hasContent()) {
        return true;
    }
    // payload comes here
    int size;
    while (contentTypes.size() > 0) {
        Content content = contentTypes.peek();
        switch(content) {
            case INTEGER:
                if (buf.readableBytes() < Utils.INTEGER_BYTE_SIZE) {
                    return false;
                }
                message.setInteger(buf.readInt());
                lastContent = contentTypes.poll();
                break;
            case LONG:
                if (buf.readableBytes() < Utils.LONG_BYTE_SIZE) {
                    return false;
                }
                message.setLong(buf.readLong());
                lastContent = contentTypes.poll();
                break;
            case KEY:
                if (buf.readableBytes() < Number160.BYTE_ARRAY_SIZE) {
                    return false;
                }
                byte[] me = new byte[Number160.BYTE_ARRAY_SIZE];
                buf.readBytes(me);
                message.setKey(new Number160(me));
                lastContent = contentTypes.poll();
                break;
            case BLOOM_FILTER:
                if (buf.readableBytes() < Utils.SHORT_BYTE_SIZE) {
                    return false;
                }
                size = buf.getUnsignedShort(buf.readerIndex());
                if (buf.readableBytes() < size) {
                    return false;
                }
                message.setBloomFilter(new SimpleBloomFilter<Number160>(buf));
                lastContent = contentTypes.poll();
                break;
            case SET_NEIGHBORS:
                if (neighborSize == -1 && buf.readableBytes() < Utils.BYTE_SIZE) {
                    return false;
                }
                if (neighborSize == -1) {
                    neighborSize = buf.readUnsignedByte();
                }
                if (neighborSet == null) {
                    neighborSet = new NeighborSet(-1, new ArrayList<PeerAddress>(neighborSize));
                }
                for (int i = neighborSet.size(); i < neighborSize; i++) {
                    int header = buf.getUnsignedShort(buf.readerIndex());
                    size = PeerAddress.size(header);
                    if (buf.readableBytes() < size) {
                        return false;
                    }
                    PeerAddress pa = new PeerAddress(buf);
                    neighborSet.add(pa);
                }
                message.setNeighborsSet(neighborSet);
                lastContent = contentTypes.poll();
                neighborSize = -1;
                neighborSet = null;
                break;
            case SET_KEY480:
                if (keysSize == -1 && buf.readableBytes() < Utils.INTEGER_BYTE_SIZE) {
                    return false;
                }
                if (keysSize == -1) {
                    keysSize = buf.readInt();
                }
                if (keys == null) {
                    keys = new Keys(new ArrayList<Number480>(keysSize));
                }
                for (int i = keys.size(); i < keysSize; i++) {
                    if (buf.readableBytes() < Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE) {
                        return false;
                    }
                    byte[] me2 = new byte[Number160.BYTE_ARRAY_SIZE];
                    buf.readBytes(me2);
                    Number160 locationKey = new Number160(me2);
                    buf.readBytes(me2);
                    Number160 domainKey = new Number160(me2);
                    buf.readBytes(me2);
                    Number160 contentKey = new Number160(me2);
                    keys.add(new Number480(locationKey, domainKey, contentKey));
                }
                message.setKeys(keys);
                lastContent = contentTypes.poll();
                keysSize = -1;
                keys = null;
                break;
            case MAP_KEY480_DATA:
                if (mapsSize == -1 && buf.readableBytes() < Utils.INTEGER_BYTE_SIZE) {
                    return false;
                }
                if (mapsSize == -1) {
                    mapsSize = buf.readInt();
                }
                if (dataMap == null) {
                    dataMap = new DataMap(new HashMap<Number480, Data>(2 * mapsSize));
                }
                if (data != null) {
                    if (!data.decodeBuffer(buf)) {
                        return false;
                    }
                    if (!data.decodeDone(buf)) {
                        return false;
                    }
                    data = null;
                }
                for (int i = dataMap.size(); i < mapsSize; i++) {
                    if (buf.readableBytes() < Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE) {
                        return false;
                    }
                    byte[] me3 = new byte[Number160.BYTE_ARRAY_SIZE];
                    buf.readBytes(me3);
                    Number160 locationKey = new Number160(me3);
                    buf.readBytes(me3);
                    Number160 domainKey = new Number160(me3);
                    buf.readBytes(me3);
                    Number160 contentKey = new Number160(me3);
                    data = Data.decodeHeader(buf);
                    if (data == null) {
                        return false;
                    }
                    dataMap.dataMap().put(new Number480(locationKey, domainKey, contentKey), data);
                    if (message.isSign()) {
                        data.publicKey(message.publicKeyReference());
                    }
                    if (!data.decodeBuffer(buf)) {
                        return false;
                    }
                    if (!data.decodeDone(buf)) {
                        return false;
                    }
                    data = null;
                }
                message.setDataMap(dataMap);
                lastContent = contentTypes.poll();
                mapsSize = -1;
                dataMap = null;
                break;
            case MAP_KEY480_KEY:
                if (keysMapSize == -1 && buf.readableBytes() < Utils.INTEGER_BYTE_SIZE) {
                    return false;
                }
                if (keysMapSize == -1) {
                    keysMapSize = buf.readInt();
                }
                if (keysMap == null) {
                    keysMap = new KeysMap(new HashMap<Number480, Number160>(2 * keysMapSize));
                }
                for (int i = keysMap.size(); i < keysMapSize; i++) {
                    if (buf.readableBytes() < Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE) {
                        return false;
                    }
                    byte[] me3 = new byte[Number160.BYTE_ARRAY_SIZE];
                    buf.readBytes(me3);
                    Number160 locationKey = new Number160(me3);
                    buf.readBytes(me3);
                    Number160 domainKey = new Number160(me3);
                    buf.readBytes(me3);
                    Number160 contentKey = new Number160(me3);
                    buf.readBytes(me3);
                    Number160 valueKey = new Number160(me3);
                    keysMap.put(new Number480(locationKey, domainKey, contentKey), valueKey);
                }
                message.setKeysMap(keysMap);
                lastContent = contentTypes.poll();
                keysMapSize = -1;
                keysMap = null;
                break;
            case BYTE_BUFFER:
                if (bufferSize == -1 && buf.readableBytes() < Utils.INTEGER_BYTE_SIZE) {
                    return false;
                }
                if (bufferSize == -1) {
                    bufferSize = buf.readInt();
                }
                if (buffer == null) {
                    ByteBuf tmp = Unpooled.compositeBuffer();
                    buffer = new Buffer(tmp, bufferSize);
                }
                int already = buffer.alreadyRead();
                int readable = buf.readableBytes();
                int remaining = bufferSize - already;
                int toread = Math.min(remaining, readable);
                //Unpooled.copiedBuffer(buf.duplicate().writerIndex(writerIndex))
                buffer.addComponent(buf.slice(buf.readerIndex(), toread));
                // slice and addComponent do not modifie the reader or the writer, thus we need to do this on our own
                buf.skipBytes(toread);
                // increase writer index
                if (buffer.incRead(toread) != bufferSize) {
                    LOG.debug("we are still looking for data, indicate that we are not finished yet, " + "read = {}, size = {}", buffer.alreadyRead(), bufferSize);
                    return false;
                }
                message.setBuffer(buffer);
                lastContent = contentTypes.poll();
                bufferSize = -1;
                buffer = null;
                break;
            case SET_TRACKER_DATA:
                if (trackerDataSize == -1 && buf.readableBytes() < Utils.BYTE_SIZE) {
                    return false;
                }
                if (trackerDataSize == -1) {
                    trackerDataSize = buf.readUnsignedByte();
                }
                if (trackerData == null) {
                    trackerData = new TrackerData(new HashMap<PeerAddress, Data>(2 * trackerDataSize), message.getSender());
                }
                if (currentTrackerData != null) {
                    if (!currentTrackerData.decodeBuffer(buf)) {
                        return false;
                    }
                    if (!currentTrackerData.decodeDone(buf)) {
                        return false;
                    }
                    currentTrackerData = null;
                }
                for (int i = trackerData.size(); i < trackerDataSize; i++) {
                    if (buf.readableBytes() < Utils.BYTE_SIZE) {
                        return false;
                    }
                    int header = buf.getUnsignedShort(buf.readerIndex());
                    size = PeerAddress.size(header);
                    if (buf.readableBytes() < size) {
                        return false;
                    }
                    PeerAddress pa = new PeerAddress(buf);
                    currentTrackerData = Data.decodeHeader(buf);
                    if (currentTrackerData == null) {
                        return false;
                    }
                    trackerData.map().put(pa, currentTrackerData);
                    if (message.isSign()) {
                        currentTrackerData.publicKey(message.publicKeyReference());
                    }
                    if (!currentTrackerData.decodeBuffer(buf)) {
                        return false;
                    }
                    if (!currentTrackerData.decodeDone(buf)) {
                        return false;
                    }
                    currentTrackerData = null;
                }
                message.setTrackerData(trackerData);
                lastContent = contentTypes.poll();
                trackerDataSize = -1;
                trackerData = null;
                break;
            case PUBLIC_KEY_SIGNATURE:
                if (buf.readableBytes() < 2) {
                    return false;
                }
                int len = buf.getUnsignedShort(buf.readerIndex());
                if (buf.readableBytes() + Utils.SHORT_BYTE_SIZE < len) {
                    return false;
                }
                me = new byte[len];
                buf.skipBytes(2);
                buf.readBytes(me);
                Signature signature = signatureFactory.signatureInstance();
                PublicKey receivedPublicKey = signatureFactory.decodePublicKey(me);
                signature.initVerify(receivedPublicKey);
                message.signatureForVerification(signature, receivedPublicKey);
                lastContent = contentTypes.poll();
                break;
            default:
            case EMPTY:
                break;
        }
    }
    if (message.isSign()) {
        if (buf.readableBytes() < Number160.BYTE_ARRAY_SIZE + Number160.BYTE_ARRAY_SIZE) {
            return false;
        }
        byte[] me = new byte[Number160.BYTE_ARRAY_SIZE];
        buf.readBytes(me);
        Number160 number1 = new Number160(me);
        buf.readBytes(me);
        Number160 number2 = new Number160(me);
        SHA1Signature signatureEncode = new SHA1Signature(number1, number2);
        message.receivedSignature(signatureEncode);
    }
    return true;
}
Example 14
Project: c5-replicator-master  File: BeaconService.java View source code
@Override
protected void doStart() {
    eventLoopGroup.next().execute(() -> {
        bootstrap = new Bootstrap();
        bootstrap.group(eventLoopGroup).channel(NioDatagramChannel.class).option(ChannelOption.SO_BROADCAST, true).option(ChannelOption.SO_REUSEADDR, true).handler(new ChannelInitializer<DatagramChannel>() {

            @Override
            protected void initChannel(DatagramChannel ch) throws Exception {
                ChannelPipeline p = ch.pipeline();
                p.addLast("protobufDecoder", new UdpProtostuffDecoder<>(Availability.getSchema(), false));
                p.addLast("protobufEncoder", new UdpProtostuffEncoder<>(Availability.getSchema(), false));
                p.addLast("beaconMessageHandler", new BeaconMessageHandler());
            }
        });
        // Wait, this is why we are in a new executor...
        //noinspection RedundantCast
        bootstrap.bind(discoveryPort).addListener((ChannelFutureListener)  future -> {
            if (future.isSuccess()) {
                broadcastChannel = future.channel();
            } else {
                LOG.error("Unable to bind! ", future.cause());
                notifyFailed(future.cause());
            }
        });
        try {
            localIPs = getLocalIPs();
        } catch (SocketException e) {
            LOG.error("SocketException:", e);
            notifyFailed(e);
            return;
        }
        fiber = fiberSupplier.getNewFiber(this::notifyFailed);
        fiber.start();
        // Schedule fiber tasks and subscriptions.
        incomingMessages.subscribe(fiber, this::processWireMessage);
        nodeInfoRequests.subscribe(fiber, this::handleNodeInfoRequest);
        moduleInformationProvider.moduleChangeChannel().subscribe(fiber, this::updateCurrentModulePorts);
        if (localIPs.isEmpty()) {
            LOG.warn("Found no IP addresses to broadcast to other nodes; as a result, only sending to loopback");
        }
        fiber.scheduleAtFixedRate(this::sendBeacon, BEACON_SERVICE_INITIAL_BROADCAST_DELAY_MILLISECONDS, BEACON_SERVICE_BROADCAST_PERIOD_MILLISECONDS, TimeUnit.MILLISECONDS);
        C5Futures.addCallback(moduleInformationProvider.getOnlineModules(), (ImmutableMap<ModuleType, Integer> onlineModuleToPortMap) -> {
            updateCurrentModulePorts(onlineModuleToPortMap);
            notifyStarted();
        }, this::notifyFailed, fiber);
    });
}
Example 15
Project: kompics-master  File: NettyNetwork.java View source code
private boolean bindUdpPort(final InetAddress addr, final int port) {
    EventLoopGroup group = new NioEventLoopGroup();
    bootstrapUDP = new Bootstrap();
    bootstrapUDP.group(group).channel(NioDatagramChannel.class).handler(new DatagramHandler(this, Transport.UDP));
    bootstrapUDP.option(ChannelOption.RCVBUF_ALLOCATOR, new AdaptiveRecvByteBufAllocator(1500, 1500, RECV_BUFFER_SIZE));
    bootstrapUDP.option(ChannelOption.SO_RCVBUF, RECV_BUFFER_SIZE);
    bootstrapUDP.option(ChannelOption.SO_SNDBUF, SEND_BUFFER_SIZE);
    // bootstrap.setOption("trafficClass", trafficClass);
    // bootstrap.setOption("soTimeout", soTimeout);
    // bootstrap.setOption("broadcast", broadcast);
    bootstrapUDP.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, CONNECT_TIMEOUT_MS);
    bootstrapUDP.option(ChannelOption.SO_REUSEADDR, true);
    try {
        InetSocketAddress iAddr = new InetSocketAddress(addr, port);
        udpChannel = (DatagramChannel) bootstrapUDP.bind(iAddr).sync().channel();
        //addLocalSocket(iAddr, c);
        LOG.info("Successfully bound to ip:port {}:{}", addr, port);
    } catch (InterruptedException e) {
        LOG.error("Problem when trying to bind to {}:{}", addr.getHostAddress(), port);
        return false;
    }
    return true;
}
Example 16
Project: KitchenSync-core-master  File: Bootstrapper.java View source code
/**
	 * Inits the multicast bootstrap for the specified address.<br>
	 * <br>
	 * 
	 * The channel initializer allows the many Netty handlers to be specified as
	 * required for the bootstrap ie. one for SSL communication, one for message
	 * encryption/decryption etc etc. Refer to the <a
	 * href="http://netty.io">Netty</a> documentation for more information.
	 *
	 * @param <CHANNEL>
	 *          the generic type
	 * @param initializer
	 *          the initializer
	 * @param multicast
	 *          the multicast
	 * @param networkInterface
	 *          the network interface
	 * @param clazz
	 *          the clazz
	 */
public <CHANNEL extends DatagramChannel> void initMulticastBootstrap(ChannelInitializer<DatagramChannel> initializer, InetSocketAddress multicast, NetworkInterface networkInterface, Class<? extends CHANNEL> clazz) {
    String key = createMulticastKey(multicast);
    if (containsMulticastBootstrap(key)) {
        log.warn("Multicast bootstrap for {} already initialized", multicast);
        return;
    }
    log.debug("Initializing multicast bootstrap for {} using network interface {}", multicast, networkInterface);
    Bootstrap b = multicastBootstrap(initializer, multicast, networkInterface, clazz);
    multicastBootstraps.put(key, b);
}
Example 17
Project: netty-master  File: DnsNameResolverTest.java View source code
private static void testRecursiveResolveCache(boolean cache) throws Exception {
    final String hostname = "some.record.netty.io";
    final String hostname2 = "some2.record.netty.io";
    final TestDnsServer dnsServerAuthority = new TestDnsServer(new HashSet<String>(Arrays.asList(hostname, hostname2)));
    dnsServerAuthority.start();
    TestDnsServer dnsServer = new RedirectingTestDnsServer(hostname, dnsServerAuthority.localAddress().getAddress().getHostAddress());
    dnsServer.start();
    TestDnsCache nsCache = new TestDnsCache(cache ? new DefaultDnsCache() : NoopDnsCache.INSTANCE);
    TestRecursiveCacheDnsQueryLifecycleObserverFactory lifecycleObserverFactory = new TestRecursiveCacheDnsQueryLifecycleObserverFactory();
    EventLoopGroup group = new NioEventLoopGroup(1);
    DnsNameResolver resolver = new DnsNameResolver(group.next(), new ReflectiveChannelFactory<DatagramChannel>(NioDatagramChannel.class), NoopDnsCache.INSTANCE, nsCache, lifecycleObserverFactory, 3000, ResolvedAddressTypes.IPV4_ONLY, true, 10, true, 4096, false, HostsFileEntriesResolver.DEFAULT, new SingletonDnsServerAddressStreamProvider(dnsServer.localAddress()), DnsNameResolver.DEFAULT_SEARCH_DOMAINS, 0, true) {

        @Override
        int dnsRedirectPort(InetAddress server) {
            return server.equals(dnsServerAuthority.localAddress().getAddress()) ? dnsServerAuthority.localAddress().getPort() : DNS_PORT;
        }
    };
    // Java7 will strip of the "." so we need to adjust the expected dnsname. Both are valid in terms of the RFC
    // so its ok.
    String expectedDnsName = PlatformDependent.javaVersion() == 7 ? "dns4.some.record.netty.io" : "dns4.some.record.netty.io.";
    try {
        resolver.resolveAll(hostname).syncUninterruptibly();
        TestDnsQueryLifecycleObserver observer = lifecycleObserverFactory.observers.poll();
        assertNotNull(observer);
        assertTrue(lifecycleObserverFactory.observers.isEmpty());
        assertEquals(4, observer.events.size());
        QueryWrittenEvent writtenEvent1 = (QueryWrittenEvent) observer.events.poll();
        assertEquals(dnsServer.localAddress(), writtenEvent1.dnsServerAddress);
        QueryRedirectedEvent redirectedEvent = (QueryRedirectedEvent) observer.events.poll();
        assertEquals(expectedDnsName, redirectedEvent.nameServers.get(0).getHostName());
        assertEquals(dnsServerAuthority.localAddress(), redirectedEvent.nameServers.get(0));
        QueryWrittenEvent writtenEvent2 = (QueryWrittenEvent) observer.events.poll();
        assertEquals(dnsServerAuthority.localAddress(), writtenEvent2.dnsServerAddress);
        QuerySucceededEvent succeededEvent = (QuerySucceededEvent) observer.events.poll();
        if (cache) {
            assertNull(nsCache.cache.get("io.", null));
            assertNull(nsCache.cache.get("netty.io.", null));
            List<DnsCacheEntry> entries = nsCache.cache.get("record.netty.io.", null);
            assertEquals(1, entries.size());
            assertNull(nsCache.cache.get(hostname, null));
            // Test again via cache.
            resolver.resolveAll(hostname).syncUninterruptibly();
            observer = lifecycleObserverFactory.observers.poll();
            assertNotNull(observer);
            assertTrue(lifecycleObserverFactory.observers.isEmpty());
            assertEquals(2, observer.events.size());
            writtenEvent1 = (QueryWrittenEvent) observer.events.poll();
            assertEquals(expectedDnsName, writtenEvent1.dnsServerAddress.getHostName());
            assertEquals(dnsServerAuthority.localAddress(), writtenEvent1.dnsServerAddress);
            succeededEvent = (QuerySucceededEvent) observer.events.poll();
            resolver.resolveAll(hostname2).syncUninterruptibly();
            observer = lifecycleObserverFactory.observers.poll();
            assertNotNull(observer);
            assertTrue(lifecycleObserverFactory.observers.isEmpty());
            assertEquals(2, observer.events.size());
            writtenEvent1 = (QueryWrittenEvent) observer.events.poll();
            assertEquals(expectedDnsName, writtenEvent1.dnsServerAddress.getHostName());
            assertEquals(dnsServerAuthority.localAddress(), writtenEvent1.dnsServerAddress);
            succeededEvent = (QuerySucceededEvent) observer.events.poll();
            // Check that it only queried the cache for record.netty.io.
            assertNull(nsCache.cacheHits.get("io."));
            assertNull(nsCache.cacheHits.get("netty.io."));
            assertNotNull(nsCache.cacheHits.get("record.netty.io."));
            assertNull(nsCache.cacheHits.get("some.record.netty.io."));
        }
    } finally {
        resolver.close();
        group.shutdownGracefully(0, 0, TimeUnit.SECONDS);
        dnsServer.stop();
        dnsServerAuthority.stop();
    }
}
Example 18
Project: tftp4j-master  File: TftpChannelType.java View source code
@Override
public Class<? extends DatagramChannel> getChannelType() {
    return NioDatagramChannel.class;
}
Example 19
Project: javardices-master  File: VoidNettyContext.java View source code
@Override
public Class<? extends DatagramChannel> getDatagramChannelClass() {
    return _datagramChannelClass;
}
Example 20
Project: snotel-master  File: MetronClientBuilder.java View source code
public MetronClientBuilder eventLoopGroup(EventLoopGroup eventLoopGroup, Class<? extends DatagramChannel> channelClass) {
    this.eventLoopGroup = eventLoopGroup;
    this.channelClass = channelClass;
    return this;
}
Example 21
Project: armeria-master  File: NonDecoratingClientFactory.java View source code
private static Class<? extends DatagramChannel> datagramChannelType(EventLoopGroup eventLoopGroup) {
    if (eventLoopGroup instanceof NioEventLoopGroup) {
        return NioDatagramChannel.class;
    }
    if (eventLoopGroup instanceof EpollEventLoopGroup) {
        return EpollDatagramChannel.class;
    }
    throw unsupportedEventLoopType(eventLoopGroup);
}