Skip to content

Commit 7b2765e

Browse files
committed
Apache MINA 2.2.X update
1 parent dce91e6 commit 7b2765e

File tree

14 files changed

+195
-153
lines changed

14 files changed

+195
-153
lines changed

quickfixj-core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<dependency>
6060
<groupId>org.apache.mina</groupId>
6161
<artifactId>mina-core</artifactId>
62-
<version>2.1.6</version>
62+
<version>2.2.2-SNAPSHOT</version>
6363
</dependency>
6464
<dependency>
6565
<groupId>org.slf4j</groupId>

quickfixj-core/src/main/java/quickfix/mina/acceptor/AbstractSocketAcceptor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,8 @@ private void installSSL(AcceptorSocketDescriptor descriptor,
133133
SSLConfig sslConfig = descriptor.getSslConfig();
134134
SSLContext sslContext = SSLContextFactory.getInstance(sslConfig);
135135
SSLFilter sslFilter = new SSLFilter(sslContext);
136-
sslFilter.setUseClientMode(false);
137136
sslFilter.setNeedClientAuth(sslConfig.isNeedClientAuth());
138-
sslFilter.setCipherSuites(sslConfig.getEnabledCipherSuites() != null ? sslConfig.getEnabledCipherSuites()
137+
sslFilter.setEnabledCipherSuites(sslConfig.getEnabledCipherSuites() != null ? sslConfig.getEnabledCipherSuites()
139138
: SSLSupport.getDefaultCipherSuites(sslContext));
140139
sslFilter.setEnabledProtocols(sslConfig.getEnabledProtocols() != null ? sslConfig.getEnabledProtocols()
141140
: SSLSupport.getSupportedProtocols(sslContext));

quickfixj-core/src/main/java/quickfix/mina/initiator/InitiatorProxyIoHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ public void exceptionCaught(IoSession ioSession, Throwable cause) throws Excepti
6161

6262
@Override
6363
public void proxySessionOpened(IoSession ioSession) throws Exception {
64-
if (this.sslFilter != null) {
65-
this.sslFilter.initiateHandshake(ioSession);
66-
}
64+
// if (this.sslFilter != null) {
65+
// this.sslFilter.initiateHandshake(ioSession);
66+
// }
6767
}
6868
}

quickfixj-core/src/main/java/quickfix/mina/initiator/IoSessionInitiator.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ private void setupIoConnector() throws ConfigError, GeneralSecurityException {
155155

156156
SSLFilter sslFilter = null;
157157
if (sslEnabled) {
158-
sslFilter = installSslFilter(ioFilterChainBuilder, !hasProxy);
158+
sslFilter = installSslFilter(ioFilterChainBuilder);
159159
}
160160

161161
ioFilterChainBuilder.addLast(FIXProtocolCodecFactory.FILTER_NAME, new ProtocolCodecFilter(new FIXProtocolCodecFactory()));
@@ -188,16 +188,15 @@ private void setupIoConnector() throws ConfigError, GeneralSecurityException {
188188
ioConnector = newConnector;
189189
}
190190

191-
private SSLFilter installSslFilter(CompositeIoFilterChainBuilder ioFilterChainBuilder, boolean autoStart)
191+
private SSLFilter installSslFilter(CompositeIoFilterChainBuilder ioFilterChainBuilder)
192192
throws GeneralSecurityException {
193193
final SSLContext sslContext = SSLContextFactory.getInstance(sslConfig);
194-
final SSLFilter sslFilter = new SSLFilter(sslContext, autoStart);
195-
sslFilter.setUseClientMode(true);
196-
sslFilter.setCipherSuites(sslConfig.getEnabledCipherSuites() != null ? sslConfig.getEnabledCipherSuites()
194+
final SSLFilter sslFilter = new SSLFilter(sslContext);
195+
sslFilter.setEnabledCipherSuites(sslConfig.getEnabledCipherSuites() != null ? sslConfig.getEnabledCipherSuites()
197196
: SSLSupport.getDefaultCipherSuites(sslContext));
198197
sslFilter.setEnabledProtocols(sslConfig.getEnabledProtocols() != null ? sslConfig.getEnabledProtocols()
199198
: SSLSupport.getSupportedProtocols(sslContext));
200-
sslFilter.setUseSNI(sslConfig.isUseSNI());
199+
sslFilter.setEndpointIdentificationAlgorithm(sslConfig.getEndpointIdentificationAlgorithm());
201200
ioFilterChainBuilder.addLast(SSLSupport.FILTER_NAME, sslFilter);
202201
return sslFilter;
203202
}

quickfixj-core/src/main/java/quickfix/mina/ssl/SSLConfig.java

Lines changed: 35 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package quickfix.mina.ssl;
2121

2222
import java.util.Arrays;
23+
import java.util.Objects;
2324

2425
/**
2526
* Groups together SSL related configuration.
@@ -36,58 +37,7 @@ public class SSLConfig {
3637
private String[] enabledProtocols;
3738
private String[] enabledCipherSuites;
3839
private boolean needClientAuth;
39-
private boolean useSNI;
40-
41-
@Override
42-
public boolean equals(Object obj) {
43-
if (this == obj)
44-
return true;
45-
if (obj == null)
46-
return false;
47-
if (getClass() != obj.getClass())
48-
return false;
49-
SSLConfig other = (SSLConfig) obj;
50-
if (!Arrays.equals(enabledCipherSuites, other.enabledCipherSuites))
51-
return false;
52-
if (!Arrays.equals(enabledProtocols, other.enabledProtocols))
53-
return false;
54-
if (keyManagerFactoryAlgorithm == null) {
55-
if (other.keyManagerFactoryAlgorithm != null)
56-
return false;
57-
} else if (!keyManagerFactoryAlgorithm.equals(other.keyManagerFactoryAlgorithm))
58-
return false;
59-
if (keyStoreName == null) {
60-
if (other.keyStoreName != null)
61-
return false;
62-
} else if (!keyStoreName.equals(other.keyStoreName))
63-
return false;
64-
if (!Arrays.equals(keyStorePassword, other.keyStorePassword))
65-
return false;
66-
if (keyStoreType == null) {
67-
if (other.keyStoreType != null)
68-
return false;
69-
} else if (!keyStoreType.equals(other.keyStoreType))
70-
return false;
71-
if (needClientAuth != other.needClientAuth)
72-
return false;
73-
if (trustManagerFactoryAlgorithm == null) {
74-
if (other.trustManagerFactoryAlgorithm != null)
75-
return false;
76-
} else if (!trustManagerFactoryAlgorithm.equals(other.trustManagerFactoryAlgorithm))
77-
return false;
78-
if (trustStoreName == null) {
79-
if (other.trustStoreName != null)
80-
return false;
81-
} else if (!trustStoreName.equals(other.trustStoreName))
82-
return false;
83-
if (!Arrays.equals(trustStorePassword, other.trustStorePassword))
84-
return false;
85-
if(useSNI != other.useSNI)
86-
return false;
87-
if (trustStoreType == null) {
88-
return other.trustStoreType == null;
89-
} else return trustStoreType.equals(other.trustStoreType);
90-
}
40+
private String endpointIdentificationAlgorithm;
9141

9242
public String[] getEnabledCipherSuites() {
9343
return enabledCipherSuites;
@@ -129,31 +79,12 @@ public String getTrustStoreType() {
12979
return trustStoreType;
13080
}
13181

132-
@Override
133-
public int hashCode() {
134-
final int prime = 31;
135-
int result = 1;
136-
result = prime * result + Arrays.hashCode(enabledCipherSuites);
137-
result = prime * result + Arrays.hashCode(enabledProtocols);
138-
result = prime * result + ((keyManagerFactoryAlgorithm == null) ? 0 : keyManagerFactoryAlgorithm.hashCode());
139-
result = prime * result + ((keyStoreName == null) ? 0 : keyStoreName.hashCode());
140-
result = prime * result + Arrays.hashCode(keyStorePassword);
141-
result = prime * result + ((keyStoreType == null) ? 0 : keyStoreType.hashCode());
142-
result = prime * result + (needClientAuth ? 1231 : 1237);
143-
result = prime * result
144-
+ ((trustManagerFactoryAlgorithm == null) ? 0 : trustManagerFactoryAlgorithm.hashCode());
145-
result = prime * result + ((trustStoreName == null) ? 0 : trustStoreName.hashCode());
146-
result = prime * result + Arrays.hashCode(trustStorePassword);
147-
result = prime * result + ((trustStoreType == null) ? 0 : trustStoreType.hashCode());
148-
return result;
149-
}
150-
15182
public boolean isNeedClientAuth() {
15283
return needClientAuth;
15384
}
15485

155-
public boolean isUseSNI() {
156-
return useSNI;
86+
public String getEndpointIdentificationAlgorithm() {
87+
return endpointIdentificationAlgorithm;
15788
}
15889

15990
public void setEnabledCipherSuites(String[] enabledCipherSuites) {
@@ -184,8 +115,8 @@ public void setNeedClientAuth(boolean needClientAuth) {
184115
this.needClientAuth = needClientAuth;
185116
}
186117

187-
public void setUseSNI(boolean useSNI) {
188-
this.useSNI = useSNI;
118+
public void setEndpointIdentificationAlgorithm(String endpointIdentificationAlgorithm) {
119+
this.endpointIdentificationAlgorithm = endpointIdentificationAlgorithm;
189120
}
190121

191122
public void setTrustManagerFactoryAlgorithm(String trustManagerFactoryAlgorithm) {
@@ -203,4 +134,33 @@ public void setTrustStorePassword(char[] trustStorePassword) {
203134
public void setTrustStoreType(String trustStoreType) {
204135
this.trustStoreType = trustStoreType;
205136
}
137+
138+
@Override
139+
public boolean equals(Object o) {
140+
if (this == o) return true;
141+
if (o == null || getClass() != o.getClass()) return false;
142+
SSLConfig sslConfig = (SSLConfig) o;
143+
return needClientAuth == sslConfig.needClientAuth &&
144+
Objects.equals(keyStoreName, sslConfig.keyStoreName) &&
145+
Arrays.equals(keyStorePassword, sslConfig.keyStorePassword) &&
146+
Objects.equals(keyManagerFactoryAlgorithm, sslConfig.keyManagerFactoryAlgorithm) &&
147+
Objects.equals(keyStoreType, sslConfig.keyStoreType) &&
148+
Objects.equals(trustStoreName, sslConfig.trustStoreName) &&
149+
Arrays.equals(trustStorePassword, sslConfig.trustStorePassword) &&
150+
Objects.equals(trustManagerFactoryAlgorithm, sslConfig.trustManagerFactoryAlgorithm) &&
151+
Objects.equals(trustStoreType, sslConfig.trustStoreType) &&
152+
Arrays.equals(enabledProtocols, sslConfig.enabledProtocols) &&
153+
Arrays.equals(enabledCipherSuites, sslConfig.enabledCipherSuites) &&
154+
Objects.equals(endpointIdentificationAlgorithm, sslConfig.endpointIdentificationAlgorithm);
155+
}
156+
157+
@Override
158+
public int hashCode() {
159+
int result = Objects.hash(keyStoreName, keyManagerFactoryAlgorithm, keyStoreType, trustStoreName, trustManagerFactoryAlgorithm, trustStoreType, needClientAuth, endpointIdentificationAlgorithm);
160+
result = 31 * result + Arrays.hashCode(keyStorePassword);
161+
result = 31 * result + Arrays.hashCode(trustStorePassword);
162+
result = 31 * result + Arrays.hashCode(enabledProtocols);
163+
result = 31 * result + Arrays.hashCode(enabledCipherSuites);
164+
return result;
165+
}
206166
}

quickfixj-core/src/main/java/quickfix/mina/ssl/SSLFilter.java

Lines changed: 2 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -19,70 +19,17 @@
1919

2020
package quickfix.mina.ssl;
2121

22-
import java.net.InetSocketAddress;
23-
import java.net.SocketAddress;
24-
import javax.net.ssl.SSLContext;
25-
26-
import javax.net.ssl.SSLException;
27-
import org.apache.mina.core.filterchain.IoFilterChain;
28-
import org.apache.mina.core.session.IoSession;
2922
import org.apache.mina.filter.ssl.SslFilter;
30-
import org.slf4j.Logger;
31-
import org.slf4j.LoggerFactory;
23+
24+
import javax.net.ssl.SSLContext;
3225

3326
/**
3427
* An extended SSL filter based on MINA {@link SslFilter} that applies
3528
* some adaptations.
3629
*/
3730
public class SSLFilter extends SslFilter {
3831

39-
private final Logger log = LoggerFactory.getLogger(getClass());
40-
private boolean useSNI;
41-
42-
public SSLFilter(SSLContext sslContext, boolean autoStart) {
43-
super(sslContext, autoStart);
44-
}
45-
4632
public SSLFilter(SSLContext sslContext) {
4733
super(sslContext);
4834
}
49-
50-
/**
51-
* Called from {@link SslFilter#onPreAdd} every time a new
52-
* session is created which makes it impossible to override enabled cipher
53-
* suites configuration.
54-
*/
55-
@Override
56-
public void setEnabledCipherSuites(String[] cipherSuites) {
57-
}
58-
59-
public void setCipherSuites(String[] cipherSuites) {
60-
super.setEnabledCipherSuites(cipherSuites);
61-
}
62-
63-
/**
64-
* Called before filter is added into the chain.
65-
* We activate Server Name Indication if it is enabled in the session config.
66-
*/
67-
@Override
68-
public void onPreAdd(IoFilterChain parent, String name, NextFilter nextFilter)
69-
throws SSLException {
70-
71-
if (useSNI) {
72-
IoSession session = parent.getSession();
73-
SocketAddress remoteAddress = session.getRemoteAddress();
74-
75-
if (remoteAddress instanceof InetSocketAddress) {
76-
// activate the SNI support in the JSSE SSLEngine
77-
log.info("Activating TLS SNI support for peer address: {}", remoteAddress);
78-
session.setAttribute(PEER_ADDRESS, remoteAddress);
79-
}
80-
}
81-
82-
super.onPreAdd(parent, name, nextFilter);
83-
}
84-
85-
public void setUseSNI(boolean useSNI) {
86-
this.useSNI = useSNI;
87-
}
8835
}

quickfixj-core/src/main/java/quickfix/mina/ssl/SSLSupport.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class SSLSupport {
3939
public static final String SETTING_TRUST_MANAGER_FACTORY_ALGORITHM = "TrustManagerFactoryAlgorithm";
4040
public static final String SETTING_TRUST_STORE_TYPE = "TrustStoreType";
4141
public static final String SETTING_NEED_CLIENT_AUTH = "NeedClientAuth";
42-
public static final String SETTING_USE_SNI = "UseSNI";
42+
public static final String SETTING_ENDPOINT_IDENTIFICATION_ALGORITHM = "EndpointIdentificationAlgorithm";
4343
public static final String SETTING_ENABLED_PROTOCOLS = "EnabledProtocols";
4444
public static final String SETTING_CIPHER_SUITES = "CipherSuites";
4545
static final String DEFAULT_STORE_TYPE = "JKS";
@@ -111,7 +111,7 @@ public static SSLConfig getSslConfig(SessionSettings sessionSettings, SessionID
111111
sslConfig.setEnabledCipherSuites(getEnabledCipherSuites(sessionSettings, sessionID));
112112
sslConfig.setEnabledProtocols(getEnabledProtocols(sessionSettings, sessionID));
113113
sslConfig.setNeedClientAuth(isNeedClientAuth(sessionSettings, sessionID));
114-
sslConfig.setUseSNI(isUseSNI(sessionSettings, sessionID));
114+
sslConfig.setEndpointIdentificationAlgorithm(getEndpointIdentificationAlgorithm(sessionSettings, sessionID));
115115

116116
return sslConfig;
117117
}
@@ -150,7 +150,7 @@ public static boolean isNeedClientAuth(SessionSettings sessionSettings, SessionI
150150
return "Y".equals(getString(sessionSettings, sessionID, SETTING_NEED_CLIENT_AUTH, "N"));
151151
}
152152

153-
public static boolean isUseSNI(SessionSettings sessionSettings, SessionID sessionID) {
154-
return "Y".equals(getString(sessionSettings, sessionID, SETTING_USE_SNI, "N"));
153+
public static String getEndpointIdentificationAlgorithm(SessionSettings sessionSettings, SessionID sessionID) {
154+
return getString(sessionSettings, sessionID, SETTING_ENDPOINT_IDENTIFICATION_ALGORITHM, null);
155155
}
156156
}

0 commit comments

Comments
 (0)