@Override public DatagramPacket replace(ByteBuf content) { return new DatagramPacket(content, recipient(), sender()); }
private void handleHandshake(ChannelHandlerContext ctx, DatagramPacket packet, int sessionId) { int challengeToken = queryServer.generateChallengeToken(packet.sender()); ByteBuf out = ctx.alloc().buffer(); out.writeByte(ACTION_HANDSHAKE); out.writeInt(sessionId); writeString(out, String.valueOf(challengeToken)); ctx.write(new DatagramPacket(out, packet.sender())); }
@Override public DatagramPacket replace(ByteBuf content) { return new DatagramPacket(content, recipient(), sender()); }
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) { if (ctx.channel() instanceof DatagramChannel) { DatagramPacket packet = (DatagramPacket) msg; ctx.fireChannelRead(new NetworkMessage(packet.content(), packet.sender())); } else if (msg instanceof ByteBuf) { ByteBuf buffer = (ByteBuf) msg; ctx.fireChannelRead(new NetworkMessage(buffer, ctx.channel().remoteAddress())); } }
public static Packet decodeFrame(DatagramPacket frame) { ByteBuf in = frame.content(); int readableBytes = in.readableBytes(); int bodyLength = in.readInt(); if (readableBytes < (bodyLength + Packet.HEADER_LEN)) { return null; } return decodePacket(new UDPPacket(in.readByte() , frame.sender()), in, bodyLength); }
@Override protected void decode(ChannelHandlerContext ctx, DatagramPacket msg, List<Object> out) throws Exception { out.add(ReferenceCountUtil.retain(SenderEnvelope.of(msg.content(), msg.sender()))); } }
@Override public void decode(ChannelHandlerContext ctx, DatagramPacket packet, List<Object> out) throws Exception { ByteBuf buf = packet.content(); byte[] encoded = new byte[buf.readableBytes()]; buf.readBytes(encoded); try { Message msg = Message.decode(encoded); DiscoveryEvent event = new DiscoveryEvent(msg, packet.sender()); out.add(event); } catch (Exception e) { throw new RuntimeException("Exception processing inbound message from " + ctx.channel().remoteAddress() + ": " + toHexString(encoded), e); } } }
public void handleMessage(Object msg) { if (msg instanceof DatagramPacket) { DatagramPacket packet = (DatagramPacket) msg; ByteBuf content = packet.content(); if (content.isDirect()) { content = VertxHandler.safeBuffer(content, chctx.alloc()); } handlePacket(new DatagramPacketImpl(packet.sender(), Buffer.buffer(content))); } }
@Override public DatagramPacket replace(ByteBuf content) { return new DatagramPacket(content, recipient(), sender()); }
@Override protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception { final InetSocketAddress remoteAddress = msg.sender(); final CodecAggregator.Result result; try (Timer.Context ignored = aggregationTimer.time()) { result = aggregator.addChunk(msg.content(), remoteAddress); } final ByteBuf completeMessage = result.getMessage(); if (completeMessage != null) { LOG.debug("Message aggregation completion, forwarding {}", completeMessage); ctx.fireChannelRead(SenderEnvelope.of(completeMessage, remoteAddress)); } else if (result.isValid()) { LOG.debug("More chunks necessary to complete this message"); } else { invalidChunksMeter.mark(); LOG.debug("Message chunk was not valid and discarded."); } } }
@Override protected void decode(ChannelHandlerContext ctx, DatagramPacket datagramPacket, List<Object> out) throws Exception { ByteBuf data = datagramPacket.content(); int idx = data.indexOf(0, data.readableBytes(), LogEvent.SEPARATOR); String filename = data.slice(0, idx) .toString(CharsetUtil.UTF_8); String logMsg = data.slice(idx + 1, data.readableBytes()).toString(CharsetUtil.UTF_8); LogEvent event = new LogEvent(datagramPacket.sender(), System.currentTimeMillis(), filename, logMsg); out.add(event); } }
@Override protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception { ByteBuf buf = msg.content(); if (buf.readableBytes() < 7) { return; } int magic = buf.readUnsignedShort(); byte type = buf.readByte(); int sessionId = buf.readInt(); if (magic != 0xFEFD) { return; } if (type == ACTION_HANDSHAKE) { handleHandshake(ctx, msg, sessionId); } else if (type == ACTION_STATS) { if (buf.readableBytes() < 4) { return; } int token = buf.readInt(); if (queryServer.verifyChallengeToken(msg.sender(), token)) { if (buf.readableBytes() == 4) { handleFullStats(ctx, msg, sessionId); } else { handleBasicStats(ctx, msg, sessionId); } } } }
ctx.write(new DatagramPacket(buf, packet.sender()));
private void handleBasicStats(ChannelHandlerContext ctx, DatagramPacket packet, int sessionId) { GlowServer server = queryServer.getServer(); ByteBuf buf = ctx.alloc().buffer(); buf.writeByte(ACTION_STATS); buf.writeInt(sessionId); writeString(buf, server.getMotd()); writeString(buf, "SMP"); writeString(buf, server.getWorlds().get(0).getName()); writeString(buf, String.valueOf(server.getOnlinePlayers().size())); writeString(buf, String.valueOf(server.getMaxPlayers())); buf.order(ByteOrder.LITTLE_ENDIAN).writeShort(server.getPort()); writeString(buf, getIpString()); ctx.write(new DatagramPacket(buf, packet.sender())); }
private static DnsQuery newQuery(DatagramPacket packet, ByteBuf buf) { final int id = buf.readUnsignedShort(); final int flags = buf.readUnsignedShort(); if (flags >> 15 == 1) { throw new CorruptedFrameException("not a query"); } final DnsQuery query = new DatagramDnsQuery( packet.sender(), packet.recipient(), id, DnsOpCode.valueOf((byte) (flags >> 11 & 0xf))); query.setRecursionDesired((flags >> 8 & 1) == 1); query.setZ(flags >> 4 & 0x7); return query; }
private static DnsQuery newQuery(DatagramPacket packet, ByteBuf buf) { final int id = buf.readUnsignedShort(); final int flags = buf.readUnsignedShort(); if (flags >> 15 == 1) { throw new CorruptedFrameException("not a query"); } final DnsQuery query = new DatagramDnsQuery( packet.sender(), packet.recipient(), id, DnsOpCode.valueOf((byte) (flags >> 11 & 0xf))); query.setRecursionDesired((flags >> 8 & 1) == 1); query.setZ(flags >> 4 & 0x7); return query; }
private static DnsResponse newResponse(DatagramPacket packet, ByteBuf buf) { final int id = buf.readUnsignedShort(); final int flags = buf.readUnsignedShort(); if (flags >> 15 == 0) { throw new CorruptedFrameException("not a response"); } final DnsResponse response = new DatagramDnsResponse( packet.sender(), packet.recipient(), id, DnsOpCode.valueOf((byte) (flags >> 11 & 0xf)), DnsResponseCode.valueOf((byte) (flags & 0xf))); response.setRecursionDesired((flags >> 8 & 1) == 1); response.setAuthoritativeAnswer((flags >> 10 & 1) == 1); response.setTruncated((flags >> 9 & 1) == 1); response.setRecursionAvailable((flags >> 7 & 1) == 1); response.setZ(flags >> 4 & 0x7); return response; }
private static DnsResponse newResponse(DatagramPacket packet, ByteBuf buf) { final int id = buf.readUnsignedShort(); final int flags = buf.readUnsignedShort(); if (flags >> 15 == 0) { throw new CorruptedFrameException("not a response"); } final DnsResponse response = new DatagramDnsResponse( packet.sender(), packet.recipient(), id, DnsOpCode.valueOf((byte) (flags >> 11 & 0xf)), DnsResponseCode.valueOf((byte) (flags & 0xf))); response.setRecursionDesired((flags >> 8 & 1) == 1); response.setAuthoritativeAnswer((flags >> 10 & 1) == 1); response.setTruncated((flags >> 9 & 1) == 1); response.setRecursionAvailable((flags >> 7 & 1) == 1); response.setZ(flags >> 4 & 0x7); return response; }
@Override protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception { try { handleMessage( ctx, msg ); } catch ( Throwable t ) { bungee.getLogger().log( Level.WARNING, "Error whilst handling query packet from " + msg.sender(), t ); } }
@Override protected void decode(ChannelHandlerContext ctx, DatagramPacket msg, List<Object> out) throws Exception { AbstractNetProtoBufUdpMessage netProtoBufUDPMessage = (AbstractNetProtoBufUdpMessage) iNetMessageDecoderFactory.praseMessage(msg.content()); netProtoBufUDPMessage.setSend(msg.sender()); out.add(netProtoBufUDPMessage); }