Search in sources :

Example 1 with RadiusResponse

use of org.tinyradius.core.packet.response.RadiusResponse in project tinyradius-netty by globalreachtech.

the class ProxyHandler method channelRead0.

@Override
protected void channelRead0(ChannelHandlerContext ctx, RequestCtx msg) {
    final RadiusRequest request = msg.getRequest();
    RadiusEndpoint clientEndpoint = msg.getEndpoint();
    Optional<RadiusEndpoint> serverEndpoint = getProxyServer(request, clientEndpoint);
    if (!serverEndpoint.isPresent()) {
        logger.info("Server not found for client proxy request, ignoring");
        return;
    }
    logger.debug("Proxying packet to {}", serverEndpoint.get().getAddress());
    radiusClient.communicate(request, serverEndpoint.get()).addListener(f -> {
        final RadiusResponse packet = (RadiusResponse) f.getNow();
        if (f.isSuccess() && packet != null) {
            final RadiusResponse response = RadiusResponse.create(request.getDictionary(), packet.getType(), packet.getId(), packet.getAuthenticator(), packet.getAttributes());
            ctx.writeAndFlush(msg.withResponse(response));
        }
    });
}
Also used : RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest)

Example 2 with RadiusResponse

use of org.tinyradius.core.packet.response.RadiusResponse in project tinyradius-netty by globalreachtech.

the class ClientDatagramCodec method decode.

@Override
protected void decode(ChannelHandlerContext ctx, DatagramPacket msg, List<Object> out) {
    final InetSocketAddress remoteAddress = msg.sender();
    if (remoteAddress == null) {
        logger.warn("Ignoring response, remoteAddress is null");
        return;
    }
    try {
        RadiusResponse response = fromDatagram(dictionary, msg);
        logger.debug("Received packet from {} - {}", remoteAddress, response);
        out.add(response);
    } catch (RadiusPacketException e) {
        logger.warn("Could not deserialize packet: {}", e.getMessage());
    }
}
Also used : RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) RadiusPacketException(org.tinyradius.core.RadiusPacketException) InetSocketAddress(java.net.InetSocketAddress)

Example 3 with RadiusResponse

use of org.tinyradius.core.packet.response.RadiusResponse in project tinyradius-netty by globalreachtech.

the class RadiusClientTest method communicateEndpointListFirstSuccess.

@Test
void communicateEndpointListFirstSuccess() throws RadiusPacketException {
    final byte id = (byte) random.nextInt(256);
    final RadiusResponse response = RadiusResponse.create(DefaultDictionary.INSTANCE, (byte) 2, id, null, Collections.emptyList());
    final CapturingOutboundHandler capturingOutboundHandler = spy(new CapturingOutboundHandler(p -> p.trySuccess(response)));
    final RadiusClient radiusClient = new RadiusClient(bootstrap, address, timeoutHandler, capturingOutboundHandler);
    final InetSocketAddress address2 = new InetSocketAddress(1);
    // never used
    final RadiusEndpoint stubEndpoint2 = new RadiusEndpoint(address2, "secret2");
    final InetSocketAddress address3 = new InetSocketAddress(2);
    // never used
    final RadiusEndpoint stubEndpoint3 = new RadiusEndpoint(address3, "secret3");
    final List<RadiusEndpoint> endpoints = Arrays.asList(stubEndpoint, stubEndpoint2, stubEndpoint3);
    final RadiusRequest request = RadiusRequest.create(dictionary, (byte) 1, (byte) 1, null, Collections.emptyList());
    final Future<RadiusResponse> future = radiusClient.communicate(request, endpoints);
    await().until(future::isDone);
    assertTrue(future.isSuccess());
    assertEquals(response, future.getNow());
    assertEquals(1, capturingOutboundHandler.requests.size());
    assertEquals("secret", capturingOutboundHandler.requests.get(0).getEndpoint().getSecret());
}
Also used : FixedTimeoutHandler(org.tinyradius.io.client.timeout.FixedTimeoutHandler) Arrays(java.util.Arrays) TimeoutException(java.util.concurrent.TimeoutException) ArrayList(java.util.ArrayList) SecureRandom(java.security.SecureRandom) ChannelHandlerContext(io.netty.channel.ChannelHandlerContext) ChannelPromise(io.netty.channel.ChannelPromise) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Spy(org.mockito.Spy) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) MockitoExtension(org.mockito.junit.jupiter.MockitoExtension) Awaitility.await(org.awaitility.Awaitility.await) ChannelOutboundHandlerAdapter(io.netty.channel.ChannelOutboundHandlerAdapter) Promise(io.netty.util.concurrent.Promise) Dictionary(org.tinyradius.core.dictionary.Dictionary) InetSocketAddress(java.net.InetSocketAddress) NioEventLoopGroup(io.netty.channel.nio.NioEventLoopGroup) TimeoutHandler(org.tinyradius.io.client.timeout.TimeoutHandler) RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) Test(org.junit.jupiter.api.Test) Consumer(java.util.function.Consumer) Bootstrap(io.netty.bootstrap.Bootstrap) Mockito(org.mockito.Mockito) List(java.util.List) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) NioDatagramChannel(io.netty.channel.socket.nio.NioDatagramChannel) DefaultDictionary(org.tinyradius.core.dictionary.DefaultDictionary) HashedWheelTimer(io.netty.util.HashedWheelTimer) Assertions(org.junit.jupiter.api.Assertions) Timer(io.netty.util.Timer) Future(io.netty.util.concurrent.Future) Collections(java.util.Collections) RadiusPacketException(org.tinyradius.core.RadiusPacketException) RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) InetSocketAddress(java.net.InetSocketAddress) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) Test(org.junit.jupiter.api.Test)

