Example usage for org.apache.http.nio.reactor.ssl SSLIOSession getSSLSession

List of usage examples for org.apache.http.nio.reactor.ssl SSLIOSession getSSLSession

Introduction

In this page you can find the example usage for org.apache.http.nio.reactor.ssl SSLIOSession getSSLSession.

Prototype

public synchronized SSLSession getSSLSession() 

Source Link

Usage

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;
}