1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.openr66.proxy.network;
21
22 import io.netty.channel.Channel;
23 import org.waarp.openr66.protocol.utils.R66Future;
24
25 import static org.waarp.openr66.protocol.configuration.Configuration.*;
26 import static org.waarp.openr66.protocol.networkhandler.NetworkServerInitializer.*;
27
28
29
30
31 public class ProxyBridge {
32 public static NetworkTransaction transaction;
33
34 private final ProxyEntry proxyEntry;
35 private final NetworkServerHandler source;
36 private NetworkServerHandler proxified;
37 private final R66Future futureRemoteConnected = new R66Future(true);
38
39 public static void initialize() {
40 transaction = new NetworkTransaction();
41 }
42
43
44
45
46
47 public ProxyBridge(final ProxyEntry proxyEntry,
48 final NetworkServerHandler source) {
49 this.proxyEntry = proxyEntry;
50 this.source = source;
51 }
52
53 public final void initializeProxy() {
54 final Channel proxy = transaction.createConnectionWithRetry(
55 proxyEntry.getRemoteSocketAddress(), proxyEntry.isRemoteSsl());
56 if (proxy == null) {
57
58 futureRemoteConnected.cancel();
59 return;
60 }
61 proxified = (NetworkServerHandler) proxy.pipeline().get(NETWORK_HANDLER);
62 proxified.setBridge(this);
63 }
64
65 public final void remoteConnected() {
66 futureRemoteConnected.setSuccess();
67 }
68
69 public final boolean waitForRemoteConnection() {
70 futureRemoteConnected.awaitOrInterruptible(configuration.getTimeoutCon());
71 if (!futureRemoteConnected.isSuccess()) {
72 futureRemoteConnected.cancel();
73 return false;
74 }
75 return true;
76 }
77
78
79
80
81 public final ProxyEntry getProxyEntry() {
82 return proxyEntry;
83 }
84
85
86
87
88 public final NetworkServerHandler getSource() {
89 return source;
90 }
91
92
93
94
95 public final NetworkServerHandler getProxified() {
96 return proxified;
97 }
98 }