Example 4 with RadiusResponse

use of org.tinyradius.core.packet.response.RadiusResponse in project tinyradius-netty by globalreachtech.

the class RadiusClientTest method communicateEndpointListAllFail.

@Test
void communicateEndpointListAllFail() throws RadiusPacketException {
    final Exception expectedException = new Exception("test 123");
    final CapturingOutboundHandler capturingOutboundHandler = new CapturingOutboundHandler(p -> p.tryFailure(expectedException));
    final RadiusClient radiusClient = new RadiusClient(bootstrap, address, timeoutHandler, capturingOutboundHandler);
    final RadiusEndpoint stubEndpoint2 = new RadiusEndpoint(new InetSocketAddress(1), "secret2");
    final RadiusEndpoint stubEndpoint3 = new RadiusEndpoint(new InetSocketAddress(2), "secret3");
    final List<RadiusEndpoint> endpoints = Arrays.asList(stubEndpoint, stubEndpoint2, stubEndpoint3);
    final RadiusRequest request = RadiusRequest.create(dictionary, (byte) 1, (byte) 1, null, Collections.emptyList());
    final Future<RadiusResponse> future = radiusClient.communicate(request, endpoints);
    await().until(future::isDone);
    assertFalse(future.isSuccess());
    assertTrue(future.cause().getMessage().contains("all endpoints failed"));
    assertSame(expectedException, future.cause().getCause());
    assertEquals(3, capturingOutboundHandler.requests.size());
    assertEquals("secret", capturingOutboundHandler.requests.get(0).getEndpoint().getSecret());
    assertEquals("secret2", capturingOutboundHandler.requests.get(1).getEndpoint().getSecret());
    assertEquals("secret3", capturingOutboundHandler.requests.get(2).getEndpoint().getSecret());
    // unpooled, let GC handle it
    assertEquals(1, request.toByteBuf().refCnt());
}
Also used : RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) RadiusEndpoint(org.tinyradius.io.RadiusEndpoint) InetSocketAddress(java.net.InetSocketAddress) TimeoutException(java.util.concurrent.TimeoutException) RadiusPacketException(org.tinyradius.core.RadiusPacketException) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) Test(org.junit.jupiter.api.Test)

Example 5 with RadiusResponse

use of org.tinyradius.core.packet.response.RadiusResponse in project tinyradius-netty by globalreachtech.

the class RadiusClientTest method retainPacketsWithRetries.

@Test
void retainPacketsWithRetries() throws RadiusPacketException {
    final byte id = (byte) random.nextInt(256);
    final CapturingOutboundHandler capturingOutboundHandler = new CapturingOutboundHandler(a -> {
    });
    final RadiusClient radiusClient = new RadiusClient(bootstrap, address, new FixedTimeoutHandler(timer, 2, 0), capturingOutboundHandler);
    final RadiusRequest request = RadiusRequest.create(dictionary, (byte) 1, (byte) 1, null, Collections.emptyList());
    final Future<RadiusResponse> future = radiusClient.communicate(request, stubEndpoint);
    await().until(future::isDone);
    assertFalse(future.isSuccess());
    assertEquals("Client send timeout - max attempts reached: 2", future.cause().getMessage());
    // unpooled, let GC handle it
    assertEquals(1, request.toByteBuf().refCnt());
}
Also used : RadiusResponse(org.tinyradius.core.packet.response.RadiusResponse) FixedTimeoutHandler(org.tinyradius.io.client.timeout.FixedTimeoutHandler) RadiusRequest(org.tinyradius.core.packet.request.RadiusRequest) Test(org.junit.jupiter.api.Test)

Aggregations

RadiusResponse (org.tinyradius.core.packet.response.RadiusResponse)19 Test (org.junit.jupiter.api.Test)14 RadiusRequest (org.tinyradius.core.packet.request.RadiusRequest)11 ArrayList (java.util.ArrayList)9 RadiusEndpoint (org.tinyradius.io.RadiusEndpoint)9 InetSocketAddress (java.net.InetSocketAddress)7 RadiusPacketException (org.tinyradius.core.RadiusPacketException)6 DatagramPacket (io.netty.channel.socket.DatagramPacket)4 TimeoutException (java.util.concurrent.TimeoutException)4 PendingRequestCtx (org.tinyradius.io.client.PendingRequestCtx)4 FixedTimeoutHandler (org.tinyradius.io.client.timeout.FixedTimeoutHandler)4 Bootstrap (io.netty.bootstrap.Bootstrap)3 NioEventLoopGroup (io.netty.channel.nio.NioEventLoopGroup)3 NioDatagramChannel (io.netty.channel.socket.nio.NioDatagramChannel)3 HashedWheelTimer (io.netty.util.HashedWheelTimer)3 Timer (io.netty.util.Timer)3 DefaultDictionary (org.tinyradius.core.dictionary.DefaultDictionary)3 Dictionary (org.tinyradius.core.dictionary.Dictionary)3 RequestCtx (org.tinyradius.io.server.RequestCtx)3 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)2