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
30
31
32
33
34
35 public class ClientToProxyIoHandler extends AbstractProxyIoHandler {
36 private final ServerToProxyIoHandler connectorHandler = new ServerToProxyIoHandler();
37
38 private final IoConnector connector;
39
40 private final SocketAddress remoteAddress;
41
42 public ClientToProxyIoHandler(IoConnector connector,
43 SocketAddress remoteAddress) {
44 this.connector = connector;
45 this.remoteAddress = remoteAddress;
46 connector.setHandler(connectorHandler);
47 }
48
49 @Override
50 public void sessionOpened(final IoSession session) throws Exception {
51
52 connector.connect(remoteAddress).addListener(new IoFutureListener<ConnectFuture>() {
53 public void operationComplete(ConnectFuture future) {
54 try {
55 future.getSession().setAttribute(OTHER_IO_SESSION, session);
56 session.setAttribute(OTHER_IO_SESSION, future.getSession());
57 IoSession session2 = future.getSession();
58 session2.resumeRead();
59 session2.resumeWrite();
60 } catch (RuntimeIoException e) {
61
62 session.close(true);
63 } finally {
64 session.resumeRead();
65 session.resumeWrite();
66 }
67 }
68 });
69 }
70 }