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