use of org.apache.tomcat.util.http.ServerCookie in project tomcat by apache.
the class Cookie method parseCookieRfc6265.
private static void parseCookieRfc6265(ByteBuffer bb, ServerCookies serverCookies) {
boolean moreToProcess = true;
while (moreToProcess) {
skipLWS(bb);
ByteBuffer name = readToken(bb);
ByteBuffer value = null;
skipLWS(bb);
SkipResult skipResult = skipByte(bb, EQUALS_BYTE);
if (skipResult == SkipResult.FOUND) {
skipLWS(bb);
value = readCookieValueRfc6265(bb);
if (value == null) {
logInvalidHeader(bb);
// Invalid cookie value. Skip to the next semi-colon
skipUntilSemiColon(bb);
continue;
}
skipLWS(bb);
}
skipResult = skipByte(bb, SEMICOLON_BYTE);
if (skipResult == SkipResult.FOUND) {
// NO-OP
} else if (skipResult == SkipResult.NOT_FOUND) {
logInvalidHeader(bb);
// Invalid cookie. Ignore it and skip to the next semi-colon
skipUntilSemiColon(bb);
continue;
} else {
// SkipResult.EOF
moreToProcess = false;
}
if (name.hasRemaining()) {
ServerCookie sc = serverCookies.addCookie();
sc.getName().setBytes(name.array(), name.position(), name.remaining());
if (value == null) {
sc.getValue().setBytes(EMPTY_BYTES, 0, EMPTY_BYTES.length);
} else {
sc.getValue().setBytes(value.array(), value.position(), value.remaining());
}
}
}
}
use of org.apache.tomcat.util.http.ServerCookie in project tomcat by apache.
the class Cookie method parseCookie.
public static void parseCookie(byte[] bytes, int offset, int len, ServerCookies serverCookies) {
// ByteBuffer is used throughout this parser as it allows the byte[]
// and position information to be easily passed between parsing methods
ByteBuffer bb = new ByteBuffer(bytes, offset, len);
boolean moreToProcess = true;
while (moreToProcess) {
skipLWS(bb);
int start = bb.position();
ByteBuffer name = readToken(bb);
ByteBuffer value = null;
skipLWS(bb);
SkipResult skipResult = skipByte(bb, EQUALS_BYTE);
if (skipResult == SkipResult.FOUND) {
skipLWS(bb);
value = readCookieValueRfc6265(bb);
if (value == null) {
// Invalid cookie value. Skip to the next semi-colon
skipUntilSemiColon(bb);
logInvalidHeader(start, bb);
continue;
}
skipLWS(bb);
}
skipResult = skipByte(bb, SEMICOLON_BYTE);
if (skipResult == SkipResult.FOUND) {
// NO-OP
} else if (skipResult == SkipResult.NOT_FOUND) {
// Invalid cookie. Ignore it and skip to the next semi-colon
skipUntilSemiColon(bb);
logInvalidHeader(start, bb);
continue;
} else {
// SkipResult.EOF
moreToProcess = false;
}
if (name.hasRemaining()) {
ServerCookie sc = serverCookies.addCookie();
sc.getName().setBytes(name.array(), name.position(), name.remaining());
if (value == null) {
sc.getValue().setBytes(EMPTY_BYTES, 0, EMPTY_BYTES.length);
} else {
sc.getValue().setBytes(value.array(), value.position(), value.remaining());
}
}
}
}
use of org.apache.tomcat.util.http.ServerCookie in project tomcat by apache.
the class Cookie method parseCookieRfc2109.
private static void parseCookieRfc2109(ByteBuffer bb, ServerCookies serverCookies, int version) {
boolean moreToProcess = true;
while (moreToProcess) {
skipLWS(bb);
boolean parseAttributes = true;
ByteBuffer name = readToken(bb);
ByteBuffer value = null;
ByteBuffer path = null;
ByteBuffer domain = null;
skipLWS(bb);
SkipResult skipResult = skipByte(bb, EQUALS_BYTE);
if (skipResult == SkipResult.FOUND) {
skipLWS(bb);
value = readCookieValueRfc2109(bb, false);
if (value == null) {
skipInvalidCookie(bb);
continue;
}
skipLWS(bb);
}
skipResult = skipByte(bb, COMMA_BYTE);
if (skipResult == SkipResult.FOUND) {
parseAttributes = false;
}
skipResult = skipByte(bb, SEMICOLON_BYTE);
if (skipResult == SkipResult.EOF) {
parseAttributes = false;
moreToProcess = false;
} else if (skipResult == SkipResult.NOT_FOUND) {
skipInvalidCookie(bb);
continue;
}
if (parseAttributes) {
skipResult = skipBytes(bb, PATH_BYTES);
if (skipResult == SkipResult.FOUND) {
skipLWS(bb);
skipResult = skipByte(bb, EQUALS_BYTE);
if (skipResult != SkipResult.FOUND) {
skipInvalidCookie(bb);
continue;
}
path = readCookieValueRfc2109(bb, true);
if (path == null) {
skipInvalidCookie(bb);
continue;
}
skipLWS(bb);
skipResult = skipByte(bb, COMMA_BYTE);
if (skipResult == SkipResult.FOUND) {
parseAttributes = false;
}
skipResult = skipByte(bb, SEMICOLON_BYTE);
if (skipResult == SkipResult.EOF) {
parseAttributes = false;
moreToProcess = false;
} else if (skipResult == SkipResult.NOT_FOUND) {
skipInvalidCookie(bb);
continue;
}
}
}
if (parseAttributes) {
skipResult = skipBytes(bb, DOMAIN_BYTES);
if (skipResult == SkipResult.FOUND) {
skipLWS(bb);
skipResult = skipByte(bb, EQUALS_BYTE);
if (skipResult != SkipResult.FOUND) {
skipInvalidCookie(bb);
continue;
}
domain = readCookieValueRfc2109(bb, false);
if (domain == null) {
skipInvalidCookie(bb);
continue;
}
skipResult = skipByte(bb, COMMA_BYTE);
if (skipResult == SkipResult.FOUND) {
parseAttributes = false;
}
skipResult = skipByte(bb, SEMICOLON_BYTE);
if (skipResult == SkipResult.EOF) {
parseAttributes = false;
moreToProcess = false;
} else if (skipResult == SkipResult.NOT_FOUND) {
skipInvalidCookie(bb);
continue;
}
}
}
if (name.hasRemaining() && value != null && value.hasRemaining()) {
ServerCookie sc = serverCookies.addCookie();
sc.setVersion(version);
sc.getName().setBytes(name.array(), name.position(), name.remaining());
sc.getValue().setBytes(value.array(), value.position(), value.remaining());
if (domain != null) {
sc.getDomain().setBytes(domain.array(), domain.position(), domain.remaining());
}
if (path != null) {
sc.getPath().setBytes(path.array(), path.position(), path.remaining());
}
}
}
}
use of org.apache.tomcat.util.http.ServerCookie in project tomcat70 by apache.
the class Request method parseCookies.
/**
* Parse cookies.
*/
protected void parseCookies() {
cookiesParsed = true;
Cookies serverCookies = coyoteRequest.getCookies();
int count = serverCookies.getCookieCount();
if (count <= 0) {
return;
}
cookies = new Cookie[count];
int idx = 0;
for (int i = 0; i < count; i++) {
ServerCookie scookie = serverCookies.getCookie(i);
try {
/*
we must unescape the '\\' escape character
*/
Cookie cookie = new Cookie(scookie.getName().toString(), null);
int version = scookie.getVersion();
cookie.setVersion(version);
cookie.setValue(unescape(scookie.getValue().toString()));
cookie.setPath(unescape(scookie.getPath().toString()));
String domain = scookie.getDomain().toString();
if (domain != null) {
// avoid NPE
cookie.setDomain(unescape(domain));
}
String comment = scookie.getComment().toString();
cookie.setComment(version == 1 ? unescape(comment) : null);
cookies[idx++] = cookie;
} catch (IllegalArgumentException e) {
// Ignore bad cookie
}
}
if (idx < count) {
Cookie[] ncookies = new Cookie[idx];
System.arraycopy(cookies, 0, ncookies, 0, idx);
cookies = ncookies;
}
}
use of org.apache.tomcat.util.http.ServerCookie in project tomcat70 by apache.
the class CoyoteAdapter method parseSessionCookiesId.
/**
* Parse session id in Cookie.
*/
protected void parseSessionCookiesId(org.apache.coyote.Request req, Request request) {
// If session tracking via cookies has been disabled for the current
// context, don't go looking for a session ID in a cookie as a cookie
// from a parent context with a session ID may be present which would
// overwrite the valid session ID encoded in the URL
Context context = (Context) request.getMappingData().context;
if (context != null && !context.getServletContext().getEffectiveSessionTrackingModes().contains(SessionTrackingMode.COOKIE)) {
return;
}
// Parse session id from cookies
Cookies serverCookies = req.getCookies();
int count = serverCookies.getCookieCount();
if (count <= 0) {
return;
}
String sessionCookieName = SessionConfig.getSessionCookieName(context);
for (int i = 0; i < count; i++) {
ServerCookie scookie = serverCookies.getCookie(i);
if (scookie.getName().equals(sessionCookieName)) {
// Override anything requested in the URL
if (!request.isRequestedSessionIdFromCookie()) {
// Accept only the first session id cookie
convertMB(scookie.getValue());
request.setRequestedSessionId(scookie.getValue().toString());
request.setRequestedSessionCookie(true);
request.setRequestedSessionURL(false);
if (log.isDebugEnabled()) {
log.debug(" Requested cookie session id is " + request.getRequestedSessionId());
}
} else {
if (!request.isRequestedSessionIdValid()) {
// Replace the session id until one is valid
convertMB(scookie.getValue());
request.setRequestedSessionId(scookie.getValue().toString());
}
}
}
}
}
Aggregations