//package org.apache.axis.handlers ;
package client;

import java.util.Hashtable;
import org.apache.axis.AxisFault;
import org.apache.axis.handlers.BasicHandler;
import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;

/**
 * Configures for HTTP1.1 chunked, gzip,,,
 * @author Toshiro Takase
 */
public class ConfigureHandler extends BasicHandler {

    public void invoke(MessageContext msgContext) throws AxisFault {
        //System.out.println("ConfigureHandler.invoke()!!!!!");
        //System.out.println(getOptions());

        // sets HTTP version
        if(HTTPConstants.HEADER_PROTOCOL_V11.equals(getOption(MessageContext.HTTP_TRANSPORT_VERSION))){
            msgContext.setProperty(MessageContext.HTTP_TRANSPORT_VERSION,
                                   HTTPConstants.HEADER_PROTOCOL_V11);
        }

        // adds user HTTP header
        Object oHeaders = msgContext.getProperty(HTTPConstants.REQUEST_HEADERS);
        Hashtable headers;
        if(oHeaders == null) headers = new Hashtable();
        else headers = (Hashtable)oHeaders;
        // chunked
        if("chunked".equals(getOption("Transfer-Encoding"))){
            headers.put("Transfer-Encoding", "chunked");
        }
        // response gzip
        if("gzip".equals(getOption("Accept-Encoding"))){
            headers.put("Accept-Encoding", "gzip");
//            headers.put("Accept-Encoding", "deflate");
        }
        // request gzip
        if("gzip".equals(getOption("Content-Encoding"))){
            headers.put("Content-Encoding", "gzip");
        }
        msgContext.setProperty(HTTPConstants.REQUEST_HEADERS, headers);
        
    }
    
}
