Merge remote-tracking branch 'origin/jetty-8'
Conflicts: jetty-annotations/src/main/java/org/eclipse/jetty/annotations/AnnotationParser.java jetty-annotations/src/main/java/org/eclipse/jetty/annotations/ResourceAnnotationHandler.java jetty-client/src/test/java/org/eclipse/jetty/client/SslHttpExchangeTest.java jetty-client/src/test/java/org/eclipse/jetty/client/SslSecurityListenerTest.java jetty-deploy/src/main/java/org/eclipse/jetty/deploy/WebAppDeployer.java jetty-deploy/src/main/java/org/eclipse/jetty/deploy/providers/ContextProvider.java jetty-http/src/main/resources/org/eclipse/jetty/http/mime.properties jetty-http/src/test/java/org/eclipse/jetty/http/HttpFieldsTest.java jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java jetty-jmx/src/main/java/org/eclipse/jetty/jmx/MBeanContainer.java jetty-jmx/src/main/java/org/eclipse/jetty/jmx/ObjectMBean.java jetty-overlay-deployer/src/main/java/org/eclipse/jetty/overlays/OverlayedAppProvider.java jetty-plus/src/main/java/org/eclipse/jetty/plus/annotation/Injection.java jetty-plus/src/main/java/org/eclipse/jetty/plus/security/DataSourceLoginService.java jetty-proxy/src/main/java/org/eclipse/jetty/proxy/ProxyServlet.java jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/ProxyRule.java jetty-security/src/main/java/org/eclipse/jetty/security/authentication/FormAuthenticator.java jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/proxy/ProxyHTTPSPDYConnection.java jetty-spdy/spdy-jetty-http/src/main/java/org/eclipse/jetty/spdy/http/ServerHTTPSPDYAsyncConnection.java jetty-start/src/main/java/org/eclipse/jetty/start/Main.java jetty-util/src/main/java/org/eclipse/jetty/util/Fields.java jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketClientFactory.java jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnectionRFC6455.java jetty-websocket/src/test/java/org/eclipse/jetty/websocket/WebSocketClientTest.java jetty-websocket/src/test/java/org/eclipse/jetty/websocket/WebSocketMessageRFC6455Test.java test-jetty-nested/src/main/java/org/eclipse/jetty/nested/Dump.java test-jetty-webapp/src/main/java/com/acme/Dump.java
This commit is contained in:
commit
52464a5ba6
|
@ -26,6 +26,7 @@ import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.Loader;
|
import org.eclipse.jetty.util.Loader;
|
||||||
|
@ -807,7 +808,7 @@ public class AnnotationParser
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String name = entry.getName();
|
String name = entry.getName();
|
||||||
if (name.toLowerCase().endsWith(".class"))
|
if (name.toLowerCase(Locale.ENGLISH).endsWith(".class"))
|
||||||
{
|
{
|
||||||
String shortName = name.replace('/', '.').substring(0,name.length()-6);
|
String shortName = name.replace('/', '.').substring(0,name.length()-6);
|
||||||
if ((resolver == null)
|
if ((resolver == null)
|
||||||
|
@ -853,7 +854,7 @@ public class AnnotationParser
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String name = entry.getName();
|
String name = entry.getName();
|
||||||
if (name.toLowerCase().endsWith(".class"))
|
if (name.toLowerCase(Locale.ENGLISH).endsWith(".class"))
|
||||||
{
|
{
|
||||||
String shortName = name.replace('/', '.').substring(0,name.length()-6);
|
String shortName = name.replace('/', '.').substring(0,name.length()-6);
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.annotations;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Locale;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.naming.InitialContext;
|
import javax.naming.InitialContext;
|
||||||
import javax.naming.NameNotFoundException;
|
import javax.naming.NameNotFoundException;
|
||||||
|
@ -261,7 +262,7 @@ public class ResourceAnnotationHandler extends AbstractIntrospectableAnnotationH
|
||||||
|
|
||||||
//default name is the javabean property name
|
//default name is the javabean property name
|
||||||
String name = method.getName().substring(3);
|
String name = method.getName().substring(3);
|
||||||
name = name.substring(0,1).toLowerCase()+name.substring(1);
|
name = name.substring(0,1).toLowerCase(Locale.ENGLISH)+name.substring(1);
|
||||||
name = clazz.getCanonicalName()+"/"+name;
|
name = clazz.getCanonicalName()+"/"+name;
|
||||||
|
|
||||||
name = (resource.name()!=null && !resource.name().trim().equals("")? resource.name(): name);
|
name = (resource.name()!=null && !resource.name().trim().equals("")? resource.name(): name);
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
@ -323,7 +324,7 @@ public class HttpClient extends ContainerLifeCycle
|
||||||
|
|
||||||
protected void send(final Request request, List<Response.ResponseListener> listeners)
|
protected void send(final Request request, List<Response.ResponseListener> listeners)
|
||||||
{
|
{
|
||||||
String scheme = request.getScheme().toLowerCase();
|
String scheme = request.getScheme().toLowerCase(Locale.ENGLISH);
|
||||||
if (!Arrays.asList("http", "https").contains(scheme))
|
if (!Arrays.asList("http", "https").contains(scheme))
|
||||||
throw new IllegalArgumentException("Invalid protocol " + scheme);
|
throw new IllegalArgumentException("Invalid protocol " + scheme);
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class HttpCookieParser
|
||||||
|
|
||||||
public static List<HttpCookie> parseCookies(String headerValue)
|
public static List<HttpCookie> parseCookies(String headerValue)
|
||||||
{
|
{
|
||||||
if (headerValue.toLowerCase().contains("expires="))
|
if (headerValue.toLowerCase(Locale.ENGLISH).contains("expires="))
|
||||||
{
|
{
|
||||||
HttpCookie cookie = parseCookie(headerValue, 0);
|
HttpCookie cookie = parseCookie(headerValue, 0);
|
||||||
if (cookie != null)
|
if (cookie != null)
|
||||||
|
@ -111,7 +111,7 @@ public class HttpCookieParser
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String[] attributeParts = cookieParts[i].split("=", 2);
|
String[] attributeParts = cookieParts[i].split("=", 2);
|
||||||
String attributeName = attributeParts[0].trim().toLowerCase();
|
String attributeName = attributeParts[0].trim().toLowerCase(Locale.ENGLISH);
|
||||||
String attributeValue = attributeParts.length < 2 ? "" : attributeParts[1].trim();
|
String attributeValue = attributeParts.length < 2 ? "" : attributeParts[1].trim();
|
||||||
switch (attributeName)
|
switch (attributeName)
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.concurrent.atomic.AtomicMarkableReference;
|
import java.util.concurrent.atomic.AtomicMarkableReference;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
@ -191,7 +192,7 @@ public class HttpReceiver implements HttpParser.ResponseHandler<ByteBuffer>
|
||||||
if (exchange != null)
|
if (exchange != null)
|
||||||
{
|
{
|
||||||
exchange.getResponse().getHeaders().add(name, value);
|
exchange.getResponse().getHeaders().add(name, value);
|
||||||
switch (name.toLowerCase())
|
switch (name.toLowerCase(Locale.ENGLISH))
|
||||||
{
|
{
|
||||||
case "set-cookie":
|
case "set-cookie":
|
||||||
case "set-cookie2":
|
case "set-cookie2":
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.client.util;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.UnsupportedCharsetException;
|
import java.nio.charset.UnsupportedCharsetException;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.client.api.Response;
|
import org.eclipse.jetty.client.api.Response;
|
||||||
import org.eclipse.jetty.client.api.Result;
|
import org.eclipse.jetty.client.api.Result;
|
||||||
|
@ -69,7 +70,7 @@ public abstract class BufferingResponseListener extends Response.Listener.Empty
|
||||||
if (contentType != null)
|
if (contentType != null)
|
||||||
{
|
{
|
||||||
String charset = "charset=";
|
String charset = "charset=";
|
||||||
int index = contentType.toLowerCase().indexOf(charset);
|
int index = contentType.toLowerCase(Locale.ENGLISH).indexOf(charset);
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
{
|
{
|
||||||
String encoding = contentType.substring(index + charset.length());
|
String encoding = contentType.substring(index + charset.length());
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
@ -108,7 +109,7 @@ public class DigestAuthentication implements Authentication
|
||||||
Matcher matcher = PARAM_PATTERN.matcher(part);
|
Matcher matcher = PARAM_PATTERN.matcher(part);
|
||||||
if (matcher.matches())
|
if (matcher.matches())
|
||||||
{
|
{
|
||||||
String name = matcher.group(1).trim().toLowerCase();
|
String name = matcher.group(1).trim().toLowerCase(Locale.ENGLISH);
|
||||||
String value = matcher.group(2).trim();
|
String value = matcher.group(2).trim();
|
||||||
if (value.startsWith("\"") && value.endsWith("\""))
|
if (value.startsWith("\"") && value.endsWith("\""))
|
||||||
value = value.substring(1, value.length() - 1);
|
value = value.substring(1, value.length() - 1);
|
||||||
|
@ -251,7 +252,7 @@ public class DigestAuthentication implements Authentication
|
||||||
private String nextNonceCount()
|
private String nextNonceCount()
|
||||||
{
|
{
|
||||||
String padding = "00000000";
|
String padding = "00000000";
|
||||||
String next = Integer.toHexString(nonceCount.incrementAndGet()).toLowerCase();
|
String next = Integer.toHexString(nonceCount.incrementAndGet()).toLowerCase(Locale.ENGLISH);
|
||||||
return padding.substring(0, padding.length() - next.length()) + next;
|
return padding.substring(0, padding.length() - next.length()) + next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,7 +266,7 @@ public class DigestAuthentication implements Authentication
|
||||||
|
|
||||||
private String toHexString(byte[] bytes)
|
private String toHexString(byte[] bytes)
|
||||||
{
|
{
|
||||||
return TypeUtil.toHexString(bytes).toLowerCase();
|
return TypeUtil.toHexString(bytes).toLowerCase(Locale.ENGLISH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
@ -184,7 +185,7 @@ public class HttpClientLoadTest extends AbstractHttpClientServerTest
|
||||||
@Override
|
@Override
|
||||||
public void handle(String target, org.eclipse.jetty.server.Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
|
public void handle(String target, org.eclipse.jetty.server.Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
|
||||||
{
|
{
|
||||||
String method = request.getMethod().toUpperCase();
|
String method = request.getMethod().toUpperCase(Locale.ENGLISH);
|
||||||
switch (method)
|
switch (method)
|
||||||
{
|
{
|
||||||
case "GET":
|
case "GET":
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.eclipse.jetty.client;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@ -288,8 +289,8 @@ public class HttpSenderTest
|
||||||
|
|
||||||
String requestString = endPoint.takeOutputString();
|
String requestString = endPoint.takeOutputString();
|
||||||
Assert.assertTrue(requestString.startsWith("GET "));
|
Assert.assertTrue(requestString.startsWith("GET "));
|
||||||
String content = Integer.toHexString(content1.length()).toUpperCase() + "\r\n" + content1 + "\r\n";
|
String content = Integer.toHexString(content1.length()).toUpperCase(Locale.ENGLISH) + "\r\n" + content1 + "\r\n";
|
||||||
content += Integer.toHexString(content2.length()).toUpperCase() + "\r\n" + content2 + "\r\n";
|
content += Integer.toHexString(content2.length()).toUpperCase(Locale.ENGLISH) + "\r\n" + content2 + "\r\n";
|
||||||
content += "0\r\n\r\n";
|
content += "0\r\n\r\n";
|
||||||
Assert.assertTrue(requestString.endsWith("\r\n\r\n" + content));
|
Assert.assertTrue(requestString.endsWith("\r\n\r\n" + content));
|
||||||
Assert.assertTrue(headersLatch.await(5, TimeUnit.SECONDS));
|
Assert.assertTrue(headersLatch.await(5, TimeUnit.SECONDS));
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.io.File;
|
||||||
import java.io.FilenameFilter;
|
import java.io.FilenameFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.deploy.App;
|
import org.eclipse.jetty.deploy.App;
|
||||||
import org.eclipse.jetty.deploy.ConfigurationManager;
|
import org.eclipse.jetty.deploy.ConfigurationManager;
|
||||||
|
@ -77,7 +78,7 @@ public class WebAppProvider extends ScanningAppProvider
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String lowername = name.toLowerCase();
|
String lowername = name.toLowerCase(Locale.ENGLISH);
|
||||||
|
|
||||||
File file = new File(dir,name);
|
File file = new File(dir,name);
|
||||||
|
|
||||||
|
@ -299,9 +300,9 @@ public class WebAppProvider extends ScanningAppProvider
|
||||||
{
|
{
|
||||||
context = URIUtil.SLASH;
|
context = URIUtil.SLASH;
|
||||||
}
|
}
|
||||||
else if (context.toLowerCase().startsWith("root-"))
|
else if (context.toLowerCase(Locale.ENGLISH).startsWith("root-"))
|
||||||
{
|
{
|
||||||
int dash=context.toLowerCase().indexOf('-');
|
int dash=context.toLowerCase(Locale.ENGLISH).indexOf('-');
|
||||||
String virtual = context.substring(dash+1);
|
String virtual = context.substring(dash+1);
|
||||||
wah.setVirtualHosts(new String[]{virtual});
|
wah.setVirtualHosts(new String[]{virtual});
|
||||||
context = URIUtil.SLASH;
|
context = URIUtil.SLASH;
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
package org.eclipse.jetty.deploy.util;
|
package org.eclipse.jetty.deploy.util;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple, yet surprisingly common utility methods for identifying various file types commonly seen and worked with in a
|
* Simple, yet surprisingly common utility methods for identifying various file types commonly seen and worked with in a
|
||||||
|
@ -38,7 +39,7 @@ public class FileID
|
||||||
{
|
{
|
||||||
if (path.isFile())
|
if (path.isFile())
|
||||||
{
|
{
|
||||||
String name = path.getName().toLowerCase();
|
String name = path.getName().toLowerCase(Locale.ENGLISH);
|
||||||
return (name.endsWith(".war") || name.endsWith(".jar"));
|
return (name.endsWith(".war") || name.endsWith(".jar"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +63,7 @@ public class FileID
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String name = path.getName().toLowerCase();
|
String name = path.getName().toLowerCase(Locale.ENGLISH);
|
||||||
return (name.endsWith(".war") || name.endsWith(".jar"));
|
return (name.endsWith(".war") || name.endsWith(".jar"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +74,7 @@ public class FileID
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String name = path.getName().toLowerCase();
|
String name = path.getName().toLowerCase(Locale.ENGLISH);
|
||||||
return name.endsWith(".xml");
|
return name.endsWith(".xml");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -810,7 +810,7 @@ public class HttpFields implements Iterable<HttpFields.Field>
|
||||||
{
|
{
|
||||||
hasDomain = true;
|
hasDomain = true;
|
||||||
buf.append(";Domain=");
|
buf.append(";Domain=");
|
||||||
QuotedStringTokenizer.quoteIfNeeded(buf,domain.toLowerCase(),delim);
|
QuotedStringTokenizer.quoteIfNeeded(buf,domain.toLowerCase(Locale.ENGLISH),delim);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maxAge >= 0)
|
if (maxAge >= 0)
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.MissingResourceException;
|
import java.util.MissingResourceException;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
@ -70,7 +71,7 @@ public class MimeTypes
|
||||||
_string=s;
|
_string=s;
|
||||||
_buffer=BufferUtil.toBuffer(s);
|
_buffer=BufferUtil.toBuffer(s);
|
||||||
|
|
||||||
int i=s.toLowerCase().indexOf("charset=");
|
int i=s.toLowerCase(Locale.ENGLISH).indexOf("charset=");
|
||||||
_charset=(i>0)?Charset.forName(s.substring(i+8)):null;
|
_charset=(i>0)?Charset.forName(s.substring(i+8)):null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,7 @@ xhtml=application/xhtml+xml
|
||||||
xls=application/vnd.ms-excel
|
xls=application/vnd.ms-excel
|
||||||
xml=application/xml
|
xml=application/xml
|
||||||
xpm=image/x-xpixmap
|
xpm=image/x-xpixmap
|
||||||
|
xsd=application/xml
|
||||||
xsl=application/xml
|
xsl=application/xml
|
||||||
xslt=application/xslt+xml
|
xslt=application/xslt+xml
|
||||||
xul=application/vnd.mozilla.xul+xml
|
xul=application/vnd.mozilla.xul+xml
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.http;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.BufferUtil;
|
import org.eclipse.jetty.util.BufferUtil;
|
||||||
|
@ -385,7 +386,7 @@ public class HttpFieldsTest
|
||||||
{
|
{
|
||||||
Set<String> s=new HashSet<String>();
|
Set<String> s=new HashSet<String>();
|
||||||
while(e.hasMoreElements())
|
while(e.hasMoreElements())
|
||||||
s.add(e.nextElement().toLowerCase());
|
s.add(e.nextElement().toLowerCase(Locale.ENGLISH));
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import javax.naming.Context;
|
import javax.naming.Context;
|
||||||
|
@ -652,12 +653,12 @@ public class LdapLoginModule extends AbstractLoginModule
|
||||||
|
|
||||||
public static String convertCredentialJettyToLdap(String encryptedPassword)
|
public static String convertCredentialJettyToLdap(String encryptedPassword)
|
||||||
{
|
{
|
||||||
if ("MD5:".startsWith(encryptedPassword.toUpperCase()))
|
if ("MD5:".startsWith(encryptedPassword.toUpperCase(Locale.ENGLISH)))
|
||||||
{
|
{
|
||||||
return "{MD5}" + encryptedPassword.substring("MD5:".length(), encryptedPassword.length());
|
return "{MD5}" + encryptedPassword.substring("MD5:".length(), encryptedPassword.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("CRYPT:".startsWith(encryptedPassword.toUpperCase()))
|
if ("CRYPT:".startsWith(encryptedPassword.toUpperCase(Locale.ENGLISH)))
|
||||||
{
|
{
|
||||||
return "{CRYPT}" + encryptedPassword.substring("CRYPT:".length(), encryptedPassword.length());
|
return "{CRYPT}" + encryptedPassword.substring("CRYPT:".length(), encryptedPassword.length());
|
||||||
}
|
}
|
||||||
|
@ -672,12 +673,12 @@ public class LdapLoginModule extends AbstractLoginModule
|
||||||
return encryptedPassword;
|
return encryptedPassword;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("{MD5}".startsWith(encryptedPassword.toUpperCase()))
|
if ("{MD5}".startsWith(encryptedPassword.toUpperCase(Locale.ENGLISH)))
|
||||||
{
|
{
|
||||||
return "MD5:" + encryptedPassword.substring("{MD5}".length(), encryptedPassword.length());
|
return "MD5:" + encryptedPassword.substring("{MD5}".length(), encryptedPassword.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("{CRYPT}".startsWith(encryptedPassword.toUpperCase()))
|
if ("{CRYPT}".startsWith(encryptedPassword.toUpperCase(Locale.ENGLISH)))
|
||||||
{
|
{
|
||||||
return "CRYPT:" + encryptedPassword.substring("{CRYPT}".length(), encryptedPassword.length());
|
return "CRYPT:" + encryptedPassword.substring("{CRYPT}".length(), encryptedPassword.length());
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.eclipse.jetty.jmx;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
|
@ -164,7 +165,7 @@ public class MBeanContainer implements Container.InheritedListener, Dumpable
|
||||||
domain = obj.getClass().getPackage().getName();
|
domain = obj.getClass().getPackage().getName();
|
||||||
|
|
||||||
|
|
||||||
String type = obj.getClass().getName().toLowerCase();
|
String type = obj.getClass().getName().toLowerCase(Locale.ENGLISH);
|
||||||
int dot = type.lastIndexOf('.');
|
int dot = type.lastIndexOf('.');
|
||||||
if (dot >= 0)
|
if (dot >= 0)
|
||||||
type = type.substring(dot + 1);
|
type = type.substring(dot + 1);
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.management.Attribute;
|
import javax.management.Attribute;
|
||||||
|
@ -622,7 +623,7 @@ public class ObjectMBean implements DynamicMBean
|
||||||
convert = true;
|
convert = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
String uName = name.substring(0, 1).toUpperCase() + name.substring(1);
|
String uName = name.substring(0, 1).toUpperCase(Locale.ENGLISH) + name.substring(1);
|
||||||
Class<?> oClass = onMBean ? this.getClass() : _managed.getClass();
|
Class<?> oClass = onMBean ? this.getClass() : _managed.getClass();
|
||||||
|
|
||||||
LOG.debug("defineAttribute {} {}:{}:{}:{}",name,onMBean,readonly,oClass,description);
|
LOG.debug("defineAttribute {} {}:{}:{}:{}",name,onMBean,readonly,oClass,description);
|
||||||
|
@ -862,7 +863,7 @@ public class ObjectMBean implements DynamicMBean
|
||||||
variableName = variableName.substring(2);
|
variableName = variableName.substring(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
variableName = variableName.substring(0,1).toLowerCase() + variableName.substring(1);
|
variableName = variableName.substring(0,1).toLowerCase(Locale.ENGLISH) + variableName.substring(1);
|
||||||
|
|
||||||
return variableName;
|
return variableName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
@ -774,7 +775,7 @@ public class JettyRunForkedMojo extends AbstractMojo
|
||||||
|
|
||||||
private String createToken ()
|
private String createToken ()
|
||||||
{
|
{
|
||||||
return Long.toString(random.nextLong()^System.currentTimeMillis(), 36).toUpperCase();
|
return Long.toString(random.nextLong()^System.currentTimeMillis(), 36).toUpperCase(Locale.ENGLISH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.IO;
|
import org.eclipse.jetty.util.IO;
|
||||||
import org.eclipse.jetty.util.LazyList;
|
import org.eclipse.jetty.util.LazyList;
|
||||||
|
@ -202,7 +203,7 @@ public class MavenWebInfConfiguration extends WebInfConfiguration
|
||||||
{
|
{
|
||||||
for (File f: jwac.getClassPathFiles())
|
for (File f: jwac.getClassPathFiles())
|
||||||
{
|
{
|
||||||
if (f.getName().toLowerCase().endsWith(".jar"))
|
if (f.getName().toLowerCase(Locale.ENGLISH).endsWith(".jar"))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.io.FilenameFilter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -116,7 +117,7 @@ public class OSGiAppProvider extends ScanningAppProvider implements AppProvider
|
||||||
*/
|
*/
|
||||||
private static String getDeployedAppName(String contextFileName)
|
private static String getDeployedAppName(String contextFileName)
|
||||||
{
|
{
|
||||||
String lowername = contextFileName.toLowerCase();
|
String lowername = contextFileName.toLowerCase(Locale.ENGLISH);
|
||||||
if (lowername.endsWith(".xml"))
|
if (lowername.endsWith(".xml"))
|
||||||
{
|
{
|
||||||
String contextName = contextFileName.substring(0, lowername.length() - ".xml".length());
|
String contextName = contextFileName.substring(0, lowername.length() - ".xml".length());
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -109,7 +110,7 @@ public class LibExtClassLoaderHelper
|
||||||
for (File f : jettyResources.listFiles())
|
for (File f : jettyResources.listFiles())
|
||||||
{
|
{
|
||||||
jettyResFiles.put(f.getName(), f);
|
jettyResFiles.put(f.getName(), f);
|
||||||
if (f.getName().toLowerCase().startsWith("readme"))
|
if (f.getName().toLowerCase(Locale.ENGLISH).startsWith("readme"))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.plus.annotation;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Member;
|
import java.lang.reflect.Member;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Locale;
|
||||||
import javax.naming.InitialContext;
|
import javax.naming.InitialContext;
|
||||||
import javax.naming.NamingException;
|
import javax.naming.NamingException;
|
||||||
|
|
||||||
|
@ -140,7 +141,7 @@ public class Injection
|
||||||
_resourceClass = resourceType;
|
_resourceClass = resourceType;
|
||||||
|
|
||||||
//first look for a javabeans style setter matching the targetName
|
//first look for a javabeans style setter matching the targetName
|
||||||
String setter = "set"+target.substring(0,1).toUpperCase()+target.substring(1);
|
String setter = "set"+target.substring(0,1).toUpperCase(Locale.ENGLISH)+target.substring(1);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LOG.debug("Looking for method for setter: "+setter+" with arg "+_resourceClass);
|
LOG.debug("Looking for method for setter: "+setter+" with arg "+_resourceClass);
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import javax.naming.InitialContext;
|
import javax.naming.InitialContext;
|
||||||
import javax.naming.NameNotFoundException;
|
import javax.naming.NameNotFoundException;
|
||||||
import javax.naming.NamingException;
|
import javax.naming.NamingException;
|
||||||
|
@ -413,7 +414,7 @@ public class DataSourceLoginService extends MappedLoginService
|
||||||
DatabaseMetaData metaData = connection.getMetaData();
|
DatabaseMetaData metaData = connection.getMetaData();
|
||||||
|
|
||||||
//check if tables exist
|
//check if tables exist
|
||||||
String tableName = (metaData.storesLowerCaseIdentifiers()? _userTableName.toLowerCase(): (metaData.storesUpperCaseIdentifiers()?_userTableName.toUpperCase(): _userTableName));
|
String tableName = (metaData.storesLowerCaseIdentifiers()? _userTableName.toLowerCase(Locale.ENGLISH): (metaData.storesUpperCaseIdentifiers()?_userTableName.toUpperCase(Locale.ENGLISH): _userTableName));
|
||||||
ResultSet result = metaData.getTables(null, null, tableName, null);
|
ResultSet result = metaData.getTables(null, null, tableName, null);
|
||||||
if (!result.next())
|
if (!result.next())
|
||||||
{
|
{
|
||||||
|
@ -431,7 +432,7 @@ public class DataSourceLoginService extends MappedLoginService
|
||||||
|
|
||||||
result.close();
|
result.close();
|
||||||
|
|
||||||
tableName = (metaData.storesLowerCaseIdentifiers()? _roleTableName.toLowerCase(): (metaData.storesUpperCaseIdentifiers()?_roleTableName.toUpperCase(): _roleTableName));
|
tableName = (metaData.storesLowerCaseIdentifiers()? _roleTableName.toLowerCase(Locale.ENGLISH): (metaData.storesUpperCaseIdentifiers()?_roleTableName.toUpperCase(Locale.ENGLISH): _roleTableName));
|
||||||
result = metaData.getTables(null, null, tableName, null);
|
result = metaData.getTables(null, null, tableName, null);
|
||||||
if (!result.next())
|
if (!result.next())
|
||||||
{
|
{
|
||||||
|
@ -448,7 +449,7 @@ public class DataSourceLoginService extends MappedLoginService
|
||||||
|
|
||||||
result.close();
|
result.close();
|
||||||
|
|
||||||
tableName = (metaData.storesLowerCaseIdentifiers()? _userRoleTableName.toLowerCase(): (metaData.storesUpperCaseIdentifiers()?_userRoleTableName.toUpperCase(): _userRoleTableName));
|
tableName = (metaData.storesLowerCaseIdentifiers()? _userRoleTableName.toLowerCase(Locale.ENGLISH): (metaData.storesUpperCaseIdentifiers()?_userRoleTableName.toUpperCase(Locale.ENGLISH): _userRoleTableName));
|
||||||
result = metaData.getTables(null, null, tableName, null);
|
result = metaData.getTables(null, null, tableName, null);
|
||||||
if (!result.next())
|
if (!result.next())
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
@ -489,7 +490,7 @@ public class ProxyServlet implements Servlet
|
||||||
protected void onResponseHeader(Buffer name, Buffer value) throws IOException
|
protected void onResponseHeader(Buffer name, Buffer value) throws IOException
|
||||||
{
|
{
|
||||||
String nameString = name.toString();
|
String nameString = name.toString();
|
||||||
String s = nameString.toLowerCase();
|
String s = nameString.toLowerCase(Locale.ENGLISH);
|
||||||
if (!_DontProxyHeaders.contains(s) || (HttpHeader.CONNECTION.is(name) && HttpHeaderValue.CLOSE.is(value)))
|
if (!_DontProxyHeaders.contains(s) || (HttpHeader.CONNECTION.is(name) && HttpHeaderValue.CLOSE.is(value)))
|
||||||
{
|
{
|
||||||
if (debug != 0)
|
if (debug != 0)
|
||||||
|
@ -560,7 +561,7 @@ public class ProxyServlet implements Servlet
|
||||||
String connectionHdr = request.getHeader("Connection");
|
String connectionHdr = request.getHeader("Connection");
|
||||||
if (connectionHdr != null)
|
if (connectionHdr != null)
|
||||||
{
|
{
|
||||||
connectionHdr = connectionHdr.toLowerCase();
|
connectionHdr = connectionHdr.toLowerCase(Locale.ENGLISH);
|
||||||
if (connectionHdr.indexOf("keep-alive") < 0 && connectionHdr.indexOf("close") < 0)
|
if (connectionHdr.indexOf("keep-alive") < 0 && connectionHdr.indexOf("close") < 0)
|
||||||
connectionHdr = null;
|
connectionHdr = null;
|
||||||
}
|
}
|
||||||
|
@ -578,7 +579,7 @@ public class ProxyServlet implements Servlet
|
||||||
{
|
{
|
||||||
// TODO could be better than this!
|
// TODO could be better than this!
|
||||||
String hdr = (String)enm.nextElement();
|
String hdr = (String)enm.nextElement();
|
||||||
String lhdr = hdr.toLowerCase();
|
String lhdr = hdr.toLowerCase(Locale.ENGLISH);
|
||||||
|
|
||||||
if (_DontProxyHeaders.contains(lhdr))
|
if (_DontProxyHeaders.contains(lhdr))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -27,6 +27,7 @@ import java.io.IOException;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -105,7 +106,7 @@ public abstract class AbstractConnectHandlerTest
|
||||||
assertTrue(header.lookingAt());
|
assertTrue(header.lookingAt());
|
||||||
String headerName = header.group(1);
|
String headerName = header.group(1);
|
||||||
String headerValue = header.group(2);
|
String headerValue = header.group(2);
|
||||||
headers.put(headerName.toLowerCase(), headerValue.toLowerCase());
|
headers.put(headerName.toLowerCase(Locale.ENGLISH), headerValue.toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder body;
|
StringBuilder body;
|
||||||
|
|
|
@ -79,6 +79,20 @@ public class RewriteHandlerTest extends AbstractRuleTestCase
|
||||||
@Test
|
@Test
|
||||||
public void test() throws Exception
|
public void test() throws Exception
|
||||||
{
|
{
|
||||||
|
_response.setStatus(200);
|
||||||
|
_request.setHandled(false);
|
||||||
|
_handler.setOriginalPathAttribute("/before");
|
||||||
|
_handler.setRewriteRequestURI(true);
|
||||||
|
_handler.setRewritePathInfo(true);
|
||||||
|
_request.setRequestURI("/xxx/bar");
|
||||||
|
_request.setPathInfo("/xxx/bar");
|
||||||
|
_handler.handle("/xxx/bar",_request,_request, _response);
|
||||||
|
assertEquals(201,_response.getStatus());
|
||||||
|
assertEquals("/bar/zzz",_request.getAttribute("target"));
|
||||||
|
assertEquals("/bar/zzz",_request.getAttribute("URI"));
|
||||||
|
assertEquals("/bar/zzz",_request.getAttribute("info"));
|
||||||
|
assertEquals(null,_request.getAttribute("before"));
|
||||||
|
|
||||||
_response.setStatus(200);
|
_response.setStatus(200);
|
||||||
_request.setHandled(false);
|
_request.setHandled(false);
|
||||||
_handler.setOriginalPathAttribute("/before");
|
_handler.setOriginalPathAttribute("/before");
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.security.authentication;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.Locale;
|
||||||
import javax.servlet.RequestDispatcher;
|
import javax.servlet.RequestDispatcher;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
|
@ -413,7 +414,7 @@ public class FormAuthenticator extends LoginAuthenticator
|
||||||
@Override
|
@Override
|
||||||
public long getDateHeader(String name)
|
public long getDateHeader(String name)
|
||||||
{
|
{
|
||||||
if (name.toLowerCase().startsWith("if-"))
|
if (name.toLowerCase(Locale.ENGLISH).startsWith("if-"))
|
||||||
return -1;
|
return -1;
|
||||||
return super.getDateHeader(name);
|
return super.getDateHeader(name);
|
||||||
}
|
}
|
||||||
|
@ -421,7 +422,7 @@ public class FormAuthenticator extends LoginAuthenticator
|
||||||
@Override
|
@Override
|
||||||
public String getHeader(String name)
|
public String getHeader(String name)
|
||||||
{
|
{
|
||||||
if (name.toLowerCase().startsWith("if-"))
|
if (name.toLowerCase(Locale.ENGLISH).startsWith("if-"))
|
||||||
return null;
|
return null;
|
||||||
return super.getHeader(name);
|
return super.getHeader(name);
|
||||||
}
|
}
|
||||||
|
@ -435,7 +436,7 @@ public class FormAuthenticator extends LoginAuthenticator
|
||||||
@Override
|
@Override
|
||||||
public Enumeration<String> getHeaders(String name)
|
public Enumeration<String> getHeaders(String name)
|
||||||
{
|
{
|
||||||
if (name.toLowerCase().startsWith("if-"))
|
if (name.toLowerCase(Locale.ENGLISH).startsWith("if-"))
|
||||||
return Collections.<String>enumeration(Collections.<String>emptyList());
|
return Collections.<String>enumeration(Collections.<String>emptyList());
|
||||||
return super.getHeaders(name);
|
return super.getHeaders(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
@ -314,7 +315,7 @@ public abstract class AbstractConnector extends ContainerLifeCycle implements Co
|
||||||
{
|
{
|
||||||
synchronized (_factories)
|
synchronized (_factories)
|
||||||
{
|
{
|
||||||
return _factories.get(protocol.toLowerCase());
|
return _factories.get(protocol.toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +338,7 @@ public abstract class AbstractConnector extends ContainerLifeCycle implements Co
|
||||||
ConnectionFactory old=_factories.remove(factory.getProtocol());
|
ConnectionFactory old=_factories.remove(factory.getProtocol());
|
||||||
if (old!=null)
|
if (old!=null)
|
||||||
removeBean(old);
|
removeBean(old);
|
||||||
_factories.put(factory.getProtocol().toLowerCase(), factory);
|
_factories.put(factory.getProtocol().toLowerCase(Locale.ENGLISH), factory);
|
||||||
addBean(factory);
|
addBean(factory);
|
||||||
if (_defaultProtocol==null)
|
if (_defaultProtocol==null)
|
||||||
_defaultProtocol=factory.getProtocol();
|
_defaultProtocol=factory.getProtocol();
|
||||||
|
@ -348,7 +349,7 @@ public abstract class AbstractConnector extends ContainerLifeCycle implements Co
|
||||||
{
|
{
|
||||||
synchronized (_factories)
|
synchronized (_factories)
|
||||||
{
|
{
|
||||||
ConnectionFactory factory= _factories.remove(protocol.toLowerCase());
|
ConnectionFactory factory= _factories.remove(protocol.toLowerCase(Locale.ENGLISH));
|
||||||
removeBean(factory);
|
removeBean(factory);
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
|
@ -403,7 +404,7 @@ public abstract class AbstractConnector extends ContainerLifeCycle implements Co
|
||||||
|
|
||||||
public void setDefaultProtocol(String defaultProtocol)
|
public void setDefaultProtocol(String defaultProtocol)
|
||||||
{
|
{
|
||||||
_defaultProtocol = defaultProtocol.toLowerCase();
|
_defaultProtocol = defaultProtocol.toLowerCase(Locale.ENGLISH);
|
||||||
if (isRunning())
|
if (isRunning())
|
||||||
_defaultConnectionFactory=getConnectionFactory(_defaultProtocol);
|
_defaultConnectionFactory=getConnectionFactory(_defaultProtocol);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
package org.eclipse.jetty.server;
|
package org.eclipse.jetty.server;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
import javax.servlet.http.Cookie;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.LazyList;
|
import org.eclipse.jetty.util.LazyList;
|
||||||
|
@ -283,7 +285,7 @@ public class CookieCutter
|
||||||
{
|
{
|
||||||
if (name.startsWith("$"))
|
if (name.startsWith("$"))
|
||||||
{
|
{
|
||||||
String lowercaseName = name.toLowerCase();
|
String lowercaseName = name.toLowerCase(Locale.ENGLISH);
|
||||||
if ("$path".equals(lowercaseName))
|
if ("$path".equals(lowercaseName))
|
||||||
{
|
{
|
||||||
if (cookie!=null)
|
if (cookie!=null)
|
||||||
|
|
|
@ -34,6 +34,7 @@ import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
@ -124,7 +125,7 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
|
||||||
public DatabaseAdaptor (DatabaseMetaData dbMeta)
|
public DatabaseAdaptor (DatabaseMetaData dbMeta)
|
||||||
throws SQLException
|
throws SQLException
|
||||||
{
|
{
|
||||||
_dbName = dbMeta.getDatabaseProductName().toLowerCase();
|
_dbName = dbMeta.getDatabaseProductName().toLowerCase(Locale.ENGLISH);
|
||||||
LOG.debug ("Using database {}",_dbName);
|
LOG.debug ("Using database {}",_dbName);
|
||||||
_isLower = dbMeta.storesLowerCaseIdentifiers();
|
_isLower = dbMeta.storesLowerCaseIdentifiers();
|
||||||
_isUpper = dbMeta.storesUpperCaseIdentifiers();
|
_isUpper = dbMeta.storesUpperCaseIdentifiers();
|
||||||
|
@ -140,9 +141,9 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
|
||||||
public String convertIdentifier (String identifier)
|
public String convertIdentifier (String identifier)
|
||||||
{
|
{
|
||||||
if (_isLower)
|
if (_isLower)
|
||||||
return identifier.toLowerCase();
|
return identifier.toLowerCase(Locale.ENGLISH);
|
||||||
if (_isUpper)
|
if (_isUpper)
|
||||||
return identifier.toUpperCase();
|
return identifier.toUpperCase(Locale.ENGLISH);
|
||||||
|
|
||||||
return identifier;
|
return identifier;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.server.session.SessionHandler;
|
import org.eclipse.jetty.server.session.SessionHandler;
|
||||||
import org.eclipse.jetty.util.IO;
|
import org.eclipse.jetty.util.IO;
|
||||||
|
@ -52,7 +53,7 @@ public class SelectChannelTimeoutTest extends ConnectorTimeoutTest
|
||||||
|
|
||||||
_handler.setSuspendFor(100);
|
_handler.setSuspendFor(100);
|
||||||
_handler.setResumeAfter(25);
|
_handler.setResumeAfter(25);
|
||||||
assertTrue(process(null).toUpperCase().contains("RESUMED"));
|
assertTrue(process(null).toUpperCase(Locale.ENGLISH).contains("RESUMED"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -66,7 +67,7 @@ public class SelectChannelTimeoutTest extends ConnectorTimeoutTest
|
||||||
_server.start();
|
_server.start();
|
||||||
|
|
||||||
_handler.setSuspendFor(50);
|
_handler.setSuspendFor(50);
|
||||||
assertTrue(process(null).toUpperCase().contains("TIMEOUT"));
|
assertTrue(process(null).toUpperCase(Locale.ENGLISH).contains("TIMEOUT"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -81,7 +82,7 @@ public class SelectChannelTimeoutTest extends ConnectorTimeoutTest
|
||||||
|
|
||||||
_handler.setSuspendFor(100);
|
_handler.setSuspendFor(100);
|
||||||
_handler.setCompleteAfter(25);
|
_handler.setCompleteAfter(25);
|
||||||
assertTrue(process(null).toUpperCase().contains("COMPLETED"));
|
assertTrue(process(null).toUpperCase(Locale.ENGLISH).contains("COMPLETED"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized String process(String content) throws UnsupportedEncodingException, IOException, InterruptedException
|
private synchronized String process(String content) throws UnsupportedEncodingException, IOException, InterruptedException
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.net.Socket;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -153,7 +154,7 @@ public class IPAccessHandlerTest
|
||||||
assertTrue(header.lookingAt());
|
assertTrue(header.lookingAt());
|
||||||
String headerName = header.group(1);
|
String headerName = header.group(1);
|
||||||
String headerValue = header.group(2);
|
String headerValue = header.group(2);
|
||||||
headers.put(headerName.toLowerCase(), headerValue.toLowerCase());
|
headers.put(headerName.toLowerCase(Locale.ENGLISH), headerValue.toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder body = new StringBuilder();
|
StringBuilder body = new StringBuilder();
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.servlet;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
@ -90,7 +91,7 @@ public class Invoker extends HttpServlet
|
||||||
{
|
{
|
||||||
String param=(String)e.nextElement();
|
String param=(String)e.nextElement();
|
||||||
String value=getInitParameter(param);
|
String value=getInitParameter(param);
|
||||||
String lvalue=value.toLowerCase();
|
String lvalue=value.toLowerCase(Locale.ENGLISH);
|
||||||
if ("nonContextServlets".equals(param))
|
if ("nonContextServlets".equals(param))
|
||||||
{
|
{
|
||||||
_nonContextServlets=value.length()>0 && lvalue.startsWith("t");
|
_nonContextServlets=value.length()>0 && lvalue.startsWith("t");
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
|
@ -138,7 +139,7 @@ public class CGI extends HttpServlet
|
||||||
if (!_env.envMap.containsKey("SystemRoot"))
|
if (!_env.envMap.containsKey("SystemRoot"))
|
||||||
{
|
{
|
||||||
String os = System.getProperty("os.name");
|
String os = System.getProperty("os.name");
|
||||||
if (os != null && os.toLowerCase().indexOf("windows") != -1)
|
if (os != null && os.toLowerCase(Locale.ENGLISH).indexOf("windows") != -1)
|
||||||
{
|
{
|
||||||
_env.set("SystemRoot","C:\\WINDOWS");
|
_env.set("SystemRoot","C:\\WINDOWS");
|
||||||
}
|
}
|
||||||
|
@ -255,7 +256,7 @@ public class CGI extends HttpServlet
|
||||||
{
|
{
|
||||||
String name = (String)enm.nextElement();
|
String name = (String)enm.nextElement();
|
||||||
String value = req.getHeader(name);
|
String value = req.getHeader(name);
|
||||||
env.set("HTTP_" + name.toUpperCase().replace('-','_'),value);
|
env.set("HTTP_" + name.toUpperCase(Locale.ENGLISH).replace('-','_'),value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// these extra ones were from printenv on www.dev.nomura.co.uk
|
// these extra ones were from printenv on www.dev.nomura.co.uk
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.eclipse.jetty.servlets;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -277,7 +278,7 @@ public class GzipFilter extends UserAgentFilter
|
||||||
{
|
{
|
||||||
for (int i=0; i< encodings.length; i++)
|
for (int i=0; i< encodings.length; i++)
|
||||||
{
|
{
|
||||||
if (encodings[i].toLowerCase().contains(GZIP))
|
if (encodings[i].toLowerCase(Locale.ENGLISH).contains(GZIP))
|
||||||
{
|
{
|
||||||
if (isEncodingAcceptable(encodings[i]))
|
if (isEncodingAcceptable(encodings[i]))
|
||||||
{
|
{
|
||||||
|
@ -286,7 +287,7 @@ public class GzipFilter extends UserAgentFilter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encodings[i].toLowerCase().contains(DEFLATE))
|
if (encodings[i].toLowerCase(Locale.ENGLISH).contains(DEFLATE))
|
||||||
{
|
{
|
||||||
if (isEncodingAcceptable(encodings[i]))
|
if (isEncodingAcceptable(encodings[i]))
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,6 +31,7 @@ import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
import javax.servlet.FilterChain;
|
import javax.servlet.FilterChain;
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.net.URL;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.servlet.DispatcherType;
|
import javax.servlet.DispatcherType;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
@ -62,7 +63,7 @@ public class PutFilterTest
|
||||||
FilterHolder holder = tester.addFilter(PutFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST));
|
FilterHolder holder = tester.addFilter(PutFilter.class,"/*",EnumSet.of(DispatcherType.REQUEST));
|
||||||
holder.setInitParameter("delAllowed","true");
|
holder.setInitParameter("delAllowed","true");
|
||||||
// Bloody Windows does not allow file renaming
|
// Bloody Windows does not allow file renaming
|
||||||
if (!System.getProperty("os.name").toLowerCase().contains("windows"))
|
if (!System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows"))
|
||||||
holder.setInitParameter("putAtomic","true");
|
holder.setInitParameter("putAtomic","true");
|
||||||
tester.start();
|
tester.start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.eclipse.jetty.spdy.generator;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.spdy.CompressionDictionary;
|
import org.eclipse.jetty.spdy.CompressionDictionary;
|
||||||
import org.eclipse.jetty.spdy.CompressionFactory;
|
import org.eclipse.jetty.spdy.CompressionFactory;
|
||||||
|
@ -45,7 +46,7 @@ public class HeadersBlockGenerator
|
||||||
writeCount(version, buffer, headers.size());
|
writeCount(version, buffer, headers.size());
|
||||||
for (Fields.Field header : headers)
|
for (Fields.Field header : headers)
|
||||||
{
|
{
|
||||||
String name = header.name().toLowerCase();
|
String name = header.name().toLowerCase(Locale.ENGLISH);
|
||||||
byte[] nameBytes = name.getBytes(iso1);
|
byte[] nameBytes = name.getBytes(iso1);
|
||||||
writeNameLength(version, buffer, nameBytes.length);
|
writeNameLength(version, buffer, nameBytes.length);
|
||||||
buffer.write(nameBytes, 0, nameBytes.length);
|
buffer.write(nameBytes, 0, nameBytes.length);
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
@ -206,7 +207,7 @@ public class ReferrerPushStrategy implements PushStrategy
|
||||||
if (header == null)
|
if (header == null)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
String contentType = header.value().toLowerCase();
|
String contentType = header.value().toLowerCase(Locale.ENGLISH);
|
||||||
for (String pushContentType : pushContentTypes)
|
for (String pushContentType : pushContentTypes)
|
||||||
if (contentType.startsWith(pushContentType))
|
if (contentType.startsWith(pushContentType))
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.eclipse.jetty.spdy.server.proxy;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -92,7 +93,7 @@ public class ProxyHTTPSPDYConnection extends HttpConnection implements HttpParse
|
||||||
@Override
|
@Override
|
||||||
public boolean parsedHeader(HttpHeader header, String headerName, String headerValue)
|
public boolean parsedHeader(HttpHeader header, String headerName, String headerValue)
|
||||||
{
|
{
|
||||||
switch (headerName.toLowerCase())
|
switch (headerName.toLowerCase(Locale.ENGLISH))
|
||||||
{
|
{
|
||||||
case "host":
|
case "host":
|
||||||
headers.put(HTTPSPDYHeader.HOST.name(version), headerValue);
|
headers.put(HTTPSPDYHeader.HOST.name(version), headerValue);
|
||||||
|
|
|
@ -38,6 +38,7 @@ import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -269,7 +270,7 @@ public class Config
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String name = entry.getName().toLowerCase();
|
String name = entry.getName().toLowerCase(Locale.ENGLISH);
|
||||||
if (name.endsWith(".jar") || name.endsWith(".zip"))
|
if (name.endsWith(".jar") || name.endsWith(".zip"))
|
||||||
{
|
{
|
||||||
String jar = entry.getCanonicalPath();
|
String jar = entry.getCanonicalPath();
|
||||||
|
@ -796,7 +797,7 @@ public class Config
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add XML configuration
|
// Add XML configuration
|
||||||
if (subject.toLowerCase().endsWith(".xml"))
|
if (subject.toLowerCase(Locale.ENGLISH).endsWith(".xml"))
|
||||||
{
|
{
|
||||||
// Config file
|
// Config file
|
||||||
File f = new File(fixPath(file));
|
File f = new File(fixPath(file));
|
||||||
|
@ -807,7 +808,7 @@ public class Config
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the main class to execute (overrides any previously set)
|
// Set the main class to execute (overrides any previously set)
|
||||||
if (subject.toLowerCase().endsWith(".class"))
|
if (subject.toLowerCase(Locale.ENGLISH).endsWith(".class"))
|
||||||
{
|
{
|
||||||
// Class
|
// Class
|
||||||
String cn = expand(subject.substring(0,subject.length() - 6));
|
String cn = expand(subject.substring(0,subject.length() - 6));
|
||||||
|
@ -820,7 +821,7 @@ public class Config
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add raw classpath entry
|
// Add raw classpath entry
|
||||||
if (subject.toLowerCase().endsWith(".path"))
|
if (subject.toLowerCase(Locale.ENGLISH).endsWith(".path"))
|
||||||
{
|
{
|
||||||
// classpath (jetty.class.path?) to add to runtime classpath
|
// classpath (jetty.class.path?) to add to runtime classpath
|
||||||
String cn = expand(subject.substring(0,subject.length() - 5));
|
String cn = expand(subject.substring(0,subject.length() - 5));
|
||||||
|
|
|
@ -46,6 +46,7 @@ import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -365,7 +366,7 @@ public class Main
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String name = path.getName().toLowerCase();
|
String name = path.getName().toLowerCase(Locale.ENGLISH);
|
||||||
return (name.startsWith("jetty") && name.endsWith(".xml"));
|
return (name.startsWith("jetty") && name.endsWith(".xml"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -639,7 +640,7 @@ public class Main
|
||||||
|
|
||||||
private String resolveXmlConfig(String xmlFilename) throws FileNotFoundException
|
private String resolveXmlConfig(String xmlFilename) throws FileNotFoundException
|
||||||
{
|
{
|
||||||
if (!xmlFilename.toLowerCase().endsWith(".xml"))
|
if (!xmlFilename.toLowerCase(Locale.ENGLISH).endsWith(".xml"))
|
||||||
{
|
{
|
||||||
// Nothing to resolve.
|
// Nothing to resolve.
|
||||||
return xmlFilename;
|
return xmlFilename;
|
||||||
|
@ -853,7 +854,7 @@ public class Main
|
||||||
|
|
||||||
if (element.isFile())
|
if (element.isFile())
|
||||||
{
|
{
|
||||||
String name = element.getName().toLowerCase();
|
String name = element.getName().toLowerCase(Locale.ENGLISH);
|
||||||
if (name.endsWith(".jar"))
|
if (name.endsWith(".jar"))
|
||||||
{
|
{
|
||||||
return JarVersion.getVersion(element);
|
return JarVersion.getVersion(element);
|
||||||
|
@ -1105,7 +1106,7 @@ public class Main
|
||||||
@Override
|
@Override
|
||||||
public boolean accept(File dir, String name)
|
public boolean accept(File dir, String name)
|
||||||
{
|
{
|
||||||
return name.toLowerCase().endsWith(".ini");
|
return name.toLowerCase(Locale.ENGLISH).endsWith(".ini");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Arrays.sort(inis);
|
Arrays.sort(inis);
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -89,9 +90,9 @@ public class JSONObjectConvertor implements JSON.Convertor
|
||||||
{
|
{
|
||||||
String name=m.getName();
|
String name=m.getName();
|
||||||
if (name.startsWith("is"))
|
if (name.startsWith("is"))
|
||||||
name=name.substring(2,3).toLowerCase()+name.substring(3);
|
name=name.substring(2,3).toLowerCase(Locale.ENGLISH)+name.substring(3);
|
||||||
else if (name.startsWith("get"))
|
else if (name.startsWith("get"))
|
||||||
name=name.substring(3,4).toLowerCase()+name.substring(4);
|
name=name.substring(3,4).toLowerCase(Locale.ENGLISH)+name.substring(4);
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -122,9 +123,9 @@ public class JSONPojoConvertor implements JSON.Convertor
|
||||||
if(m.getReturnType()!=null)
|
if(m.getReturnType()!=null)
|
||||||
{
|
{
|
||||||
if (name.startsWith("is") && name.length()>2)
|
if (name.startsWith("is") && name.length()>2)
|
||||||
name=name.substring(2,3).toLowerCase()+name.substring(3);
|
name=name.substring(2,3).toLowerCase(Locale.ENGLISH)+name.substring(3);
|
||||||
else if (name.startsWith("get") && name.length()>3)
|
else if (name.startsWith("get") && name.length()>3)
|
||||||
name=name.substring(3,4).toLowerCase()+name.substring(4);
|
name=name.substring(3,4).toLowerCase(Locale.ENGLISH)+name.substring(4);
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
if(includeField(name, m))
|
if(includeField(name, m))
|
||||||
|
@ -134,7 +135,7 @@ public class JSONPojoConvertor implements JSON.Convertor
|
||||||
case 1:
|
case 1:
|
||||||
if (name.startsWith("set") && name.length()>3)
|
if (name.startsWith("set") && name.length()>3)
|
||||||
{
|
{
|
||||||
name=name.substring(3,4).toLowerCase()+name.substring(4);
|
name=name.substring(3,4).toLowerCase(Locale.ENGLISH)+name.substring(4);
|
||||||
if(includeField(name, m))
|
if(includeField(name, m))
|
||||||
addSetter(name, m);
|
addSetter(name, m);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -93,7 +94,7 @@ public class Fields implements Iterable<Fields.Field>
|
||||||
*/
|
*/
|
||||||
public Field get(String name)
|
public Field get(String name)
|
||||||
{
|
{
|
||||||
return fields.get(name.trim().toLowerCase());
|
return fields.get(name.trim().toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -107,7 +108,7 @@ public class Fields implements Iterable<Fields.Field>
|
||||||
name = name.trim();
|
name = name.trim();
|
||||||
// Preserve the case for the field name
|
// Preserve the case for the field name
|
||||||
Field field = new Field(name, value);
|
Field field = new Field(name, value);
|
||||||
fields.put(name.toLowerCase(), field);
|
fields.put(name.toLowerCase(Locale.ENGLISH), field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -118,7 +119,7 @@ public class Fields implements Iterable<Fields.Field>
|
||||||
public void put(Field field)
|
public void put(Field field)
|
||||||
{
|
{
|
||||||
if (field != null)
|
if (field != null)
|
||||||
fields.put(field.name().toLowerCase(), field);
|
fields.put(field.name().toLowerCase(Locale.ENGLISH), field);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -131,16 +132,16 @@ public class Fields implements Iterable<Fields.Field>
|
||||||
public void add(String name, String value)
|
public void add(String name, String value)
|
||||||
{
|
{
|
||||||
name = name.trim();
|
name = name.trim();
|
||||||
Field field = fields.get(name.toLowerCase());
|
Field field = fields.get(name.toLowerCase(Locale.ENGLISH));
|
||||||
if (field == null)
|
if (field == null)
|
||||||
{
|
{
|
||||||
field = new Field(name, value);
|
field = new Field(name, value);
|
||||||
fields.put(name.toLowerCase(), field);
|
fields.put(name.toLowerCase(Locale.ENGLISH), field);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
field = new Field(field.name(), field.values(), value);
|
field = new Field(field.name(), field.values(), value);
|
||||||
fields.put(name.toLowerCase(), field);
|
fields.put(name.toLowerCase(Locale.ENGLISH), field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,7 +154,7 @@ public class Fields implements Iterable<Fields.Field>
|
||||||
public Field remove(String name)
|
public Field remove(String name)
|
||||||
{
|
{
|
||||||
name = name.trim();
|
name = name.trim();
|
||||||
return fields.remove(name.toLowerCase());
|
return fields.remove(name.toLowerCase(Locale.ENGLISH));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -234,7 +235,7 @@ public class Fields implements Iterable<Fields.Field>
|
||||||
@Override
|
@Override
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
{
|
{
|
||||||
int result = name.toLowerCase().hashCode();
|
int result = name.toLowerCase(Locale.ENGLISH).hashCode();
|
||||||
result = 31 * result + Arrays.hashCode(values);
|
result = 31 * result + Arrays.hashCode(values);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import javax.servlet.MultipartConfigElement;
|
import javax.servlet.MultipartConfigElement;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
@ -176,7 +177,7 @@ public class MultiPartInputStream
|
||||||
{
|
{
|
||||||
if (name == null)
|
if (name == null)
|
||||||
return null;
|
return null;
|
||||||
return (String)_headers.getValue(name.toLowerCase(), 0);
|
return (String)_headers.getValue(name.toLowerCase(Locale.ENGLISH), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -500,7 +501,7 @@ public class MultiPartInputStream
|
||||||
int c=line.indexOf(':',0);
|
int c=line.indexOf(':',0);
|
||||||
if(c>0)
|
if(c>0)
|
||||||
{
|
{
|
||||||
String key=line.substring(0,c).trim().toLowerCase();
|
String key=line.substring(0,c).trim().toLowerCase(Locale.ENGLISH);
|
||||||
String value=line.substring(c+1,line.length()).trim();
|
String value=line.substring(c+1,line.length()).trim();
|
||||||
headers.put(key, value);
|
headers.put(key, value);
|
||||||
if (key.equalsIgnoreCase("content-disposition"))
|
if (key.equalsIgnoreCase("content-disposition"))
|
||||||
|
@ -526,7 +527,7 @@ public class MultiPartInputStream
|
||||||
while(tok.hasMoreTokens())
|
while(tok.hasMoreTokens())
|
||||||
{
|
{
|
||||||
String t=tok.nextToken().trim();
|
String t=tok.nextToken().trim();
|
||||||
String tl=t.toLowerCase();
|
String tl=t.toLowerCase(Locale.ENGLISH);
|
||||||
if(t.startsWith("form-data"))
|
if(t.startsWith("form-data"))
|
||||||
form_data=true;
|
form_data=true;
|
||||||
else if(tl.startsWith("name="))
|
else if(tl.startsWith("name="))
|
||||||
|
|
|
@ -27,6 +27,7 @@ import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
@ -221,7 +222,7 @@ public class RolloverFileOutputStream extends FilterOutputStream
|
||||||
|
|
||||||
// Is this a rollover file?
|
// Is this a rollover file?
|
||||||
String filename=file.getName();
|
String filename=file.getName();
|
||||||
int i=filename.toLowerCase().indexOf(YYYY_MM_DD);
|
int i=filename.toLowerCase(Locale.ENGLISH).indexOf(YYYY_MM_DD);
|
||||||
if (i>=0)
|
if (i>=0)
|
||||||
{
|
{
|
||||||
file=new File(dir,
|
file=new File(dir,
|
||||||
|
@ -258,7 +259,7 @@ public class RolloverFileOutputStream extends FilterOutputStream
|
||||||
File file= new File(_filename);
|
File file= new File(_filename);
|
||||||
File dir = new File(file.getParent());
|
File dir = new File(file.getParent());
|
||||||
String fn=file.getName();
|
String fn=file.getName();
|
||||||
int s=fn.toLowerCase().indexOf(YYYY_MM_DD);
|
int s=fn.toLowerCase(Locale.ENGLISH).indexOf(YYYY_MM_DD);
|
||||||
if (s<0)
|
if (s<0)
|
||||||
return;
|
return;
|
||||||
String prefix=fn.substring(0,s);
|
String prefix=fn.substring(0,s);
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.io.InputStream;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarInputStream;
|
import java.util.jar.JarInputStream;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -144,7 +145,7 @@ public abstract class JarScanner extends org.eclipse.jetty.util.PatternMatcher
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
LOG.debug("Search of {}",uri);
|
LOG.debug("Search of {}",uri);
|
||||||
if (uri.toString().toLowerCase().endsWith(".jar"))
|
if (uri.toString().toLowerCase(Locale.ENGLISH).endsWith(".jar"))
|
||||||
{
|
{
|
||||||
|
|
||||||
InputStream in = Resource.newResource(uri).getInputStream();
|
InputStream in = Resource.newResource(uri).getInputStream();
|
||||||
|
|
|
@ -22,6 +22,7 @@ package org.eclipse.jetty.webapp;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
|
@ -136,7 +137,7 @@ public class MetaInfConfiguration extends AbstractConfiguration
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String lcname = name.toLowerCase();
|
String lcname = name.toLowerCase(Locale.ENGLISH);
|
||||||
if (lcname.endsWith(".tld"))
|
if (lcname.endsWith(".tld"))
|
||||||
{
|
{
|
||||||
addResource(context,METAINF_TLDS,Resource.newResource("jar:"+jarUri+"!/"+name));
|
addResource(context,METAINF_TLDS,Resource.newResource("jar:"+jarUri+"!/"+name));
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.EventListener;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.servlet.DispatcherType;
|
import javax.servlet.DispatcherType;
|
||||||
|
@ -324,7 +325,7 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
|
||||||
XmlParser.Node startup = node.get("load-on-startup");
|
XmlParser.Node startup = node.get("load-on-startup");
|
||||||
if (startup != null)
|
if (startup != null)
|
||||||
{
|
{
|
||||||
String s = startup.toString(false, true).toLowerCase();
|
String s = startup.toString(false, true).toLowerCase(Locale.ENGLISH);
|
||||||
int order = 0;
|
int order = 0;
|
||||||
if (s.startsWith("t"))
|
if (s.startsWith("t"))
|
||||||
{
|
{
|
||||||
|
@ -1387,7 +1388,7 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor
|
||||||
if (data != null)
|
if (data != null)
|
||||||
{
|
{
|
||||||
data = data.get("transport-guarantee");
|
data = data.get("transport-guarantee");
|
||||||
String guarantee = data.toString(false, true).toUpperCase();
|
String guarantee = data.toString(false, true).toUpperCase(Locale.ENGLISH);
|
||||||
if (guarantee == null || guarantee.length() == 0 || "NONE".equals(guarantee))
|
if (guarantee == null || guarantee.length() == 0 || "NONE".equals(guarantee))
|
||||||
scBase.setDataConstraint(Constraint.DC_NONE);
|
scBase.setDataConstraint(Constraint.DC_NONE);
|
||||||
else if ("INTEGRAL".equals(guarantee))
|
else if ("INTEGRAL".equals(guarantee))
|
||||||
|
|
|
@ -28,6 +28,7 @@ import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.servlet.Servlet;
|
import javax.servlet.Servlet;
|
||||||
|
@ -216,7 +217,7 @@ public class TagLibConfiguration extends AbstractConfiguration
|
||||||
while(iter.hasNext())
|
while(iter.hasNext())
|
||||||
{
|
{
|
||||||
String location = iter.next();
|
String location = iter.next();
|
||||||
if (location!=null && location.toLowerCase().endsWith(".tld"))
|
if (location!=null && location.toLowerCase(Locale.ENGLISH).endsWith(".tld"))
|
||||||
{
|
{
|
||||||
if (!location.startsWith("/"))
|
if (!location.startsWith("/"))
|
||||||
location="/WEB-INF/"+location;
|
location="/WEB-INF/"+location;
|
||||||
|
@ -233,7 +234,7 @@ public class TagLibConfiguration extends AbstractConfiguration
|
||||||
String[] contents = web_inf.list();
|
String[] contents = web_inf.list();
|
||||||
for (int i=0;contents!=null && i<contents.length;i++)
|
for (int i=0;contents!=null && i<contents.length;i++)
|
||||||
{
|
{
|
||||||
if (contents[i]!=null && contents[i].toLowerCase().endsWith(".tld"))
|
if (contents[i]!=null && contents[i].toLowerCase(Locale.ENGLISH).endsWith(".tld"))
|
||||||
{
|
{
|
||||||
Resource l=web_inf.addPath(contents[i]);
|
Resource l=web_inf.addPath(contents[i]);
|
||||||
tlds.add(l);
|
tlds.add(l);
|
||||||
|
@ -248,7 +249,7 @@ public class TagLibConfiguration extends AbstractConfiguration
|
||||||
String[] contents = web_inf_tlds.list();
|
String[] contents = web_inf_tlds.list();
|
||||||
for (int i=0;contents!=null && i<contents.length;i++)
|
for (int i=0;contents!=null && i<contents.length;i++)
|
||||||
{
|
{
|
||||||
if (contents[i]!=null && contents[i].toLowerCase().endsWith(".tld"))
|
if (contents[i]!=null && contents[i].toLowerCase(Locale.ENGLISH).endsWith(".tld"))
|
||||||
{
|
{
|
||||||
Resource l=web_inf_tlds.addPath(contents[i]);
|
Resource l=web_inf_tlds.addPath(contents[i]);
|
||||||
tlds.add(l);
|
tlds.add(l);
|
||||||
|
|
|
@ -29,6 +29,7 @@ import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
@ -271,7 +272,7 @@ public class WebAppClassLoader extends URLClassLoader
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Resource fn=lib.addPath(files[f]);
|
Resource fn=lib.addPath(files[f]);
|
||||||
String fnlc=fn.getName().toLowerCase();
|
String fnlc=fn.getName().toLowerCase(Locale.ENGLISH);
|
||||||
// don't check if this is a directory, see Bug 353165
|
// don't check if this is a directory, see Bug 353165
|
||||||
if (isFileSupported(fnlc))
|
if (isFileSupported(fnlc))
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.eclipse.jetty.server.Connector;
|
import org.eclipse.jetty.server.Connector;
|
||||||
|
@ -443,7 +444,7 @@ public class WebInfConfiguration extends AbstractConfiguration
|
||||||
{
|
{
|
||||||
// look for a sibling like "foo/" to a "foo.war"
|
// look for a sibling like "foo/" to a "foo.war"
|
||||||
File warfile=Resource.newResource(war).getFile();
|
File warfile=Resource.newResource(war).getFile();
|
||||||
if (warfile!=null && warfile.getName().toLowerCase().endsWith(".war"))
|
if (warfile!=null && warfile.getName().toLowerCase(Locale.ENGLISH).endsWith(".war"))
|
||||||
{
|
{
|
||||||
File sibling = new File(warfile.getParent(),warfile.getName().substring(0,warfile.getName().length()-4));
|
File sibling = new File(warfile.getParent(),warfile.getName().substring(0,warfile.getName().length()-4));
|
||||||
if (sibling.exists() && sibling.isDirectory() && sibling.canWrite())
|
if (sibling.exists() && sibling.isDirectory() && sibling.canWrite())
|
||||||
|
@ -716,7 +717,7 @@ public class WebInfConfiguration extends AbstractConfiguration
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Resource file = web_inf_lib.addPath(files[f]);
|
Resource file = web_inf_lib.addPath(files[f]);
|
||||||
String fnlc = file.getName().toLowerCase();
|
String fnlc = file.getName().toLowerCase(Locale.ENGLISH);
|
||||||
int dot = fnlc.lastIndexOf('.');
|
int dot = fnlc.lastIndexOf('.');
|
||||||
String extension = (dot < 0 ? null : fnlc.substring(dot));
|
String extension = (dot < 0 ? null : fnlc.substring(dot));
|
||||||
if (extension != null && (extension.equals(".jar") || extension.equals(".zip")))
|
if (extension != null && (extension.equals(".jar") || extension.equals(".zip")))
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd.
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// All rights reserved. This program and the accompanying materials
|
||||||
|
// are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
// and Apache License v2.0 which accompanies this distribution.
|
||||||
|
//
|
||||||
|
// The Eclipse Public License is available at
|
||||||
|
// http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
//
|
||||||
|
// The Apache License v2.0 is available at
|
||||||
|
// http://www.opensource.org/licenses/apache2.0.php
|
||||||
|
//
|
||||||
|
// You may elect to redistribute this code under either of these licenses.
|
||||||
|
// ========================================================================
|
||||||
|
//
|
||||||
|
|
||||||
|
package org.eclipse.jetty.websocket;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.thread.QueuedThreadPool;
|
||||||
|
import org.eclipse.jetty.websocket.dummy.DummyServer;
|
||||||
|
import org.eclipse.jetty.websocket.dummy.DummyServer.ServerConnection;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class TomcatServerQuirksTest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Test for when encountering a "Transfer-Encoding: chunked" on a Upgrade Response header.
|
||||||
|
* <ul>
|
||||||
|
* <li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=393075">Eclipse Jetty Bug #393075</a></li>
|
||||||
|
* <li><a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=54067">Apache Tomcat Bug #54067</a></li>
|
||||||
|
* </ul>
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@Ignore("Bug with Transfer-Encoding")
|
||||||
|
public void testTomcat7_0_32_WithTransferEncoding() throws Exception {
|
||||||
|
DummyServer server = new DummyServer();
|
||||||
|
int bufferSize = 512;
|
||||||
|
QueuedThreadPool threadPool = new QueuedThreadPool();
|
||||||
|
WebSocketClientFactory factory = new WebSocketClientFactory(threadPool, new ZeroMaskGen(), bufferSize);
|
||||||
|
|
||||||
|
try {
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
// Setup Client Factory
|
||||||
|
threadPool.start();
|
||||||
|
factory.start();
|
||||||
|
|
||||||
|
// Create Client
|
||||||
|
WebSocketClient client = new WebSocketClient(factory);
|
||||||
|
|
||||||
|
// Create End User WebSocket Class
|
||||||
|
final CountDownLatch openLatch = new CountDownLatch(1);
|
||||||
|
final CountDownLatch dataLatch = new CountDownLatch(1);
|
||||||
|
WebSocket.OnTextMessage websocket = new WebSocket.OnTextMessage()
|
||||||
|
{
|
||||||
|
public void onOpen(Connection connection)
|
||||||
|
{
|
||||||
|
openLatch.countDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onMessage(String data)
|
||||||
|
{
|
||||||
|
// System.out.println("data = " + data);
|
||||||
|
dataLatch.countDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onClose(int closeCode, String message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Open connection
|
||||||
|
URI wsURI = server.getWsUri();
|
||||||
|
client.open(wsURI, websocket);
|
||||||
|
|
||||||
|
// Accept incoming connection
|
||||||
|
ServerConnection socket = server.accept();
|
||||||
|
socket.setSoTimeout(2000); // timeout
|
||||||
|
|
||||||
|
// Issue upgrade
|
||||||
|
Map<String,String> extraResponseHeaders = new HashMap<String, String>();
|
||||||
|
extraResponseHeaders.put("Transfer-Encoding", "chunked"); // !! The problem !!
|
||||||
|
socket.upgrade(extraResponseHeaders);
|
||||||
|
|
||||||
|
// Wait for proper upgrade
|
||||||
|
Assert.assertTrue("Timed out waiting for Client side WebSocket open event", openLatch.await(1, TimeUnit.SECONDS));
|
||||||
|
|
||||||
|
// Have server write frame.
|
||||||
|
int length = bufferSize / 2;
|
||||||
|
ByteBuffer serverFrame = ByteBuffer.allocate(bufferSize);
|
||||||
|
serverFrame.put((byte)(0x80 | 0x01)); // FIN + TEXT
|
||||||
|
serverFrame.put((byte)0x7E); // No MASK and 2 bytes length
|
||||||
|
serverFrame.put((byte)(length >> 8)); // first length byte
|
||||||
|
serverFrame.put((byte)(length & 0xFF)); // second length byte
|
||||||
|
for (int i = 0; i < length; ++i)
|
||||||
|
serverFrame.put((byte)'x');
|
||||||
|
serverFrame.flip();
|
||||||
|
byte buf[] = serverFrame.array();
|
||||||
|
socket.write(buf,0,buf.length);
|
||||||
|
socket.flush();
|
||||||
|
|
||||||
|
Assert.assertTrue(dataLatch.await(1000, TimeUnit.SECONDS));
|
||||||
|
} finally {
|
||||||
|
factory.stop();
|
||||||
|
threadPool.stop();
|
||||||
|
server.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,308 @@
|
||||||
|
//
|
||||||
|
// ========================================================================
|
||||||
|
// Copyright (c) 1995-2012 Mort Bay Consulting Pty. Ltd.
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// All rights reserved. This program and the accompanying materials
|
||||||
|
// are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
// and Apache License v2.0 which accompanies this distribution.
|
||||||
|
//
|
||||||
|
// The Eclipse Public License is available at
|
||||||
|
// http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
//
|
||||||
|
// The Apache License v2.0 is available at
|
||||||
|
// http://www.opensource.org/licenses/apache2.0.php
|
||||||
|
//
|
||||||
|
// You may elect to redistribute this code under either of these licenses.
|
||||||
|
// ========================================================================
|
||||||
|
//
|
||||||
|
package org.eclipse.jetty.websocket.dummy;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.*;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.net.SocketException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.eclipse.jetty.util.IO;
|
||||||
|
import org.eclipse.jetty.util.log.Log;
|
||||||
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
import org.eclipse.jetty.websocket.WebSocketConnectionRFC6455;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple ServerSocket server used to test oddball server scenarios encountered in the real world.
|
||||||
|
*/
|
||||||
|
public class DummyServer
|
||||||
|
{
|
||||||
|
public static class ServerConnection
|
||||||
|
{
|
||||||
|
private static final Logger LOG = Log.getLogger(ServerConnection.class);
|
||||||
|
private final Socket socket;
|
||||||
|
private InputStream in;
|
||||||
|
private OutputStream out;
|
||||||
|
|
||||||
|
public ServerConnection(Socket socket)
|
||||||
|
{
|
||||||
|
this.socket = socket;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int read(ByteBuffer buf) throws IOException
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
while ((in.available() > 0) && (buf.remaining() > 0))
|
||||||
|
{
|
||||||
|
buf.put((byte)in.read());
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disconnect()
|
||||||
|
{
|
||||||
|
LOG.debug("disconnect");
|
||||||
|
IO.close(in);
|
||||||
|
IO.close(out);
|
||||||
|
if (socket != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
socket.close();
|
||||||
|
}
|
||||||
|
catch (IOException ignore)
|
||||||
|
{
|
||||||
|
/* ignore */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputStream getInputStream() throws IOException
|
||||||
|
{
|
||||||
|
if (in == null)
|
||||||
|
{
|
||||||
|
in = socket.getInputStream();
|
||||||
|
}
|
||||||
|
return in;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OutputStream getOutputStream() throws IOException
|
||||||
|
{
|
||||||
|
if (out == null)
|
||||||
|
{
|
||||||
|
out = socket.getOutputStream();
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void flush() throws IOException
|
||||||
|
{
|
||||||
|
LOG.debug("flush()");
|
||||||
|
getOutputStream().flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String readRequest() throws IOException
|
||||||
|
{
|
||||||
|
LOG.debug("Reading client request");
|
||||||
|
StringBuilder request = new StringBuilder();
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(getInputStream()));
|
||||||
|
for (String line = in.readLine(); line != null; line = in.readLine())
|
||||||
|
{
|
||||||
|
if (line.length() == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
request.append(line).append("\r\n");
|
||||||
|
LOG.debug("read line: {}",line);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("Client Request:{}{}","\n",request);
|
||||||
|
return request.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void respond(String rawstr) throws IOException
|
||||||
|
{
|
||||||
|
LOG.debug("respond(){}{}","\n",rawstr);
|
||||||
|
getOutputStream().write(rawstr.getBytes());
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSoTimeout(int ms) throws SocketException
|
||||||
|
{
|
||||||
|
socket.setSoTimeout(ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void upgrade(Map<String, String> extraResponseHeaders) throws IOException
|
||||||
|
{
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
Pattern patExts = Pattern.compile("^Sec-WebSocket-Extensions: (.*)$",Pattern.CASE_INSENSITIVE);
|
||||||
|
Pattern patKey = Pattern.compile("^Sec-WebSocket-Key: (.*)$",Pattern.CASE_INSENSITIVE);
|
||||||
|
|
||||||
|
LOG.debug("(Upgrade) Reading HTTP Request");
|
||||||
|
Matcher mat;
|
||||||
|
String key = "not sent";
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(getInputStream()));
|
||||||
|
for (String line = in.readLine(); line != null; line = in.readLine())
|
||||||
|
{
|
||||||
|
if (line.length() == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Check for extensions
|
||||||
|
// mat = patExts.matcher(line);
|
||||||
|
// if (mat.matches())
|
||||||
|
|
||||||
|
// Check for Key
|
||||||
|
mat = patKey.matcher(line);
|
||||||
|
if (mat.matches())
|
||||||
|
{
|
||||||
|
key = mat.group(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.debug("(Upgrade) Writing HTTP Response");
|
||||||
|
// TODO: handle extensions?
|
||||||
|
|
||||||
|
// Setup Response
|
||||||
|
StringBuilder resp = new StringBuilder();
|
||||||
|
resp.append("HTTP/1.1 101 Upgrade\r\n");
|
||||||
|
resp.append("Upgrade: websocket\r\n");
|
||||||
|
resp.append("Connection: upgrade\r\n");
|
||||||
|
resp.append("Sec-WebSocket-Accept: ");
|
||||||
|
resp.append(WebSocketConnectionRFC6455.hashKey(key)).append("\r\n");
|
||||||
|
// extra response headers.
|
||||||
|
if (extraResponseHeaders != null)
|
||||||
|
{
|
||||||
|
for (Map.Entry<String,String> header : extraResponseHeaders.entrySet())
|
||||||
|
{
|
||||||
|
resp.append(header.getKey());
|
||||||
|
resp.append(": ");
|
||||||
|
resp.append(header.getValue());
|
||||||
|
resp.append("\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resp.append("\r\n");
|
||||||
|
|
||||||
|
// Write Response
|
||||||
|
getOutputStream().write(resp.toString().getBytes());
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(byte[] bytes) throws IOException
|
||||||
|
{
|
||||||
|
LOG.debug("Writing {} bytes", bytes.length);
|
||||||
|
getOutputStream().write(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(byte[] buf, int offset, int length) throws IOException
|
||||||
|
{
|
||||||
|
LOG.debug("Writing bytes[{}], offset={}, length={}", buf.length, offset, length);
|
||||||
|
getOutputStream().write(buf,offset,length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void write(int b) throws IOException
|
||||||
|
{
|
||||||
|
LOG.debug("Writing int={}", b);
|
||||||
|
getOutputStream().write(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Logger LOG = Log.getLogger(DummyServer.class);
|
||||||
|
private ServerSocket serverSocket;
|
||||||
|
private URI wsUri;
|
||||||
|
|
||||||
|
public ServerConnection accept() throws IOException
|
||||||
|
{
|
||||||
|
LOG.debug(".accept()");
|
||||||
|
assertIsStarted();
|
||||||
|
Socket socket = serverSocket.accept();
|
||||||
|
return new ServerConnection(socket);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertIsStarted()
|
||||||
|
{
|
||||||
|
Assert.assertThat("ServerSocket",serverSocket,notNullValue());
|
||||||
|
Assert.assertThat("ServerSocket.isBound",serverSocket.isBound(),is(true));
|
||||||
|
Assert.assertThat("ServerSocket.isClosed",serverSocket.isClosed(),is(false));
|
||||||
|
|
||||||
|
Assert.assertThat("WsUri",wsUri,notNullValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
public URI getWsUri()
|
||||||
|
{
|
||||||
|
return wsUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void respondToClient(Socket connection, String serverResponse) throws IOException
|
||||||
|
{
|
||||||
|
InputStream in = null;
|
||||||
|
InputStreamReader isr = null;
|
||||||
|
BufferedReader buf = null;
|
||||||
|
OutputStream out = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
in = connection.getInputStream();
|
||||||
|
isr = new InputStreamReader(in);
|
||||||
|
buf = new BufferedReader(isr);
|
||||||
|
String line;
|
||||||
|
while ((line = buf.readLine()) != null)
|
||||||
|
{
|
||||||
|
// System.err.println(line);
|
||||||
|
if (line.length() == 0)
|
||||||
|
{
|
||||||
|
// Got the "\r\n" line.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// System.out.println("[Server-Out] " + serverResponse);
|
||||||
|
out = connection.getOutputStream();
|
||||||
|
out.write(serverResponse.getBytes());
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
IO.close(buf);
|
||||||
|
IO.close(isr);
|
||||||
|
IO.close(in);
|
||||||
|
IO.close(out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() throws IOException
|
||||||
|
{
|
||||||
|
serverSocket = new ServerSocket();
|
||||||
|
InetAddress addr = InetAddress.getByName("localhost");
|
||||||
|
InetSocketAddress endpoint = new InetSocketAddress(addr,0);
|
||||||
|
serverSocket.bind(endpoint);
|
||||||
|
int port = serverSocket.getLocalPort();
|
||||||
|
String uri = String.format("ws://%s:%d/",addr.getHostAddress(),port);
|
||||||
|
wsUri = URI.create(uri);
|
||||||
|
LOG.debug("Server Started on {} -> {}",endpoint,wsUri);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop()
|
||||||
|
{
|
||||||
|
LOG.debug("Stopping Server");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
serverSocket.close();
|
||||||
|
}
|
||||||
|
catch (IOException ignore)
|
||||||
|
{
|
||||||
|
/* ignore */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
# Setup default logging implementation for during testing
|
||||||
|
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
|
||||||
|
org.eclipse.jetty.LEVEL=INFO
|
||||||
|
org.eclipse.jetty.websocket.LEVEL=DEBUG
|
|
@ -23,6 +23,7 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -188,7 +189,7 @@ public class ClientUpgradeRequest implements UpgradeRequest
|
||||||
for (String key : headers.keySet())
|
for (String key : headers.keySet())
|
||||||
{
|
{
|
||||||
String value = headers.get(key);
|
String value = headers.get(key);
|
||||||
if (FORBIDDEN_HEADERS.contains(key.toLowerCase()))
|
if (FORBIDDEN_HEADERS.contains(key.toLowerCase(Locale.ENGLISH)))
|
||||||
{
|
{
|
||||||
LOG.warn("Skipping forbidden header - {}: {}",key,value);
|
LOG.warn("Skipping forbidden header - {}: {}",key,value);
|
||||||
continue; // skip
|
continue; // skip
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.MultiMap;
|
import org.eclipse.jetty.util.MultiMap;
|
||||||
|
@ -47,7 +48,7 @@ public class ClientUpgradeResponse implements UpgradeResponse
|
||||||
@Override
|
@Override
|
||||||
public void addHeader(String name, String value)
|
public void addHeader(String name, String value)
|
||||||
{
|
{
|
||||||
headers.add(name.toLowerCase(),value);
|
headers.add(name.toLowerCase(Locale.ENGLISH),value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -71,13 +72,13 @@ public class ClientUpgradeResponse implements UpgradeResponse
|
||||||
@Override
|
@Override
|
||||||
public String getHeaderValue(String name)
|
public String getHeaderValue(String name)
|
||||||
{
|
{
|
||||||
return headers.getValue(name.toLowerCase(),0);
|
return headers.getValue(name.toLowerCase(Locale.ENGLISH),0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<String> getHeaderValues(String name)
|
public Iterator<String> getHeaderValues(String name)
|
||||||
{
|
{
|
||||||
List<String> values = headers.getValues(name.toLowerCase());
|
List<String> values = headers.getValues(name.toLowerCase(Locale.ENGLISH));
|
||||||
if (values == null)
|
if (values == null)
|
||||||
{
|
{
|
||||||
return Collections.emptyIterator();
|
return Collections.emptyIterator();
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.net.URI;
|
||||||
import java.nio.channels.SocketChannel;
|
import java.nio.channels.SocketChannel;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
@ -57,7 +58,7 @@ public class ConnectionManager extends ContainerLifeCycle
|
||||||
}
|
}
|
||||||
|
|
||||||
int port = uri.getPort();
|
int port = uri.getPort();
|
||||||
String scheme = uri.getScheme().toLowerCase();
|
String scheme = uri.getScheme().toLowerCase(Locale.ENGLISH);
|
||||||
if ("ws".equals(scheme))
|
if ("ws".equals(scheme))
|
||||||
{
|
{
|
||||||
if (port == (-1))
|
if (port == (-1))
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.eclipse.jetty.websocket.client.internal;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.FutureCallback;
|
import org.eclipse.jetty.util.FutureCallback;
|
||||||
import org.eclipse.jetty.util.StringUtil;
|
import org.eclipse.jetty.util.StringUtil;
|
||||||
|
@ -99,7 +100,7 @@ public class DefaultWebSocketClient extends FutureCallback<UpgradeResponse> impl
|
||||||
throw new IllegalArgumentException("WebSocket URI must include a scheme");
|
throw new IllegalArgumentException("WebSocket URI must include a scheme");
|
||||||
}
|
}
|
||||||
|
|
||||||
String scheme = websocketUri.getScheme().toLowerCase();
|
String scheme = websocketUri.getScheme().toLowerCase(Locale.ENGLISH);
|
||||||
if (("ws".equals(scheme) == false) && ("wss".equals(scheme) == false))
|
if (("ws".equals(scheme) == false) && ("wss".equals(scheme) == false))
|
||||||
{
|
{
|
||||||
throw new IllegalArgumentException("WebSocket URI scheme only supports [ws] and [wss], not [" + scheme + "]");
|
throw new IllegalArgumentException("WebSocket URI scheme only supports [ws] and [wss], not [" + scheme + "]");
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.BufferUtil;
|
import org.eclipse.jetty.util.BufferUtil;
|
||||||
import org.eclipse.jetty.util.TypeUtil;
|
import org.eclipse.jetty.util.TypeUtil;
|
||||||
|
@ -90,7 +91,7 @@ public class MuxGeneratorWrite139SizeTest
|
||||||
generator.write139Size(bbuf,value);
|
generator.write139Size(bbuf,value);
|
||||||
BufferUtil.flipToFlush(bbuf,0);
|
BufferUtil.flipToFlush(bbuf,0);
|
||||||
byte actual[] = BufferUtil.toArray(bbuf);
|
byte actual[] = BufferUtil.toArray(bbuf);
|
||||||
String actualHex = TypeUtil.toHexString(actual).toUpperCase();
|
String actualHex = TypeUtil.toHexString(actual).toUpperCase(Locale.ENGLISH);
|
||||||
Assert.assertThat("1/3/9 encoded size of [" + value + "]",actualHex,is(expectedHex));
|
Assert.assertThat("1/3/9 encoded size of [" + value + "]",actualHex,is(expectedHex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.BufferUtil;
|
import org.eclipse.jetty.util.BufferUtil;
|
||||||
import org.eclipse.jetty.util.TypeUtil;
|
import org.eclipse.jetty.util.TypeUtil;
|
||||||
|
@ -94,7 +95,7 @@ public class MuxGeneratorWriteChannelIdTest
|
||||||
generator.writeChannelId(bbuf,channelId);
|
generator.writeChannelId(bbuf,channelId);
|
||||||
BufferUtil.flipToFlush(bbuf,0);
|
BufferUtil.flipToFlush(bbuf,0);
|
||||||
byte actual[] = BufferUtil.toArray(bbuf);
|
byte actual[] = BufferUtil.toArray(bbuf);
|
||||||
String actualHex = TypeUtil.toHexString(actual).toUpperCase();
|
String actualHex = TypeUtil.toHexString(actual).toUpperCase(Locale.ENGLISH);
|
||||||
Assert.assertThat("Channel ID [" + channelId + "]",actualHex,is(expectedHex));
|
Assert.assertThat("Channel ID [" + channelId + "]",actualHex,is(expectedHex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.BufferUtil;
|
import org.eclipse.jetty.util.BufferUtil;
|
||||||
import org.eclipse.jetty.util.Callback;
|
import org.eclipse.jetty.util.Callback;
|
||||||
|
@ -49,8 +50,8 @@ public class OutgoingNetworkBytesCapture implements OutgoingFrames
|
||||||
{
|
{
|
||||||
Assert.assertThat("Capture index does not exist",idx,lessThan(captured.size()));
|
Assert.assertThat("Capture index does not exist",idx,lessThan(captured.size()));
|
||||||
ByteBuffer buf = captured.get(idx);
|
ByteBuffer buf = captured.get(idx);
|
||||||
String actualHex = TypeUtil.toHexString(BufferUtil.toArray(buf)).toUpperCase();
|
String actualHex = TypeUtil.toHexString(BufferUtil.toArray(buf)).toUpperCase(Locale.ENGLISH);
|
||||||
Assert.assertThat("captured[" + idx + "]",actualHex,is(expectedHex.toUpperCase()));
|
Assert.assertThat("captured[" + idx + "]",actualHex,is(expectedHex.toUpperCase(Locale.ENGLISH)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ByteBuffer> getCaptured()
|
public List<ByteBuffer> getCaptured()
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.net.SocketException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
|
@ -280,7 +281,7 @@ public class Fuzzer
|
||||||
// early socket close can propagate back to the client
|
// early socket close can propagate back to the client
|
||||||
// before it has a chance to finish writing out the
|
// before it has a chance to finish writing out the
|
||||||
// remaining frame octets
|
// remaining frame octets
|
||||||
Assert.assertThat("Allowed to be a broken pipe",ignore.getMessage().toLowerCase(),containsString("broken pipe"));
|
Assert.assertThat("Allowed to be a broken pipe",ignore.getMessage().toLowerCase(Locale.ENGLISH),containsString("broken pipe"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.io.IOException;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jetty.util.FutureCallback;
|
import org.eclipse.jetty.util.FutureCallback;
|
||||||
import org.eclipse.jetty.util.StringUtil;
|
import org.eclipse.jetty.util.StringUtil;
|
||||||
|
@ -68,7 +69,7 @@ public class BrowserSocket
|
||||||
int idx = message.indexOf(':');
|
int idx = message.indexOf(':');
|
||||||
if (idx > 0)
|
if (idx > 0)
|
||||||
{
|
{
|
||||||
String key = message.substring(0,idx).toLowerCase();
|
String key = message.substring(0,idx).toLowerCase(Locale.ENGLISH);
|
||||||
String val = message.substring(idx + 1);
|
String val = message.substring(idx + 1);
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,7 @@ import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
@ -420,7 +421,7 @@ public class XmlConfiguration
|
||||||
private void set(Object obj, XmlParser.Node node) throws Exception
|
private void set(Object obj, XmlParser.Node node) throws Exception
|
||||||
{
|
{
|
||||||
String attr = node.getAttribute("name");
|
String attr = node.getAttribute("name");
|
||||||
String name = "set" + attr.substring(0,1).toUpperCase() + attr.substring(1);
|
String name = "set" + attr.substring(0,1).toUpperCase(Locale.ENGLISH) + attr.substring(1);
|
||||||
Object value = value(obj,node);
|
Object value = value(obj,node);
|
||||||
Object[] arg =
|
Object[] arg =
|
||||||
{ value };
|
{ value };
|
||||||
|
@ -623,7 +624,7 @@ public class XmlConfiguration
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// try calling a getXxx method.
|
// try calling a getXxx method.
|
||||||
Method method = oClass.getMethod("get" + name.substring(0,1).toUpperCase() + name.substring(1),(java.lang.Class[])null);
|
Method method = oClass.getMethod("get" + name.substring(0,1).toUpperCase(Locale.ENGLISH) + name.substring(1),(java.lang.Class[])null);
|
||||||
obj = method.invoke(obj,(java.lang.Object[])null);
|
obj = method.invoke(obj,(java.lang.Object[])null);
|
||||||
configure(obj,node,0);
|
configure(obj,node,0);
|
||||||
}
|
}
|
||||||
|
@ -1172,7 +1173,7 @@ public class XmlConfiguration
|
||||||
Object[] obj = new Object[args.length];
|
Object[] obj = new Object[args.length];
|
||||||
for (int i = 0; i < args.length; i++)
|
for (int i = 0; i < args.length; i++)
|
||||||
{
|
{
|
||||||
if (args[i].toLowerCase().endsWith(".properties"))
|
if (args[i].toLowerCase(Locale.ENGLISH).endsWith(".properties"))
|
||||||
{
|
{
|
||||||
properties.load(Resource.newResource(args[i]).getInputStream());
|
properties.load(Resource.newResource(args[i]).getInputStream());
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@ public class Dump extends HttpServlet
|
||||||
final boolean flush= request.getParameter("flush")!=null?Boolean.parseBoolean(request.getParameter("flush")):false;
|
final boolean flush= request.getParameter("flush")!=null?Boolean.parseBoolean(request.getParameter("flush")):false;
|
||||||
|
|
||||||
|
|
||||||
if(request.getPathInfo()!=null && request.getPathInfo().toLowerCase().indexOf("script")!=-1)
|
if(request.getPathInfo()!=null && request.getPathInfo().toLowerCase(Locale.ENGLISH).indexOf("script")!=-1)
|
||||||
{
|
{
|
||||||
response.sendRedirect(response.encodeRedirectURL(getServletContext().getContextPath() + "/dump/info"));
|
response.sendRedirect(response.encodeRedirectURL(getServletContext().getContextPath() + "/dump/info"));
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue