public boolean commitResponse()

in server/src/main/java/org/apache/asyncweb/server/context/AbstractHttpServiceContext.java [109:168]


    public boolean commitResponse( HttpResponse response )
    {
        synchronized ( this )
        {
            if ( isResponseCommitted() )
            {
                log.info( "Request already comitted to a response. Disposing response" );
                return false;
            }

            committedResponse = response;
        }

        // Add the session identifier if the session was newly created.
        if ( createdSession )
        {
            container.getSessionAccessor().addSessionIdentifier( this, ( MutableHttpResponse ) response );
        }

        // Only parsed requests can be formatted.
        if ( getRequest().getMethod() != null )
        {
            container.getErrorResponseFormatter().formatResponse( getRequest(), ( MutableHttpResponse ) response );
        }

        if ( container.isSendServerHeader() )
        {
            ( ( MutableHttpResponse ) response ).setHeader( HttpHeaderConstants.KEY_SERVER, "AsyncWeb" );
        }

        // Normalize the response.
        ( ( MutableHttpResponse ) response ).normalize( getRequest() );

        // Override connection header if needed.
        if ( ! container.getKeepAliveStrategy().keepAlive( this, response ) )
        {
            ( ( MutableHttpResponse ) response ).setHeader( HttpHeaderConstants.KEY_CONNECTION,
                    HttpHeaderConstants.VALUE_CLOSE );
        }

        boolean requiresClosure = ! HttpHeaderConstants.VALUE_KEEP_ALIVE
                .equalsIgnoreCase( response.getHeader(HttpHeaderConstants.KEY_CONNECTION ) );

        if ( requiresClosure && log.isDebugEnabled() )
        {
            log.debug("Response status: " + response.getStatus());
            log.debug("Keep-alive strategy requires closure of "
                    + getRemoteAddress());
        }

        if ( log.isDebugEnabled() )
        {
            log.debug( "Committing a response:" );
            log.debug( "Status: " + response.getStatus() + ' ' + response.getStatusReasonPhrase() );
            log.debug( "Headers: " + response.getHeaders() );
        }

        doWrite( requiresClosure );
        return true;
    }