Merge branch 'master' of ssh://git.eclipse.org/gitroot/jetty/org.eclipse.jetty.project

This commit is contained in:
Jan Bartel 2012-05-23 09:57:57 +02:00
commit 98ed2a9d9a
83 changed files with 387 additions and 178 deletions

View File

@ -1,4 +1,33 @@
jetty-7.6.4-SNAPSHOT jetty-7.6.5-SNAPSHOT
jetty-7.6.4.v20120522 - 22 May 2012
+ 367608 ignore the aysncrequestreadtest as it is known to fail and is waiting
for a fix
+ 371853 Support bundleentry: protocol for webapp embedded as directory in
osgi bundle
+ 373620 Add ch.qos.logback.access.jetty to the Import-Package for
jetty-osgi-boot-logback bundle
+ 376152 apply context resources recursively
+ 376801 Make JAAS login modules useable without jetty infrastructure
+ 377391 Manifest updates to jetty-osgi-boot-logback
+ 377492 NPE when deploying a Web Application Bundle with unresolved
Require-TldBundle
+ 377550 set charset when content type is set
+ 377587 ConnectHandler write will block on partial write
+ 377610 New session not timed out if an old session is invalidated in scope
of same request
+ 377709 Support for RequestParameterCallback missing
+ 378242 Re-extract war on restart if incomplete extraction
+ 378273 Remove default Bundle-Localization header
+ 378487 Null out contextPath on Request.recycle
+ 379015 Use factored jetty xml config files for defaults
+ 379089 DefaultServlet ignores its resourceBase and uses context's
ResourceCollection when listing diretories
+ 379194 ProxyServlet enhancement to enable easy creation of alternative
HttpClient implementations
+ 380034 last modified times taken from JarEntry for JarFile resources
+ 380212 Clear buffer if parsing fails due to full buffer
+ 380222 JettyPolicyRuntimeTest failure
jetty-7.6.3.v20120416 - 16 April 2012 jetty-7.6.3.v20120416 - 16 April 2012
+ 367172 Remove detection for slf4j NOPLogger + 367172 Remove detection for slf4j NOPLogger

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>example-jetty-embedded</artifactId> <artifactId>example-jetty-embedded</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-all-server</artifactId> <artifactId>jetty-all-server</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-all</artifactId> <artifactId>jetty-all</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-client</artifactId> <artifactId>jetty-client</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-plus</artifactId> <artifactId>jetty-plus</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-server</artifactId> <artifactId>jetty-server</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-servlet</artifactId> <artifactId>jetty-servlet</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-webapp</artifactId> <artifactId>jetty-webapp</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-websocket</artifactId> <artifactId>jetty-websocket</artifactId>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<groupId>org.eclipse.jetty.aggregate</groupId> <groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-aggregate-project</artifactId> <artifactId>jetty-aggregate-project</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-ajp</artifactId> <artifactId>jetty-ajp</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-annotations</artifactId> <artifactId>jetty-annotations</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-continuation</artifactId> <artifactId>jetty-continuation</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-deploy</artifactId> <artifactId>jetty-deploy</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>jetty-distribution</artifactId> <artifactId>jetty-distribution</artifactId>
<name>Jetty :: Distribution Assemblies</name> <name>Jetty :: Distribution Assemblies</name>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-http-spi</artifactId> <artifactId>jetty-http-spi</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-http</artifactId> <artifactId>jetty-http</artifactId>

View File

@ -1020,7 +1020,8 @@ public class HttpParser implements Parser
// Are we full? // Are we full?
if (_buffer.space() == 0) if (_buffer.space() == 0)
{ {
LOG.warn("Full {}",_buffer.toDetailString()); LOG.warn("HttpParser Full for {} ",_endp);
_buffer.clear();
throw new HttpException(HttpStatus.REQUEST_ENTITY_TOO_LARGE_413, "FULL "+(_buffer==_body?"body":"head")); throw new HttpException(HttpStatus.REQUEST_ENTITY_TOO_LARGE_413, "FULL "+(_buffer==_body?"body":"head"));
} }

View File

@ -260,7 +260,7 @@ public abstract class AbstractCompressedStream extends ServletOutputStream
public void doNotCompress() throws IOException public void doNotCompress() throws IOException
{ {
if (_compressedOutputStream != null) if (_compressedOutputStream != null)
throw new IllegalStateException(); throw new IllegalStateException("Compressed output stream is already assigned.");
if (_out == null || _bOut != null) if (_out == null || _bOut != null)
{ {
_doNotCompress = true; _doNotCompress = true;

View File

@ -124,7 +124,7 @@ public abstract class CompressedResponseWrapper extends HttpServletResponseWrapp
public void setStatus(int sc) public void setStatus(int sc)
{ {
super.setStatus(sc); super.setStatus(sc);
if (sc<200 || sc==204 || sc==205 ||sc>=300) if (sc<200 || sc==204 || sc==205 || sc>=300)
noCompression(); noCompression();
} }
@ -344,7 +344,7 @@ public abstract class CompressedResponseWrapper extends HttpServletResponseWrapp
else if (_writer!=null) else if (_writer!=null)
throw new IllegalStateException("getWriter() called"); throw new IllegalStateException("getWriter() called");
return (ServletOutputStream)_compressedStream; return _compressedStream;
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
@ -366,7 +366,7 @@ public abstract class CompressedResponseWrapper extends HttpServletResponseWrapp
} }
_compressedStream=newCompressedStream(_request,(HttpServletResponse)getResponse(),_contentLength,_bufferSize,_minCompressSize); _compressedStream=newCompressedStream(_request,(HttpServletResponse)getResponse(),_contentLength,_bufferSize,_minCompressSize);
_writer=newWriter((OutputStream)_compressedStream,getCharacterEncoding()); _writer=newWriter(_compressedStream,getCharacterEncoding());
} }
return _writer; return _writer;
} }

