Skip to content

Commits on Source 9

mina2 (2.0.19-1) unstable; urgency=medium
* Team upload.
* New upstream release
- Refreshed the patches
* Use salsa.debian.org Vcs-* URLs
-- Emmanuel Bourg <ebourg@apache.org> Mon, 19 Nov 2018 13:57:35 +0100
mina2 (2.0.16-3) unstable; urgency=medium
* Team upload.
......
......@@ -23,9 +23,9 @@ Build-Depends:
libxbean-java,
maven-debian-helper (>= 2.0.1~)
Standards-Version: 4.2.1
Vcs-Git: https://anonscm.debian.org/git/pkg-java/mina2.git
Vcs-Browser: https://anonscm.debian.org/cgit/pkg-java/mina2.git
Homepage: http://mina.apache.org
Vcs-Git: https://salsa.debian.org/java-team/mina2.git
Vcs-Browser: https://salsa.debian.org/java-team/mina2
Homepage: https://mina.apache.org
Package: libmina2-java
Architecture: all
......
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: Apache Mina
Upstream-Contact: Apache Software Foundation, http://mina.apache.org/
Source: http://www.apache.org/dist/mina/
Source: https://www.apache.org/dist/mina/
Files-Excluded: LICENSE.*.txt
docs/apidocs
......
......@@ -18,8 +18,8 @@ Forwarded: no
</dependency>
--- a/src/mina-integration-xbean/src/test/java/org/apache/mina/integration/xbean/SpringXBeanTest.java
+++ b/src/mina-integration-xbean/src/test/java/org/apache/mina/integration/xbean/SpringXBeanTest.java
@@ -43,6 +43,7 @@
* NIO based DatagramAcceptor.
@@ -45,6 +45,7 @@
* @throws Exception if e got some error
*/
@Test
+ @org.junit.Ignore("The spring-beans DTD required to load datagramAcceptor.xml can't be resolved")
......
......@@ -13,15 +13,13 @@ Bug-Debian: https://bugs.debian.org/907001
src/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pom.xml b/src/pom.xml
index 274b33a..e0aa732 100644
--- a/src/pom.xml
+++ b/src/pom.xml
@@ -133,7 +133,7 @@
@@ -136,7 +136,7 @@
<version.taglist.plugin>2.4</version.taglist.plugin>
<version.tools.maven.plugin>1.4</version.tools.maven.plugin>
<version.versions.plugin>2.1</version.versions.plugin>
- <version.xbean.plugin>4.1</version.xbean.plugin>
<version.versions.plugin>2.5</version.versions.plugin>
- <version.xbean.plugin>4.6</version.xbean.plugin>
+ <version.xbean.plugin>4.5</version.xbean.plugin>
<!-- Jars -->
......
......@@ -22,6 +22,3 @@ override_dh_clean:
src/mina-integration-jmx/META-INF/MANIFEST.MF \
src/mina-integration-ognl/META-INF/MANIFEST.MF \
src/mina-transport-apr/META-INF/MANIFEST.MF
get-orig-source:
uscan --download-current-version --force-download --rename --repack --compression xz
version=3
opts="dversionmangle=s/\+dfsg//" \
http://archive.apache.org/dist/mina/mina/(2\.[\d.]+)/ apache-mina-(.+)-src\.tar\.gz
version=4
opts="repack,compression=xz,dversionmangle=s/\+dfsg//" \
https://archive.apache.org/dist/mina/mina/(2\.[\d.]+)/ apache-mina-(.+)-src\.tar\.gz
Manifest-Version: 1.0
Bnd-LastModified: 1477248910833
Build-Jdk: 1.8.0_60
Bnd-LastModified: 1528403319419
Build-Jdk: 1.8.0_171
Built-By: elecharny
Bundle-Description: Apache MINA is a network application framework which
helps users develop high performance and highly scalable network appli
......@@ -12,106 +12,106 @@ Bundle-ManifestVersion: 2
Bundle-Name: Apache MINA Core
Bundle-SymbolicName: org.apache.mina.core
Bundle-Vendor: Apache MINA Project
Bundle-Version: 2.0.16
Bundle-Version: 2.0.19
Created-By: Apache Maven Bundle Plugin
Export-Package: org.apache.mina.core;version="2.0.16";uses:="org.apache.
Export-Package: org.apache.mina.core;version="2.0.19";uses:="org.apache.
mina.core.future,org.apache.mina.core.session",org.apache.mina.core.buf
fer;version="2.0.16",org.apache.mina.core.file;version="2.0.16",org.apa
che.mina.core.filterchain;version="2.0.16";uses:="org.apache.mina.core.
fer;version="2.0.19",org.apache.mina.core.file;version="2.0.19",org.apa
che.mina.core.filterchain;version="2.0.19";uses:="org.apache.mina.core.
session,org.apache.mina.core.write",org.apache.mina.core.future;version
="2.0.16";uses:="org.apache.mina.core.session",org.apache.mina.core.pol
ling;version="2.0.16";uses:="org.apache.mina.core.buffer,org.apache.min
="2.0.19";uses:="org.apache.mina.core.session",org.apache.mina.core.pol
ling;version="2.0.19";uses:="org.apache.mina.core.buffer,org.apache.min
a.core.file,org.apache.mina.core.future,org.apache.mina.core.service,or
g.apache.mina.core.session,org.apache.mina.core.write,org.apache.mina.t
ransport.socket",org.apache.mina.core.service;version="2.0.16";uses:="o
ransport.socket",org.apache.mina.core.service;version="2.0.19";uses:="o
rg.apache.mina.core.filterchain,org.apache.mina.core.future,org.apache.
mina.core.session,org.apache.mina.core.write",org.apache.mina.core.sess
ion;version="2.0.16";uses:="org.apache.mina.core.filterchain,org.apache
.mina.core.future,org.apache.mina.core.service,org.apache.mina.core.wri
te",org.apache.mina.core.write;version="2.0.16";uses:="org.apache.mina.
core.future,org.apache.mina.core.session",org.apache.mina.filter.buffer
;version="2.0.16";uses:="org.apache.mina.core.buffer,org.apache.mina.co
re.filterchain,org.apache.mina.core.session,org.apache.mina.core.write,
org.apache.mina.util",org.apache.mina.filter.codec;version="2.0.16";use
s:="org.apache.mina.core.buffer,org.apache.mina.core.filterchain,org.ap
ache.mina.core.future,org.apache.mina.core.session,org.apache.mina.core
.write",org.apache.mina.filter.codec.demux;version="2.0.16";uses:="org.
apache.mina.core.buffer,org.apache.mina.core.session,org.apache.mina.fi
lter.codec",org.apache.mina.filter.codec.prefixedstring;version="2.0.16
";uses:="org.apache.mina.core.buffer,org.apache.mina.core.session,org.a
pache.mina.filter.codec",org.apache.mina.filter.codec.serialization;ver
sion="2.0.16";uses:="org.apache.mina.core.buffer,org.apache.mina.core.s
ession,org.apache.mina.filter.codec",org.apache.mina.filter.codec.state
machine;version="2.0.16";uses:="org.apache.mina.core.buffer,org.apache.
mina.core.session,org.apache.mina.filter.codec",org.apache.mina.filter.
codec.textline;version="2.0.16";uses:="org.apache.mina.core.buffer,org.
apache.mina.core.session,org.apache.mina.filter.codec",org.apache.mina.
filter.errorgenerating;version="2.0.16";uses:="org.apache.mina.core.fil
terchain,org.apache.mina.core.session,org.apache.mina.core.write",org.a
pache.mina.filter.executor;version="2.0.16";uses:="org.apache.mina.core
.filterchain,org.apache.mina.core.session,org.apache.mina.core.write",o
rg.apache.mina.filter.firewall;version="2.0.16";uses:="org.apache.mina.
core.filterchain,org.apache.mina.core.session,org.apache.mina.core.writ
e",org.apache.mina.filter.keepalive;version="2.0.16";uses:="org.apache.
mina.core.filterchain,org.apache.mina.core.session,org.apache.mina.core
.write",org.apache.mina.filter.logging;version="2.0.16";uses:="org.apac
mina.core.session,org.apache.mina.core.write,org.slf4j",org.apache.mina
.core.session;version="2.0.19";uses:="org.apache.mina.core.filterchain,
org.apache.mina.core.future,org.apache.mina.core.service,org.apache.min
a.core.write",org.apache.mina.core.write;version="2.0.19";uses:="org.ap
ache.mina.core.future,org.apache.mina.core.session",org.apache.mina.fil
ter.buffer;version="2.0.19";uses:="org.apache.mina.core.buffer,org.apac
he.mina.core.filterchain,org.apache.mina.core.session,org.apache.mina.c
ore.write,org.apache.mina.filter.util",org.apache.mina.filter.ssl;versi
on="2.0.16";uses:="javax.net.ssl,org.apache.mina.core.filterchain,org.a
pache.mina.core.future,org.apache.mina.core.session,org.apache.mina.cor
e.write",org.apache.mina.filter.statistic;version="2.0.16";uses:="org.a
pache.mina.core.filterchain,org.apache.mina.core.session,org.apache.min
a.core.write",org.apache.mina.filter.stream;version="2.0.16";uses:="org
.apache.mina.core.buffer,org.apache.mina.core.file,org.apache.mina.core
.filterchain,org.apache.mina.core.session,org.apache.mina.core.write",o
rg.apache.mina.filter.util;version="2.0.16";uses:="org.apache.mina.core
.filterchain,org.apache.mina.core.session,org.apache.mina.core.write",o
rg.apache.mina.handler.chain;version="2.0.16";uses:="org.apache.mina.co
re.service,org.apache.mina.core.session",org.apache.mina.handler.demux;
version="2.0.16";uses:="org.apache.mina.core.service,org.apache.mina.co
re.session",org.apache.mina.handler.multiton;version="2.0.16";uses:="or
g.apache.mina.core.service,org.apache.mina.core.session",org.apache.min
a.handler.stream;version="2.0.16";uses:="org.apache.mina.core.service,o
rg.apache.mina.core.session",org.apache.mina.proxy;version="2.0.16";use
s:="javax.security.sasl,org.apache.mina.core.buffer,org.apache.mina.cor
e.filterchain,org.apache.mina.core.future,org.apache.mina.core.service,
org.apache.mina.core.session,org.apache.mina.core.write,org.apache.mina
.proxy.filter,org.apache.mina.proxy.session,org.apache.mina.transport.s
ocket",org.apache.mina.proxy.event;version="2.0.16";uses:="org.apache.m
ina.core.filterchain,org.apache.mina.core.session,org.apache.mina.proxy
.session",org.apache.mina.proxy.filter;version="2.0.16";uses:="org.apac
he.mina.core.buffer,org.apache.mina.core.filterchain,org.apache.mina.co
re.session,org.apache.mina.core.write,org.apache.mina.proxy",org.apache
.mina.proxy.handlers;version="2.0.16",org.apache.mina.proxy.handlers.ht
tp;version="2.0.16";uses:="org.apache.mina.core.buffer,org.apache.mina.
core.filterchain,org.apache.mina.proxy,org.apache.mina.proxy.handlers,o
rg.apache.mina.proxy.session",org.apache.mina.proxy.handlers.http.basic
;version="2.0.16";uses:="org.apache.mina.core.filterchain,org.apache.mi
na.proxy,org.apache.mina.proxy.handlers.http,org.apache.mina.proxy.sess
ion",org.apache.mina.proxy.handlers.http.digest;version="2.0.16";uses:=
"javax.security.sasl,org.apache.mina.core.filterchain,org.apache.mina.c
ore.session,org.apache.mina.proxy,org.apache.mina.proxy.handlers.http,o
rg.apache.mina.proxy.session",org.apache.mina.proxy.handlers.http.ntlm;
version="2.0.16";uses:="org.apache.mina.core.filterchain,org.apache.min
a.proxy,org.apache.mina.proxy.handlers.http,org.apache.mina.proxy.sessi
on",org.apache.mina.proxy.handlers.socks;version="2.0.16";uses:="org.ap
ache.mina.core.buffer,org.apache.mina.core.filterchain,org.apache.mina.
proxy,org.apache.mina.proxy.handlers,org.apache.mina.proxy.session",org
.apache.mina.proxy.session;version="2.0.16";uses:="org.apache.mina.core
.future,org.apache.mina.core.session,org.apache.mina.proxy,org.apache.m
ina.proxy.event,org.apache.mina.proxy.filter,org.apache.mina.proxy.hand
lers,org.apache.mina.proxy.handlers.http",org.apache.mina.proxy.utils;v
ersion="2.0.16";uses:="javax.security.sasl,org.apache.mina.core.buffer"
,org.apache.mina.transport.socket;version="2.0.16";uses:="org.apache.mi
na.core.service,org.apache.mina.core.session",org.apache.mina.transport
.socket.nio;version="2.0.16";uses:="org.apache.mina.core.buffer,org.apa
che.mina.core.file,org.apache.mina.core.filterchain,org.apache.mina.cor
e.polling,org.apache.mina.core.service,org.apache.mina.core.session,org
.apache.mina.core.write,org.apache.mina.transport.socket",org.apache.mi
na.transport.vmpipe;version="2.0.16";uses:="org.apache.mina.core.future
,org.apache.mina.core.service,org.apache.mina.core.session",org.apache.
mina.util;version="2.0.16"
ore.write,org.apache.mina.util",org.apache.mina.filter.codec;version="2
.0.19";uses:="org.apache.mina.core.buffer,org.apache.mina.core.filterch
ain,org.apache.mina.core.future,org.apache.mina.core.session,org.apache
.mina.core.write",org.apache.mina.filter.codec.demux;version="2.0.19";u
ses:="org.apache.mina.core.buffer,org.apache.mina.core.session,org.apac
he.mina.filter.codec",org.apache.mina.filter.codec.prefixedstring;versi
on="2.0.19";uses:="org.apache.mina.core.buffer,org.apache.mina.core.ses
sion,org.apache.mina.filter.codec",org.apache.mina.filter.codec.seriali
zation;version="2.0.19";uses:="org.apache.mina.core.buffer,org.apache.m
ina.core.session,org.apache.mina.filter.codec",org.apache.mina.filter.c
odec.statemachine;version="2.0.19";uses:="org.apache.mina.core.buffer,o
rg.apache.mina.core.session,org.apache.mina.filter.codec",org.apache.mi
na.filter.codec.textline;version="2.0.19";uses:="org.apache.mina.core.b
uffer,org.apache.mina.core.session,org.apache.mina.filter.codec",org.ap
ache.mina.filter.errorgenerating;version="2.0.19";uses:="org.apache.min
a.core.filterchain,org.apache.mina.core.session,org.apache.mina.core.wr
ite",org.apache.mina.filter.executor;version="2.0.19";uses:="org.apache
.mina.core.filterchain,org.apache.mina.core.session,org.apache.mina.cor
e.write",org.apache.mina.filter.firewall;version="2.0.19";uses:="org.ap
ache.mina.core.filterchain,org.apache.mina.core.session,org.apache.mina
.core.write",org.apache.mina.filter.keepalive;version="2.0.19";uses:="o
rg.apache.mina.core.filterchain,org.apache.mina.core.session,org.apache
.mina.core.write",org.apache.mina.filter.logging;version="2.0.19";uses:
="org.apache.mina.core.filterchain,org.apache.mina.core.session,org.apa
che.mina.core.write,org.apache.mina.filter.util",org.apache.mina.filter
.ssl;version="2.0.19";uses:="javax.net.ssl,org.apache.mina.core.filterc
hain,org.apache.mina.core.future,org.apache.mina.core.session,org.apach
e.mina.core.write",org.apache.mina.filter.statistic;version="2.0.19";us
es:="org.apache.mina.core.filterchain,org.apache.mina.core.session,org.
apache.mina.core.write",org.apache.mina.filter.stream;version="2.0.19";
uses:="org.apache.mina.core.buffer,org.apache.mina.core.file,org.apache
.mina.core.filterchain,org.apache.mina.core.session,org.apache.mina.cor
e.write",org.apache.mina.filter.util;version="2.0.19";uses:="org.apache
.mina.core.filterchain,org.apache.mina.core.session,org.apache.mina.cor
e.write",org.apache.mina.handler.chain;version="2.0.19";uses:="org.apac
he.mina.core.service,org.apache.mina.core.session",org.apache.mina.hand
ler.demux;version="2.0.19";uses:="org.apache.mina.core.service,org.apac
he.mina.core.session",org.apache.mina.handler.multiton;version="2.0.19"
;uses:="org.apache.mina.core.service,org.apache.mina.core.session",org.
apache.mina.handler.stream;version="2.0.19";uses:="org.apache.mina.core
.service,org.apache.mina.core.session",org.apache.mina.proxy;version="2
.0.19";uses:="javax.security.sasl,org.apache.mina.core.buffer,org.apach
e.mina.core.filterchain,org.apache.mina.core.future,org.apache.mina.cor
e.service,org.apache.mina.core.session,org.apache.mina.core.write,org.a
pache.mina.proxy.filter,org.apache.mina.proxy.session,org.apache.mina.t
ransport.socket",org.apache.mina.proxy.event;version="2.0.19";uses:="or
g.apache.mina.core.filterchain,org.apache.mina.core.session,org.apache.
mina.proxy.session",org.apache.mina.proxy.filter;version="2.0.19";uses:
="org.apache.mina.core.buffer,org.apache.mina.core.filterchain,org.apac
he.mina.core.session,org.apache.mina.core.write,org.apache.mina.proxy",
org.apache.mina.proxy.handlers;version="2.0.19",org.apache.mina.proxy.h
andlers.http;version="2.0.19";uses:="org.apache.mina.core.buffer,org.ap
ache.mina.core.filterchain,org.apache.mina.proxy,org.apache.mina.proxy.
handlers,org.apache.mina.proxy.session",org.apache.mina.proxy.handlers.
http.basic;version="2.0.19";uses:="org.apache.mina.core.filterchain,org
.apache.mina.proxy,org.apache.mina.proxy.handlers.http,org.apache.mina.
proxy.session",org.apache.mina.proxy.handlers.http.digest;version="2.0.
19";uses:="javax.security.sasl,org.apache.mina.core.filterchain,org.apa
che.mina.core.session,org.apache.mina.proxy,org.apache.mina.proxy.handl
ers.http,org.apache.mina.proxy.session",org.apache.mina.proxy.handlers.
http.ntlm;version="2.0.19";uses:="org.apache.mina.core.filterchain,org.
apache.mina.proxy,org.apache.mina.proxy.handlers.http,org.apache.mina.p
roxy.session",org.apache.mina.proxy.handlers.socks;version="2.0.19";use
s:="org.apache.mina.core.buffer,org.apache.mina.core.filterchain,org.ap
ache.mina.proxy,org.apache.mina.proxy.handlers,org.apache.mina.proxy.se
ssion",org.apache.mina.proxy.session;version="2.0.19";uses:="org.apache
.mina.core.future,org.apache.mina.core.session,org.apache.mina.proxy,or
g.apache.mina.proxy.event,org.apache.mina.proxy.filter,org.apache.mina.
proxy.handlers,org.apache.mina.proxy.handlers.http",org.apache.mina.pro
xy.utils;version="2.0.19";uses:="javax.security.sasl,org.apache.mina.co
re.buffer",org.apache.mina.transport.socket;version="2.0.19";uses:="org
.apache.mina.core.service,org.apache.mina.core.session",org.apache.mina
.transport.socket.nio;version="2.0.19";uses:="org.apache.mina.core.buff
er,org.apache.mina.core.file,org.apache.mina.core.filterchain,org.apach
e.mina.core.polling,org.apache.mina.core.service,org.apache.mina.core.s
ession,org.apache.mina.core.write,org.apache.mina.transport.socket",org
.apache.mina.transport.vmpipe;version="2.0.19";uses:="org.apache.mina.c
ore.future,org.apache.mina.core.service,org.apache.mina.core.session",o
rg.apache.mina.util;version="2.0.19"
Import-Package: javax.crypto,javax.crypto.spec,javax.net.ssl,javax.secur
ity.sasl,org.slf4j;version="1.7"
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.7))"
Tool: Bnd-2.3.0.201405100607
Tool: Bnd-3.3.0.201609221906
......@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.mina</groupId>
<artifactId>mina-parent</artifactId>
<version>2.0.16</version>
<version>2.0.19</version>
</parent>
<artifactId>mina-core</artifactId>
......
......@@ -39,6 +39,10 @@ import org.apache.mina.core.session.IoSession;
public final class IoUtil {
private static final IoSession[] EMPTY_SESSIONS = new IoSession[0];
private IoUtil() {
// Do nothing
}
/**
* Writes the specified {@code message} to the specified {@code sessions}.
* If the specified {@code message} is an {@link IoBuffer}, the buffer is
......@@ -49,7 +53,7 @@ public final class IoUtil {
* @return The list of WriteFuture created for each broadcasted message
*/
public static List<WriteFuture> broadcast(Object message, Collection<IoSession> sessions) {
List<WriteFuture> answer = new ArrayList<WriteFuture>(sessions.size());
List<WriteFuture> answer = new ArrayList<>(sessions.size());
broadcast(message, sessions.iterator(), answer);
return answer;
}
......@@ -64,7 +68,7 @@ public final class IoUtil {
* @return The list of WriteFuture created for each broadcasted message
*/
public static List<WriteFuture> broadcast(Object message, Iterable<IoSession> sessions) {
List<WriteFuture> answer = new ArrayList<WriteFuture>();
List<WriteFuture> answer = new ArrayList<>();
broadcast(message, sessions.iterator(), answer);
return answer;
}
......@@ -79,7 +83,7 @@ public final class IoUtil {
* @return The list of {@link WriteFuture} for the written messages
*/
public static List<WriteFuture> broadcast(Object message, Iterator<IoSession> sessions) {
List<WriteFuture> answer = new ArrayList<WriteFuture>();
List<WriteFuture> answer = new ArrayList<>();
broadcast(message, sessions, answer);
return answer;
}
......@@ -98,7 +102,7 @@ public final class IoUtil {
sessions = EMPTY_SESSIONS;
}
List<WriteFuture> answer = new ArrayList<WriteFuture>(sessions.length);
List<WriteFuture> answer = new ArrayList<>(sessions.length);
if (message instanceof IoBuffer) {
for (IoSession s : sessions) {
answer.add(s.write(((IoBuffer) message).duplicate()));
......@@ -125,31 +129,78 @@ public final class IoUtil {
}
}
/**
* Wait on all the {@link IoFuture}s we get, or until one of the {@link IoFuture}s is interrupted
*
* @param futures The {@link IoFuture}s we are waiting on
* @throws InterruptedException If one of the {@link IoFuture} is interrupted
*/
public static void await(Iterable<? extends IoFuture> futures) throws InterruptedException {
for (IoFuture f : futures) {
f.await();
}
}
/**
* Wait on all the {@link IoFuture}s we get. This can't get interrupted.
*
* @param futures The {@link IoFuture}s we are waiting on
*/
public static void awaitUninterruptably(Iterable<? extends IoFuture> futures) {
for (IoFuture f : futures) {
f.awaitUninterruptibly();
}
}
/**
* Wait on all the {@link IoFuture}s we get, or until one of the {@link IoFuture}s is interrupted
*
* @param futures The {@link IoFuture}s we are waiting on
* @param timeout The maximum time we wait for the {@link IoFuture}s to complete
* @param unit The Time unit to use for the timeout
* @return <tt>TRUE</TT> if all the {@link IoFuture} have been completed, <tt>FALSE</tt> if
* at least one {@link IoFuture} haas been interrupted
* @throws InterruptedException If one of the {@link IoFuture} is interrupted
*/
public static boolean await(Iterable<? extends IoFuture> futures, long timeout, TimeUnit unit)
throws InterruptedException {
return await(futures, unit.toMillis(timeout));
}
/**
* Wait on all the {@link IoFuture}s we get, or until one of the {@link IoFuture}s is interrupted
*
* @param futures The {@link IoFuture}s we are waiting on
* @param timeoutMillis The maximum milliseconds we wait for the {@link IoFuture}s to complete
* @return <tt>TRUE</TT> if all the {@link IoFuture} have been completed, <tt>FALSE</tt> if
* at least one {@link IoFuture} has been interrupted
* @throws InterruptedException If one of the {@link IoFuture} is interrupted
*/
public static boolean await(Iterable<? extends IoFuture> futures, long timeoutMillis) throws InterruptedException {
return await0(futures, timeoutMillis, true);
}
/**
* Wait on all the {@link IoFuture}s we get.
*
* @param futures The {@link IoFuture}s we are waiting on
* @param timeout The maximum time we wait for the {@link IoFuture}s to complete
* @param unit The Time unit to use for the timeout
* @return <tt>TRUE</TT> if all the {@link IoFuture} have been completed, <tt>FALSE</tt> if
* at least one {@link IoFuture} has been interrupted
*/
public static boolean awaitUninterruptibly(Iterable<? extends IoFuture> futures, long timeout, TimeUnit unit) {
return awaitUninterruptibly(futures, unit.toMillis(timeout));
}
/**
* Wait on all the {@link IoFuture}s we get.
*
* @param futures The {@link IoFuture}s we are waiting on
* @param timeoutMillis The maximum milliseconds we wait for the {@link IoFuture}s to complete
* @return <tt>TRUE</TT> if all the {@link IoFuture} have been completed, <tt>FALSE</tt> if
* at least one {@link IoFuture} has been interrupted
*/
public static boolean awaitUninterruptibly(Iterable<? extends IoFuture> futures, long timeoutMillis) {
try {
return await0(futures, timeoutMillis, false);
......@@ -165,8 +216,10 @@ public final class IoUtil {
boolean lastComplete = true;
Iterator<? extends IoFuture> i = futures.iterator();
while (i.hasNext()) {
IoFuture f = i.next();
do {
if (interruptable) {
lastComplete = f.await(waitTime);
......@@ -176,7 +229,7 @@ public final class IoUtil {
waitTime = timeoutMillis - (System.currentTimeMillis() - startTime);
if (lastComplete || waitTime <= 0) {
if (waitTime <= 0) {
break;
}
} while (!lastComplete);
......@@ -188,8 +241,4 @@ public final class IoUtil {
return lastComplete && !i.hasNext();
}
private IoUtil() {
// Do nothing
}
}
......@@ -33,18 +33,37 @@ import java.io.IOException;
public class RuntimeIoException extends RuntimeException {
private static final long serialVersionUID = 9029092241311939548L;
/**
* Create a new RuntimeIoException instance
*/
public RuntimeIoException() {
super();
}
/**
* Create a new RuntimeIoException instance
*
* @param message The error message
*/
public RuntimeIoException(String message) {
super(message);
}
/**
* Create a new RuntimeIoException instance
*
* @param message The error message
* @param cause The original exception
*/
public RuntimeIoException(String message, Throwable cause) {
super(message, cause);
}
/**
* Create a new RuntimeIoException instance
*
* @param cause The original exception
*/
public RuntimeIoException(Throwable cause) {
super(cause);
}
......
......@@ -42,6 +42,7 @@ import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import java.nio.charset.StandardCharsets;
import java.util.EnumSet;
import java.util.Set;
......@@ -522,6 +523,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(byte value) {
autoExpand(1);
buf().put((byte) (value & 0xff));
......@@ -531,6 +533,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(int index, byte value) {
autoExpand(index, 1);
buf().put(index, (byte) (value & 0xff));
......@@ -540,6 +543,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(short value) {
autoExpand(1);
buf().put((byte) (value & 0x00ff));
......@@ -549,6 +553,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(int index, short value) {
autoExpand(index, 1);
buf().put(index, (byte) (value & 0x00ff));
......@@ -558,6 +563,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(int value) {
autoExpand(1);
buf().put((byte) (value & 0x000000ff));
......@@ -567,6 +573,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(int index, int value) {
autoExpand(index, 1);
buf().put(index, (byte) (value & 0x000000ff));
......@@ -576,6 +583,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(long value) {
autoExpand(1);
buf().put((byte) (value & 0x00000000000000ffL));
......@@ -585,6 +593,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public IoBuffer putUnsigned(int index, long value) {
autoExpand(index, 1);
buf().put(index, (byte) (value & 0x00000000000000ffL));
......@@ -828,7 +837,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
@Override
public final IoBuffer putUnsignedInt(byte value) {
autoExpand(4);
buf().putInt((value & 0x00ff));
buf().putInt(value & 0x00ff);
return this;
}
......@@ -838,7 +847,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
@Override
public final IoBuffer putUnsignedInt(int index, byte value) {
autoExpand(index, 4);
buf().putInt(index, (value & 0x00ff));
buf().putInt(index, value & 0x00ff);
return this;
}
......@@ -848,7 +857,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
@Override
public final IoBuffer putUnsignedInt(short value) {
autoExpand(4);
buf().putInt((value & 0x0000ffff));
buf().putInt(value & 0x0000ffff);
return this;
}
......@@ -858,7 +867,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
@Override
public final IoBuffer putUnsignedInt(int index, short value) {
autoExpand(index, 4);
buf().putInt(index, (value & 0x0000ffff));
buf().putInt(index, value & 0x0000ffff);
return this;
}
......@@ -867,9 +876,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
*/
@Override
public final IoBuffer putUnsignedInt(int value) {
autoExpand(4);
buf().putInt(value);
return this;
return putInt(value);
}
/**
......@@ -877,9 +884,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
*/
@Override
public final IoBuffer putUnsignedInt(int index, int value) {
autoExpand(index, 4);
buf().putInt(index, value);
return this;
return putInt(index, value);
}
/**
......@@ -927,9 +932,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
*/
@Override
public final IoBuffer putUnsignedShort(short value) {
autoExpand(2);
buf().putShort(value);
return this;
return putShort(value);
}
/**
......@@ -937,9 +940,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
*/
@Override
public final IoBuffer putUnsignedShort(int index, short value) {
autoExpand(index, 2);
buf().putShort(index, value);
return this;
return putShort(index, value);
}
/**
......@@ -1289,6 +1290,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public int compareTo(IoBuffer that) {
int n = this.position() + Math.min(this.remaining(), that.remaining());
for (int i = this.position(), j = that.position(); i < n; i++, j++) {
......@@ -1438,9 +1440,6 @@ public abstract class AbstractIoBuffer extends IoBuffer {
return b3 << 16 | b2 << 8 | b1;
}
/**
* {@inheritDoc}
*/
private int getMediumInt(byte b1, byte b2, byte b3) {
int ret = b1 << 16 & 0xff0000 | b2 << 8 & 0xff00 | b3 & 0xff;
// Check to see if the medium int is negative (high bit in b1 set)
......@@ -1599,7 +1598,10 @@ public abstract class AbstractIoBuffer extends IoBuffer {
return "";
}
boolean utf16 = decoder.charset().name().startsWith("UTF-16");
boolean utf16 =
decoder.charset().equals(StandardCharsets.UTF_16) ||
decoder.charset().equals(StandardCharsets.UTF_16BE) ||
decoder.charset().equals(StandardCharsets.UTF_16LE);
int oldPos = position();
int oldLimit = limit();
......@@ -1707,7 +1709,9 @@ public abstract class AbstractIoBuffer extends IoBuffer {
return "";
}
boolean utf16 = decoder.charset().name().startsWith("UTF-16");
boolean utf16 = decoder.charset().equals(StandardCharsets.UTF_16) ||
decoder.charset().equals(StandardCharsets.UTF_16BE) ||
decoder.charset().equals(StandardCharsets.UTF_16LE);
if (utf16 && (fieldSize & 1) != 0) {
throw new IllegalArgumentException("fieldSize is not even.");
......@@ -1855,7 +1859,10 @@ public abstract class AbstractIoBuffer extends IoBuffer {
autoExpand(fieldSize);
boolean utf16 = encoder.charset().name().startsWith("UTF-16");
boolean utf16 = encoder.charset().equals(StandardCharsets.UTF_16) ||
encoder.charset().equals(StandardCharsets.UTF_16BE) ||
encoder.charset().equals(StandardCharsets.UTF_16LE);
if (utf16 && (fieldSize & 1) != 0) {
throw new IllegalArgumentException("fieldSize is not even.");
......@@ -1954,7 +1961,10 @@ public abstract class AbstractIoBuffer extends IoBuffer {
return "";
}
boolean utf16 = decoder.charset().name().startsWith("UTF-16");
boolean utf16 = decoder.charset().equals(StandardCharsets.UTF_16) ||
decoder.charset().equals(StandardCharsets.UTF_16BE) ||
decoder.charset().equals(StandardCharsets.UTF_16LE);
if (utf16 && (fieldSize & 1) != 0) {
throw new BufferDataException("fieldSize is not even for a UTF-16 string.");
......@@ -2168,10 +2178,8 @@ public abstract class AbstractIoBuffer extends IoBuffer {
int oldLimit = limit();
limit(position() + length);
ObjectInputStream in = null;
try {
in = new ObjectInputStream(asInputStream()) {
try (ObjectInputStream in = new ObjectInputStream(asInputStream()) {
@Override
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
int type = read();
......@@ -2205,19 +2213,11 @@ public abstract class AbstractIoBuffer extends IoBuffer {
return clazz;
}
}
};
}) {
return in.readObject();
} catch (IOException e) {
throw new BufferDataException(e);
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ioe) {
// Nothing to do
}
limit(oldLimit);
}
}
......@@ -2229,10 +2229,8 @@ public abstract class AbstractIoBuffer extends IoBuffer {
public IoBuffer putObject(Object o) {
int oldPos = position();
skip(4); // Make a room for the length field.
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(asOutputStream()) {
try (ObjectOutputStream out = new ObjectOutputStream(asOutputStream()) {
@Override
protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException {
Class<?> clazz = desc.forClass();
......@@ -2246,19 +2244,11 @@ public abstract class AbstractIoBuffer extends IoBuffer {
writeUTF(desc.getName());
}
}
};
}) {
out.writeObject(o);
out.flush();
} catch (IOException e) {
throw new BufferDataException(e);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException ioe) {
// Nothing to do
}
}
// Fill the length field
......@@ -2496,6 +2486,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
/**
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> E getEnumInt(int index, Class<E> enumClass) {
return toEnum(enumClass, getInt(index));
}
......@@ -2577,7 +2568,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSet(Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSet(Class<E> enumClass) {
return toEnumSet(enumClass, get() & BYTE_MASK);
}
......@@ -2585,7 +2576,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSet(int index, Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSet(int index, Class<E> enumClass) {
return toEnumSet(enumClass, get(index) & BYTE_MASK);
}
......@@ -2593,7 +2584,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSetShort(Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSetShort(Class<E> enumClass) {
return toEnumSet(enumClass, getShort() & SHORT_MASK);
}
......@@ -2601,7 +2592,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSetShort(int index, Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSetShort(int index, Class<E> enumClass) {
return toEnumSet(enumClass, getShort(index) & SHORT_MASK);
}
......@@ -2609,7 +2600,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSetInt(Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSetInt(Class<E> enumClass) {
return toEnumSet(enumClass, getInt() & INT_MASK);
}
......@@ -2617,7 +2608,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSetInt(int index, Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSetInt(int index, Class<E> enumClass) {
return toEnumSet(enumClass, getInt(index) & INT_MASK);
}
......@@ -2625,7 +2616,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSetLong(Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSetLong(Class<E> enumClass) {
return toEnumSet(enumClass, getLong());
}
......@@ -2633,7 +2624,7 @@ public abstract class AbstractIoBuffer extends IoBuffer {
* {@inheritDoc}
*/
@Override
public <E extends Enum<E>> EnumSet<E> getEnumSetLong(int index, Class<E> enumClass) {
public <E extends Enum<E>> Set<E> getEnumSetLong(int index, Class<E> enumClass) {
return toEnumSet(enumClass, getLong(index));
}
......
......@@ -29,18 +29,36 @@ package org.apache.mina.core.buffer;
public class BufferDataException extends RuntimeException {
private static final long serialVersionUID = -4138189188602563502L;
/**
* Create a new BufferDataException instance
*/
public BufferDataException() {
super();
}
/**
* Create a new BufferDataException instance
*
* @param message The exception message
*/
public BufferDataException(String message) {
super(message);
}
/**
* Create a new BufferDataException instance
*
* @param message The exception message
* @param cause The original cause
*/
public BufferDataException(String message, Throwable cause) {
super(message, cause);
}
/**
* Create a new BufferDataException instance
* @param cause The original cause
*/
public BufferDataException(Throwable cause) {
super(cause);
}
......
......@@ -133,7 +133,7 @@ public class CachedBufferAllocator implements IoBufferAllocator {
}
Map<Integer, Queue<CachedBuffer>> newPoolMap() {
Map<Integer, Queue<CachedBuffer>> poolMap = new HashMap<Integer, Queue<CachedBuffer>>();
Map<Integer, Queue<CachedBuffer>> poolMap = new HashMap<>();
for (int i = 0; i < 31; i++) {
poolMap.put(1 << i, new ConcurrentLinkedQueue<CachedBuffer>());
......@@ -145,6 +145,10 @@ public class CachedBufferAllocator implements IoBufferAllocator {
return poolMap;
}
/**
* {@inheritDoc}
*/
@Override
public IoBuffer allocate(int requestedCapacity, boolean direct) {
int actualCapacity = IoBuffer.normalizeCapacity(requestedCapacity);
IoBuffer buf;
......@@ -184,14 +188,26 @@ public class CachedBufferAllocator implements IoBufferAllocator {
return buf;
}
/**
* {@inheritDoc}
*/
@Override
public ByteBuffer allocateNioBuffer(int capacity, boolean direct) {
return allocate(capacity, direct).buf();
}
/**
* {@inheritDoc}
*/
@Override
public IoBuffer wrap(ByteBuffer nioBuffer) {
return new CachedBuffer(nioBuffer);
}
/**
* {@inheritDoc}
*/
@Override
public void dispose() {
// Do nothing
}
......
......@@ -30,7 +30,6 @@ import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
import java.nio.ReadOnlyBufferException;
import java.nio.ShortBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
......@@ -152,6 +151,14 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
/** A flag indicating which type of buffer we are using : heap or direct */
private static boolean useDirectBuffer = false;
/**
* Creates a new instance. This is an empty constructor. It's protected,
* to forbid its usage by the users.
*/
protected IoBuffer() {
// Do nothing
}
/**
* @return the allocator used by existing and new buffers
*/
......@@ -283,14 +290,6 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
return newCapacity < 0 ? Integer.MAX_VALUE : newCapacity;
}
/**
* Creates a new instance. This is an empty constructor. It's protected,
* to forbid its usage by the users.
*/
protected IoBuffer() {
// Do nothing
}
/**
* Declares this buffer and all its derived buffers are not used anymore so
* that it can be reused by some {@link IoBufferAllocator} implementations.
......@@ -1088,9 +1087,6 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param value The medium int value to be written
*
* @return the modified IoBuffer
*
* @throws BufferOverflowException If there are fewer than three bytes remaining in this buffer
* @throws ReadOnlyBufferException If this buffer is read-only
*/
public abstract IoBuffer putMediumInt(int value);
......@@ -1110,8 +1106,6 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @throws IndexOutOfBoundsException
* If <tt>index</tt> is negative or not smaller than the
* buffer's limit, minus three
*
* @throws ReadOnlyBufferException If this buffer is read-only
*/
public abstract IoBuffer putMediumInt(int index, int value);
......@@ -1326,9 +1320,6 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
*
* @param index the position in the buffer to write the value
* @param value the int to write
*
* @param index The position where to put the unsigned short
* @param value The unsigned short to put in the IoBuffer
* @return the modified IoBuffer
*/
public abstract IoBuffer putUnsignedShort(int index, int value);
......@@ -1372,7 +1363,6 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param index The position where to put the int
* @param value The int to put in the IoBuffer
* @return the modified IoBuffer
* @return the modified IoBuffer
*/
public abstract IoBuffer putInt(int index, int value);
......@@ -1412,7 +1402,6 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param index The position where to put the long
* @param value The long to put in the IoBuffer
* @return the modified IoBuffer
* @return the modified IoBuffer
*/
public abstract IoBuffer putLong(int index, long value);
......@@ -1937,7 +1926,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSet(Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSet(Class<E> enumClass);
/**
* Reads a byte sized bit vector and converts it to an {@link EnumSet}.
......@@ -1948,7 +1937,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSet(int index, Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSet(int index, Class<E> enumClass);
/**
* Reads a short sized bit vector and converts it to an {@link EnumSet}.
......@@ -1958,7 +1947,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSetShort(Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSetShort(Class<E> enumClass);
/**
* Reads a short sized bit vector and converts it to an {@link EnumSet}.
......@@ -1969,7 +1958,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSetShort(int index, Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSetShort(int index, Class<E> enumClass);
/**
* Reads an int sized bit vector and converts it to an {@link EnumSet}.
......@@ -1979,7 +1968,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSetInt(Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSetInt(Class<E> enumClass);
/**
* Reads an int sized bit vector and converts it to an {@link EnumSet}.
......@@ -1990,7 +1979,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSetInt(int index, Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSetInt(int index, Class<E> enumClass);
/**
* Reads a long sized bit vector and converts it to an {@link EnumSet}.
......@@ -2000,7 +1989,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSetLong(Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSetLong(Class<E> enumClass);
/**
* Reads a long sized bit vector and converts it to an {@link EnumSet}.
......@@ -2011,7 +2000,7 @@ public abstract class IoBuffer implements Comparable<IoBuffer> {
* @param enumClass the enum class used to create the EnumSet
* @return the EnumSet representation of the bit vector
*/
public abstract <E extends Enum<E>> EnumSet<E> getEnumSetLong(int index, Class<E> enumClass);
public abstract <E extends Enum<E>> Set<E> getEnumSetLong(int index, Class<E> enumClass);
/**
* Writes the specified {@link Set} to the buffer as a byte sized bit
......
......@@ -20,7 +20,8 @@
package org.apache.mina.core.buffer;
/**
* Provides utility methods to dump an {@link IoBuffer} into a hex formatted string.
* Provides utility methods to dump an {@link IoBuffer} into a hex formatted
* string.
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
......@@ -60,19 +61,22 @@ class IoBufferHexDumper {
*
* @param in the buffer to dump
* @param lengthLimit the limit at which hex dumping will stop
* @return a hex formatted string representation of the <i>in</i> {@link Iobuffer}.
* @return a hex formatted string representation of the <i>in</i> {@link IoBuffer}.
*/
public static String getHexdump(IoBuffer in, int lengthLimit) {
if (lengthLimit == 0) {
throw new IllegalArgumentException("lengthLimit: " + lengthLimit + " (expected: 1+)");
}
boolean truncate = in.remaining() > lengthLimit;
int limit = in.limit();
int pos = in.position();
boolean truncate = limit - pos > lengthLimit;
int size;
if (truncate) {
size = lengthLimit;
} else {
size = in.remaining();
size = limit - pos;
}
if (size == 0) {
......@@ -81,24 +85,19 @@ class IoBufferHexDumper {
StringBuilder out = new StringBuilder(size * 3 + 3);
int mark = in.position();
// fill the first
int byteValue = in.get() & 0xFF;
int byteValue = in.get(pos++) & 0xFF;
out.append((char) highDigits[byteValue]);
out.append((char) lowDigits[byteValue]);
size--;
// and the others, too
for (; size > 0; size--) {
for (; pos < limit; ) {
out.append(' ');
byteValue = in.get() & 0xFF;
byteValue = in.get(pos++) & 0xFF;
out.append((char) highDigits[byteValue]);
out.append((char) lowDigits[byteValue]);
}
in.position(mark);
if (truncate) {
out.append("...");
}
......
......@@ -23,25 +23,42 @@ import java.io.IOException;
import java.nio.channels.FileChannel;
/**
* TODO Add documentation
* Manage a File to be sent to a remote host. We keep a track on the current
* position, and the number of already written bytes.
*
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public class DefaultFileRegion implements FileRegion {
/** The channel used to manage the file */
private final FileChannel channel;
/** The original position in the file */
private final long originalPosition;
/** The position in teh file */
private long position;
/** The number of bytes remaining to write */
private long remainingBytes;
/**
* Creates a new DefaultFileRegion instance
*
* @param channel The channel mapped over the file
* @throws IOException If we had an IO error
*/
public DefaultFileRegion(FileChannel channel) throws IOException {
this(channel, 0, channel.size());
}
/**
* Creates a new DefaultFileRegion instance
*
* @param channel The channel mapped over the file
* @param position The position in teh file
* @param remainingBytes The remaining bytes
*/
public DefaultFileRegion(FileChannel channel, long position, long remainingBytes) {
if (channel == null) {
throw new IllegalArgumentException("channel can not be null");
......@@ -61,29 +78,52 @@ public class DefaultFileRegion implements FileRegion {
this.remainingBytes = remainingBytes;
}
/**
* {@inheritDoc}
*/
@Override
public long getWrittenBytes() {
return position - originalPosition;
}
/**
* {@inheritDoc}
*/
@Override
public long getRemainingBytes() {
return remainingBytes;
}
/**
* {@inheritDoc}
*/
@Override
public FileChannel getFileChannel() {
return channel;
}
/**
* {@inheritDoc}
*/
@Override
public long getPosition() {
return position;
}
/**
* {@inheritDoc}
*/
@Override
public void update(long value) {
position += value;
remainingBytes -= value;
}
/**
* {@inheritDoc}
*/
@Override
public String getFilename() {
return null;
}
}
......@@ -49,8 +49,7 @@ public interface FileRegion {
* {@link #getWrittenBytes()} by the given amount and decreases the value
* returned by {@link #getRemainingBytes()} by the given {@code amount}.
*
* @param amount
* The new value for the file position.
* @param amount The new value for the file position.
*/
void update(long amount);
......
......@@ -24,8 +24,8 @@ import java.io.IOException;
import java.nio.channels.FileChannel;
/**
* TODO Add documentation
*
* Manage a File to be sent to a remote host. We keep a track on the current
* position, and the number of already written bytes.
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev$, $Date$
......@@ -34,10 +34,24 @@ public class FilenameFileRegion extends DefaultFileRegion {
private final File file;
public FilenameFileRegion(File file, FileChannel channel) throws IOException {
/**
* Create a new FilenameFileRegion instance
*
* @param file The file to manage
* @param channel The channel over the file
*/
public FilenameFileRegion(File file, FileChannel channel) {
this(file, channel, 0, file.length());
}
/**
* Create a new FilenameFileRegion instance
*
* @param file The file to manage
* @param channel The channel over the file
* @param position The position in teh file
* @param remainingBytes The remaining bytes
*/
public FilenameFileRegion(File file, FileChannel channel, long position, long remainingBytes) {
super(channel, position, remainingBytes);
......@@ -48,6 +62,10 @@ public class FilenameFileRegion extends DefaultFileRegion {
this.file = file;
}
/**
* {@inheritDoc}
*/
@Override
public String getFilename() {
return file.getAbsolutePath();
}
......