Fix a number of javadoc issues (#11544)

Motivation:
Let's have fewer warnings about broken, missing, or abuse of javadoc comments.

Modification:
Added descriptions to throws clauses that were missing them.
Remove link clauses from throws clauses - these are implied.
Turned some javadoc comments into block comments because they were not applied to APIs.
Use code clauses instead of code tags.

Result:
Fewer javadoc crimes.
This commit is contained in:
Chris Vest 2021-08-06 09:14:04 +02:00 committed by GitHub
parent 6c2813bdb0
commit ef203fa6cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 287 additions and 299 deletions

View File

@ -258,11 +258,11 @@ public abstract class HttpObjectDecoder extends ByteToMessageDecoder {
ctx.fireChannelRead(message);
return;
default:
/**
* <a href="https://tools.ietf.org/html/rfc7230#section-3.3.3">RFC 7230, 3.3.3</a> states that if a
* request does not have either a transfer-encoding or a content-length header then the message body
* length is 0. However for a response the body length is the number of octets received prior to the
* server closing the connection. So we treat this as variable length chunked encoding.
/*
RFC 7230, 3.3.3 (https://tools.ietf.org/html/rfc7230#section-3.3.3) states that if a
request does not have either a transfer-encoding or a content-length header then the message body
length is 0. However for a response the body length is the number of octets received prior to the
server closing the connection. So we treat this as variable length chunked encoding.
*/
long contentLength = contentLength();
if (contentLength == 0 || contentLength == -1 && isDecodingRequest()) {
@ -327,9 +327,9 @@ public abstract class HttpObjectDecoder extends ByteToMessageDecoder {
}
return;
}
/**
* everything else after this point takes care of reading chunked content. basically, read chunk size,
* read chunk, read and ignore the CRLF and repeat until 0
/*
everything else after this point takes care of reading chunked content. basically, read chunk size,
read chunk, read and ignore the CRLF and repeat until 0
*/
case READ_CHUNK_SIZE: try {
AppendableCharSequence line = lineParser.parse(buffer);

View File

@ -50,9 +50,8 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder {
/**
* Set the content from the ChannelBuffer (erase any previous data)
*
* @param buffer
* must be not null
* @throws IOException
* @param buffer Must be not null.
* @throws IOException If an IO error occurs when setting the content of this HttpData.
*/
void setContent(ByteBuf buffer) throws IOException;
@ -63,25 +62,23 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder {
* must be not null except if last is set to False
* @param last
* True of the buffer is the last one
* @throws IOException
* @throws IOException If an IO error occurs while adding content to this HttpData.
*/
void addContent(ByteBuf buffer, boolean last) throws IOException;
/**
* Set the content from the file (erase any previous data)
*
* @param file
* must be not null
* @throws IOException
* @param file Must be not null.
* @throws IOException If an IO error occurs when setting the content of this HttpData.
*/
void setContent(File file) throws IOException;
/**
* Set the content from the inputStream (erase any previous data)
*
* @param inputStream
* must be not null
* @throws IOException
* @param inputStream Must be not null.
* @throws IOException If an IO error occurs when setting the content of this HttpData.
*/
void setContent(InputStream inputStream) throws IOException;
@ -125,7 +122,7 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder {
* Note: this method will allocate a lot of memory, if the data is currently stored on the file system.
*
* @return the contents of the file item as an array of bytes.
* @throws IOException
* @throws IOException If an IO error occurs while reading the data contents of this HttpData.
*/
byte[] get() throws IOException;
@ -134,7 +131,7 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder {
* Note: this method will allocate a lot of memory, if the data is currently stored on the file system.
*
* @return the content of the file item as a ByteBuf
* @throws IOException
* @throws IOException If an IO error occurs while reading the data contents of this HttpData.
*/
ByteBuf getByteBuf() throws IOException;
@ -155,7 +152,7 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder {
*
* @return the contents of the file item as a String, using the default
* character encoding.
* @throws IOException
* @throws IOException If an IO error occurs while reading the data contents of this HttpData.
*/
String getString() throws IOException;
@ -167,7 +164,7 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder {
* the charset to use
* @return the contents of the file item as a String, using the specified
* charset.
* @throws IOException
* @throws IOException If an IO error occurs while reading the data contents of this HttpData.
*/
String getString(Charset encoding) throws IOException;
@ -192,10 +189,9 @@ public interface HttpData extends InterfaceHttpData, ByteBufHolder {
* the new file will be out of the cleaner of the factory that creates the
* original InterfaceHttpData object.
*
* @param dest
* destination file - must be not null
* @return True if the write is successful
* @throws IOException
* @param dest Destination file - must be not null.
* @return {@code true} if the write is successful.
* @throws IOException If an IO error occurs while renaming the underlying file of this HttpData.
*/
boolean renameTo(File dest) throws IOException;

View File

@ -594,8 +594,6 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
/**
* Skip control Characters
*
* @throws NotEnoughDataDecoderException
*/
private static void skipControlCharacters(ByteBuf undecodedChunk) {
if (!undecodedChunk.hasArray()) {
@ -637,7 +635,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
* @param closeDelimiterStatus
* the next getStatus if the delimiter is a close delimiter
* @return the next InterfaceHttpData if any
* @throws ErrorDataDecoderException
* @throws ErrorDataDecoderException If no multipart delimiter is found, or an error occurs during decoding.
*/
private InterfaceHttpData findMultipartDelimiter(String delimiter, MultiPartStatus dispositionStatus,
MultiPartStatus closeDelimiterStatus) {
@ -680,7 +678,6 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
* Find the next Disposition
*
* @return the next InterfaceHttpData if any
* @throws ErrorDataDecoderException
*/
private InterfaceHttpData findMultipartDisposition() {
int readerIndex = undecodedChunk.readerIndex();
@ -839,7 +836,7 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
* @param delimiter
* the delimiter to use
* @return the InterfaceHttpData if any
* @throws ErrorDataDecoderException
* @throws ErrorDataDecoderException If an error occurs when decoding the multipart data.
*/
protected InterfaceHttpData getFileUpload(String delimiter) {
// eventually restart from existing FileUpload
@ -1146,7 +1143,6 @@ public class HttpPostMultipartRequestDecoder implements InterfaceHttpPostRequest
* Load the field value or file data from a Multipart request
*
* @return {@code true} if the last chunk is loaded (boundary delimiter found), {@code false} if need more chunks
* @throws ErrorDataDecoderException
*/
private static boolean loadDataMultipartOptimized(ByteBuf undecodedChunk, String delimiter, HttpData httpData) {
if (!undecodedChunk.isReadable()) {

View File

@ -223,7 +223,7 @@ public class WebSocketClientHandshaker00 extends WebSocketClientHandshaker {
*
* @param response
* HTTP response returned from the server for the request sent by beginOpeningHandshake00().
* @throws WebSocketHandshakeException
* @throws WebSocketHandshakeException If the handshake or challenge is invalid.
*/
@Override
protected void verify(FullHttpResponse response) {

View File

@ -260,7 +260,7 @@ public class WebSocketClientHandshaker07 extends WebSocketClientHandshaker {
*
* @param response
* HTTP response returned from the server for the request sent by beginOpeningHandshake00().
* @throws WebSocketHandshakeException
* @throws WebSocketHandshakeException If the handshake or challenge is invalid.
*/
@Override
protected void verify(FullHttpResponse response) {

View File

@ -262,7 +262,7 @@ public class WebSocketClientHandshaker08 extends WebSocketClientHandshaker {
*
* @param response
* HTTP response returned from the server for the request sent by beginOpeningHandshake00().
* @throws WebSocketHandshakeException
* @throws WebSocketHandshakeException If the handshake or challenge is invalid.
*/
@Override
protected void verify(FullHttpResponse response) {

View File

@ -148,10 +148,10 @@ public class HttpClientCodecTest {
// This is just a simple demo...don't block in IO
assertTrue(ctx.channel() instanceof SocketChannel);
final SocketChannel sChannel = (SocketChannel) ctx.channel();
/**
* The point of this test is to not add any content-length or content-encoding headers
* and the client should still handle this.
* See <a href="https://tools.ietf.org/html/rfc7230#section-3.3.3">RFC 7230, 3.3.3</a>.
/*
The point of this test is to not add any content-length or content-encoding headers
and the client should still handle this.
See RFC 7230, 3.3.3: https://tools.ietf.org/html/rfc7230#section-3.3.3.
*/
sChannel.writeAndFlush(Unpooled.wrappedBuffer(("HTTP/1.0 200 OK\r\n" +
"Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n" +

View File

@ -586,7 +586,8 @@ public class DefaultHttp2LocalFlowController implements Http2LocalFlowController
*
* @param numBytes the number of bytes to be returned to the flow control window.
* @return true if {@code WINDOW_UPDATE} was written, false otherwise.
* @throws Http2Exception
* @throws Http2Exception If the number of bytes is too great for the current window,
* or an internal error occurs.
*/
boolean consumeBytes(int numBytes) throws Http2Exception;

View File

@ -89,7 +89,7 @@ import static io.netty.handler.codec.http2.Http2Error.NO_ERROR;
* {@link Http2ChannelDuplexHandler#newStream()}, and then writing a {@link Http2HeadersFrame} object with the stream
* attached.
*
* <pre>
* <pre>{@code
* final Http2Stream2 stream = handler.newStream();
* ctx.write(headersFrame.stream(stream)).addListener(new ChannelFutureListener() {
*
@ -110,7 +110,7 @@ import static io.netty.handler.codec.http2.Http2Error.NO_ERROR;
* }
* }
* }
* </pre>
* }</pre>
*
* <p>If a new stream cannot be created due to stream id exhaustion of the endpoint, the {@link ChannelPromise} of the
* HEADERS frame will fail with a {@link Http2NoMoreStreamIdsException}.

View File

@ -67,7 +67,6 @@ public class HpackEncoderTest {
/**
* The encoder should not impose an arbitrary limit on the header size if
* the server has not specified any limit.
* @throws Http2Exception
*/
@Test
public void testWillEncode16MBHeaderByDefault() throws Http2Exception {

View File

@ -121,10 +121,10 @@ public class Http2FrameCodecTest {
}
private void setUp(Http2FrameCodecBuilder frameCodecBuilder, Http2Settings initialRemoteSettings) throws Exception {
/**
* Some tests call this method twice. Once with JUnit's @Before and once directly to pass special settings.
* This call ensures that in case of two consecutive calls to setUp(), the previous channel is shutdown and
* ByteBufs are released correctly.
/*
Some tests call this method twice. Once with JUnit's @Before and once directly to pass special settings.
This call ensures that in case of two consecutive calls to setUp(), the previous channel is shutdown and
ByteBufs are released correctly.
*/
tearDown();

View File

@ -194,7 +194,6 @@ public abstract class AbstractBinaryMemcacheDecoder<M extends BinaryMemcacheMess
* When the channel goes inactive, release all frames to prevent data leaks.
*
* @param ctx handler context
* @throws Exception
*/
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {

View File

@ -156,8 +156,9 @@ public final class MqttDecoder extends ReplayingDecoder<DecoderState> {
* Decodes the fixed header. It's one byte for the flags and then variable
* bytes for the remaining length.
*
* @see
* See
* https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Toc442180841
* for more information.
*
* @param buffer the buffer to decode from
* @return the fixed header

View File

@ -64,16 +64,16 @@ public class ProtobufVarint32LengthFieldPrependerTest {
final int num = 266;
assertThat(ProtobufVarint32LengthFieldPrepender.computeRawVarint32Size(num), is(size));
final byte[] buf = new byte[size + num];
/**
* 8 A 0 2
* 1000 1010 0000 0010
* 0000 1010 0000 0010
* 0000 0010 0000 1010
* 000 0010 000 1010
*
* 0000 0001 0000 1010
* 0 1 0 A
* 266
/*
8 A 0 2
1000 1010 0000 0010
0000 1010 0000 0010
0000 0010 0000 1010
000 0010 000 1010
0000 0001 0000 1010
0 1 0 A
266
*/
buf[0] = (byte) (0x8A & 0xFF);
@ -99,16 +99,16 @@ public class ProtobufVarint32LengthFieldPrependerTest {
final int num = 0x4000;
assertThat(ProtobufVarint32LengthFieldPrepender.computeRawVarint32Size(num), is(size));
final byte[] buf = new byte[size + num];
/**
* 8 0 8 0 0 1
* 1000 0000 1000 0000 0000 0001
* 0000 0000 0000 0000 0000 0001
* 0000 0001 0000 0000 0000 0000
* 000 0001 000 0000 000 0000
*
* 0 0000 0100 0000 0000 0000
* 0 0 4 0 0 0
*
/*
8 0 8 0 0 1
1000 0000 1000 0000 0000 0001
0000 0000 0000 0000 0000 0001
0000 0001 0000 0000 0000 0000
000 0001 000 0000 000 0000
0 0000 0100 0000 0000 0000
0 0 4 0 0 0
*/
buf[0] = (byte) (0x80 & 0xFF);
@ -135,16 +135,16 @@ public class ProtobufVarint32LengthFieldPrependerTest {
final int num = 0x200000;
assertThat(ProtobufVarint32LengthFieldPrepender.computeRawVarint32Size(num), is(size));
final byte[] buf = new byte[size + num];
/**
* 8 0 8 0 8 0 0 1
* 1000 0000 1000 0000 1000 0000 0000 0001
* 0000 0000 0000 0000 0000 0000 0000 0001
* 0000 0001 0000 0000 0000 0000 0000 0000
* 000 0001 000 0000 000 0000 000 0000
*
* 0000 0010 0000 0000 0000 0000 0000
* 0 2 0 0 0 0 0
*
/*
8 0 8 0 8 0 0 1
1000 0000 1000 0000 1000 0000 0000 0001
0000 0000 0000 0000 0000 0000 0000 0001
0000 0001 0000 0000 0000 0000 0000 0000
000 0001 000 0000 000 0000 000 0000
0000 0010 0000 0000 0000 0000 0000
0 2 0 0 0 0 0
*/
buf[0] = (byte) (0x80 & 0xFF);

View File

@ -16,6 +16,7 @@
package io.netty.util.concurrent;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletionException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@ -60,7 +61,7 @@ public interface Future<V> extends java.util.concurrent.Future<V> {
* failed.
*
* @throws CancellationException if the computation was cancelled
* @throws {@link java.util.concurrent.CompletionException} if the computation threw an exception.
* @throws CompletionException if the computation threw an exception.
* @throws InterruptedException if the current thread was interrupted while waiting
*
*/
@ -71,7 +72,7 @@ public interface Future<V> extends java.util.concurrent.Future<V> {
* failed.
*
* @throws CancellationException if the computation was cancelled
* @throws {@link java.util.concurrent.CompletionException} if the computation threw an exception.
* @throws CompletionException if the computation threw an exception.
*/
Future<V> syncUninterruptibly();

View File

@ -13,29 +13,29 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Copyright (c) 2004-2011 QOS.ch
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
/*
Copyright (c) 2004-2011 QOS.ch
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.netty.util.internal.logging;

View File

@ -13,29 +13,29 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Copyright (c) 2004-2011 QOS.ch
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
/*
Copyright (c) 2004-2011 QOS.ch
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.netty.util.internal.logging;

View File

@ -13,29 +13,29 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Copyright (c) 2004-2011 QOS.ch
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
/*
Copyright (c) 2004-2011 QOS.ch
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.netty.util.internal.logging;

View File

@ -13,29 +13,29 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Copyright (c) 2004-2011 QOS.ch
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
/*
Copyright (c) 2004-2011 QOS.ch
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.netty.util.internal.logging;

View File

@ -13,29 +13,29 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Copyright (c) 2004-2011 QOS.ch
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
/*
Copyright (c) 2004-2011 QOS.ch
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.netty.util.internal.logging;

View File

@ -13,29 +13,29 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Copyright (c) 2004-2011 QOS.ch
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
/*
Copyright (c) 2004-2011 QOS.ch
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.netty.util.internal.logging;

View File

@ -13,28 +13,28 @@
* License for the specific language governing permissions and limitations
* under the License.
*/
/**
* Copyright (c) 2004-2011 QOS.ch
* All rights reserved.
* <p>
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
* <p>
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* <p>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/*
Copyright (c) 2004-2011 QOS.ch
All rights reserved.
<p>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
<p>
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
<p>
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package io.netty.util.internal.logging;

View File

@ -52,7 +52,7 @@ public abstract class SslMasterKeyHandler implements ChannelHandler {
/**
* A system property that can be used to turn on/off the {@link SslMasterKeyHandler} dynamically without having
* to edit your pipeline.
* <code>-Dio.netty.ssl.masterKeyHandler=true</code>
* {@code -Dio.netty.ssl.masterKeyHandler=true}
*/
public static final String SYSTEM_PROP_KEY = "io.netty.ssl.masterKeyHandler";
@ -171,8 +171,8 @@ public abstract class SslMasterKeyHandler implements ChannelHandler {
}
/**
* Record the session identifier and master key to the {@link InternalLogger} named <code>io.netty.wireshark</code>.
* ex. <code>RSA Session-ID:XXX Master-Key:YYY</code>
* Record the session identifier and master key to the {@link InternalLogger} named {@code io.netty.wireshark}.
* ex. {@code RSA Session-ID:XXX Master-Key:YYY}
* This format is understood by Wireshark 1.6.0.
* https://code.wireshark.org/review/gitweb?p=wireshark.git;a=commit;h=686d4cabb41185591c361f9ec6b709034317144b
* The key and session identifier are forwarded to the log named 'io.netty.wireshark'.

View File

@ -43,6 +43,7 @@ import io.netty.handler.codec.dns.DnsSection;
import io.netty.resolver.HostsFileEntriesProvider;
import io.netty.resolver.HostsFileEntriesResolver;
import io.netty.resolver.ResolvedAddressTypes;
import io.netty.resolver.dns.TestDnsServer.TestResourceRecord;
import io.netty.util.CharsetUtil;
import io.netty.util.NetUtil;
import io.netty.util.ReferenceCountUtil;
@ -66,10 +67,11 @@ import org.apache.directory.server.dns.messages.ResponseCode;
import org.apache.directory.server.dns.store.DnsAttribute;
import org.apache.directory.server.dns.store.RecordStore;
import org.apache.mina.core.buffer.IoBuffer;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.function.Executable;
import java.io.IOException;
import java.io.InputStream;
@ -96,8 +98,8 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.CompletionException;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletionException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CopyOnWriteArrayList;
@ -107,8 +109,6 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.function.Executable;
import static io.netty.handler.codec.dns.DnsRecordType.A;
import static io.netty.handler.codec.dns.DnsRecordType.AAAA;
@ -459,19 +459,17 @@ public class DnsNameResolverTest {
* simultaneously.
*/
@Test
public void testNameServerCache() throws IOException, InterruptedException {
public void testNameServerCache() throws Exception {
final String overriddenIP = "12.34.12.34";
final TestDnsServer dnsServer2 = new TestDnsServer(question -> {
switch (question.getRecordType()) {
case A:
Map<String, Object> attr = new HashMap<>();
attr.put(DnsAttribute.IP_ADDRESS.toLowerCase(Locale.US), overriddenIP);
return Collections.singleton(
new TestDnsServer.TestResourceRecord(
question.getDomainName(), question.getRecordType(), attr));
default:
return null;
if (question.getRecordType() == RecordType.A) {
Map<String, Object> attr = new HashMap<>();
attr.put(DnsAttribute.IP_ADDRESS.toLowerCase(Locale.US), overriddenIP);
return Collections.singleton(
new TestResourceRecord(
question.getDomainName(), question.getRecordType(), attr));
}
return null;
});
dnsServer2.start();
try {
@ -1148,8 +1146,8 @@ public class DnsNameResolverTest {
final List<DnsRecord> records = resolver.resolveAll(new DefaultDnsQuestion("foo.com.", A))
.syncUninterruptibly().getNow();
assertThat(records, Matchers.hasSize(1));
assertThat(records.get(0), Matchers.instanceOf(DnsRawRecord.class));
assertThat(records, hasSize(1));
assertThat(records.get(0), instanceOf(DnsRawRecord.class));
final DnsRawRecord record = (DnsRawRecord) records.get(0);
final ByteBuf content = record.content();
@ -1953,7 +1951,7 @@ public class DnsNameResolverTest {
try {
final List<InetAddress> addresses = resolver.resolveAll(unresolved).sync().get();
assertThat(addresses, Matchers.<InetAddress>hasSize(greaterThan(0)));
assertThat(addresses, hasSize(greaterThan(0)));
for (InetAddress address : addresses) {
assertThat(address.getHostName(), startsWith(unresolved));
assertThat(address.getHostAddress(), startsWith(ipAddrPrefix));
@ -1964,13 +1962,14 @@ public class DnsNameResolverTest {
}
}
private void testNsLoopFailsResolve(AuthoritativeDnsServerCache authoritativeDnsServerCache) throws Exception {
private static void testNsLoopFailsResolve(AuthoritativeDnsServerCache authoritativeDnsServerCache)
throws Exception {
final String domain = "netty.io";
final String ns1Name = "ns1." + domain;
final String ns2Name = "ns2." + domain;
TestDnsServer testDnsServer = new TestDnsServer(new HashSet<String>(
Collections.singletonList(domain))) {
singletonList(domain))) {
@Override
protected DnsMessage filterMessage(DnsMessage message) {
@ -1997,9 +1996,9 @@ public class DnsNameResolverTest {
try {
assertThat(resolver.resolve(domain).await().cause(),
Matchers.<Throwable>instanceOf(UnknownHostException.class));
instanceOf(UnknownHostException.class));
assertThat(resolver.resolveAll(domain).await().cause(),
Matchers.<Throwable>instanceOf(UnknownHostException.class));
instanceOf(UnknownHostException.class));
} finally {
resolver.close();
testDnsServer.stop();
@ -2455,7 +2454,7 @@ public class DnsNameResolverTest {
() -> testSearchDomainQueryFailureCompletes(ResolvedAddressTypes.IPV4_PREFERRED));
}
private void testSearchDomainQueryFailureCompletes(ResolvedAddressTypes types) throws Throwable {
private static void testSearchDomainQueryFailureCompletes(ResolvedAddressTypes types) throws Throwable {
DnsNameResolver resolver = newResolver()
.resolvedAddressTypes(types)
.ndots(1)
@ -2562,7 +2561,7 @@ public class DnsNameResolverTest {
TestDnsServer server = new TestDnsServer(Collections.singleton("test.netty.io"));
server.start();
DnsNameResolver resolver = newResolver(ResolvedAddressTypes.IPV4_ONLY)
.searchDomains(Collections.singletonList("netty.io"))
.searchDomains(singletonList("netty.io"))
.nameServerProvider(new SingletonDnsServerAddressStreamProvider(server.localAddress()))
.resolveCache(cache).build();
try {
@ -2807,16 +2806,12 @@ public class DnsNameResolverTest {
if (qName.equals(name)) {
records.add(new TestDnsServer.TestResourceRecord(
qName, RecordType.CNAME,
Collections.<String, Object>singletonMap(
Collections.singletonMap(
DnsAttribute.DOMAIN_NAME.toLowerCase(), "cname.netty.io")));
records.add(new TestDnsServer.TestResourceRecord(qName,
RecordType.A, Collections.<String, Object>singletonMap(
DnsAttribute.IP_ADDRESS.toLowerCase(), ipv4Addr)));
} else {
records.add(new TestDnsServer.TestResourceRecord(qName,
RecordType.A, Collections.<String, Object>singletonMap(
DnsAttribute.IP_ADDRESS.toLowerCase(), ipv4Addr)));
}
records.add(new TestDnsServer.TestResourceRecord(qName,
RecordType.A, Collections.singletonMap(
DnsAttribute.IP_ADDRESS.toLowerCase(), ipv4Addr)));
return records;
});
dnsServer2.start();
@ -2830,8 +2825,8 @@ public class DnsNameResolverTest {
resolver = builder.build();
List<InetAddress> resolvedAddresses = resolver.resolveAll(name).syncUninterruptibly().getNow();
assertEquals(Collections.singletonList(InetAddress.getByAddress(name, new byte[] { 1, 2, 3, 4 })),
resolvedAddresses);
assertEquals(singletonList(InetAddress.getByAddress(name, new byte[] { 1, 2, 3, 4 })),
resolvedAddresses);
} finally {
dnsServer2.stop();
if (resolver != null) {
@ -2848,10 +2843,10 @@ public class DnsNameResolverTest {
Set<ResourceRecord> records = new LinkedHashSet<ResourceRecord>(2);
String qName = question.getDomainName().toLowerCase();
records.add(new TestDnsServer.TestResourceRecord(qName,
RecordType.A, Collections.<String, Object>singletonMap(
RecordType.A, Collections.singletonMap(
DnsAttribute.IP_ADDRESS.toLowerCase(), ipv4Addr)));
records.add(new TestDnsServer.TestResourceRecord(qName,
RecordType.A, Collections.<String, Object>singletonMap(
RecordType.A, Collections.singletonMap(
DnsAttribute.IP_ADDRESS.toLowerCase(), ipv4Addr)));
return records;
});
@ -2940,11 +2935,11 @@ public class DnsNameResolverTest {
if (name.equals(host)) {
Set<ResourceRecord> records = new HashSet<ResourceRecord>(2);
records.add(new TestDnsServer.TestResourceRecord(name, RecordType.A,
Collections.<String, Object>singletonMap(DnsAttribute.IP_ADDRESS.toLowerCase(),
"10.0.0.1")));
Collections.singletonMap(DnsAttribute.IP_ADDRESS.toLowerCase(),
"10.0.0.1")));
records.add(new TestDnsServer.TestResourceRecord(name, RecordType.A,
Collections.<String, Object>singletonMap(DnsAttribute.IP_ADDRESS.toLowerCase(),
"10.0.0.2")));
Collections.singletonMap(DnsAttribute.IP_ADDRESS.toLowerCase(),
"10.0.0.2")));
return records;
}
return null;
@ -3020,9 +3015,9 @@ public class DnsNameResolverTest {
TestDnsServer dnsServer2 = new TestDnsServer(question -> {
String name = question.getDomainName();
if (name.equals(host)) {
return Collections.<ResourceRecord>singleton(
return Collections.singleton(
new TestDnsServer.TestResourceRecord(name, RecordType.TXT,
Collections.<String, Object>singletonMap(
Collections.singletonMap(
DnsAttribute.CHARACTER_STRING.toLowerCase(), txt)));
}
return null;
@ -3080,8 +3075,8 @@ public class DnsNameResolverTest {
Socket socket = serverSocket.accept();
InputStream in = socket.getInputStream();
assertTrue((in.read() << 8 | (in.read() & 0xff)) > 2); // skip length field
int txnId = in.read() << 8 | (in.read() & 0xff);
assertTrue((in.read() << 8 | in.read() & 0xff) > 2); // skip length field
int txnId = in.read() << 8 | in.read() & 0xff;
IoBuffer ioBuffer = IoBuffer.allocate(1024);
// Must replace the transactionId with the one from the TCP request
@ -3141,7 +3136,7 @@ public class DnsNameResolverTest {
public void testCancelPromise() throws Exception {
final EventLoop eventLoop = group.next();
final Promise<InetAddress> promise = eventLoop.newPromise();
final TestDnsServer dnsServer1 = new TestDnsServer(Collections.<String>emptySet()) {
final TestDnsServer dnsServer1 = new TestDnsServer(Collections.emptySet()) {
@Override
protected DnsMessage filterMessage(DnsMessage message) {
promise.cancel(true);
@ -3150,7 +3145,7 @@ public class DnsNameResolverTest {
};
dnsServer1.start();
final AtomicBoolean isQuerySentToSecondServer = new AtomicBoolean();
final TestDnsServer dnsServer2 = new TestDnsServer(Collections.<String>emptySet()) {
final TestDnsServer dnsServer2 = new TestDnsServer(Collections.emptySet()) {
@Override
protected DnsMessage filterMessage(DnsMessage message) {
isQuerySentToSecondServer.set(true);

View File

@ -88,15 +88,15 @@ final class KQueueRecvByteAllocatorHandle extends DelegatingHandle implements Ex
}
boolean maybeMoreDataToRead() {
/**
* kqueue with EV_CLEAR flag set requires that we read until we consume "data" bytes
* (see <a href="https://www.freebsd.org/cgi/man.cgi?kqueue">kqueue man</a>). However in order to
* respect auto read we supporting reading to stop if auto read is off. If auto read is on we force reading to
* continue to avoid a {@link StackOverflowError} between channelReadComplete and reading from the
* channel. It is expected that the {@link #KQueueSocketChannel} implementations will track if all data was not
* read, and will force a EVFILT_READ ready event.
*
* It is assumed EOF is handled externally by checking {@link #isReadEOF()}.
/*
kqueue with EV_CLEAR flag set requires that we read until we consume "data" bytes
(see kqueue man: https://www.freebsd.org/cgi/man.cgi?kqueue). However, in order to
respect auto read we support reading to stop if auto read is off. If auto read is on we force reading to
continue to avoid a {@link StackOverflowError} between channelReadComplete and reading from the
channel. It is expected that the {@link #KQueueSocketChannel} implementations will track if all data was not
read, and will force a EVFILT_READ ready event.
It is assumed EOF is handled externally by checking {@link #isReadEOF()}.
*/
return numberBytesPending != 0;
}

View File

@ -50,7 +50,7 @@ public final class Unix {
/**
* Internal method... Should never be called from the user.
*
* @param registerTask
* @param registerTask The task to run if this thread caused registration.
*/
@UnstableApi
public static void registerInternal(Runnable registerTask) {