View File

@ -2,7 +2,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-io</artifactId> <artifactId>jetty-io</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jaspi</artifactId> <artifactId>jetty-jaspi</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jmx</artifactId> <artifactId>jetty-jmx</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jndi</artifactId> <artifactId>jetty-jndi</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-jsp</artifactId> <artifactId>jetty-jsp</artifactId>

View File

@ -19,7 +19,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-monitor</artifactId> <artifactId>jetty-monitor</artifactId>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>jetty-nested</artifactId> <artifactId>jetty-nested</artifactId>
<name>Jetty :: Nested</name> <name>Jetty :: Nested</name>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-nosql</artifactId> <artifactId>jetty-nosql</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@ -86,7 +86,7 @@
<instructions> <instructions>
<Bundle-SymbolicName>org.eclipse.jetty.osgi.boot.jsp</Bundle-SymbolicName> <Bundle-SymbolicName>org.eclipse.jetty.osgi.boot.jsp</Bundle-SymbolicName>
<Bundle-Name>Jetty-OSGi-Jasper Integration</Bundle-Name> <Bundle-Name>Jetty-OSGi-Jasper Integration</Bundle-Name>
<Bundle-Classpath></Bundle-Classpath> <Bundle-Classpath />
<Fragment-Host>org.eclipse.jetty.osgi.boot</Fragment-Host> <Fragment-Host>org.eclipse.jetty.osgi.boot</Fragment-Host>
<Export-Package>!org.eclipse.jetty.osgi.boot.*</Export-Package> <Export-Package>!org.eclipse.jetty.osgi.boot.*</Export-Package>
<Import-Package>com.sun.el;resolution:=optional, <Import-Package>com.sun.el;resolution:=optional,

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.osgi</groupId> <groupId>org.eclipse.jetty.osgi</groupId>
<artifactId>jetty-osgi-project</artifactId> <artifactId>jetty-osgi-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-overlay-deployer</artifactId> <artifactId>jetty-overlay-deployer</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-plus</artifactId> <artifactId>jetty-plus</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>jetty-policy</artifactId> <artifactId>jetty-policy</artifactId>
<name>Jetty :: Policy Tool</name> <name>Jetty :: Policy Tool</name>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-rewrite</artifactId> <artifactId>jetty-rewrite</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-security</artifactId> <artifactId>jetty-security</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-server</artifactId> <artifactId>jetty-server</artifactId>

View File

