List of usage examples for org.apache.http.nio.reactor.ssl SSLIOSession getSSLSession
public synchronized SSLSession getSSLSession()
From source file:org.apache.synapse.transport.nhttp.ServerWorker.java
/** * Create an Axis2 message context for the given http request. The request may be in the * process of being streamed/* ww w.j a va2 s . co m*/ * @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; }
From source file:org.apache.synapse.transport.passthru.ServerWorker.java
/** * Create an Axis2 message context for the given http request. The request may be in the * process of being streamed// w ww.jav a 2 s . co m * * @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); // Following section is required for throttling to work 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; }