01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one
03: * or more contributor license agreements. See the NOTICE file
04: * distributed with this work for additional information
05: * regarding copyright ownership. The ASF licenses this file
06: * to you under the Apache License, Version 2.0 (the
07: * "License"); you may not use this file except in compliance
08: * with the License. You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing,
13: * software distributed under the License is distributed on an
14: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15: * KIND, either express or implied. See the License for the
16: * specific language governing permissions and limitations
17: * under the License.
18: *
19: */
20: package org.apache.mina.example.proxy;
21:
22: import java.net.SocketAddress;
23:
24: import org.apache.mina.common.ConnectFuture;
25: import org.apache.mina.common.IoConnector;
26: import org.apache.mina.common.IoFutureListener;
27: import org.apache.mina.common.IoSession;
28: import org.apache.mina.common.RuntimeIoException;
29: import org.apache.mina.common.TrafficMask;
30:
31: /**
32: * Handles the client to proxy part of the proxied connection.
33: *
34: * @author The Apache MINA Project (dev@mina.apache.org)
35: * @version $Rev$, $Date$
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(
56: new IoFutureListener<ConnectFuture>() {
57: public void operationComplete(ConnectFuture future) {
58: try {
59: future.getSession().setAttribute(session);
60: session.setAttribute(future.getSession());
61: future.getSession().setTrafficMask(
62: TrafficMask.ALL);
63: } catch (RuntimeIoException e) {
64: // Connect failed
65: session.close();
66: } finally {
67: session.setTrafficMask(TrafficMask.ALL);
68: }
69: }
70: });
71: }
72: }
|