Author: markt Date: Sun Nov 19 16:04:23 2006 New Revision: 476985 URL: http://svn.apache.org/viewvc?view=rev&rev=476985 Log: Tabs to 8 spaces.
Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/Parameters.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/Parameters.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/Parameters.java?view=diff&rev=476985&r1=476984&r2=476985 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/Parameters.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/http/Parameters.java Sun Nov 19 16:04:23 2006 @@ -69,91 +69,91 @@ * */ public Parameters() { - super( INITIAL_SIZE ); + super( INITIAL_SIZE ); } public void setQuery( MessageBytes queryMB ) { - this.queryMB=queryMB; + this.queryMB=queryMB; } public void setHeaders( MimeHeaders headers ) { - this.headers=headers; + this.headers=headers; } public void setEncoding( String s ) { - encoding=s; - if(debug>0) log( "Set encoding to " + s ); + encoding=s; + if(debug>0) log( "Set encoding to " + s ); } public void setQueryStringEncoding( String s ) { - queryStringEncoding=s; - if(debug>0) log( "Set query string encoding to " + s ); + queryStringEncoding=s; + if(debug>0) log( "Set query string encoding to " + s ); } public void recycle() { - super.recycle(); - paramHashStringArray.clear(); - didQueryParameters=false; - currentChild=null; - didMerge=false; - encoding=null; - decodedQuery.recycle(); + super.recycle(); + paramHashStringArray.clear(); + didQueryParameters=false; + currentChild=null; + didMerge=false; + encoding=null; + decodedQuery.recycle(); } // -------------------- Sub-request support -------------------- public Parameters getCurrentSet() { - if( currentChild==null ) - return this; - return currentChild; + if( currentChild==null ) + return this; + return currentChild; } /** Create ( or reuse ) a child that will be used during a sub-request. - All future changes ( setting query string, adding parameters ) - will affect the child ( the parent request is never changed ). - Both setters and getters will return the data from the deepest - child, merged with data from parents. + All future changes ( setting query string, adding parameters ) + will affect the child ( the parent request is never changed ). + Both setters and getters will return the data from the deepest + child, merged with data from parents. */ public void push() { - // We maintain a linked list, that will grow to the size of the - // longest include chain. - // The list has 2 points of interest: - // - request.parameters() is the original request and head, - // - request.parameters().currentChild() is the current set. - // The ->child and parent<- links are preserved ( currentChild is not - // the last in the list ) - - // create a new element in the linked list - // note that we reuse the child, if any - pop will not - // set child to null ! - if( currentChild==null ) { - currentChild=new Parameters(); - currentChild.setURLDecoder( urlDec ); - currentChild.parent=this; - return; - } - if( currentChild.child==null ) { - currentChild.child=new Parameters(); - currentChild.setURLDecoder( urlDec ); - currentChild.child.parent=currentChild; - } // it is not null if this object already had a child - // i.e. a deeper include() ( we keep it ) - - // the head will be the new element. - currentChild=currentChild.child; - currentChild.setEncoding( encoding ); + // We maintain a linked list, that will grow to the size of the + // longest include chain. + // The list has 2 points of interest: + // - request.parameters() is the original request and head, + // - request.parameters().currentChild() is the current set. + // The ->child and parent<- links are preserved ( currentChild is not + // the last in the list ) + + // create a new element in the linked list + // note that we reuse the child, if any - pop will not + // set child to null ! + if( currentChild==null ) { + currentChild=new Parameters(); + currentChild.setURLDecoder( urlDec ); + currentChild.parent=this; + return; + } + if( currentChild.child==null ) { + currentChild.child=new Parameters(); + currentChild.setURLDecoder( urlDec ); + currentChild.child.parent=currentChild; + } // it is not null if this object already had a child + // i.e. a deeper include() ( we keep it ) + + // the head will be the new element. + currentChild=currentChild.child; + currentChild.setEncoding( encoding ); } /** Discard the last child. This happens when we return from a - sub-request and the parameters are locally modified. + sub-request and the parameters are locally modified. */ public void pop() { - if( currentChild==null ) { - throw new RuntimeException( "Attempt to pop without a push" ); - } - currentChild.recycle(); - currentChild=currentChild.parent; - // don't remove the top. + if( currentChild==null ) { + throw new RuntimeException( "Attempt to pop without a push" ); + } + currentChild.recycle(); + currentChild=currentChild.parent; + // don't remove the top. } // -------------------- Data access -------------------- @@ -182,80 +182,80 @@ } public String[] getParameterValues(String name) { - handleQueryParameters(); - // sub-request - if( currentChild!=null ) { - currentChild.merge(); - return (String[])currentChild.paramHashStringArray.get(name); - } - - // no "facade" - String values[]=(String[])paramHashStringArray.get(name); - return values; + handleQueryParameters(); + // sub-request + if( currentChild!=null ) { + currentChild.merge(); + return (String[])currentChild.paramHashStringArray.get(name); + } + + // no "facade" + String values[]=(String[])paramHashStringArray.get(name); + return values; } public Enumeration getParameterNames() { - handleQueryParameters(); - // Slow - the original code - if( currentChild!=null ) { - currentChild.merge(); - return currentChild.paramHashStringArray.keys(); - } + handleQueryParameters(); + // Slow - the original code + if( currentChild!=null ) { + currentChild.merge(); + return currentChild.paramHashStringArray.keys(); + } - // merge in child + // merge in child return paramHashStringArray.keys(); } /** Combine the parameters from parent with our local ones */ private void merge() { - // recursive - if( debug > 0 ) { - log("Before merging " + this + " " + parent + " " + didMerge ); - log( paramsAsString()); - } - // Local parameters first - they take precedence as in spec. - handleQueryParameters(); - - // we already merged with the parent - if( didMerge ) return; - - // we are the top level - if( parent==null ) return; - - // Add the parent props to the child ( lower precedence ) - parent.merge(); - Hashtable parentProps=parent.paramHashStringArray; - merge2( paramHashStringArray , parentProps); - didMerge=true; - if(debug > 0 ) - log("After " + paramsAsString()); + // recursive + if( debug > 0 ) { + log("Before merging " + this + " " + parent + " " + didMerge ); + log( paramsAsString()); + } + // Local parameters first - they take precedence as in spec. + handleQueryParameters(); + + // we already merged with the parent + if( didMerge ) return; + + // we are the top level + if( parent==null ) return; + + // Add the parent props to the child ( lower precedence ) + parent.merge(); + Hashtable parentProps=parent.paramHashStringArray; + merge2( paramHashStringArray , parentProps); + didMerge=true; + if(debug > 0 ) + log("After " + paramsAsString()); } // Shortcut. public String getParameter(String name ) { - String[] values = getParameterValues(name); + String[] values = getParameterValues(name); if (values != null) { - if( values.length==0 ) return ""; + if( values.length==0 ) return ""; return values[0]; } else { - return null; + return null; } } // -------------------- Processing -------------------- /** Process the query string into parameters */ public void handleQueryParameters() { - if( didQueryParameters ) return; + if( didQueryParameters ) return; - didQueryParameters=true; + didQueryParameters=true; - if( queryMB==null || queryMB.isNull() ) - return; - - if( debug > 0 ) - log( "Decoding query " + decodedQuery + " " + queryStringEncoding); + if( queryMB==null || queryMB.isNull() ) + return; + + if( debug > 0 ) + log( "Decoding query " + decodedQuery + " " + queryStringEncoding); try { decodedQuery.duplicate( queryMB ); @@ -276,56 +276,56 @@ private static void merge2(Hashtable one, Hashtable two ) { Enumeration e = two.keys(); - while (e.hasMoreElements()) { - String name = (String) e.nextElement(); - String[] oneValue = (String[]) one.get(name); - String[] twoValue = (String[]) two.get(name); - String[] combinedValue; - - if (twoValue == null) { - continue; - } else { - if( oneValue==null ) { - combinedValue = new String[twoValue.length]; - System.arraycopy(twoValue, 0, combinedValue, - 0, twoValue.length); - } else { - combinedValue = new String[oneValue.length + - twoValue.length]; - System.arraycopy(oneValue, 0, combinedValue, 0, - oneValue.length); - System.arraycopy(twoValue, 0, combinedValue, - oneValue.length, twoValue.length); - } - one.put(name, combinedValue); - } - } + while (e.hasMoreElements()) { + String name = (String) e.nextElement(); + String[] oneValue = (String[]) one.get(name); + String[] twoValue = (String[]) two.get(name); + String[] combinedValue; + + if (twoValue == null) { + continue; + } else { + if( oneValue==null ) { + combinedValue = new String[twoValue.length]; + System.arraycopy(twoValue, 0, combinedValue, + 0, twoValue.length); + } else { + combinedValue = new String[oneValue.length + + twoValue.length]; + System.arraycopy(oneValue, 0, combinedValue, 0, + oneValue.length); + System.arraycopy(twoValue, 0, combinedValue, + oneValue.length, twoValue.length); + } + one.put(name, combinedValue); + } + } } // incredibly inefficient data representation for parameters, // until we test the new one private void addParam( String key, String value ) { - if( key==null ) return; - String values[]; - if (paramHashStringArray.containsKey(key)) { - String oldValues[] = (String[])paramHashStringArray. - get(key); - values = new String[oldValues.length + 1]; - for (int i = 0; i < oldValues.length; i++) { - values[i] = oldValues[i]; - } - values[oldValues.length] = value; - } else { - values = new String[1]; - values[0] = value; - } - - - paramHashStringArray.put(key, values); + if( key==null ) return; + String values[]; + if (paramHashStringArray.containsKey(key)) { + String oldValues[] = (String[])paramHashStringArray. + get(key); + values = new String[oldValues.length + 1]; + for (int i = 0; i < oldValues.length; i++) { + values[i] = oldValues[i]; + } + values[oldValues.length] = value; + } else { + values = new String[1]; + values[0] = value; + } + + + paramHashStringArray.put(key, values); } public void setURLDecoder( UDecoder u ) { - urlDec=u; + urlDec=u; } // -------------------- Parameter parsing -------------------- @@ -346,47 +346,47 @@ public void processParameters( byte bytes[], int start, int len, String enc ) { - int end=start+len; - int pos=start; - - if( debug>0 ) - log( "Bytes: " + new String( bytes, start, len )); + int end=start+len; + int pos=start; + + if( debug>0 ) + log( "Bytes: " + new String( bytes, start, len )); do { - boolean noEq=false; - int valStart=-1; - int valEnd=-1; - - int nameStart=pos; - int nameEnd=ByteChunk.indexOf(bytes, nameStart, end, '=' ); - // Workaround for a&b&c encoding - int nameEnd2=ByteChunk.indexOf(bytes, nameStart, end, '&' ); - if( (nameEnd2!=-1 ) && - ( nameEnd==-1 || nameEnd > nameEnd2) ) { - nameEnd=nameEnd2; - noEq=true; - valStart=nameEnd; - valEnd=nameEnd; - if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + new String(bytes, nameStart, nameEnd-nameStart) ); - } - if( nameEnd== -1 ) - nameEnd=end; - - if( ! noEq ) { - valStart= (nameEnd < end) ? nameEnd+1 : end; - valEnd=ByteChunk.indexOf(bytes, valStart, end, '&'); - if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart; - } - - pos=valEnd+1; - - if( nameEnd<=nameStart ) { - continue; - // invalid chunk - it's better to ignore - // XXX log it ? - } - tmpName.setBytes( bytes, nameStart, nameEnd-nameStart ); - tmpValue.setBytes( bytes, valStart, valEnd-valStart ); + boolean noEq=false; + int valStart=-1; + int valEnd=-1; + + int nameStart=pos; + int nameEnd=ByteChunk.indexOf(bytes, nameStart, end, '=' ); + // Workaround for a&b&c encoding + int nameEnd2=ByteChunk.indexOf(bytes, nameStart, end, '&' ); + if( (nameEnd2!=-1 ) && + ( nameEnd==-1 || nameEnd > nameEnd2) ) { + nameEnd=nameEnd2; + noEq=true; + valStart=nameEnd; + valEnd=nameEnd; + if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + new String(bytes, nameStart, nameEnd-nameStart) ); + } + if( nameEnd== -1 ) + nameEnd=end; + + if( ! noEq ) { + valStart= (nameEnd < end) ? nameEnd+1 : end; + valEnd=ByteChunk.indexOf(bytes, valStart, end, '&'); + if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart; + } + + pos=valEnd+1; + + if( nameEnd<=nameStart ) { + continue; + // invalid chunk - it's better to ignore + // XXX log it ? + } + tmpName.setBytes( bytes, nameStart, nameEnd-nameStart ); + tmpValue.setBytes( bytes, valStart, valEnd-valStart ); try { addParam( urlDecode(tmpName, enc), urlDecode(tmpValue, enc) ); @@ -394,10 +394,10 @@ // Exception during character decoding: skip parameter } - tmpName.recycle(); - tmpValue.recycle(); + tmpName.recycle(); + tmpValue.recycle(); - } while( pos<end ); + } while( pos<end ); } private String urlDecode(ByteChunk bc, String enc) @@ -428,69 +428,69 @@ } public void processParameters( char chars[], int start, int len ) { - int end=start+len; - int pos=start; - - if( debug>0 ) - log( "Chars: " + new String( chars, start, len )); + int end=start+len; + int pos=start; + + if( debug>0 ) + log( "Chars: " + new String( chars, start, len )); do { - boolean noEq=false; - int nameStart=pos; - int valStart=-1; - int valEnd=-1; - - int nameEnd=CharChunk.indexOf(chars, nameStart, end, '=' ); - int nameEnd2=CharChunk.indexOf(chars, nameStart, end, '&' ); - if( (nameEnd2!=-1 ) && - ( nameEnd==-1 || nameEnd > nameEnd2) ) { - nameEnd=nameEnd2; - noEq=true; - valStart=nameEnd; - valEnd=nameEnd; - if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + new String(chars, nameStart, nameEnd-nameStart) ); - } - if( nameEnd== -1 ) nameEnd=end; - - if( ! noEq ) { - valStart= (nameEnd < end) ? nameEnd+1 : end; - valEnd=CharChunk.indexOf(chars, valStart, end, '&'); - if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart; - } - - pos=valEnd+1; - - if( nameEnd<=nameStart ) { - continue; - // invalid chunk - no name, it's better to ignore - // XXX log it ? - } - - try { - tmpNameC.append( chars, nameStart, nameEnd-nameStart ); - tmpValueC.append( chars, valStart, valEnd-valStart ); - - if( debug > 0 ) - log( tmpNameC + "= " + tmpValueC); - - if( urlDec==null ) { - urlDec=new UDecoder(); - } - - urlDec.convert( tmpNameC ); - urlDec.convert( tmpValueC ); - - if( debug > 0 ) - log( tmpNameC + "= " + tmpValueC); - - addParam( tmpNameC.toString(), tmpValueC.toString() ); - } catch( IOException ex ) { - ex.printStackTrace(); - } + boolean noEq=false; + int nameStart=pos; + int valStart=-1; + int valEnd=-1; + + int nameEnd=CharChunk.indexOf(chars, nameStart, end, '=' ); + int nameEnd2=CharChunk.indexOf(chars, nameStart, end, '&' ); + if( (nameEnd2!=-1 ) && + ( nameEnd==-1 || nameEnd > nameEnd2) ) { + nameEnd=nameEnd2; + noEq=true; + valStart=nameEnd; + valEnd=nameEnd; + if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + new String(chars, nameStart, nameEnd-nameStart) ); + } + if( nameEnd== -1 ) nameEnd=end; + + if( ! noEq ) { + valStart= (nameEnd < end) ? nameEnd+1 : end; + valEnd=CharChunk.indexOf(chars, valStart, end, '&'); + if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart; + } + + pos=valEnd+1; + + if( nameEnd<=nameStart ) { + continue; + // invalid chunk - no name, it's better to ignore + // XXX log it ? + } + + try { + tmpNameC.append( chars, nameStart, nameEnd-nameStart ); + tmpValueC.append( chars, valStart, valEnd-valStart ); + + if( debug > 0 ) + log( tmpNameC + "= " + tmpValueC); + + if( urlDec==null ) { + urlDec=new UDecoder(); + } + + urlDec.convert( tmpNameC ); + urlDec.convert( tmpValueC ); + + if( debug > 0 ) + log( tmpNameC + "= " + tmpValueC); + + addParam( tmpNameC.toString(), tmpValueC.toString() ); + } catch( IOException ex ) { + ex.printStackTrace(); + } - tmpNameC.recycle(); - tmpValueC.recycle(); + tmpNameC.recycle(); + tmpValueC.recycle(); - } while( pos<end ); + } while( pos<end ); } public void processParameters( MessageBytes data ) { @@ -498,35 +498,35 @@ } public void processParameters( MessageBytes data, String encoding ) { - if( data==null || data.isNull() || data.getLength() <= 0 ) return; + if( data==null || data.isNull() || data.getLength() <= 0 ) return; - if( data.getType() == MessageBytes.T_BYTES ) { - ByteChunk bc=data.getByteChunk(); - processParameters( bc.getBytes(), bc.getOffset(), - bc.getLength(), encoding); - } else { - if (data.getType()!= MessageBytes.T_CHARS ) - data.toChars(); - CharChunk cc=data.getCharChunk(); - processParameters( cc.getChars(), cc.getOffset(), - cc.getLength()); - } + if( data.getType() == MessageBytes.T_BYTES ) { + ByteChunk bc=data.getByteChunk(); + processParameters( bc.getBytes(), bc.getOffset(), + bc.getLength(), encoding); + } else { + if (data.getType()!= MessageBytes.T_CHARS ) + data.toChars(); + CharChunk cc=data.getCharChunk(); + processParameters( cc.getChars(), cc.getOffset(), + cc.getLength()); + } } /** Debug purpose */ public String paramsAsString() { - StringBuffer sb=new StringBuffer(); - Enumeration en= paramHashStringArray.keys(); - while( en.hasMoreElements() ) { - String k=(String)en.nextElement(); - sb.append( k ).append("="); - String v[]=(String[])paramHashStringArray.get( k ); - for( int i=0; i<v.length; i++ ) - sb.append( v[i] ).append(","); - sb.append("\n"); - } - return sb.toString(); + StringBuffer sb=new StringBuffer(); + Enumeration en= paramHashStringArray.keys(); + while( en.hasMoreElements() ) { + String k=(String)en.nextElement(); + sb.append( k ).append("="); + String v[]=(String[])paramHashStringArray.get( k ); + for( int i=0; i<v.length; i++ ) + sb.append( v[i] ).append(","); + sb.append("\n"); + } + return sb.toString(); } private static int debug=0; @@ -540,72 +540,72 @@ /** Used by RequestDispatcher */ public void processParameters( String str ) { - int end=str.length(); - int pos=0; - if( debug > 0) - log("String: " + str ); - + int end=str.length(); + int pos=0; + if( debug > 0) + log("String: " + str ); + do { - boolean noEq=false; - int valStart=-1; - int valEnd=-1; - - int nameStart=pos; - int nameEnd=str.indexOf('=', nameStart ); - int nameEnd2=str.indexOf('&', nameStart ); - if( nameEnd2== -1 ) nameEnd2=end; - if( (nameEnd2!=-1 ) && - ( nameEnd==-1 || nameEnd > nameEnd2) ) { - nameEnd=nameEnd2; - noEq=true; - valStart=nameEnd; - valEnd=nameEnd; - if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + str.substring(nameStart, nameEnd) ); - } - - if( nameEnd== -1 ) nameEnd=end; - - if( ! noEq ) { - valStart=nameEnd+1; - valEnd=str.indexOf('&', valStart); - if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart; - } - - pos=valEnd+1; - - if( nameEnd<=nameStart ) { - continue; - } - if( debug>0) - log( "XXX " + nameStart + " " + nameEnd + " " - + valStart + " " + valEnd ); - - try { - tmpNameC.append(str, nameStart, nameEnd-nameStart ); - tmpValueC.append(str, valStart, valEnd-valStart ); - - if( debug > 0 ) - log( tmpNameC + "= " + tmpValueC); - - if( urlDec==null ) { - urlDec=new UDecoder(); - } - - urlDec.convert( tmpNameC ); - urlDec.convert( tmpValueC ); - - if( debug > 0 ) - log( tmpNameC + "= " + tmpValueC); - - addParam( tmpNameC.toString(), tmpValueC.toString() ); - } catch( IOException ex ) { - ex.printStackTrace(); - } + boolean noEq=false; + int valStart=-1; + int valEnd=-1; + + int nameStart=pos; + int nameEnd=str.indexOf('=', nameStart ); + int nameEnd2=str.indexOf('&', nameStart ); + if( nameEnd2== -1 ) nameEnd2=end; + if( (nameEnd2!=-1 ) && + ( nameEnd==-1 || nameEnd > nameEnd2) ) { + nameEnd=nameEnd2; + noEq=true; + valStart=nameEnd; + valEnd=nameEnd; + if( debug>0) log("no equal " + nameStart + " " + nameEnd + " " + str.substring(nameStart, nameEnd) ); + } + + if( nameEnd== -1 ) nameEnd=end; + + if( ! noEq ) { + valStart=nameEnd+1; + valEnd=str.indexOf('&', valStart); + if( valEnd== -1 ) valEnd = (valStart < end) ? end : valStart; + } + + pos=valEnd+1; + + if( nameEnd<=nameStart ) { + continue; + } + if( debug>0) + log( "XXX " + nameStart + " " + nameEnd + " " + + valStart + " " + valEnd ); + + try { + tmpNameC.append(str, nameStart, nameEnd-nameStart ); + tmpValueC.append(str, valStart, valEnd-valStart ); + + if( debug > 0 ) + log( tmpNameC + "= " + tmpValueC); + + if( urlDec==null ) { + urlDec=new UDecoder(); + } + + urlDec.convert( tmpNameC ); + urlDec.convert( tmpValueC ); + + if( debug > 0 ) + log( tmpNameC + "= " + tmpValueC); + + addParam( tmpNameC.toString(), tmpValueC.toString() ); + } catch( IOException ex ) { + ex.printStackTrace(); + } - tmpNameC.recycle(); - tmpValueC.recycle(); + tmpNameC.recycle(); + tmpValueC.recycle(); - } while( pos<end ); + } while( pos<end ); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]