@ -37,6 +37,7 @@ import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.StringUtil;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
/** /**
@ -67,6 +68,7 @@ public class AsyncRequestReadTest
} }
@Test @Test
@Ignore
public void test() throws Exception public void test() throws Exception
{ {
final Socket socket = new Socket("localhost",connector.getLocalPort()); final Socket socket = new Socket("localhost",connector.getLocalPort());
@ -104,6 +106,7 @@ public class AsyncRequestReadTest
} }
@Test @Test
@Ignore
public void tests() throws Exception public void tests() throws Exception
{ {
runTest(64,4,4,20); runTest(64,4,4,20);

View File

@ -107,6 +107,36 @@ public abstract class HttpServerTestBase extends HttpServerTestFixture
/*
* Feed a full header method
*/
@Test
public void testFull() throws Exception
{
configureServer(new HelloWorldHandler());
Socket client=newSocket(HOST,_connector.getLocalPort());
try
{
OutputStream os=client.getOutputStream();
byte[] buffer = new byte[64*1024];
Arrays.fill(buffer,(byte)'A');
os.write(buffer);
os.flush();
// Read the response.
String response=readResponse(client);
Assert.assertTrue(response.contains("HTTP/1.1 413 FULL head"));
}
finally
{
client.close();
}
}
/* /*

View File

@ -14,6 +14,7 @@
package org.eclipse.jetty.server.ssl; package org.eclipse.jetty.server.ssl;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.net.Socket; import java.net.Socket;
import java.net.SocketException;
import java.security.KeyStore; import java.security.KeyStore;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
@ -82,4 +83,17 @@ public class SslSocketServerTest extends HttpServerTestBase
public void testAvailable() throws Exception public void testAvailable() throws Exception
{ {
} }
@Override
public void testFull() throws Exception
{
try
{
super.testFull();
}
catch(SocketException e)
{
// For SSL Sockets, the response is closed before the 400 is sent???
}
}
} }

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-servlet</artifactId> <artifactId>jetty-servlet</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-servlets</artifactId> <artifactId>jetty-servlets</artifactId>

View File

@ -67,17 +67,17 @@ import org.eclipse.jetty.util.log.Logger;
* <PRE> * <PRE>
* bufferSize The output buffer size. Defaults to 8192. Be careful as values <= 0 will lead to an * bufferSize The output buffer size. Defaults to 8192. Be careful as values <= 0 will lead to an
* {@link IllegalArgumentException}. * {@link IllegalArgumentException}.
* @see java.util.zip.GZIPOutputStream#GZIPOutputStream(java.io.OutputStream, int) * See: {@link java.util.zip.GZIPOutputStream#GZIPOutputStream(java.io.OutputStream, int)}
* @see java.util.zip.DeflaterOutputStream#DeflaterOutputStream(java.io.OutputStream, Deflater, int) * and: {@link java.util.zip.DeflaterOutputStream#DeflaterOutputStream(java.io.OutputStream, Deflater, int)}
* *
* minGzipSize Content will only be compressed if content length is either unknown or greater * minGzipSize Content will only be compressed if content length is either unknown or greater
* than <code>minGzipSize</code>. * than <code>minGzipSize</code>.
* *
* deflateCompressionLevel The compression level used for deflate compression. (0-9). * deflateCompressionLevel The compression level used for deflate compression. (0-9).
* @see java.util.zip.Deflater#Deflater(int, boolean) * See: {@link java.util.zip.Deflater#Deflater(int, boolean)}
* *
* deflateNoWrap The noWrap setting for deflate compression. Defaults to true. (true/false) * deflateNoWrap The noWrap setting for deflate compression. Defaults to true. (true/false)
* @see java.util.zip.Deflater#Deflater(int, boolean) * See: {@link java.util.zip.Deflater#Deflater(int, boolean)}
* *
* mimeTypes Comma separated list of mime types to compress. See description above. * mimeTypes Comma separated list of mime types to compress. See description above.
* *

View File

@ -173,6 +173,16 @@ public class ProxyServlet implements Servlet
return Log.getLogger("org.eclipse.jetty.servlets." + config.getServletName()); return Log.getLogger("org.eclipse.jetty.servlets." + config.getServletName());
} }
/**
* Create and return an HttpClientInstance
*
* @return HttpClient
*/
protected HttpClient createHttpClientInstance()
{
return new HttpClient();
}
/** /**
* Create and return an HttpClient based on ServletConfig * Create and return an HttpClient based on ServletConfig
* *
@ -185,7 +195,7 @@ public class ProxyServlet implements Servlet
*/ */
protected HttpClient createHttpClient(ServletConfig config) throws Exception protected HttpClient createHttpClient(ServletConfig config) throws Exception
{ {
HttpClient client = new HttpClient(); HttpClient client = createHttpClientInstance();
client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);
String t = config.getInitParameter("maxThreads"); String t = config.getInitParameter("maxThreads");

View File

@ -45,11 +45,8 @@ public class GzipFilterDefaultTest
this.compressionType = compressionType; this.compressionType = compressionType;
} }
public static class HttpStatusServlet extends HttpServlet public static class HttpStatusServlet extends HttpServlet
{ {
private static final long serialVersionUID = 1L;
private int _status = 204; private int _status = 204;
public HttpStatusServlet() public HttpStatusServlet()
@ -57,11 +54,6 @@ public class GzipFilterDefaultTest
super(); super();
} }
public void setStatus (int status)
{
_status = status;
}
@Override @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{ {
@ -69,6 +61,24 @@ public class GzipFilterDefaultTest
} }
} }
public static class HttpErrorServlet extends HttpServlet
{
private int _status = 400;
public HttpErrorServlet()
{
super();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
resp.getOutputStream().write("error message".getBytes());
resp.setStatus(_status);
}
}
@Rule @Rule
public TestingDir testingdir = new TestingDir(); public TestingDir testingdir = new TestingDir();
@ -153,7 +163,7 @@ public class GzipFilterDefaultTest
try try
{ {
tester.start(); tester.start();
tester.assertIsResponseNotGzipCompressed(null, -1, 204); tester.assertIsResponseNotGzipCompressed(-1, 204);
} }
finally finally
{ {
@ -161,6 +171,27 @@ public class GzipFilterDefaultTest
} }
} }
@Test
public void testIsNotGzipCompressedHttpBadRequestStatus() throws Exception
{
GzipTester tester = new GzipTester(testingdir, compressionType);
// Test error code 400
FilterHolder holder = tester.setContentServlet(HttpErrorServlet.class);
holder.setInitParameter("mimeTypes","text/plain");
try
{
tester.start();
tester.assertIsResponseNotGzipCompressedAndEqualToExpectedString("error message", -1, 400);
}
finally
{
tester.stop();
}
}
@Test @Test
public void testUserAgentExclusion() throws Exception public void testUserAgentExclusion() throws Exception

View File

