1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.example.proxy;
21
22 import java.net.SocketAddress;
23
24 import org.apache.mina.core.RuntimeIoException;
25 import org.apache.mina.core.future.ConnectFuture;
26 import org.apache.mina.core.future.IoFutureListener;
27 import org.apache.mina.core.service.IoConnector;
28 import org.apache.mina.core.session.IoSession;
29 import org.apache.mina.core.session.TrafficMask;
30
31
32
33
34
35
36
37
38 public class ClientToProxyIoHandler extends AbstractProxyIoHandler {
39 private final ServerToProxyIoHandler connectorHandler = new ServerToProxyIoHandler();
40
41 private final IoConnector connector;
42
43 private final SocketAddress remoteAddress;
44
45 public ClientToProxyIoHandler(IoConnector connector,
46 SocketAddress remoteAddress) {
47 this.connector = connector;
48 this.remoteAddress = remoteAddress;
49 connector.setHandler(connectorHandler);
50 }
51
52 @Override
53 public void sessionOpened(final IoSession session) throws Exception {
54
55 connector.connect(remoteAddress).addListener(new IoFutureListener<ConnectFuture>() {
56 public void operationComplete(ConnectFuture future) {
57 try {
58 future.getSession().setAttribute(OTHER_IO_SESSION, session);
59 session.setAttribute(OTHER_IO_SESSION, future.getSession());
60 future.getSession().setTrafficMask(TrafficMask.ALL);
61 } catch (RuntimeIoException e) {
62
63 session.close();
64 } finally {
65 session.setTrafficMask(TrafficMask.ALL);
66 }
67 }
68 });
69 }
70 }