Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/HttpHeadersValidator.java')
-rw-r--r--bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/HttpHeadersValidator.java1721
1 files changed, 0 insertions, 1721 deletions
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/HttpHeadersValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/HttpHeadersValidator.java
deleted file mode 100644
index f74694fd5..000000000
--- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/util/HttpHeadersValidator.java
+++ /dev/null
@@ -1,1721 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002-2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.wsi.internal.core.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.text.ParseException;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import sun.net.www.MessageHeader;
-
-import com.ibm.icu.text.SimpleDateFormat;
-
-/**
- * This class checks HTTP request headers about RFC 2616.
- *
- * @author Volodin
- */
-public class HttpHeadersValidator
-{
-
- private static final String HEADER_ALLOW = "Allow";
- private static final String HEADER_CONTENT_TYPE = "Content-Type";
- private static final String HEADER_CONTENT_ENCODING = "Content-Encoding";
- private static final String HEADER_CONTENT_LANGUAGE = "Content-Language";
- private static final String HEADER_CONTENT_LENGHT = "Content-Length";
- private static final String HEADER_CONTENT_LOCATION = "Content-Location";
- private static final String HEADER_CONTENT_RANGE = "Content-Range";
- private static final String HEADER_EXPIRES = "Expires";
- private static final String HEADER_LAST_MODIFIED = "Last-Modified";
- private static final String HEADER_CACHE_CONTROL = "Cache-Control";
- private static final String HEADER_CONNECTION = "Connection";
- private static final String HEADER_DATE = "Date";
- private static final String HEADER_PRAGMA = "Pragma";
- private static final String HEADER_TRAILER = "Trailer";
- private static final String HEADER_TRANSFER_ENCODING = "Transfer-Encoding";
-
- private static final String HEADER_UPGRADE = "Upgrade";
- private static final String HEADER_VIA = "Via";
- private static final String HEADER_WARNING = "Warning";
-
- private static final String HEADER_ACCEPT = "Accept";
- private static final String HEADER_ACCEPT_CHARSET = "Accept-Charset";
- private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
- private static final String HEADER_ACCEPT_LANGUAGE = "Accept-Language";
- private static final String HEADER_AUTHORIZATION = "Authorization";
- private static final String HEADER_EXPECT = "Expect";
- private static final String HEADER_FROM = "From";
- private static final String HEADER_HOST = "Host";
- private static final String HEADER_IF_MATCH = "If-Match";
- private static final String HEADER_IF_MODIFIED_SINCE = "If-Modified-Since";
- private static final String HEADER_IF_NONE_MATCH = "If-None-Match";
- private static final String HEADER_IF_RANGE = "If-Range";
- private static final String HEADER_IF_UNMODIFIED_SINCE =
- "If-Unmodified-Since";
- private static final String HEADER_MAX_FORWARDS = "Max-Forwards";
- private static final String HEADER_PROXY_AUTHORIZATION =
- "Proxy-Authorization";
- private static final String HEADER_RANGE = "Range";
- private static final String HEADER_REFERER = "Referer";
- private static final String HEADER_TE = "TE";
- private static final String HEADER_USER_AGENT = "User-Agent";
-
- /**
- * This class checks e-mail string about RFC 822.
- */
- public static class MailboxValidator
- {
- private static final char[] SPECIAL =
- { '(', ')', '<', '>', '@', ',', ';', ':', '\\', '\"', '.', '[', ']' };
-
- /**
- * Validates e-mail string.
- * @param mailbox e-mail string
- * @return boolean true if e-mail string is conform to RFC 822, false otherwise.
- */
-
- public static boolean validateMailbox(String mailbox)
- {
-
- if (!isFullAddr(mailbox) && !isShortAddr(mailbox))
- return false;
-
- return true;
- }
-
- /**
- * Method isSimpleAddr.
- * @param mailbox
- * @return boolean
- */
- private static boolean isShortAddr(String mailbox)
- {
- int indexAt = mailbox.indexOf('@');
- if (indexAt == -1)
- return false;
-
- if (!isLocalPart(mailbox.substring(0, indexAt))
- || !isDomain(mailbox.substring(indexAt + 1)))
- return false;
-
- return true;
- }
-
- /**
- * Method isDomaim.
- * @param string
- * return boolean
- */
- private static boolean isDomain(String string)
- {
- if (string.trim().length() == 0)
- return false;
- StringTokenizer st = new StringTokenizer(string, ".");
- while (st.hasMoreTokens())
- {
- String subDomain = st.nextToken();
- if (!isAtom(subDomain) && !isDomainLiteral(subDomain))
- return false;
-
- }
- return true;
- }
-
- /**
- * Method isDomainLiteral.
- * @param subDomain
- * @return boolean
- */
- private static boolean isDomainLiteral(String subDomain)
- {
- if (getLastDomainLiteral(subDomain, 0) == subDomain.length())
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- private static int getLastDomainLiteral(String str, int startIndex)
- {
-
- int index = startIndex;
- //int newIndex = 0;
-
- // if end if the string
- if (startIndex == str.length())
- return startIndex;
- // if the begin is not '['
- if (str.charAt(index) != '[')
- return startIndex;
-
- index++;
- while (true)
- {
- index = getLastDtext(str, index);
- if (index == str.length())
- return startIndex;
- if (BasicRules.isQuotedPair(str, index - 1))
- {
- index++;
- if (index == str.length())
- return startIndex;
- }
- else
- break;
- }
- // if the end is not ']'
- if (str.charAt(index) != ']')
- return startIndex;
-
- index++;
- return index;
- }
-
- private static int getLastDtext(String str, int startIndex)
- {
- if (str.length() == startIndex)
- return startIndex;
- int i = 0;
- for (; i < str.length(); i++)
- {
- char ch = str.charAt(i);
- i = BasicRules.getLastIndexLWS(str, i);
- if (!BasicRules.isCHAR(ch)
- || str.charAt(i) == '['
- || str.charAt(i) == ']'
- || str.charAt(i) == '\\'
- || str.charAt(i) == BasicRules.CR)
- {
- return i + 1;
- }
- }
- return i + 1;
- }
-
- /**
- * Method isLocalPart.
- * @param string
- * @return boolean
- */
- private static boolean isLocalPart(String string)
- {
- if (string.trim().length() == 0)
- return false;
- StringTokenizer st = new StringTokenizer(string, ".");
- while (st.hasMoreTokens())
- {
- if (!isWord(st.nextToken()))
- return false;
- }
- return true;
- }
-
- /**
- * Method isWord.
- * @param string
- * @return boolean
- */
- private static boolean isWord(String string)
- {
- if (!isAtom(string) && !isQuotedString(string))
- return false;
- return true;
- }
-
- /**
- * Method isAtom.
- * @param string
- * @return boolean
- */
- private static boolean isAtom(String string)
- {
- if (string.length() == 0)
- return false;
- for (int i = 0; i < string.length(); i++)
- {
- if (!BasicRules.isCHAR(string.charAt(i))
- || isSpecial(string.charAt(i))
- || string.charAt(i) == ' '
- || BasicRules.isCTL(string.charAt(i)))
- {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Method isSpecial.
- * @param c
- * @return boolean
- */
- private static boolean isSpecial(char ch)
- {
- for (int index = 0; index < SPECIAL.length; index++)
- {
- if (ch == SPECIAL[index])
- return true;
- }
- return false;
- }
-
- /**
- * Method isFullAddr.
- * @param mailbox
- * @return boolean
- */
- private static boolean isFullAddr(String mailbox)
- {
- if (mailbox.length() == 0)
- return false;
- int idxLT = mailbox.indexOf('<');
- if (idxLT == -1)
- return false;
-
- //is phrase
- String phrase = mailbox.substring(0, idxLT);
- StringTokenizer st = new StringTokenizer(phrase, " ");
- if (st.countTokens() == 0)
- return false;
- while (st.hasMoreTokens())
- {
- if (!isWord(st.nextToken()))
- return false;
- }
- if (phrase.charAt(phrase.length() - 1) != BasicRules.SP)
- {
- return false;
- }
-
- //is route-addr
- String routeAddr = mailbox.substring(idxLT + 1);
- // is route
- int idxTwoSpot = routeAddr.indexOf(':');
- if (idxTwoSpot != -1)
- {
- StringTokenizer stRouteAddr =
- new StringTokenizer(routeAddr.substring(0, idxTwoSpot), ",");
- if (!stRouteAddr.hasMoreTokens())
- return false;
- while (stRouteAddr.hasMoreTokens())
- {
- if (!isDomain(stRouteAddr.nextToken()))
- return false;
- }
- }
-
- //is addr spec
- int idxGT = routeAddr.indexOf('>');
- if (idxGT == -1 || idxGT != (routeAddr.length() - 1))
- return false;
-
- if (!isShortAddr(routeAddr.substring(idxTwoSpot + 1, idxGT)))
- return false;
-
- return true;
- }
-
- }
-
- /**
- * Validates HTTP request headers.
- * @param headers HTTP request headers
- * @return boolean true if all HTTP headers string is conform to RFC 2616, false otherwise.
- */
-
- public static boolean validateHttpRequestHeaders(String headers)
- {
-
- MessageHeader mh = new MessageHeader();
- try
- {
- mh.parseHeader(new ByteArrayInputStream(headers.getBytes()));
- }
- catch (IOException e)
- {
- return false;
- }
-
- String header = null;
- String value = null;
-
- header = mh.getKey(0);
- if (header != null)
- return false;
-
- value = mh.getValue(0);
- if (value == null)
- return false;
-
- //method
- StringTokenizer st = new StringTokenizer(value, " ");
- if (!st.hasMoreElements())
- return false;
- String str = st.nextToken();
- if (!isToken(str))
- return false;
-
- if (!st.hasMoreElements())
- return false;
- str = st.nextToken();
- if (!isURI(str) && !str.equals("*"))
- return false;
-
- if (!st.hasMoreElements())
- return false;
- str = st.nextToken();
- if (!isHTTPVersion(str))
- return false;
-
- int i = 1;
- try
- {
- while ((header = mh.getKey(i)) != null)
- {
- value = mh.getValue(i);
- i++;
-
- // is message-header token
- if (!isToken(header))
- return false;
-
- //---- entity-headers
-
- if (header.equals(HEADER_ALLOW))
- {
- if (!isValidAllow(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_CONTENT_TYPE))
- {
- if (!isMediaType(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_CONTENT_ENCODING))
- {
- if (!isToken(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_CONTENT_LANGUAGE))
- {
- if (!isLanguageTag(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_CONTENT_LENGHT))
- {
- if (!isDidgit(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_CONTENT_LOCATION))
- {
- if (!isURI(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_CONTENT_RANGE))
- {
- if (!isValidContentRange(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_EXPIRES)
- || header.equals(HEADER_LAST_MODIFIED))
- {
- if (!isHTTPDate(value))
- return false;
- else
- continue;
- }
-
- //---- general-headers
- if (header.equals(HEADER_CACHE_CONTROL))
- {
- if (!isValidCacheControl(value))
- return false;
-
- continue;
- //return true;
- }
-
- if (header.equals(HEADER_CONNECTION))
- {
- if (!isToken(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_DATE))
- {
- if (!isHTTPDate(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_PRAGMA))
- {
- if (!isPragmaDerective(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_TRAILER))
- {
- if (!isToken(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_TRANSFER_ENCODING))
- {
- if (!isTransferCoding(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_UPGRADE))
- {
- if (!isValidUpgrade(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_VIA))
- {
- if (!isValidVia(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_WARNING))
- {
- if (!isValidWarning(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_ACCEPT))
- {
- if (!isValidAccept(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_ACCEPT_CHARSET))
- {
- if (!isValidAcceptCharSet(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_ACCEPT_ENCODING))
- {
- if (!isValidAcceptEncoding(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_ACCEPT_LANGUAGE))
- {
- if (!isValidAcceptLanguage(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_AUTHORIZATION)
- || header.equals(HEADER_PROXY_AUTHORIZATION))
- {
- if (!isCredentials(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_EXPECT))
- {
- if (!isExpectation(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_FROM))
- {
- if (!MailboxValidator.validateMailbox(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_IF_MATCH)
- || header.equals(HEADER_IF_NONE_MATCH))
- {
- if (!isValidIfMatch(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_IF_RANGE))
- {
- if (!isEntityTag(value) && !isHTTPDate(value))
- return false;
- else
- continue;
- }
-
- //---
- if (header.equals(HEADER_IF_MODIFIED_SINCE))
- {
- if (!isHTTPDate(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_IF_UNMODIFIED_SINCE))
- {
- if (!isHTTPDate(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_MAX_FORWARDS))
- {
- if (!isDidgit(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_USER_AGENT))
- {
- if (!isValidUserAgent(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_TE))
- {
- if (!isValidTE(value))
- return false;
- else
- continue;
- }
-
- if (header.equals(HEADER_RANGE))
- {
- if (!isRange(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_HOST))
- {
- if (!isHost(value))
- return false;
- else
- continue;
- }
- if (header.equals(HEADER_REFERER))
- {
- if (!isURI(value))
- return false;
- else
- continue;
- }
-
- }
- }
- catch (Exception e)
- {
- return false;
- }
- return true;
- }
-
- /**
- * Method isValidIfMatch.
- * @param value
- * @return boolean
- */
- private static boolean isValidIfMatch(String value)
- {
- if (value.trim().length() == 0)
- return true;
- if ("*".equals(value.trim()))
- return true;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- if (!isEntityTag(str))
- return false;
-
- }
-
- return true;
- }
-
- /**
- * Method isValidUpgrade.
- * @param value
- * @return boolean
- */
- private static boolean isValidUpgrade(String value)
- {
- if (value.trim().length() == 0)
- return false;
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- if (!isProduct(str))
- return false;
-
- }
- return true;
- }
-
- /**
- * Method isValidCacheControl.
- * @param value
- * @return boolean
- */
- private static boolean isValidCacheControl(String value)
- {
-
- if (value.trim().length() == 0)
- return false;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- int index = str.indexOf('=');
- if (index == -1)
- {
-
- }
- else
- {
- if (!isToken(str.substring(0, index)))
- return false;
- String strAfterEq = str.substring(index + 1);
- if (!isToken(strAfterEq) && !isQuotedString(strAfterEq))
- {
- return false;
- }
- }
- }
-
- return true;
- }
-
- /**
- * Method isHTTPVersion.
- * @param str
- * @return boolean
- */
- private static boolean isHTTPVersion(String str)
- {
- if (!str.startsWith("HTTP/"))
- return false;
- int idx = "HTTP/".length();
-
- int idx2 = str.indexOf(".");
-
- // 1*DIGIT
- String s = str.substring(idx, idx2);
- if (!isDidgit(s))
- return false;
-
- s = str.substring(idx2 + 1);
- if (!isDidgit(s))
- return false;
-
- return true;
- }
-
- /**
- * Method isValidWarning.
- * @param value
- * @return boolean
- */
- private static boolean isValidWarning(String value)
- {
- if (value.length() == 0)
- return false;
- value = value.trim();
- StringTokenizer st = new StringTokenizer(value, " ");
- String str = st.nextToken();
-
- if (str.length() > 3 || !isDidgit(str))
- return false;
-
- if (!st.hasMoreTokens())
- return false;
- str = st.nextToken();
- if (!isHost(str) && !isToken(str))
- return false;
-
- //if(!st.hasMoreTokens()) return false;
- str = st.nextToken("").trim();
- //???
-
- int lastQuotedString = BasicRules.getLastQuotedString(str, 0);
- if (lastQuotedString == str.length())
- {
- return true;
- }
- else
- {
- String data = str.substring(lastQuotedString);
- if (data.charAt(data.length()) != '\"')
- return false;
- if (str.charAt(0) != '\"')
- return false;
- if (!isHTTPDate(str.substring(1, data.length() - 1)))
- return false;
- }
-
- return true;
- }
-
- /**
- * Method isValidVia.
- * @param value
- * @return boolean
- */
- private static boolean isValidVia(String value)
- {
- if (value.trim().length() == 0)
- return false;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
-
- String str = st.nextToken().trim();
-
- StringTokenizer st2 = new StringTokenizer(str, " ");
-
- // protocol/version
- str = st2.nextToken();
- int idx = str.indexOf("/");
- if (idx == -1)
- {
- if (!isToken(str))
- return false;
- }
- else
- {
- if (!isToken(str.substring(0, idx))
- || !isToken(str.substring(idx + 1)))
- return false;
- }
-
- //host
- str = st2.nextToken();
- if (!isHost(str) && !isToken(str))
- return false;
-
- //comment
- if (st2.hasMoreTokens())
- {
- str = st2.nextToken("");
- if (!isComment(str.trim()))
- return false;
- }
- }
- return true;
- }
-
- /**
- * Method isHost.
- * @param value
- * @return boolean
- */
- private static boolean isHost(String value)
- {
-
- try
- {
- new URL("http://" + value);
- }
- catch (MalformedURLException e)
- {
- return false;
- }
- return true;
- }
-
- /**
- * Method isValidAllow.
- * @param value
- * @return boolean
- */
- private static boolean isValidAllow(String value)
- {
- if (value.trim().length() == 0)
- return true;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- if (!isToken(str))
- return false;
- }
- return true;
- }
-
- /**
- * Method isValidContentRange.
- * @param value
- * @return boolean
- */
- private static boolean isValidContentRange(String value)
- {
- if (value.length() == 0)
- return false;
- if (!value.startsWith("bytes"))
- return false;
- String str = value.substring("bytes".length()).trim();
-
- int idx = str.indexOf("/");
- if (idx == -1)
- return false;
-
- String byteRange = str.substring(0, idx);
- int idx2 = byteRange.indexOf("-");
- if (idx2 == -1)
- {
- if (!byteRange.equals("*"))
- return false;
- }
- else
- {
- if (!isDidgit(byteRange.substring(0, idx2))
- || !isDidgit(byteRange.substring(idx2 + 1)))
- return false;
- }
-
- if (!isDidgit(str.substring(idx + 1))
- && !str.substring(idx + 1).equals("*"))
- return false;
-
- return true;
- }
-
- /**
- * Method isRange.
- * @param value
- * @return boolean
- */
- private static boolean isRange(String value)
- {
- if (value.length() == 0)
- return false;
- if (!value.startsWith("bytes="))
- return false;
- String strByteRange = value.substring("bytes=".length());
-
- StringTokenizer st = new StringTokenizer(strByteRange, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken();
- int idx = str.indexOf("-");
- if (idx == -1)
- return false;
- if (idx == 0)
- {
- if (!isDidgit(str.substring(1)))
- return false;
- }
- else
- {
- if (idx == (str.length() - 1))
- {
- if (!isDidgit(str.substring(0, str.length() - 1)))
- return false;
- }
- else
- {
- if (!isDidgit(str.substring(0, idx))
- || !isDidgit(str.substring(idx + 1)))
- return false;
- }
-
- }
-
- }
- return true;
- }
-
- /**
- * Method isValidTE.
- * @param value
- * @return boolean
- */
- private static boolean isValidTE(String value)
- {
- if (value.trim().length() == 0)
- return true;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- if (st.equals("trailers"))
- return true;
-
- int idx = str.indexOf(";");
- if (idx == -1)
- {
- if (!isLanguageRange(str))
- return false;
- }
- else
- {
- String _1 = str.substring(0, idx).trim();
- String _2 = str.substring(idx + 1).trim();
- if (!isLanguageRange(_1))
- return false;
- if (!isQAndQValue(_2))
- return false;
- }
-
- }
-
- return true;
- }
-
- /**
- * Method isValidUserAgent.
- * @param value
- * @return boolean
- */
- private static boolean isValidUserAgent(String value)
- {
- if (value.length() == 0)
- return false;
- StringTokenizer st = new StringTokenizer(value, " ");
- while (st.hasMoreElements())
- {
- String str = st.nextToken();
- if (!isProduct(str) && !isComment(str))
- return false;
-
- }
-
- return true;
- }
-
- /**
- * Method isComment.
- * @param str
- * @return boolean
- */
- private static boolean isComment(String str)
- {
- if (BasicRules.getLastComment(str, 0) != str.length())
- return false;
- return true;
- }
-
- /**
- * Method isValidAcceptLanguage.
- * @param value
- * @return boolean
- */
- private static boolean isValidAcceptLanguage(String value)
- {
- if (value.trim().length() == 0)
- return false;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- int idx = str.indexOf(";");
- if (idx == -1)
- {
- if (!isToken(str))
- return false;
- }
- else
- {
- String _1 = str.substring(0, idx).trim();
- String _2 = str.substring(idx + 1).trim();
- if (!isToken(_1))
- return false;
- if (!isAcceptParams(_2))
- return false;
- }
-
- }
-
- return true;
- }
-
- /**
- * Method isLanguageRange.
- * @param str
- * @return boolean
- */
- private static boolean isLanguageRange(String str)
- {
- if (str.trim().equals("*"))
- return true;
- StringTokenizer st = new StringTokenizer(str, "-");
- while (st.hasMoreElements())
- {
- if (!is8ALPHA(st.nextToken()))
- return false;
- }
- return true;
- }
-
- /**
- * Method isValidAcceptEncoding.
- * @param value
- * @return boolean
- */
- private static boolean isValidAcceptEncoding(String value)
- {
- if (value.trim().length() == 0)
- return false;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- int idx = str.indexOf(";");
- if (idx == -1)
- {
- if (!isToken(str) && !str.equals("*"))
- return false;
- }
- else
- {
- String _1 = str.substring(0, idx).trim();
- String _2 = str.substring(idx + 1).trim();
-
- if ((!isToken(_1) && !_1.equals("*")))
- return false;
- if (!isQAndQValue(_2))
- return false;
- }
-
- }
-
- return true;
- }
-
- /**
- * Method isValidAcceptCharSet.
- * @param value
- * @return boolean
- */
- private static boolean isValidAcceptCharSet(String value)
- {
- if (value.trim().length() == 0)
- return false;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- int idx = str.indexOf(";");
- if (idx == -1)
- {
- if (!isToken(str) && !str.equals("*"))
- return false;
- }
- else
- {
- String _1 = str.substring(0, idx).trim();
- String _2 = str.substring(idx + 1).trim();
-
- if ((!isToken(_1) && !_1.equals("*")))
- return false;
- if (!isQAndQValue(_2))
- return false;
- }
-
- }
-
- return true;
- }
-
- /**
- * Method isValidAccept.
- * @param value
- * @return boolean
- */
- private static boolean isValidAccept(String value)
- {
- if (value.trim().length() == 0)
- return true;
-
- StringTokenizer st = new StringTokenizer(value, ",");
- while (st.hasMoreElements())
- {
- String str = st.nextToken().trim();
- int idx = str.indexOf(";");
- if (idx == -1)
- {
- if (!isMediaRange(str))
- return false;
- }
- else
- {
- if (!isMediaRange(str.substring(0, idx).trim())
- || !isAcceptParams(str.substring(idx + 1).trim()))
- return false;
-
- }
-
- }
- return true;
- }
-
- /**
- * Method isAcceptParams.
- * @param string
- * @return boolean
- */
- private static boolean isAcceptParams(String string)
- {
- if (string.trim().length() == 0)
- return false;
-
- StringTokenizer st = new StringTokenizer(string, ";");
- String str = st.nextToken();
-
- int idx = str.indexOf("=");
- if (idx == -1)
- {
- if (str.equals("q") || !isToken(str))
- return false;
- }
- else
- {
- if (str.substring(0, idx).equals("q"))
- {
- if (!isQValue(str.substring(idx + 1)))
- return false;
- }
- else
- {
- if (!isParameterWithoutValue(str))
- return false;
- }
- }
-
- while (st.hasMoreElements())
- {
- str = st.nextToken();
- if (!isParameterWithoutValue(str))
- return false;
- }
- return true;
- }
-
- /**
- * Method isQAndQValue.
- * @param str
- * @return boolean
- */
- private static boolean isQAndQValue(String str)
- {
- str = str.trim();
- if (!str.trim().startsWith("q="))
- return false;
- if (!isQValue(str.substring("q=".length())))
- return false;
- return true;
- }
-
- /**
- * Method isQValue.
- * @param string
- * @return boolean
- */
- private static boolean isQValue(String string)
- {
- if (string.trim().length() == 0)
- return false;
-
- int idx = string.indexOf(".");
- if (idx == -1)
- {
- if (!"0".equals(string) && !"1".equals(string))
- return false;
- }
- else
- {
- String strDig = string.substring(idx + 1);
- if (strDig.length() > 3)
- return false;
-
- if (string.substring(0, idx).equals("0"))
- {
- if (!isDidgit(strDig))
- return false;
-
- }
- else
- {
- if (!string.substring(0, idx).equals("1"))
- return false;
-
- for (int i = 0; i < strDig.length(); i++)
- {
- if (strDig.charAt(i) != '0')
- return false;
- }
- }
-
- }
- return true;
- }
-
- /**
- * Method isMediaRange.
- * @param str
- * @return boolean
- */
- private static boolean isMediaRange(String str)
- {
- if (str.trim().length() == 0)
- return false;
-
- int idx = str.indexOf("/");
- if (idx == -1)
- return false;
-
- if (!isToken(str.substring(0, idx)) && !str.substring(0, idx).equals("*"))
- return false;
- if (!isToken(str.substring(idx + 1))
- && !str.substring(idx + 1).equals("*"))
- return false;
-
- return true;
- }
-
- /**
- * Method isEntityTag.
- * @param value
- * @return boolean
- */
- private static boolean isEntityTag(String value)
- {
-
- int idx = 0;
- if (value.startsWith("W/"))
- idx = 2;
- if (!isQuotedString(value.substring(idx)))
- return false;
- return true;
- }
-
- /**
- * Method isExpectation.
- * @param value
- * @return boolean
- */
- private static boolean isExpectation(String value)
- {
- if (value.equals("100-continue"))
- return true;
-
- StringTokenizer st = new StringTokenizer(value, ";");
- while (st.hasMoreElements())
- {
- if (!isParameterWithoutValue(st.nextToken()))
- return false;
- }
-
- return true;
- }
-
- /**
- * Method isCredentials.
- * @param value
- * @return boolean
- */
- private static boolean isCredentials(String value)
- {
- StringTokenizer st = new StringTokenizer(value, " ");
- if (!isToken(st.nextToken()))
- return false;
-
- while (st.hasMoreElements())
- {
- String param = st.nextToken(",");
- if (!isParameter(param))
- return false;
- }
- return true;
- }
-
- /**
- * Method isProduct.
- * @param value
- * @return boolean
- */
- private static boolean isProduct(String value)
- {
- int idx = value.indexOf("/");
- if (idx == -1)
- {
- if (!isToken(value))
- return false;
- }
- else
- {
- if (!isToken(value.substring(0, idx))
- || !isToken(value.substring(idx + 1)))
- return false;
- }
- return true;
- }
-
- /**
- * Method isTransferCoding.
- * @param value
- * @return boolean
- */
- private static boolean isTransferCoding(String value)
- {
- if (value.equals("chunked"))
- {
- return true;
- }
- else
- {
- StringTokenizer st = new StringTokenizer(value, ";");
- if (!isToken(st.nextToken()))
- return false;
-
- while (st.hasMoreElements())
- {
- if (!isParameter(st.nextToken()))
- return false;
- }
-
- }
-
- return true;
- }
-
- /**
- * Method isParameter.
- * @param string
- * @return boolean
- */
- private static boolean isParameter(String string)
- {
-
- // check parameter
- int idx = string.indexOf("=");
- if (!isToken(string.substring(0, idx)))
- return false;
-
- String parValue = string.substring(idx + 1);
- if (!isToken(parValue) && !isQuotedString(parValue))
- return false;
-
- return true;
- }
-
- /**
- * Method isParameterWithoutValue.
- * @param string
- * @return boolean
- */
- private static boolean isParameterWithoutValue(String string)
- {
-
- // check parameter
- int idx = string.indexOf("=");
- if (idx != -1)
- {
- if (!isToken(string.substring(0, idx)))
- return false;
- String parValue = string.substring(idx + 1);
- if (!isToken(parValue) && !isQuotedString(parValue))
- return false;
-
- }
- else
- {
- if (!isToken(string))
- return false;
- }
-
- return true;
- }
-
- /**
- * Method isPragmaDerective.
- * @param value
- * @return boolean
- */
- private static boolean isPragmaDerective(String value)
- {
- if (value.equals("no-cache"))
- return true;
- else
- {
- int idx = value.indexOf("=");
- if (idx == -1)
- {
- if (isToken(value))
- return true;
- }
- else
- {
- String str = value.substring(idx + 1);
- if (isToken(value.substring(0, idx))
- && (isToken(str) || isQuotedString(str)))
- return true;
- }
- }
- return true;
- }
-
- /**
- * Method isHTTPDate.
- * @param value
- * @return boolean
- */
- private static boolean isHTTPDate(String value)
- {
-
- String rfc1123_date = "EEE, dd MMM yyyy hh:mm:ss 'GMT'";
- String rfc850_date = "EEEE, dd-MMM-yy hh:mm:ss 'GMT'";
- String asctime_date = "EEE MMM d hh:mm:ss yyyy";
-
- try
- {
- SimpleDateFormat sdf = new SimpleDateFormat(rfc1123_date, Locale.US);
- if (sdf.parse(value) != null)
- return true;
- }
- catch (ParseException e)
- {
- }
-
- try
- {
- SimpleDateFormat sdf = new SimpleDateFormat(rfc850_date, Locale.US);
- if (sdf.parse(value) != null)
- return true;
- }
- catch (ParseException e)
- {
- }
-
- try
- {
- SimpleDateFormat sdf = new SimpleDateFormat(asctime_date, Locale.US);
- if (sdf.parse(value) != null)
- return true;
- }
- catch (ParseException e)
- {
- }
-
- return false;
-
- }
-
- /**
- * Method isURI.
- * @param value
- * @return boolean
- */
- private static boolean isURI(String value)
- {
- try
- {
- new URL(value);
- }
- catch (MalformedURLException e)
- {
- try
- {
- new URL("http://localhost" + value);
- }
- catch (MalformedURLException e2)
- {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Method isLanguageTag.
- * @param value
- * @return boolean
- */
- private static boolean isLanguageTag(String value)
- {
- int idx = value.indexOf("-");
- if (idx == -1)
- {
- return is8ALPHA(value);
- }
- else
- {
- if (!is8ALPHA(value.substring(0, idx))
- || !is8ALPHA(value.substring(idx + 1)))
- return false;
- else
- return true;
-
- }
- }
-
- /**
- * Method is8ALPHA.
- * @param string
- * @return boolean
- */
- private static boolean is8ALPHA(String string)
- {
- if (string.length() > 8 || !isALPHA(string))
- return false;
- else
- return true;
- }
-
- /**
- * Method isALPHA.
- * @param string
- * @return boolean
- */
- private static boolean isALPHA(String string)
- {
- for (int i = 0; i < string.length(); i++)
- {
- if (!BasicRules.isCHAR(string.charAt(i)))
- return false;
- }
-
- return true;
- }
-
- /**
- * Method isDidgit.
- * @param value
- * @return boolean
- */
- private static boolean isDidgit(String value)
- {
- if (value.length() == 0)
- return false;
- char[] chs = value.toCharArray();
- for (int i = 0; i < chs.length; i++)
- {
- if (chs[i] < '0' || chs[i] > '9')
- return false;
- }
-
- return true;
- }
-
- /**
- * Method isMediaType.
- * @param value
- * @return boolean
- */
- private static boolean isMediaType(String value)
- {
- StringTokenizer st = new StringTokenizer(value, ";");
- String mediaType = st.nextToken();
-
- int idx = mediaType.indexOf("/");
- if (!isToken(mediaType.substring(0, idx))
- || !isToken(mediaType.substring(idx + 1)))
- {
- return false;
- }
-
- while (st.hasMoreElements())
- {
- if (!isParameter(st.nextToken(";").trim()))
- return false;
- }
- return true;
- }
-
- /**
- * Method isQuotedString.
- * @param parValue
- * @return boolean
- */
- private static boolean isQuotedString(String parValue)
- {
- if (BasicRules.getLastQuotedString(parValue, 0) != parValue.length())
- {
- return false;
- }
- return true;
- }
-
- /**
- * Method isToken.
- * @param value
- * @return boolean
- */
- private static boolean isToken(String value)
- {
- return BasicRules.isToken(value);
- }
-}

Back to the top