@ -14,6 +14,7 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.DigestOutputStream; import java.security.DigestOutputStream;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.util.Enumeration; import java.util.Enumeration;
@ -81,7 +82,7 @@ public class GzipTester
// Assert the response headers // Assert the response headers
Assert.assertThat("Response.method",response.getMethod(),nullValue()); Assert.assertThat("Response.method",response.getMethod(),nullValue());
Assert.assertThat("Response.status",response.getStatus(),is(HttpServletResponse.SC_OK)); // Assert.assertThat("Response.status",response.getStatus(),is(HttpServletResponse.SC_OK));
Assert.assertThat("Response.header[Content-Length]",response.getHeader("Content-Length"),notNullValue()); Assert.assertThat("Response.header[Content-Length]",response.getHeader("Content-Length"),notNullValue());
Assert.assertThat("Response.header[Content-Encoding]",response.getHeader("Content-Encoding"),containsString(compressionType)); Assert.assertThat("Response.header[Content-Encoding]",response.getHeader("Content-Encoding"),containsString(compressionType));
@ -222,28 +223,60 @@ public class GzipTester
*/ */
public void assertIsResponseNotGzipCompressed(String filename, int expectedFilesize, int status) throws Exception public void assertIsResponseNotGzipCompressed(String filename, int expectedFilesize, int status) throws Exception
{ {
System.err.printf("[GzipTester] requesting /context/%s%n",filename); String uri = "/context/"+filename;
HttpTester request = new HttpTester(); HttpTester response = executeRequest(uri);
HttpTester response = new HttpTester(); assertResponseHeaders(expectedFilesize,status,response);
request.setMethod("GET"); // Assert that the contents are what we expect.
request.setVersion("HTTP/1.0"); if (filename != null)
request.setHeader("Host","tester"); {
request.setHeader("Accept-Encoding",compressionType); File serverFile = testdir.getFile(filename);
if (this.userAgent != null) String expectedResponse = IO.readToString(serverFile);
request.setHeader("User-Agent", this.userAgent);
if (filename == null) String actual = readResponse(response);
request.setURI("/context/"); Assert.assertEquals("Expected response equals actual response",expectedResponse,actual);
else }
request.setURI("/context/"+filename); }
// Issue the request /**
ByteArrayBuffer reqsBuff = new ByteArrayBuffer(request.generate().getBytes()); * Asserts that the request results in a properly structured GzipFilter response, where the content is
// Collect the response(s) * not compressed, and the content-length is returned appropriately.
ByteArrayBuffer respBuff = servletTester.getResponses(reqsBuff); *
response.parse(respBuff.asArray()); * @param expectedResponse
* the expected response body string
* @param expectedFilesize
* the expected filesize to be specified on the Content-Length portion of the response headers. (note:
* passing -1 will disable the Content-Length assertion)
* @throws Exception
*/
public void assertIsResponseNotGzipCompressedAndEqualToExpectedString(String expectedResponse, int expectedFilesize, int status) throws Exception
{
String uri = "/context/";
HttpTester response = executeRequest(uri);
assertResponseHeaders(expectedFilesize,status,response);
// Assert the response headers String actual = readResponse(response);
Assert.assertEquals("Expected response equals actual response",expectedResponse,actual);
}
/**
* Asserts that the request results in a properly structured GzipFilter response, where the content is
* not compressed, and the content-length is returned appropriately.
*
* @param expectedFilesize
* the expected filesize to be specified on the Content-Length portion of the response headers. (note:
* passing -1 will disable the Content-Length assertion)
* @throws Exception
*/
public void assertIsResponseNotGzipCompressed(int expectedFilesize, int status) throws Exception
{
String uri = "/context/";
HttpTester response = executeRequest(uri);
assertResponseHeaders(expectedFilesize,status,response);
}
private void assertResponseHeaders(int expectedFilesize, int status, HttpTester response)
{
Assert.assertThat("Response.method",response.getMethod(),nullValue()); Assert.assertThat("Response.method",response.getMethod(),nullValue());
Assert.assertThat("Response.status",response.getStatus(),is(status)); Assert.assertThat("Response.status",response.getStatus(),is(status));
if (expectedFilesize != (-1)) if (expectedFilesize != (-1))
@ -253,34 +286,51 @@ public class GzipTester
Assert.assertThat("Response.header[Content-Length]",serverLength,is(expectedFilesize)); Assert.assertThat("Response.header[Content-Length]",serverLength,is(expectedFilesize));
} }
Assert.assertThat("Response.header[Content-Encoding]",response.getHeader("Content-Encoding"),not(containsString(compressionType))); Assert.assertThat("Response.header[Content-Encoding]",response.getHeader("Content-Encoding"),not(containsString(compressionType)));
// Assert that the contents are what we expect.
if (filename != null)
{
File serverFile = testdir.getFile(filename);
String expected = IO.readToString(serverFile);
String actual = null;
InputStream in = null;
ByteArrayOutputStream out = null;
try
{
in = new ByteArrayInputStream(response.getContentBytes());
out = new ByteArrayOutputStream();
IO.copy(in,out);
actual = out.toString(encoding);
Assert.assertEquals("Server contents",expected,actual);
}
finally
{
IO.close(out);
IO.close(in);
}
}
} }
private HttpTester executeRequest(String uri) throws IOException, Exception
{
System.err.printf("[GzipTester] requesting %s%n",uri);
HttpTester request = new HttpTester();
HttpTester response = new HttpTester();
request.setMethod("GET");
request.setVersion("HTTP/1.0");
request.setHeader("Host","tester");
request.setHeader("Accept-Encoding",compressionType);
if (this.userAgent != null)
request.setHeader("User-Agent", this.userAgent);
request.setURI(uri);
// Issue the request
ByteArrayBuffer reqsBuff = new ByteArrayBuffer(request.generate().getBytes());
// Collect the response(s)
ByteArrayBuffer respBuff = servletTester.getResponses(reqsBuff);
response.parse(respBuff.asArray());
return response;
}
private String readResponse(HttpTester response) throws IOException, UnsupportedEncodingException
{
String actual = null;
InputStream in = null;
ByteArrayOutputStream out = null;
try
{
in = new ByteArrayInputStream(response.getContentBytes());
out = new ByteArrayOutputStream();
IO.copy(in,out);
actual = out.toString(encoding);
}
finally
{
IO.close(out);
IO.close(in);
}
return actual;
}
/** /**

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.spdy</groupId> <groupId>org.eclipse.jetty.spdy</groupId>
<artifactId>spdy-parent</artifactId> <artifactId>spdy-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.spdy</groupId> <groupId>org.eclipse.jetty.spdy</groupId>
<artifactId>spdy-parent</artifactId> <artifactId>spdy-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>spdy-jetty-http-webapp</artifactId> <artifactId>spdy-jetty-http-webapp</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.spdy</groupId> <groupId>org.eclipse.jetty.spdy</groupId>
<artifactId>spdy-parent</artifactId> <artifactId>spdy-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>spdy-jetty-http</artifactId> <artifactId>spdy-jetty-http</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.spdy</groupId> <groupId>org.eclipse.jetty.spdy</groupId>
<artifactId>spdy-parent</artifactId> <artifactId>spdy-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>spdy-jetty</artifactId> <artifactId>spdy-jetty</artifactId>

View File

@ -16,10 +16,6 @@
package org.eclipse.jetty.spdy; package org.eclipse.jetty.spdy;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
import java.io.IOException; import java.io.IOException;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@ -30,6 +26,7 @@ import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.spdy.api.BytesDataInfo; import org.eclipse.jetty.spdy.api.BytesDataInfo;
import org.eclipse.jetty.spdy.api.DataInfo; import org.eclipse.jetty.spdy.api.DataInfo;
import org.eclipse.jetty.spdy.api.GoAwayInfo;
import org.eclipse.jetty.spdy.api.Headers; import org.eclipse.jetty.spdy.api.Headers;
import org.eclipse.jetty.spdy.api.ReplyInfo; import org.eclipse.jetty.spdy.api.ReplyInfo;
import org.eclipse.jetty.spdy.api.SPDY; import org.eclipse.jetty.spdy.api.SPDY;
@ -53,9 +50,14 @@ import org.junit.Assert;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
public class ClosedStreamTest extends AbstractTest public class ClosedStreamTest extends AbstractTest
{ {
//TODO: Right now it sends a rst as the stream is unknown to the session once it's closed. But according to the spec we probably should just ignore the data?! //TODO: Right now it sends a rst as the stream is unknown to the session once it's closed.
//TODO: But according to the spec we probably should just ignore the data?!
@Test @Test
public void testDataSentOnClosedStreamIsIgnored() throws Exception public void testDataSentOnClosedStreamIsIgnored() throws Exception
{ {
@ -83,25 +85,25 @@ public class ClosedStreamTest extends AbstractTest
ByteBuffer writeBuffer = generator.control(new SynReplyFrame(SPDY.V2, (byte)0, streamId, new Headers())); ByteBuffer writeBuffer = generator.control(new SynReplyFrame(SPDY.V2, (byte)0, streamId, new Headers()));
channel.write(writeBuffer); channel.write(writeBuffer);
Assert.assertThat(writeBuffer.hasRemaining(), is(false));
byte[] bytes = new byte[1]; byte[] bytes = new byte[1];
writeBuffer = generator.data(streamId, bytes.length, new BytesDataInfo(bytes, true)); writeBuffer = generator.data(streamId, bytes.length, new BytesDataInfo(bytes, true));
channel.write(writeBuffer); channel.write(writeBuffer);
Assert.assertThat(writeBuffer.hasRemaining(), is(false));
// Write again to simulate the faulty condition // Write again to simulate the faulty condition
writeBuffer.flip(); writeBuffer.flip();
channel.write(writeBuffer); channel.write(writeBuffer);
Assert.assertThat(writeBuffer.hasRemaining(), is(false));
Assert.assertFalse(dataLatch.await(1, TimeUnit.SECONDS)); Assert.assertFalse(dataLatch.await(1, TimeUnit.SECONDS));
writeBuffer = generator.control(new GoAwayFrame(SPDY.V2, 0, SessionStatus.OK.getCode())); session.goAway().get(5, TimeUnit.SECONDS);
channel.write(writeBuffer);
channel.shutdownOutput();
channel.close();
server.close(); server.close();
} }
@Test @Test
public void testSendDataOnHalfClosedStreamCausesExceptionOnServer() throws Exception public void testSendDataOnHalfClosedStreamCausesExceptionOnServer() throws Exception
{ {
@ -163,24 +165,23 @@ public class ClosedStreamTest extends AbstractTest
@Test @Test
public void testV2ReceiveDataOnHalfClosedStream() throws Exception public void testV2ReceiveDataOnHalfClosedStream() throws Exception
{ {
final CountDownLatch clientResetReceivedLatch = runReceiveDataOnHalfClosedStream(SPDY.V2); runReceiveDataOnHalfClosedStream(SPDY.V2);
assertThat("server didn't receive data",clientResetReceivedLatch.await(1,TimeUnit.SECONDS),not(true));
} }
@Test @Test
@Ignore("until v3 is properly implemented") @Ignore("until v3 is properly implemented")
public void testV3ReceiveDataOnHalfClosedStream() throws Exception public void testV3ReceiveDataOnHalfClosedStream() throws Exception
{ {
final CountDownLatch clientResetReceivedLatch = runReceiveDataOnHalfClosedStream(SPDY.V3); runReceiveDataOnHalfClosedStream(SPDY.V3);
assertThat("server didn't receive data",clientResetReceivedLatch.await(1,TimeUnit.SECONDS),not(true));
} }
private CountDownLatch runReceiveDataOnHalfClosedStream(short version) throws Exception, IOException, InterruptedException private void runReceiveDataOnHalfClosedStream(short version) throws Exception
{ {
final CountDownLatch clientResetReceivedLatch = new CountDownLatch(1); final CountDownLatch clientResetReceivedLatch = new CountDownLatch(1);
final CountDownLatch serverReplySentLatch = new CountDownLatch(1); final CountDownLatch serverReplySentLatch = new CountDownLatch(1);
final CountDownLatch clientReplyReceivedLatch = new CountDownLatch(1); final CountDownLatch clientReplyReceivedLatch = new CountDownLatch(1);
final CountDownLatch serverDataReceivedLatch = new CountDownLatch(1); final CountDownLatch serverDataReceivedLatch = new CountDownLatch(1);
final CountDownLatch goAwayReceivedLatch = new CountDownLatch(1);
InetSocketAddress startServer = startServer(new ServerSessionFrameListener.Adapter() InetSocketAddress startServer = startServer(new ServerSessionFrameListener.Adapter()
{ {
@ -207,13 +208,20 @@ public class ClosedStreamTest extends AbstractTest
} }
}; };
} }
@Override
public void onGoAway(Session session, GoAwayInfo goAwayInfo)
{
goAwayReceivedLatch.countDown();
}
}); });
final SocketChannel socketChannel = SocketChannel.open(startServer);
final Generator generator = new Generator(new StandardByteBufferPool(),new StandardCompressionFactory().newCompressor()); final Generator generator = new Generator(new StandardByteBufferPool(),new StandardCompressionFactory().newCompressor());
ByteBuffer synData = generator.control(new SynStreamFrame(version,SynInfo.FLAG_CLOSE,1,0,(byte)0,new Headers())); int streamId = 1;
ByteBuffer synData = generator.control(new SynStreamFrame(version,SynInfo.FLAG_CLOSE, streamId,0,(byte)0,new Headers()));
final SocketChannel socketChannel = SocketChannel.open(startServer);
socketChannel.write(synData); socketChannel.write(synData);
assertThat("synData is fully written", synData.hasRemaining(), is(false));
assertThat("server: syn reply is sent",serverReplySentLatch.await(5,TimeUnit.SECONDS),is(true)); assertThat("server: syn reply is sent",serverReplySentLatch.await(5,TimeUnit.SECONDS),is(true));
@ -257,7 +265,14 @@ public class ClosedStreamTest extends AbstractTest
parser.parse(response); parser.parse(response);
assertThat("server didn't receive data",serverDataReceivedLatch.await(1,TimeUnit.SECONDS),not(true)); assertThat("server didn't receive data",serverDataReceivedLatch.await(1,TimeUnit.SECONDS),not(true));
return clientResetReceivedLatch; assertThat("client didn't receive reset",clientResetReceivedLatch.await(1,TimeUnit.SECONDS),not(true));
}
ByteBuffer buffer = generator.control(new GoAwayFrame(version, streamId, SessionStatus.OK.getCode()));
socketChannel.write(buffer);
Assert.assertThat(buffer.hasRemaining(), is(false));
assertThat("GoAway frame is received by server", goAwayReceivedLatch.await(5,TimeUnit.SECONDS), is(true));
socketChannel.close();
}
} }

View File

@ -1,5 +1,8 @@
package org.eclipse.jetty.spdy; package org.eclipse.jetty.spdy;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel; import java.nio.channels.ServerSocketChannel;
@ -15,7 +18,6 @@ import org.eclipse.jetty.spdy.api.RstInfo;
import org.eclipse.jetty.spdy.api.SPDY; import org.eclipse.jetty.spdy.api.SPDY;
import org.eclipse.jetty.spdy.api.Session; import org.eclipse.jetty.spdy.api.Session;
import org.eclipse.jetty.spdy.api.SessionFrameListener; import org.eclipse.jetty.spdy.api.SessionFrameListener;
import org.eclipse.jetty.spdy.api.SessionStatus;
import org.eclipse.jetty.spdy.api.Stream; import org.eclipse.jetty.spdy.api.Stream;
import org.eclipse.jetty.spdy.api.StreamFrameListener; import org.eclipse.jetty.spdy.api.StreamFrameListener;
import org.eclipse.jetty.spdy.api.StreamStatus; import org.eclipse.jetty.spdy.api.StreamStatus;
@ -23,7 +25,6 @@ import org.eclipse.jetty.spdy.api.StringDataInfo;
import org.eclipse.jetty.spdy.api.SynInfo; import org.eclipse.jetty.spdy.api.SynInfo;
import org.eclipse.jetty.spdy.api.server.ServerSessionFrameListener; import org.eclipse.jetty.spdy.api.server.ServerSessionFrameListener;
import org.eclipse.jetty.spdy.frames.ControlFrameType; import org.eclipse.jetty.spdy.frames.ControlFrameType;
import org.eclipse.jetty.spdy.frames.GoAwayFrame;
import org.eclipse.jetty.spdy.frames.SynReplyFrame; import org.eclipse.jetty.spdy.frames.SynReplyFrame;
import org.eclipse.jetty.spdy.generator.Generator; import org.eclipse.jetty.spdy.generator.Generator;
import org.junit.Assert; import org.junit.Assert;
@ -85,6 +86,7 @@ public class ProtocolViolationsTest extends AbstractTest
byte[] bytes = new byte[1]; byte[] bytes = new byte[1];
ByteBuffer writeBuffer = generator.data(streamId, bytes.length, new BytesDataInfo(bytes, true)); ByteBuffer writeBuffer = generator.data(streamId, bytes.length, new BytesDataInfo(bytes, true));
channel.write(writeBuffer); channel.write(writeBuffer);
assertThat("data is fully written", writeBuffer.hasRemaining(),is(false));
readBuffer.clear(); readBuffer.clear();
channel.read(readBuffer); channel.read(readBuffer);
@ -92,11 +94,8 @@ public class ProtocolViolationsTest extends AbstractTest
Assert.assertEquals(ControlFrameType.RST_STREAM.getCode(), readBuffer.getShort(2)); Assert.assertEquals(ControlFrameType.RST_STREAM.getCode(), readBuffer.getShort(2));
Assert.assertEquals(streamId, readBuffer.getInt(8)); Assert.assertEquals(streamId, readBuffer.getInt(8));
writeBuffer = generator.control(new GoAwayFrame(SPDY.V2, 0, SessionStatus.OK.getCode())); session.goAway().get(5,TimeUnit.SECONDS);
channel.write(writeBuffer);
channel.shutdownOutput();
channel.close();
server.close(); server.close();
} }
@ -129,7 +128,6 @@ public class ProtocolViolationsTest extends AbstractTest
@Override @Override
public void onData(Stream stream, DataInfo dataInfo) public void onData(Stream stream, DataInfo dataInfo)
{ {
System.out.println("ondata");
dataLatch.countDown(); dataLatch.countDown();
} }
}); });
@ -144,21 +142,21 @@ public class ProtocolViolationsTest extends AbstractTest
ByteBuffer writeBuffer = generator.control(new SynReplyFrame(SPDY.V2, (byte)0, streamId, new Headers())); ByteBuffer writeBuffer = generator.control(new SynReplyFrame(SPDY.V2, (byte)0, streamId, new Headers()));
channel.write(writeBuffer); channel.write(writeBuffer);
assertThat("SynReply is fully written", writeBuffer.hasRemaining(), is(false));
byte[] bytes = new byte[1]; byte[] bytes = new byte[1];
writeBuffer = generator.data(streamId, bytes.length, new BytesDataInfo(bytes, true)); writeBuffer = generator.data(streamId, bytes.length, new BytesDataInfo(bytes, true));
channel.write(writeBuffer); channel.write(writeBuffer);
assertThat("data is fully written", writeBuffer.hasRemaining(), is(false));
// Write again to simulate the faulty condition // Write again to simulate the faulty condition
writeBuffer.flip(); writeBuffer.flip();
channel.write(writeBuffer); channel.write(writeBuffer);
assertThat("data is fully written", writeBuffer.hasRemaining(), is(false));
Assert.assertFalse(dataLatch.await(1, TimeUnit.SECONDS)); Assert.assertFalse(dataLatch.await(1, TimeUnit.SECONDS));
writeBuffer = generator.control(new GoAwayFrame(SPDY.V2, 0, SessionStatus.OK.getCode())); session.goAway().get(5,TimeUnit.SECONDS);
channel.write(writeBuffer);
channel.shutdownOutput();
channel.close();
server.close(); server.close();
} }

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-start</artifactId> <artifactId>jetty-start</artifactId>

View File

@ -550,22 +550,25 @@ public class Main
if (_exec) if (_exec)
{ {
CommandLineBuilder cmd = buildCommandLine(classpath,configuredXmls); CommandLineBuilder cmd = buildCommandLine(classpath,configuredXmls);
ProcessBuilder pbuilder = new ProcessBuilder(cmd.getArgs()); ProcessBuilder pbuilder = new ProcessBuilder(cmd.getArgs());
final Process process = pbuilder.start(); final Process process = pbuilder.start();
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
Config.debug("Destroying " + process);
process.destroy();
}
});
copyInThread(process.getErrorStream(),System.err);
copyInThread(process.getInputStream(),System.out);
copyInThread(System.in,process.getOutputStream());
monitor.setProcess(process);
process.waitFor();
try
{
copyInThread(process.getErrorStream(),System.err);
copyInThread(process.getInputStream(),System.out);
copyInThread(System.in,process.getOutputStream());
monitor.setProcess(process);
process.waitFor();
}
finally
{
Config.debug("Destroying " + process);
process.destroy();
}
return; return;
} }

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-util</artifactId> <artifactId>jetty-util</artifactId>

View File

@ -228,7 +228,11 @@ class JarFileResource extends JarResource
public long lastModified() public long lastModified()
{ {
if (checkConnection() && _file!=null) if (checkConnection() && _file!=null)
{
if (exists() && _entry!=null)
return _entry.getTime();
return _file.lastModified(); return _file.lastModified();
}
return -1; return -1;
} }

View File

@ -24,10 +24,15 @@ import java.io.FilenameFilter;
import java.io.InputStream; import java.io.InputStream;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import java.sql.Time;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.TimeZone;
import java.util.zip.ZipFile;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.eclipse.jetty.toolchain.test.OS; import org.eclipse.jetty.toolchain.test.OS;
import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.IO;
import org.junit.BeforeClass; import org.junit.BeforeClass;
@ -310,6 +315,22 @@ public class ResourceTest
assertFalse(jarFileResource.isContainedIn(container)); assertFalse(jarFileResource.isContainedIn(container));
} }
/* ------------------------------------------------------------ */
@Test
public void testJarFileLastModified ()
throws Exception
{
String s = "jar:"+__userURL+"TestData/test.zip!/subdir/numbers";
// TODO move this into src/test/resources!!!
ZipFile zf = new ZipFile(MavenTestingUtils.getProjectFile("src/test/java/org/eclipse/jetty/util/resource/TestData/test.zip"));
long last = zf.getEntry("subdir/numbers").getTime();
Resource r = Resource.newResource(s);
assertEquals(last,r.lastModified()); // Known date value inside zip
}
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
@Test @Test
public void testJarFileCopyToDirectoryTraversal () throws Exception public void testJarFileCopyToDirectoryTraversal () throws Exception

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-webapp</artifactId> <artifactId>jetty-webapp</artifactId>

