Remove apiviz tags - we are focusing on user guide instead and putting diagrams there
This commit is contained in:
parent
6201fb98c7
commit
1011227b88
@ -226,8 +226,6 @@ import java.nio.charset.UnsupportedCharsetException;
|
||||
*
|
||||
* Please refer to {@link ByteBufInputStream} and
|
||||
* {@link ByteBufOutputStream}.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public interface ByteBuf extends Buf, Comparable<ByteBuf> {
|
||||
|
||||
|
@ -15,9 +15,6 @@
|
||||
*/
|
||||
package io.netty.buffer;
|
||||
|
||||
/**
|
||||
* @apiviz.has io.netty.buffer.ByteBuf oneway - - creates
|
||||
*/
|
||||
public interface ByteBufAllocator {
|
||||
|
||||
ByteBuf buffer();
|
||||
|
@ -24,7 +24,6 @@ package io.netty.buffer;
|
||||
* refer to {@link ByteBuf#indexOf(int, int, ByteBufIndexFinder)} and
|
||||
* {@link ByteBuf#bytesBefore(int, int, ByteBufIndexFinder)}
|
||||
* for more explanation.
|
||||
* @apiviz.uses io.netty.buffer.ByteBuf
|
||||
*/
|
||||
public interface ByteBufIndexFinder {
|
||||
|
||||
|
@ -34,8 +34,8 @@ import java.io.InputStream;
|
||||
* This stream implements {@link DataInput} for your convenience.
|
||||
* The endianness of the stream is not always big endian but depends on
|
||||
* the endianness of the underlying buffer.
|
||||
*
|
||||
* @see ByteBufOutputStream
|
||||
* @apiviz.uses io.netty.buffer.ByteBuf
|
||||
*/
|
||||
public class ByteBufInputStream extends InputStream implements DataInput {
|
||||
|
||||
|
@ -30,8 +30,8 @@ import java.io.OutputStream;
|
||||
* This stream implements {@link DataOutput} for your convenience.
|
||||
* The endianness of the stream is not always big endian but depends on
|
||||
* the endianness of the underlying buffer.
|
||||
*
|
||||
* @see ByteBufInputStream
|
||||
* @apiviz.uses io.netty.buffer.ByteBuf
|
||||
*/
|
||||
public class ByteBufOutputStream extends OutputStream implements DataOutput {
|
||||
|
||||
|
@ -22,8 +22,6 @@ import java.util.Queue;
|
||||
* Buf which operates on messages.
|
||||
*
|
||||
* @param <T> the type of the messages that are hold by this {@link MessageBuf}
|
||||
*
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public interface MessageBuf<T> extends Buf, Queue<T> {
|
||||
|
||||
|
@ -72,8 +72,6 @@ import java.util.Queue;
|
||||
* This class also provides various utility methods to help implementation
|
||||
* of a new buffer type, generation of hex dump and swapping an integer's
|
||||
* byte order.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.buffer.Buf oneway - - creates
|
||||
*/
|
||||
public final class Unpooled {
|
||||
|
||||
|
@ -126,14 +126,5 @@
|
||||
* easier for a JVM to optimize the buffer access. More complicated buffer
|
||||
* implementation is used only for sliced or composite buffers, and it performs
|
||||
* as well as {@link java.nio.ByteBuffer}.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.exclude ^java\.lang\.
|
||||
* @apiviz.exclude netty\.((?!buffer).)+$
|
||||
* @apiviz.exclude (In|Out)putStream$
|
||||
* @apiviz.exclude \.(Abstract|Default)((?!ByteBufAllocator).)*$
|
||||
* @apiviz.exclude \.(BufType|BufUtil)$
|
||||
* @apiviz.exclude \.[^\.]+Exception$
|
||||
* @apiviz.exclude \.(Empty|Swapped|Default|Sliced|Duplicated|ReadOnly)[^\.]*ByteBuf$
|
||||
*/
|
||||
package io.netty.buffer;
|
||||
|
@ -27,9 +27,6 @@ import static io.netty.handler.codec.http.CookieEncoderUtil.*;
|
||||
* </pre>
|
||||
*
|
||||
* @see CookieDecoder
|
||||
*
|
||||
* @apiviz.stereotype utility
|
||||
* @apiviz.has io.netty.handler.codec.http.Cookie oneway - - encodes
|
||||
*/
|
||||
public final class ClientCookieEncoder {
|
||||
|
||||
|
@ -36,9 +36,6 @@ import java.util.TreeSet;
|
||||
*
|
||||
* @see ClientCookieEncoder
|
||||
* @see ServerCookieEncoder
|
||||
*
|
||||
* @apiviz.stereotype utility
|
||||
* @apiviz.has io.netty.handler.codec.http.Cookie oneway - - decodes
|
||||
*/
|
||||
public final class CookieDecoder {
|
||||
|
||||
|
@ -41,9 +41,6 @@ import java.util.concurrent.atomic.AtomicLong;
|
||||
* a {@link PrematureChannelClosureException} is thrown.
|
||||
*
|
||||
* @see HttpServerCodec
|
||||
*
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpResponseDecoder
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpRequestEncoder
|
||||
*/
|
||||
public final class HttpClientCodec
|
||||
extends CombinedChannelDuplexHandler
|
||||
|
@ -25,7 +25,6 @@ import io.netty.channel.ChannelPipeline;
|
||||
* is 'chunked. If you prefer not to receive {@link HttpContent} in your handler,
|
||||
* place {@link HttpObjectAggregator} after {@link HttpObjectDecoder} in the
|
||||
* {@link ChannelPipeline}.
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public interface HttpContent extends HttpObject, ByteBufHolder {
|
||||
@Override
|
||||
|
@ -29,8 +29,6 @@ import java.util.Set;
|
||||
/**
|
||||
* Provides the constants for the standard HTTP header names and values and
|
||||
* commonly used utility methods that accesses an {@link HttpMessage}.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public abstract class HttpHeaders implements Iterable<Map.Entry<String, String>> {
|
||||
|
||||
@ -102,11 +100,7 @@ public abstract class HttpHeaders implements Iterable<Map.Entry<String, String>>
|
||||
};
|
||||
|
||||
/**
|
||||
* Standard and CORS HTTP header names.
|
||||
* For CORS headers, see
|
||||
* https://developer.mozilla.org/en-US/docs/HTTP_access_control
|
||||
*
|
||||
* @apiviz.stereotype static
|
||||
* Standard HTTP header names.
|
||||
*/
|
||||
public static final class Names {
|
||||
/**
|
||||
@ -408,7 +402,6 @@ public abstract class HttpHeaders implements Iterable<Map.Entry<String, String>>
|
||||
|
||||
/**
|
||||
* Standard HTTP header values.
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public static final class Values {
|
||||
/**
|
||||
|
@ -19,12 +19,10 @@ package io.netty.handler.codec.http;
|
||||
/**
|
||||
* An interface that defines a HTTP message, providing common properties for
|
||||
* {@link HttpRequest} and {@link HttpResponse}.
|
||||
*
|
||||
* @see HttpResponse
|
||||
* @see HttpRequest
|
||||
* @see HttpHeaders
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpContent oneway - - is followed by
|
||||
*/
|
||||
public interface HttpMessage extends HttpObject {
|
||||
|
||||
|
@ -22,7 +22,6 @@ import java.util.Map;
|
||||
* The request getMethod of HTTP or its derived protocols, such as
|
||||
* <a href="http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol">RTSP</a> and
|
||||
* <a href="http://en.wikipedia.org/wiki/Internet_Content_Adaptation_Protocol">ICAP</a>.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class HttpMethod implements Comparable<HttpMethod> {
|
||||
/**
|
||||
|
@ -44,8 +44,6 @@ import static io.netty.handler.codec.http.HttpHeaders.*;
|
||||
* p.addLast("encoder", new {@link HttpResponseEncoder}());
|
||||
* p.addLast("handler", new HttpRequestHandler());
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpContent oneway - - filters out
|
||||
*/
|
||||
public class HttpObjectAggregator extends MessageToMessageDecoder<HttpObject> {
|
||||
public static final int DEFAULT_MAX_COMPOSITEBUFFER_COMPONENTS = 1024;
|
||||
|
@ -95,7 +95,6 @@ import java.util.List;
|
||||
* <a href="http://en.wikipedia.org/wiki/Internet_Content_Adaptation_Protocol">ICAP</a>.
|
||||
* To implement the decoder of such a derived protocol, extend this class and
|
||||
* implement all abstract methods properly.
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public abstract class HttpObjectDecoder extends ReplayingDecoder<HttpObjectDecoder.State> {
|
||||
|
||||
@ -112,9 +111,8 @@ public abstract class HttpObjectDecoder extends ReplayingDecoder<HttpObjectDecod
|
||||
/**
|
||||
* The internal state of {@link HttpObjectDecoder}.
|
||||
* <em>Internal use only</em>.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
protected enum State {
|
||||
enum State {
|
||||
SKIP_CONTROL_CHARS,
|
||||
READ_INITIAL,
|
||||
READ_HEADER,
|
||||
|
@ -37,7 +37,6 @@ import static io.netty.handler.codec.http.HttpConstants.*;
|
||||
* <a href="http://en.wikipedia.org/wiki/Internet_Content_Adaptation_Protocol">ICAP</a>.
|
||||
* To implement the encoder of such a derived protocol, extend this class and
|
||||
* implement all abstract methods properly.
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public abstract class HttpObjectEncoder<H extends HttpMessage> extends MessageToByteEncoder<HttpObject> {
|
||||
|
||||
|
@ -19,7 +19,6 @@ package io.netty.handler.codec.http;
|
||||
* The response code and its description of HTTP or its derived protocols, such as
|
||||
* <a href="http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol">RTSP</a> and
|
||||
* <a href="http://en.wikipedia.org/wiki/Internet_Content_Adaptation_Protocol">ICAP</a>.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class HttpResponseStatus implements Comparable<HttpResponseStatus> {
|
||||
|
||||
|
@ -26,10 +26,8 @@ import io.netty.channel.CombinedChannelDuplexHandler;
|
||||
/**
|
||||
* A combination of {@link HttpRequestDecoder} and {@link HttpResponseEncoder}
|
||||
* which enables easier server side HTTP implementation.
|
||||
* @see HttpClientCodec
|
||||
*
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpRequestDecoder
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpResponseEncoder
|
||||
* @see HttpClientCodec
|
||||
*/
|
||||
public final class HttpServerCodec
|
||||
extends CombinedChannelDuplexHandler
|
||||
|
@ -22,7 +22,6 @@ import java.util.regex.Pattern;
|
||||
* The version of HTTP or its derived protocols, such as
|
||||
* <a href="http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol">RTSP</a> and
|
||||
* <a href="http://en.wikipedia.org/wiki/Internet_Content_Adaptation_Protocol">ICAP</a>.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class HttpVersion implements Comparable<HttpVersion> {
|
||||
|
||||
|
@ -52,9 +52,6 @@ import java.util.Map;
|
||||
* integer parameter.
|
||||
*
|
||||
* @see QueryStringEncoder
|
||||
*
|
||||
* @apiviz.stereotype utility
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpRequest oneway - - decodes URI
|
||||
*/
|
||||
public class QueryStringDecoder {
|
||||
|
||||
|
@ -34,9 +34,6 @@ import java.util.List;
|
||||
* assert encoder.toString().equals("/hello?recipient=world");
|
||||
* </pre>
|
||||
* @see QueryStringDecoder
|
||||
*
|
||||
* @apiviz.stereotype utility
|
||||
* @apiviz.has io.netty.handler.codec.http.HttpRequest oneway - - encodes URI
|
||||
*/
|
||||
public class QueryStringEncoder {
|
||||
|
||||
|
@ -32,9 +32,6 @@ import static io.netty.handler.codec.http.CookieEncoderUtil.*;
|
||||
* </pre>
|
||||
*
|
||||
* @see CookieDecoder
|
||||
*
|
||||
* @apiviz.stereotype utility
|
||||
* @apiviz.has io.netty.handler.codec.http.Cookie oneway - - encodes
|
||||
*/
|
||||
public final class ServerCookieEncoder {
|
||||
|
||||
|
@ -16,13 +16,5 @@
|
||||
|
||||
/**
|
||||
* Encoder, decoder and their related message types for HTTP.
|
||||
*
|
||||
* @apiviz.exclude ^java\.lang\.
|
||||
* @apiviz.exclude \.HttpHeaders\.
|
||||
* @apiviz.exclude \.codec\.replay\.
|
||||
* @apiviz.exclude \.(Simple)?Channel[A-Za-z]*Handler$
|
||||
* @apiviz.exclude \.Rtsp
|
||||
* @apiviz.exclude \.Default
|
||||
* @apiviz.exclude \.Http(Client|Server)Codec$
|
||||
*/
|
||||
package io.netty.handler.codec.http;
|
||||
|
@ -23,9 +23,6 @@ import static io.netty.handler.codec.http.websocketx.WebSocketVersion.*;
|
||||
|
||||
/**
|
||||
* Creates a new {@link WebSocketClientHandshaker} of desired protocol version.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker oneway - - creates
|
||||
*/
|
||||
public final class WebSocketClientHandshakerFactory {
|
||||
|
||||
|
@ -26,9 +26,6 @@ import io.netty.handler.codec.http.HttpVersion;
|
||||
/**
|
||||
* Auto-detects the version of the Web Socket protocol in use and creates a new proper
|
||||
* {@link WebSocketServerHandshaker}.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.http.websocketx.WebSocketServerHandshaker oneway - - creates
|
||||
*/
|
||||
public class WebSocketServerHandshakerFactory {
|
||||
|
||||
|
@ -32,10 +32,6 @@
|
||||
* server, take a look into the <tt>WebSocketServerX</tt> example located in the
|
||||
* {@code io.netty.example.http.websocket} package.
|
||||
* </p>
|
||||
*
|
||||
* @apiviz.exclude [0-9][0-9]
|
||||
* @apiviz.exclude Exception$
|
||||
* @apiviz.exclude Version$
|
||||
*/
|
||||
package io.netty.handler.codec.http.websocketx;
|
||||
|
||||
|
@ -20,8 +20,6 @@ import io.netty.handler.codec.http.HttpHeaders;
|
||||
|
||||
/**
|
||||
* Standard RTSP header names and values.
|
||||
* @apiviz.exclude
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public final class RtspHeaders {
|
||||
|
||||
|
@ -22,7 +22,6 @@ import java.util.Map;
|
||||
|
||||
/**
|
||||
* The request getMethod of RTSP.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public final class RtspMethods {
|
||||
|
||||
|
@ -47,7 +47,6 @@ import io.netty.handler.codec.http.HttpObjectDecoder;
|
||||
* value, a {@link TooLongFrameException} will be raised.</td>
|
||||
* </tr>
|
||||
* </table>
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public abstract class RtspObjectDecoder extends HttpObjectDecoder {
|
||||
|
||||
|
@ -24,9 +24,6 @@ import io.netty.handler.codec.http.HttpObjectEncoder;
|
||||
/**
|
||||
* Encodes an RTSP message represented in {@link FullHttpMessage} into
|
||||
* a {@link ByteBuf}.
|
||||
|
||||
*
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
@Sharable
|
||||
public abstract class RtspObjectEncoder<H extends HttpMessage> extends HttpObjectEncoder<H> {
|
||||
|
@ -19,7 +19,6 @@ import io.netty.handler.codec.http.HttpResponseStatus;
|
||||
|
||||
/**
|
||||
* The getStatus code and its description of a RTSP response.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public final class RtspResponseStatuses {
|
||||
|
||||
|
@ -19,7 +19,6 @@ import io.netty.handler.codec.http.HttpVersion;
|
||||
|
||||
/**
|
||||
* The version of RTSP.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public final class RtspVersions {
|
||||
|
||||
|
@ -17,7 +17,5 @@
|
||||
/**
|
||||
* An <a href="http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol">RTSP</a>
|
||||
* extension based on the HTTP codec.
|
||||
*
|
||||
* @apiviz.exclude \.RtspHeaders\.
|
||||
*/
|
||||
package io.netty.handler.codec.rtsp;
|
||||
|
@ -25,9 +25,6 @@ import io.netty.channel.CombinedChannelDuplexHandler;
|
||||
|
||||
/**
|
||||
* A combination of {@link SpdyFrameDecoder} and {@link SpdyFrameEncoder}.
|
||||
*
|
||||
* @apiviz.has io.netty.handler.codec.spdy.SpdyFrameDecoder
|
||||
* @apiviz.has io.netty.handler.codec.spdy.SpdyFrameEncoder
|
||||
*/
|
||||
public final class SpdyFrameCodec
|
||||
extends CombinedChannelDuplexHandler
|
||||
|
@ -28,7 +28,6 @@ import java.util.Set;
|
||||
/**
|
||||
* Provides the constants for the standard SPDY HTTP header names and commonly
|
||||
* used utility methods that access a {@link SpdyHeaderBlock}.
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public abstract class SpdyHeaders implements Iterable<Map.Entry<String, String>> {
|
||||
|
||||
@ -102,7 +101,6 @@ public abstract class SpdyHeaders implements Iterable<Map.Entry<String, String>>
|
||||
|
||||
/**
|
||||
* SPDY HTTP header names
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public static final class HttpNames {
|
||||
/**
|
||||
@ -135,7 +133,6 @@ public abstract class SpdyHeaders implements Iterable<Map.Entry<String, String>>
|
||||
|
||||
/**
|
||||
* SPDY/2 HTTP header names
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public static final class Spdy2HttpNames {
|
||||
/**
|
||||
|
@ -25,8 +25,6 @@ import io.netty.handler.codec.http.HttpObject;
|
||||
|
||||
/**
|
||||
* A combination of {@link SpdyHttpDecoder} and {@link SpdyHttpEncoder}
|
||||
* @apiviz.has io.netty.handler.codec.sdpy.SpdyHttpDecoder
|
||||
* @apiviz.has io.netty.handler.codec.spdy.SpdyHttpEncoder
|
||||
*/
|
||||
public final class SpdyHttpCodec
|
||||
extends CombinedChannelDuplexHandler
|
||||
|
@ -21,13 +21,11 @@ import io.netty.handler.codec.http.HttpMessage;
|
||||
/**
|
||||
* Provides the constants for the header names and the utility methods
|
||||
* used by the {@link SpdyHttpDecoder} and {@link SpdyHttpEncoder}.
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public final class SpdyHttpHeaders {
|
||||
|
||||
/**
|
||||
* SPDY HTTP header names
|
||||
* @apiviz.stereotype static
|
||||
*/
|
||||
public static final class Names {
|
||||
/**
|
||||
|
@ -18,7 +18,6 @@ package io.netty.handler.codec.spdy;
|
||||
/**
|
||||
* An {@link Exception} which is thrown when the received frame cannot
|
||||
* be decoded by the {@link SpdyFrameDecoder}.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class SpdyProtocolException extends Exception {
|
||||
|
||||
|
@ -17,7 +17,6 @@ package io.netty.handler.codec.spdy;
|
||||
|
||||
/**
|
||||
* The SPDY session getStatus code and its description.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class SpdySessionStatus implements Comparable<SpdySessionStatus> {
|
||||
|
||||
|
@ -17,7 +17,6 @@ package io.netty.handler.codec.spdy;
|
||||
|
||||
/**
|
||||
* The SPDY stream getStatus code and its description.
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class SpdyStreamStatus implements Comparable<SpdyStreamStatus> {
|
||||
|
||||
|
@ -15,13 +15,5 @@
|
||||
*/
|
||||
/**
|
||||
* Encoder, decoder, session handler and their related message types for the SPDY protocol.
|
||||
*
|
||||
* @apiviz.exclude ^java\.lang\.
|
||||
* @apiviz.exclude OneToOne(Encoder|Decoder)$
|
||||
* @apiviz.exclude \.SpdyHeaders\.
|
||||
* @apiviz.exclude \.codec\.frame\.
|
||||
* @apiviz.exclude \.(Simple)?Channel[A-Za-z]*Handler$
|
||||
* @apiviz.exclude \.Default
|
||||
* @apiviz.exclude \.SpdyFrameCodec$
|
||||
*/
|
||||
package io.netty.handler.codec.spdy;
|
||||
|
@ -16,8 +16,6 @@
|
||||
|
||||
/**
|
||||
* Encoder, decoder and their related message types for Socks.
|
||||
*
|
||||
* @apiviz.exclude \.Socks.*(Type|Version|Status|Scheme)$
|
||||
*/
|
||||
package io.netty.handler.codec.socks;
|
||||
// TODO: Combine decoders into one.
|
||||
|
@ -17,8 +17,6 @@ package io.netty.handler.codec;
|
||||
|
||||
/**
|
||||
* An {@link Exception} which is thrown by a codec.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class CodecException extends RuntimeException {
|
||||
|
||||
|
@ -18,8 +18,6 @@ package io.netty.handler.codec;
|
||||
/**
|
||||
* An {@link DecoderException} which is thrown when the received frame data could not be decoded by
|
||||
* an inbound handler.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class CorruptedFrameException extends DecoderException {
|
||||
|
||||
|
@ -17,8 +17,6 @@ package io.netty.handler.codec;
|
||||
|
||||
/**
|
||||
* An {@link CodecException} which is thrown by a dencoder.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class DecoderException extends CodecException {
|
||||
|
||||
|
@ -52,7 +52,6 @@ import io.netty.channel.ChannelHandlerContext;
|
||||
* | ABC\nDEF |
|
||||
* +----------+
|
||||
* </pre>
|
||||
* @apiviz.uses io.netty.handler.codec.Delimiters - - useful
|
||||
*/
|
||||
public class DelimiterBasedFrameDecoder extends ByteToMessageDecoder {
|
||||
|
||||
|
@ -17,8 +17,6 @@ package io.netty.handler.codec;
|
||||
|
||||
/**
|
||||
* An {@link CodecException} which is thrown by an encoder.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class EncoderException extends CodecException {
|
||||
|
||||
|
@ -260,9 +260,6 @@ import io.netty.util.Signal;
|
||||
* @param <S>
|
||||
* the state type which is usually an {@link Enum}; use {@link Void} if state management is
|
||||
* unused
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.UnreplayableOperationException oneway - - throws
|
||||
*/
|
||||
public abstract class ReplayingDecoder<S> extends ByteToMessageDecoder {
|
||||
|
||||
|
@ -18,8 +18,6 @@ package io.netty.handler.codec;
|
||||
/**
|
||||
* An {@link DecoderException} which is thrown when the length of the frame
|
||||
* decoded is greater than the allowed maximum.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class TooLongFrameException extends DecoderException {
|
||||
|
||||
|
@ -29,9 +29,6 @@ import io.netty.buffer.Unpooled;
|
||||
* The encoding and decoding algorithm in this class has been derived from
|
||||
* <a href="http://iharder.sourceforge.net/current/java/base64/">Robert Harder's Public Domain
|
||||
* Base64 Encoder/Decoder</a>.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.uses io.netty.handler.codec.base64.Base64Dialect
|
||||
*/
|
||||
public final class Base64 {
|
||||
|
||||
|
@ -40,8 +40,6 @@ import io.netty.handler.codec.MessageToMessageDecoder;
|
||||
* // Encoder
|
||||
* pipeline.addLast("base64Encoder", new {@link Base64Encoder}());
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
* @apiviz.uses io.netty.handler.codec.base64.Base64
|
||||
*/
|
||||
@Sharable
|
||||
public class Base64Decoder extends MessageToMessageDecoder<ByteBuf> {
|
||||
|
@ -36,8 +36,6 @@ import io.netty.handler.codec.MessageToMessageEncoder;
|
||||
* // Encoder
|
||||
* pipeline.addLast("base64Encoder", new {@link Base64Encoder}());
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
* @apiviz.uses io.netty.handler.codec.base64.Base64
|
||||
*/
|
||||
@Sharable
|
||||
public class Base64Encoder extends MessageToMessageEncoder<ByteBuf> {
|
||||
|
@ -19,7 +19,5 @@
|
||||
* <a href="http://en.wikipedia.org/wiki/Base64">Base64</a>-encoded
|
||||
* {@link java.lang.String} or {@link io.netty.buffer.ByteBuf}
|
||||
* into a decoded {@link io.netty.buffer.ByteBuf} and vice versa.
|
||||
*
|
||||
* @apiviz.exclude OneToOne(Encoder|Decoder)$
|
||||
*/
|
||||
package io.netty.handler.codec.base64;
|
||||
|
@ -17,7 +17,5 @@
|
||||
/**
|
||||
* Encoder and decoder which transform an array of bytes into a
|
||||
* {@link io.netty.buffer.ByteBuf} and vice versa.
|
||||
*
|
||||
* @apiviz.exclude \.oneone\.
|
||||
*/
|
||||
package io.netty.handler.codec.bytes;
|
||||
|
@ -30,8 +30,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
/**
|
||||
* Compresses a {@link ByteBuf} using the deflate algorithm.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.compression.ZlibWrapper
|
||||
*/
|
||||
public class JZlibEncoder extends ZlibEncoder {
|
||||
|
||||
|
@ -30,8 +30,6 @@ import java.util.zip.Deflater;
|
||||
|
||||
/**
|
||||
* Compresses a {@link ByteBuf} using the deflate algorithm.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has org.jboss.netty.handler.codec.compression.ZlibWrapper
|
||||
*/
|
||||
public class JdkZlibEncoder extends ZlibEncoder {
|
||||
|
||||
|
@ -20,8 +20,6 @@ import io.netty.handler.codec.ByteToByteDecoder;
|
||||
|
||||
/**
|
||||
* Decompresses a {@link ByteBuf} using the deflate algorithm.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public abstract class ZlibDecoder extends ByteToByteDecoder {
|
||||
|
||||
|
@ -22,8 +22,6 @@ import io.netty.handler.codec.ByteToByteEncoder;
|
||||
|
||||
/**
|
||||
* Compresses a {@link ByteBuf} using the deflate algorithm.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public abstract class ZlibEncoder extends ByteToByteEncoder {
|
||||
|
||||
|
@ -19,11 +19,6 @@
|
||||
* in a compression format such as <a href="http://en.wikipedia.org/wiki/Zlib">zlib</a>,
|
||||
* <a href="http://en.wikipedia.org/wiki/Gzip">gzip</a>, and
|
||||
* <a href="http://code.google.com/p/snappy/">Snappy</a>.
|
||||
*
|
||||
* @apiviz.exclude \.codec\.(?!compression)[a-z0-9]+\.
|
||||
* @apiviz.exclude ^java\.lang\.
|
||||
* @apiviz.exclude \.channel\.
|
||||
* @apiviz.exclude Exception$
|
||||
*/
|
||||
package io.netty.handler.codec.compression;
|
||||
// TODO Implement bzip2 and lzma handlers
|
||||
|
@ -18,10 +18,5 @@
|
||||
* Extensible decoder and its common implementations which deal with the
|
||||
* packet fragmentation and reassembly issue found in a stream-based transport
|
||||
* such as TCP/IP.
|
||||
*
|
||||
* @apiviz.exclude OneToOne(Encoder|Decoder)$
|
||||
* @apiviz.exclude \.(Simple)?Channel[A-Za-z]*Handler$
|
||||
* @apiviz.exclude \.codec\.[a-eg-z][a-z0-9]*\.
|
||||
* @apiviz.exclude \.ssl\.
|
||||
*/
|
||||
package io.netty.handler.codec;
|
||||
|
@ -57,7 +57,6 @@ import io.netty.handler.codec.MessageToMessageDecoder;
|
||||
* ch.write(res);
|
||||
* }
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
@Sharable
|
||||
public class ProtobufDecoder extends MessageToMessageDecoder<ByteBuf> {
|
||||
|
@ -54,7 +54,6 @@ import static io.netty.buffer.Unpooled.*;
|
||||
* ch.write(res);
|
||||
* }
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
@Sharable
|
||||
public class ProtobufEncoder extends MessageToMessageEncoder<MessageLiteOrBuilder> {
|
||||
|
@ -19,8 +19,5 @@
|
||||
* <a href="http://code.google.com/p/protobuf/">Google Protocol Buffers</a>
|
||||
* {@link com.google.protobuf.Message} into a {@link io.netty.buffer.ByteBuf}
|
||||
* and vice versa.
|
||||
*
|
||||
* @apiviz.exclude \.oneone\.
|
||||
* @apiviz.exclude \.frame\.
|
||||
*/
|
||||
package io.netty.handler.codec.protobuf;
|
||||
|
@ -19,10 +19,6 @@ import java.lang.ref.Reference;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
*
|
||||
* @apiviz.has io.netty.handler.codec.serialization.ClassResolver oneway - - creates
|
||||
*/
|
||||
public final class ClassResolvers {
|
||||
|
||||
/**
|
||||
|
@ -31,8 +31,6 @@ import java.io.StreamCorruptedException;
|
||||
* compatible with the standard {@link ObjectOutputStream}. Please use
|
||||
* {@link ObjectEncoder} or {@link ObjectEncoderOutputStream} to ensure the
|
||||
* interoperability with this decoder.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.serialization.ObjectDecoderInputStream - - - compatible with
|
||||
*/
|
||||
public class ObjectDecoder extends LengthFieldBasedFrameDecoder {
|
||||
|
||||
|
@ -32,8 +32,6 @@ import java.io.Serializable;
|
||||
* compatible with the standard {@link ObjectInputStream}. Please use
|
||||
* {@link ObjectDecoder} or {@link ObjectDecoderInputStream} to ensure the
|
||||
* interoperability with this encoder.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.codec.serialization.ObjectEncoderOutputStream - - - compatible with
|
||||
*/
|
||||
@Sharable
|
||||
public class ObjectEncoder extends MessageToByteEncoder<Serializable> {
|
||||
|
@ -18,8 +18,5 @@
|
||||
* Encoder, decoder and their compatibility stream implementations which
|
||||
* transform a {@link java.io.Serializable} object into a byte buffer and
|
||||
* vice versa.
|
||||
*
|
||||
* @apiviz.exclude ^java\.io\.
|
||||
* @apiviz.exclude \.codec\.(?!serialization)[a-z0-9]+\.
|
||||
*/
|
||||
package io.netty.handler.codec.serialization;
|
||||
|
@ -49,7 +49,6 @@ import java.nio.charset.Charset;
|
||||
* ch.write("Did you say '" + msg + "'?\n");
|
||||
* }
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
@Sharable
|
||||
public class StringDecoder extends MessageToMessageDecoder<ByteBuf> {
|
||||
|
@ -46,7 +46,6 @@ import java.nio.charset.Charset;
|
||||
* ch.write("Did you say '" + msg + "'?\n");
|
||||
* }
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
@Sharable
|
||||
public class StringEncoder extends ChannelOutboundMessageHandlerAdapter<CharSequence> {
|
||||
|
@ -17,7 +17,5 @@
|
||||
/**
|
||||
* Encoder and decoder which transform a {@link java.lang.String} into a
|
||||
* {@link io.netty.buffer.ByteBuf} and vice versa.
|
||||
*
|
||||
* @apiviz.exclude \.oneone\.
|
||||
*/
|
||||
package io.netty.handler.codec.string;
|
||||
|
@ -19,8 +19,6 @@ package io.netty.util;
|
||||
* Holds {@link Attribute}s which can be accessed via {@link AttributeKey}.
|
||||
*
|
||||
* Implementations must be Thread-safe.
|
||||
*
|
||||
* @apiviz.composedOf io.netty.util.Attribute oneway - - creates
|
||||
*/
|
||||
public interface AttributeMap {
|
||||
/**
|
||||
|
@ -26,9 +26,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
/**
|
||||
* @apiviz.has io.netty.util.ResourceLeak oneway - - creates
|
||||
*/
|
||||
public final class ResourceLeakDetector<T> {
|
||||
|
||||
private static final boolean ENABLED = SystemPropertyUtil.getBoolean("io.netty.resourceLeakDetection", false);
|
||||
|
@ -21,9 +21,6 @@ import java.util.concurrent.TimeUnit;
|
||||
/**
|
||||
* Schedules {@link TimerTask}s for one-time future execution in a background
|
||||
* thread.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.util.TimerTask oneway - - executes
|
||||
* @apiviz.has io.netty.util.Timeout oneway - - creates
|
||||
*/
|
||||
public interface Timer {
|
||||
|
||||
|
@ -28,8 +28,6 @@ package io.netty.util.internal;
|
||||
* which were loaded after the default factory is changed. Therefore,
|
||||
* {@link #setDefaultFactory(InternalLoggerFactory)} should be called as early
|
||||
* as possible and shouldn't be called more than once.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.util.internal.InternalLogger oneway - - creates
|
||||
*/
|
||||
public abstract class InternalLoggerFactory {
|
||||
private static volatile InternalLoggerFactory defaultFactory;
|
||||
|
@ -16,11 +16,5 @@
|
||||
|
||||
/**
|
||||
* Utility classes used across multiple packages.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
* @apiviz.exclude ^java\.(lang|util)\.
|
||||
* @apiviz.exclude \.netty\.(?!util)[a-z0-9]+\.
|
||||
* @apiviz.exclude Util$
|
||||
* @apiviz.exclude Exception$
|
||||
*/
|
||||
package io.netty.util;
|
||||
|
@ -29,8 +29,6 @@ import java.net.SocketAddress;
|
||||
/**
|
||||
* A {@link ChannelHandler} that logs all events using a logging framework.
|
||||
* By default, all events are logged at <tt>DEBUG</tt> level.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
@Sharable
|
||||
public class LoggingHandler extends ChannelDuplexHandler {
|
||||
|
@ -16,8 +16,5 @@
|
||||
|
||||
/**
|
||||
* Logs a {@link io.netty.channel.ChannelEvent} for debugging purpose.
|
||||
*
|
||||
* @apiviz.hidden
|
||||
* @apiviz.exclude \.channel\.
|
||||
*/
|
||||
package io.netty.handler.logging;
|
||||
|
@ -138,8 +138,6 @@ import java.util.regex.Pattern;
|
||||
* based on monitoring and debugging of it.
|
||||
* For more details see
|
||||
* <a href="https://github.com/netty/netty/issues/832">#832</a> in our issue tracker.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.uses io.netty.handler.ssl.SslBufferPool
|
||||
*/
|
||||
public class SslHandler
|
||||
extends ChannelDuplexHandler
|
||||
|
@ -17,7 +17,5 @@
|
||||
/**
|
||||
* <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security">SSL ·
|
||||
* TLS</a> implementation based on {@link javax.net.ssl.SSLEngine}
|
||||
*
|
||||
* @apiviz.exclude \.(channel|codec)\.
|
||||
*/
|
||||
package io.netty.handler.ssl;
|
||||
|
@ -18,7 +18,6 @@ package io.netty.handler.stream;
|
||||
|
||||
/**
|
||||
* A data stream of indefinite length which is consumed by {@link ChunkedWriteHandler}.
|
||||
* @apiviz.landmark
|
||||
*/
|
||||
public interface ChunkedInput<B> {
|
||||
|
||||
|
@ -63,8 +63,6 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
* {@link ChunkedInput#readChunk(Object)}, resulting in the indefinitely suspended
|
||||
* transfer. To resume the transfer when a new chunk is available, you have to
|
||||
* call {@link #resumeTransfer()}.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.stream.ChunkedInput oneway - - reads from
|
||||
*/
|
||||
public class ChunkedWriteHandler
|
||||
extends ChannelDuplexHandler implements ChannelOutboundMessageHandler<Object> {
|
||||
|
@ -18,7 +18,5 @@
|
||||
* Writes very large data stream asynchronously neither spending a lot of
|
||||
* memory nor getting {@link java.lang.OutOfMemoryError}. For a detailed
|
||||
* example, please refer to {@code io.netty.example.http.file}.
|
||||
*
|
||||
* @apiviz.exclude \.channel\.
|
||||
*/
|
||||
package io.netty.handler.stream;
|
||||
|
@ -19,9 +19,6 @@ import io.netty.channel.Channel;
|
||||
|
||||
/**
|
||||
* A user event triggered by {@link IdleStateHandler} when a {@link Channel} is idle.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.timeout.IdleState oneway - -
|
||||
*/
|
||||
public final class IdleStateEvent {
|
||||
public static final IdleStateEvent FIRST_READER_IDLE_STATE_EVENT = new IdleStateEvent(IdleState.READER_IDLE, true);
|
||||
|
@ -97,10 +97,6 @@ import java.util.concurrent.TimeUnit;
|
||||
*
|
||||
* @see ReadTimeoutHandler
|
||||
* @see WriteTimeoutHandler
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.uses io.netty.util.HashedWheelTimer
|
||||
* @apiviz.has io.netty.handler.timeout.IdleStateEvent oneway - - triggers
|
||||
*/
|
||||
public class IdleStateHandler extends ChannelStateHandlerAdapter implements ChannelOperationHandler {
|
||||
|
||||
|
@ -60,9 +60,6 @@ import java.util.concurrent.TimeUnit;
|
||||
* </pre>
|
||||
* @see WriteTimeoutHandler
|
||||
* @see IdleStateHandler
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.timeout.TimeoutException oneway - - raises
|
||||
*/
|
||||
public class ReadTimeoutHandler extends ChannelStateHandlerAdapter {
|
||||
|
||||
|
@ -64,9 +64,6 @@ import java.util.concurrent.TimeUnit;
|
||||
* </pre>
|
||||
* @see ReadTimeoutHandler
|
||||
* @see IdleStateHandler
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.has io.netty.handler.timeout.TimeoutException oneway - - raises
|
||||
*/
|
||||
public class WriteTimeoutHandler extends ChannelOperationHandlerAdapter {
|
||||
|
||||
|
@ -17,9 +17,5 @@
|
||||
/**
|
||||
* Adds support for read and write timeout and idle connection notification
|
||||
* using a {@link io.netty.util.Timer}.
|
||||
*
|
||||
* @apiviz.exclude \.channel\.
|
||||
* @apiviz.exclude \.DefaultIdleStateEvent$
|
||||
* @apiviz.exclude \.ExternalResourceReleasable$
|
||||
*/
|
||||
package io.netty.handler.timeout;
|
||||
|
@ -52,8 +52,6 @@
|
||||
*
|
||||
* <p>Note also that you can create different GlobalTrafficShapingHandler if you want to separate classes of
|
||||
* channels (for instance either from business point of view or from bind address point of view).</p>
|
||||
*
|
||||
* @apiviz.exclude ^java\.lang\.
|
||||
*/
|
||||
package io.netty.handler.traffic;
|
||||
|
||||
|
@ -16,9 +16,5 @@
|
||||
|
||||
/**
|
||||
* Abstract SCTP socket interfaces which extend the core channel API.
|
||||
*
|
||||
* @apiviz.exclude \.(Abstract|Default).*$
|
||||
* @apiviz.exclude \.socket\.[a-z]+\.
|
||||
* @apiviz.exclude \.channel\.[A-Z]
|
||||
*/
|
||||
package io.netty.channel.sctp;
|
||||
|
@ -33,8 +33,6 @@ import java.util.Map;
|
||||
/**
|
||||
* {@link AbstractBootstrap} is a helper class that makes it easy to bootstrap a {@link Channel}. It support
|
||||
* method-chaining to provide an easy way to configure the {@link AbstractBootstrap}.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable {
|
||||
|
||||
|
@ -20,8 +20,6 @@ import io.netty.channel.Channel;
|
||||
/**
|
||||
* Factory that creates a new {@link Channel} on {@link Bootstrap#bind()}, {@link Bootstrap#connect()}, and
|
||||
* {@link ServerBootstrap#bind()}.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public interface ChannelFactory<T extends Channel> {
|
||||
/**
|
||||
|
@ -17,8 +17,5 @@
|
||||
/**
|
||||
* The helper classes with fluent API which enable an easy implementation of
|
||||
* typical client side and server side channel initialization.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.exclude ^io\.netty\.util\.
|
||||
*/
|
||||
package io.netty.bootstrap;
|
||||
|
@ -67,12 +67,6 @@ import java.net.SocketAddress;
|
||||
* transport. Down-cast the {@link Channel} to sub-type to invoke such
|
||||
* operations. For example, with the old I/O datagram transport, multicast
|
||||
* join / leave operations are provided by {@link DatagramChannel}.
|
||||
*
|
||||
* @apiviz.landmark
|
||||
* @apiviz.composedOf io.netty.channel.ChannelConfig
|
||||
* @apiviz.composedOf io.netty.channel.ChannelPipeline
|
||||
*
|
||||
* @apiviz.exclude ^io\.netty\.channel\.([a-z]+\.)+[^\.]+Channel$
|
||||
*/
|
||||
public interface Channel extends AttributeMap, ChannelOutboundInvoker, ChannelPropertyAccess, Comparable<Channel> {
|
||||
|
||||
|
@ -59,8 +59,6 @@ import java.util.Map;
|
||||
* More options are available in the sub-types of {@link ChannelConfig}. For
|
||||
* example, you can configure the parameters which are specific to a TCP/IP
|
||||
* socket as explained in {@link SocketChannelConfig}.
|
||||
*
|
||||
* @apiviz.excludeSubtypes
|
||||
*/
|
||||
public interface ChannelConfig {
|
||||
|
||||
|
@ -17,8 +17,6 @@ package io.netty.channel;
|
||||
|
||||
/**
|
||||
* A {@link RuntimeException} which is thrown when an I/O operation fails.
|
||||
*
|
||||
* @apiviz.exclude
|
||||
*/
|
||||
public class ChannelException extends RuntimeException {
|
||||
|
||||
|
@ -15,10 +15,10 @@
|
||||
*/
|
||||
package io.netty.channel;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.netty.bootstrap.Bootstrap;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
/**
|
||||
* The result of an asynchronous {@link Channel} I/O operation.
|
||||
@ -158,8 +158,6 @@ import io.netty.bootstrap.Bootstrap;
|
||||
* // Connection established successfully
|
||||
* }
|
||||
* </pre>
|
||||
* @apiviz.landmark
|
||||
* @apiviz.owns io.netty.channel.ChannelFutureListener - - notifies
|
||||
*/
|
||||
public interface ChannelFuture {
|
||||
|
||||
|
@ -186,8 +186,6 @@ import java.lang.annotation.Target;
|
||||
* {@link ChannelPipeline} to find out more about inbound and outbound operations,
|
||||
* what fundamental differences they have, how they flow in a pipeline, and how to handle
|
||||
* the operation in your application.
|
||||
* @apiviz.landmark
|
||||
* @apiviz.exclude ^io\.netty\.handler\..*$
|
||||
*/
|
||||
public interface ChannelHandler {
|
||||
|
||||
|
@ -123,7 +123,6 @@ import java.util.Set;
|
||||
* {@link ChannelPipeline} to find out more about inbound and outbound operations,
|
||||
* what fundamental differences they have, how they flow in a pipeline, and how to handle
|
||||
* the operation in your application.
|
||||
* @apiviz.owns io.netty.channel.ChannelHandler
|
||||
*/
|
||||
public interface ChannelHandlerContext
|
||||
extends AttributeMap, ChannelPropertyAccess,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user