use of org.apache.http.nio.reactor.ssl.SSLIOSession in project wso2-synapse by wso2.
the class ServerWorker method createMessageContext.
/**
* Create an Axis2 message context for the given http request. The request may be in the
* process of being streamed
*
* @param request the http request to be used to create the corresponding Axis2 message context
* @return the Axis2 message context created
*/
public MessageContext createMessageContext(MessageContext msgContext, SourceRequest request) {
Map excessHeaders = request.getExcessHeaders();
ConfigurationContext cfgCtx = sourceConfiguration.getConfigurationContext();
if (msgContext == null) {
msgContext = new MessageContext();
}
msgContext.setMessageID(UIDGenerator.generateURNString());
// Axis2 spawns a new threads to send a message if this is TRUE - and it has to
// be the other way
msgContext.setProperty(MessageContext.CLIENT_API_NON_BLOCKING, Boolean.FALSE);
msgContext.setConfigurationContext(cfgCtx);
// msgContext.setTransportOut(cfgCtx.getAxisConfiguration()
// .getTransportOut(Constants.TRANSPORT_HTTP));
// msgContext.setTransportIn(cfgCtx.getAxisConfiguration()
// .getTransportIn(Constants.TRANSPORT_HTTP));
// msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTP);
// msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, this);
NHttpServerConnection conn = request.getConnection();
if (sourceConfiguration.getScheme().isSSL()) {
msgContext.setTransportOut(cfgCtx.getAxisConfiguration().getTransportOut(Constants.TRANSPORT_HTTPS));
msgContext.setTransportIn(cfgCtx.getAxisConfiguration().getTransportIn(Constants.TRANSPORT_HTTPS));
msgContext.setIncomingTransportName(sourceConfiguration.getInDescription() != null ? sourceConfiguration.getInDescription().getName() : Constants.TRANSPORT_HTTPS);
SSLIOSession ssliosession = (SSLIOSession) (conn.getContext()).getAttribute(SSLIOSession.SESSION_KEY);
// set SSL certificates to message context if SSLVerifyClient parameter is set
if (ssliosession != null && msgContext.getTransportIn() != null && msgContext.getTransportIn().getParameter(NhttpConstants.SSL_VERIFY_CLIENT) != null) {
try {
msgContext.setProperty(NhttpConstants.SSL_CLIENT_AUTH_CERT_X509, ssliosession.getSSLSession().getPeerCertificateChain());
} catch (SSLPeerUnverifiedException e) {
// Peer Certificate Chain may not be available always.(in case of Mutual SSL is not enabled)
if (log.isTraceEnabled()) {
log.trace("Peer certificate chain is not available for MsgContext " + msgContext.getMessageID());
}
}
}
} else {
msgContext.setTransportOut(cfgCtx.getAxisConfiguration().getTransportOut(Constants.TRANSPORT_HTTP));
msgContext.setTransportIn(cfgCtx.getAxisConfiguration().getTransportIn(Constants.TRANSPORT_HTTP));
msgContext.setIncomingTransportName(sourceConfiguration.getInDescription() != null ? sourceConfiguration.getInDescription().getName() : Constants.TRANSPORT_HTTP);
}
msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, this);
msgContext.setServerSide(true);
msgContext.setProperty(Constants.Configuration.TRANSPORT_IN_URL, request.getUri());
// http transport header names are case insensitive
Map<String, String> headers = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});
Set<Map.Entry<String, String>> entries = request.getHeaders().entrySet();
for (Map.Entry<String, String> entry : entries) {
headers.put(entry.getKey(), entry.getValue());
}
msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, headers);
msgContext.setProperty(NhttpConstants.EXCESS_TRANSPORT_HEADERS, excessHeaders);
if (conn instanceof HttpInetConnection) {
HttpInetConnection netConn = (HttpInetConnection) conn;
InetAddress remoteAddress = netConn.getRemoteAddress();
if (remoteAddress != null) {
msgContext.setProperty(MessageContext.REMOTE_ADDR, remoteAddress.getHostAddress());
msgContext.setProperty(NhttpConstants.REMOTE_HOST, NhttpUtil.getHostName(remoteAddress));
}
}
msgContext.setProperty(RequestResponseTransport.TRANSPORT_CONTROL, new HttpCoreRequestResponseTransport(msgContext));
return msgContext;
}
use of org.apache.http.nio.reactor.ssl.SSLIOSession in project wso2-synapse by wso2.
the class ServerWorker method createMessageContext.
/**
* Create an Axis2 message context for the given http request. The request may be in the
* process of being streamed
* @param request the http request to be used to create the corresponding Axis2 message context
* @return the Axis2 message context created
*/
private MessageContext createMessageContext(HttpRequest request) {
MessageContext msgContext = new MessageContext();
msgContext.setMessageID(UIDGenerator.generateURNString());
// There is a discrepency in what I thought, Axis2 spawns a new threads to
// send a message if this is TRUE - and I want it to be the other way
msgContext.setProperty(MessageContext.CLIENT_API_NON_BLOCKING, Boolean.FALSE);
msgContext.setConfigurationContext(cfgCtx);
if ("https".equalsIgnoreCase(schemeName)) {
msgContext.setTransportOut(cfgCtx.getAxisConfiguration().getTransportOut(Constants.TRANSPORT_HTTPS));
msgContext.setTransportIn(cfgCtx.getAxisConfiguration().getTransportIn(Constants.TRANSPORT_HTTPS));
msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTPS);
SSLIOSession session = (SSLIOSession) (conn.getContext()).getAttribute(SSLIOSession.SESSION_KEY);
// set SSL certificates to message context if SSLVerifyClient parameter is set
if (session != null && msgContext.getTransportIn() != null && msgContext.getTransportIn().getParameter(NhttpConstants.SSL_VERIFY_CLIENT) != null) {
try {
msgContext.setProperty(NhttpConstants.SSL_CLIENT_AUTH_CERT_X509, session.getSSLSession().getPeerCertificateChain());
} catch (SSLPeerUnverifiedException e) {
// Peer Certificate Chain may not be available always.(in case of verify client is optional)
if (log.isTraceEnabled()) {
log.trace("Peer certificate chain is not available for MsgContext " + msgContext.getMessageID());
}
}
}
} else {
msgContext.setTransportOut(cfgCtx.getAxisConfiguration().getTransportOut(Constants.TRANSPORT_HTTP));
msgContext.setTransportIn(cfgCtx.getAxisConfiguration().getTransportIn(Constants.TRANSPORT_HTTP));
msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTP);
}
msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, this);
// the following statement causes the soap session services to be failing - ruwan
// msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
msgContext.setServerSide(true);
msgContext.setProperty(Constants.Configuration.TRANSPORT_IN_URL, request.getRequestLine().getUri());
// http transport header names are case insensitive
Map<String, String> headers = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});
for (Header header : request.getAllHeaders()) {
String headerName = header.getName();
// if this header is already added
if (headers.containsKey(headerName)) {
/* this is a multi-value header */
// generate the key
String key = NhttpConstants.EXCESS_TRANSPORT_HEADERS;
// get the old value
String oldValue = headers.get(headerName);
// adds additional values to a list in a property of message context
Map map;
if (msgContext.getProperty(key) != null) {
map = (Map) msgContext.getProperty(key);
map.put(headerName, oldValue);
} else {
map = new MultiValueMap();
map.put(headerName, oldValue);
// set as a property in message context
msgContext.setProperty(key, map);
}
}
headers.put(header.getName(), header.getValue());
}
msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, headers);
// find the remote party IP address and set it to the message context
if (conn instanceof HttpInetConnection) {
HttpContext httpContext = conn.getContext();
HttpInetConnection inetConn = (HttpInetConnection) conn;
InetAddress remoteAddr = inetConn.getRemoteAddress();
if (remoteAddr != null) {
httpContext.setAttribute(NhttpConstants.CLIENT_REMOTE_ADDR, remoteAddr);
httpContext.setAttribute(NhttpConstants.CLIENT_REMOTE_PORT, inetConn.getRemotePort());
msgContext.setProperty(MessageContext.REMOTE_ADDR, remoteAddr.getHostAddress());
msgContext.setProperty(NhttpConstants.REMOTE_HOST, NhttpUtil.getHostName(remoteAddr));
remoteAddress = remoteAddr.getHostAddress();
}
}
msgContext.setProperty(RequestResponseTransport.TRANSPORT_CONTROL, new HttpCoreRequestResponseTransport(msgContext));
msgContext.setProperty(ServerHandler.SERVER_CONNECTION_DEBUG, conn.getContext().getAttribute(ServerHandler.SERVER_CONNECTION_DEBUG));
msgContext.setProperty(NhttpConstants.NHTTP_INPUT_STREAM, is);
msgContext.setProperty(NhttpConstants.NHTTP_OUTPUT_STREAM, os);
return msgContext;
}
use of org.apache.http.nio.reactor.ssl.SSLIOSession in project wso2-synapse by wso2.
the class ClientConnFactory method upgrade.
public void upgrade(final UpgradableNHttpConnection conn) {
if (ssl != null) {
IOSession iosession = conn.getIOSession();
if (!(iosession instanceof SSLIOSession)) {
SSLContext customContext = getSSLContext(iosession);
SSLIOSession ssliosession = new SSLIOSession(iosession, SSLMode.CLIENT, customContext, ssl.getHandler());
iosession.setAttribute(SSLIOSession.SESSION_KEY, ssliosession);
conn.bind(ssliosession);
}
}
}
use of org.apache.http.nio.reactor.ssl.SSLIOSession in project wso2-synapse by wso2.
the class ClientConnFactory method upgrade.
public void upgrade(final UpgradableNHttpConnection conn, HttpRoute route) {
org.apache.http.HttpHost targetHost = route.getTargetHost();
if (ssl != null) {
IOSession iosession = conn.getIOSession();
if (!(iosession instanceof SSLIOSession)) {
SSLContext customContext = getSSLContext(targetHost);
SSLIOSession ssliosession = new SSLIOSession(iosession, SSLMode.CLIENT, customContext, ssl.getHandler());
iosession.setAttribute(SSLIOSession.SESSION_KEY, ssliosession);
conn.bind(ssliosession);
}
}
}
use of org.apache.http.nio.reactor.ssl.SSLIOSession in project wso2-synapse by wso2.
the class ClientConnFactory method createConnection.
public DefaultNHttpClientConnection createConnection(final IOSession iosession, final HttpRoute route) {
IOSession customSession;
if (ssl != null && route.isSecure() && !route.isTunnelled()) {
SSLContext customContext = getSSLContext(iosession);
SSLIOSession ssliosession = new SSLIOSession(iosession, SSLMode.CLIENT, customContext, ssl.getHandler());
iosession.setAttribute(SSLIOSession.SESSION_KEY, ssliosession);
customSession = ssliosession;
} else {
customSession = iosession;
}
DefaultNHttpClientConnection conn = LoggingUtils.createClientConnection(customSession, responseFactory, allocator, params);
int timeout = HttpConnectionParams.getSoTimeout(params);
conn.setSocketTimeout(timeout);
return conn;
}
Aggregations