View File

@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>jetty-xml</artifactId> <artifactId>jetty-xml</artifactId>

View File

@ -6,7 +6,7 @@
<version>19</version> <version>19</version>
</parent> </parent>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
<name>Jetty :: Project</name> <name>Jetty :: Project</name>
<url>${jetty.url}</url> <url>${jetty.url}</url>
<packaging>pom</packaging> <packaging>pom</packaging>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>test-continuation</artifactId> <artifactId>test-continuation</artifactId>

View File

@ -4,7 +4,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-jetty-nested</artifactId> <artifactId>test-jetty-nested</artifactId>
<name>Jetty :: Nested Test</name> <name>Jetty :: Nested Test</name>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>test-jetty-servlet</artifactId> <artifactId>test-jetty-servlet</artifactId>

View File

@ -2,7 +2,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>test-jetty-webapp</artifactId> <artifactId>test-jetty-webapp</artifactId>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId> <artifactId>jetty-project</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>tests-parent</artifactId> <artifactId>tests-parent</artifactId>

View File

@ -20,7 +20,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>tests-parent</artifactId> <artifactId>tests-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>test-integration</artifactId> <artifactId>test-integration</artifactId>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>tests-parent</artifactId> <artifactId>tests-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-loginservice</artifactId> <artifactId>test-loginservice</artifactId>
<name>Jetty Tests :: Login Service</name> <name>Jetty Tests :: Login Service</name>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>tests-parent</artifactId> <artifactId>tests-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-sessions-parent</artifactId> <artifactId>test-sessions-parent</artifactId>
<name>Jetty Tests :: Sessions :: Parent</name> <name>Jetty Tests :: Sessions :: Parent</name>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>test-sessions-parent</artifactId> <artifactId>test-sessions-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-hash-sessions</artifactId> <artifactId>test-hash-sessions</artifactId>
<name>Jetty Tests :: Sessions :: Hash</name> <name>Jetty Tests :: Sessions :: Hash</name>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>test-sessions-parent</artifactId> <artifactId>test-sessions-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-jdbc-sessions</artifactId> <artifactId>test-jdbc-sessions</artifactId>
<name>Jetty Tests :: Sessions :: JDBC</name> <name>Jetty Tests :: Sessions :: JDBC</name>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>test-sessions-parent</artifactId> <artifactId>test-sessions-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-mongodb-sessions</artifactId> <artifactId>test-mongodb-sessions</artifactId>
<name>Jetty Tests :: Sessions :: Mongo</name> <name>Jetty Tests :: Sessions :: Mongo</name>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>test-sessions-parent</artifactId> <artifactId>test-sessions-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-sessions-common</artifactId> <artifactId>test-sessions-common</artifactId>
<name>Jetty Tests :: Sessions :: Common</name> <name>Jetty Tests :: Sessions :: Common</name>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>tests-parent</artifactId> <artifactId>tests-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-webapps-parent</artifactId> <artifactId>test-webapps-parent</artifactId>
<name>Jetty Tests :: WebApps :: Parent</name> <name>Jetty Tests :: WebApps :: Parent</name>

View File

@ -21,7 +21,7 @@
<parent> <parent>
<groupId>org.eclipse.jetty.tests</groupId> <groupId>org.eclipse.jetty.tests</groupId>
<artifactId>test-webapps-parent</artifactId> <artifactId>test-webapps-parent</artifactId>
<version>7.6.4-SNAPSHOT</version> <version>7.6.5-SNAPSHOT</version>
</parent> </parent>
<artifactId>test-webapp-rfc2616</artifactId> <artifactId>test-webapp-rfc2616</artifactId>
<name>Jetty Tests :: WebApp :: RFC2616</name> <name>Jetty Tests :: WebApp :: RFC2616</name>