NetscapeDraftHeaderParser to use TokenParser from core internally
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1626680 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
90c97da9b8
commit
0739770c15
|
@ -28,6 +28,7 @@
|
||||||
package org.apache.http.impl.cookie;
|
package org.apache.http.impl.cookie;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.BitSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.http.HeaderElement;
|
import org.apache.http.HeaderElement;
|
||||||
|
@ -37,7 +38,7 @@ import org.apache.http.annotation.Immutable;
|
||||||
import org.apache.http.message.BasicHeaderElement;
|
import org.apache.http.message.BasicHeaderElement;
|
||||||
import org.apache.http.message.BasicNameValuePair;
|
import org.apache.http.message.BasicNameValuePair;
|
||||||
import org.apache.http.message.ParserCursor;
|
import org.apache.http.message.ParserCursor;
|
||||||
import org.apache.http.protocol.HTTP;
|
import org.apache.http.message.TokenParser;
|
||||||
import org.apache.http.util.Args;
|
import org.apache.http.util.Args;
|
||||||
import org.apache.http.util.CharArrayBuffer;
|
import org.apache.http.util.CharArrayBuffer;
|
||||||
|
|
||||||
|
@ -50,8 +51,18 @@ public class NetscapeDraftHeaderParser {
|
||||||
|
|
||||||
public final static NetscapeDraftHeaderParser DEFAULT = new NetscapeDraftHeaderParser();
|
public final static NetscapeDraftHeaderParser DEFAULT = new NetscapeDraftHeaderParser();
|
||||||
|
|
||||||
|
private final static char PARAM_DELIMITER = ';';
|
||||||
|
|
||||||
|
// IMPORTANT!
|
||||||
|
// These private static variables must be treated as immutable and never exposed outside this class
|
||||||
|
private static final BitSet TOKEN_DELIMS = TokenParser.INIT_BITSET('=', PARAM_DELIMITER);
|
||||||
|
private static final BitSet VALUE_DELIMS = TokenParser.INIT_BITSET(PARAM_DELIMITER);
|
||||||
|
|
||||||
|
private final TokenParser tokenParser;
|
||||||
|
|
||||||
public NetscapeDraftHeaderParser() {
|
public NetscapeDraftHeaderParser() {
|
||||||
super();
|
super();
|
||||||
|
this.tokenParser = TokenParser.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HeaderElement parseHeader(
|
public HeaderElement parseHeader(
|
||||||
|
@ -72,66 +83,19 @@ public class NetscapeDraftHeaderParser {
|
||||||
|
|
||||||
private NameValuePair parseNameValuePair(
|
private NameValuePair parseNameValuePair(
|
||||||
final CharArrayBuffer buffer, final ParserCursor cursor) {
|
final CharArrayBuffer buffer, final ParserCursor cursor) {
|
||||||
boolean terminated = false;
|
final String name = tokenParser.parseToken(buffer, cursor, TOKEN_DELIMS);
|
||||||
|
if (cursor.atEnd()) {
|
||||||
int pos = cursor.getPos();
|
|
||||||
final int indexFrom = cursor.getPos();
|
|
||||||
final int indexTo = cursor.getUpperBound();
|
|
||||||
|
|
||||||
// Find name
|
|
||||||
String name = null;
|
|
||||||
while (pos < indexTo) {
|
|
||||||
final char ch = buffer.charAt(pos);
|
|
||||||
if (ch == '=') {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (ch == ';') {
|
|
||||||
terminated = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pos == indexTo) {
|
|
||||||
terminated = true;
|
|
||||||
name = buffer.substringTrimmed(indexFrom, indexTo);
|
|
||||||
} else {
|
|
||||||
name = buffer.substringTrimmed(indexFrom, pos);
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (terminated) {
|
|
||||||
cursor.updatePos(pos);
|
|
||||||
return new BasicNameValuePair(name, null);
|
return new BasicNameValuePair(name, null);
|
||||||
}
|
}
|
||||||
|
final int delim = buffer.charAt(cursor.getPos());
|
||||||
// Find value
|
cursor.updatePos(cursor.getPos() + 1);
|
||||||
String value = null;
|
if (delim != '=') {
|
||||||
int i1 = pos;
|
return new BasicNameValuePair(name, null);
|
||||||
|
|
||||||
while (pos < indexTo) {
|
|
||||||
final char ch = buffer.charAt(pos);
|
|
||||||
if (ch == ';') {
|
|
||||||
terminated = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
pos++;
|
|
||||||
}
|
}
|
||||||
|
final String value = tokenParser.parseToken(buffer, cursor, VALUE_DELIMS);
|
||||||
int i2 = pos;
|
if (!cursor.atEnd()) {
|
||||||
// Trim leading white spaces
|
cursor.updatePos(cursor.getPos() + 1);
|
||||||
while (i1 < i2 && (HTTP.isWhitespace(buffer.charAt(i1)))) {
|
|
||||||
i1++;
|
|
||||||
}
|
}
|
||||||
// Trim trailing white spaces
|
|
||||||
while ((i2 > i1) && (HTTP.isWhitespace(buffer.charAt(i2 - 1)))) {
|
|
||||||
i2--;
|
|
||||||
}
|
|
||||||
value = buffer.substring(i1, i2);
|
|
||||||
if (terminated) {
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
cursor.updatePos(pos);
|
|
||||||
return new BasicNameValuePair(name, value);
|
return new BasicNameValuePair(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue