/* * BEGIN_HEADER - DO NOT EDIT * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the "License"). You may not use this file except * in compliance with the License. * * You can obtain a copy of the license at * https://open-jbi-components.dev.java.net/public/CDDLv1.0.html. * See the License for the specific language governing * permissions and limitations under the License. * * When distributing Covered Code, include this CDDL * HEADER in each file and include the License file at * https://open-jbi-components.dev.java.net/public/CDDLv1.0.html. * If applicable add the following below this CDDL HEADER, * with the fields enclosed by brackets "[]" replaced with * your own identifying information: Portions Copyright * [year] [name of copyright owner] */ /* * @(#)BCCoyoteRequest.java * * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved. * * END_HEADER - DO NOT EDIT */ package com.sun.jbi.httpsoapbc.embedded; import com.sun.jbi.internationalization.Messages; import java.io.BufferedReader; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.logging.Logger; import java.util.logging.Level; import javax.servlet.ServletRequest; import javax.servlet.http.Cookie; import org.apache.catalina.Context; import org.apache.catalina.Globals; import org.apache.coyote.tomcat5.CoyoteRequest; import org.apache.coyote.tomcat5.CoyoteResponse; import org.apache.coyote.tomcat5.CoyoteConnector; import org.apache.coyote.tomcat5.CoyoteInputStream; import org.apache.coyote.tomcat5.CoyoteReader; import org.apache.coyote.tomcat5.InputBuffer; import org.apache.tomcat.util.http.Parameters; import com.sun.enterprise.web.PwcWebModule; import com.sun.enterprise.web.session.SessionCookieConfig; /** * Customized version of the Tomcat 5 CoyoteRequest * This is required for supporting Web Programmatic Login and setting the * request encoding (charset). * */ public class BCCoyoteRequest extends CoyoteRequest { private static final Messages mMessages = Messages.getMessages(BCCoyoteRequest.class); //private static Logger logger = LogDomains.getLogger(LogDomains.PWC_LOGGER); private final static Logger logger = Messages.getLogger(BCCoyoteRequest.class); private boolean requestEncodingSet = false; // START SJSAS 6346738 private byte[] formData = null; private int formDataLen = 0; // END SJSAS 6346738 public void setContext(Context ctx) { super.setContext(ctx); CoyoteResponse response = (CoyoteResponse) getResponse(); // Assert response!=null if (response != null) { String[] cacheControls = ((PwcWebModule) ctx).getCacheControls(); for (int i=0; cacheControls!=null && i element in sun-web.xml. * * @return The value of the query parameter whose name corresponds to the * value of the form-hint-field attribute in sun-web.xml, or null if the * request does not have any query string, or the query string does not * contain a query parameter with that name */ private String getFormHintFieldEncoding(PwcWebModule wm) { String encoding = null; String formHintField = wm.getFormHintField(); if (formHintField == null){ return null; } if ("POST".equalsIgnoreCase(getMethod())) { // POST encoding = getPostDataEncoding(formHintField); } else { String query = getQueryString(); if (query != null) { encoding = parseFormHintField(query, formHintField); } } return encoding; } private String getPostDataEncoding(String formHintField) { if (!getMethod().equalsIgnoreCase("POST")) { return null; } String contentType = getContentType(); if (contentType == null) contentType = ""; int semicolon = contentType.indexOf(';'); if (semicolon >= 0) { contentType = contentType.substring(0, semicolon).trim(); } else { contentType = contentType.trim(); } if (!("application/x-www-form-urlencoded".equals(contentType))) { return null; } int len = getContentLength(); if (len <= 0) { return null; } int maxPostSize = ((CoyoteConnector) connector).getMaxPostSize(); if ((maxPostSize > 0) && (len > maxPostSize)) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, "HTTPBC-W00610.Post_size_too_large", new Object[] { Integer.valueOf(len), Integer.valueOf(maxPostSize) }); } throw new IllegalStateException("Post too large"); } String encoding = null; try { formData = null; if (len < CACHED_POST_LEN) { if (postData == null) postData = new byte[CACHED_POST_LEN]; formData = postData; } else { formData = new byte[len]; } int actualLen = readPostBody(formData, len); if (actualLen == len) { // START SJSAS 6346738 formDataLen = actualLen; // END SJSAS 6346738 String formDataString = new String(formData).substring(0, len); encoding = parseFormHintField(formDataString, formHintField); } } catch (Throwable t) { ; // Ignore } return encoding; } /* * Parses the value of the specified form-hint-field from the given * parameter string. * * @param paramsString Parameter string * @param formHintField From-hint-field * * @return Value of form-hint-field, or null if not found */ private String parseFormHintField(String paramsString, String formHintField) { String encoding = null; formHintField += "="; int index = paramsString.indexOf(formHintField); if (index != -1) { int endIndex = paramsString.indexOf('&', index); if (endIndex != -1) { encoding = paramsString.substring( index + formHintField.length(), endIndex); } else { encoding = paramsString.substring( index + formHintField.length()); } } return encoding; } // START SJSAS 6346738 /** * Gets the POST body of this request. * * @return The POST body of this request */ protected byte[] getPostBody() throws IOException { if (formDataLen > 0) { // POST body already read return formData; } else { return super.getPostBody(); } } // END SJSAS 6346738 }