package org.rakam.server.http;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.haproxy.HAProxyMessage;
import io.netty.util.AttributeKey;
import io.netty.util.internal.ConcurrentSet;
public class HaProxyBackendServerHandler extends HttpServerHandler {
AttributeKey<String> CLIENT_IP = AttributeKey.valueOf("ip");
public HaProxyBackendServerHandler(ConcurrentSet activeChannels, HttpServer httpServer) {
super(activeChannels, httpServer);
}
@Override
RakamHttpRequest createRequest(ChannelHandlerContext ctx) {
RakamHttpRequest request = super.createRequest(ctx);
String clientIp = ctx.attr(CLIENT_IP).get();
if(clientIp != null) {
request.setRemoteAddress(clientIp);
}
return request;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if(msg instanceof HAProxyMessage) {
ctx.attr(CLIENT_IP).set(((HAProxyMessage) msg).sourceAddress());
} else {
super.channelRead(ctx, msg);
}
}
}