errors with a different exception if an error occurred before the first Auth message was sent or
* before the last Auth message was received.
diff --git a/reactor/src/main/java/com/hivemq/client/rx/reactor/CorePublisherWithSingle.java b/reactor/src/main/java/com/hivemq/client2/rx/reactor/CorePublisherWithSingle.java
similarity index 91%
rename from reactor/src/main/java/com/hivemq/client/rx/reactor/CorePublisherWithSingle.java
rename to reactor/src/main/java/com/hivemq/client2/rx/reactor/CorePublisherWithSingle.java
index 770586fc0..9cc7191f1 100644
--- a/reactor/src/main/java/com/hivemq/client/rx/reactor/CorePublisherWithSingle.java
+++ b/reactor/src/main/java/com/hivemq/client2/rx/reactor/CorePublisherWithSingle.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.rx.reactor;
+package com.hivemq.client2.rx.reactor;
-import com.hivemq.client.rx.reactivestreams.PublisherWithSingle;
-import com.hivemq.client.rx.reactivestreams.WithSingleSubscriber;
+import com.hivemq.client2.rx.reactivestreams.PublisherWithSingle;
+import com.hivemq.client2.rx.reactivestreams.WithSingleSubscriber;
import org.jetbrains.annotations.NotNull;
import org.reactivestreams.Publisher;
import org.reactivestreams.Subscriber;
diff --git a/reactor/src/main/java/com/hivemq/client/rx/reactor/CoreWithSingleSubscriber.java b/reactor/src/main/java/com/hivemq/client2/rx/reactor/CoreWithSingleSubscriber.java
similarity index 91%
rename from reactor/src/main/java/com/hivemq/client/rx/reactor/CoreWithSingleSubscriber.java
rename to reactor/src/main/java/com/hivemq/client2/rx/reactor/CoreWithSingleSubscriber.java
index bd495af0d..1a9be33d8 100644
--- a/reactor/src/main/java/com/hivemq/client/rx/reactor/CoreWithSingleSubscriber.java
+++ b/reactor/src/main/java/com/hivemq/client2/rx/reactor/CoreWithSingleSubscriber.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.rx.reactor;
+package com.hivemq.client2.rx.reactor;
-import com.hivemq.client.rx.reactivestreams.WithSingleSubscriber;
+import com.hivemq.client2.rx.reactivestreams.WithSingleSubscriber;
import reactor.core.CoreSubscriber;
/**
diff --git a/reactor/src/main/java/com/hivemq/client/rx/reactor/FluxWithSingle.java b/reactor/src/main/java/com/hivemq/client2/rx/reactor/FluxWithSingle.java
similarity index 97%
rename from reactor/src/main/java/com/hivemq/client/rx/reactor/FluxWithSingle.java
rename to reactor/src/main/java/com/hivemq/client2/rx/reactor/FluxWithSingle.java
index 3a598770b..4808c1153 100644
--- a/reactor/src/main/java/com/hivemq/client/rx/reactor/FluxWithSingle.java
+++ b/reactor/src/main/java/com/hivemq/client2/rx/reactor/FluxWithSingle.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.rx.reactor;
-
-import com.hivemq.client.internal.rx.reactor.CoreWithSingleStrictSubscriber;
-import com.hivemq.client.internal.rx.reactor.operators.FluxWithSingleFrom;
-import com.hivemq.client.internal.rx.reactor.operators.FluxWithSingleMap;
-import com.hivemq.client.internal.rx.reactor.operators.FluxWithSinglePublishOn;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.rx.reactivestreams.PublisherWithSingle;
-import com.hivemq.client.rx.reactivestreams.WithSingleSubscriber;
+package com.hivemq.client2.rx.reactor;
+
+import com.hivemq.client2.internal.rx.reactor.CoreWithSingleStrictSubscriber;
+import com.hivemq.client2.internal.rx.reactor.operators.FluxWithSingleFrom;
+import com.hivemq.client2.internal.rx.reactor.operators.FluxWithSingleMap;
+import com.hivemq.client2.internal.rx.reactor.operators.FluxWithSinglePublishOn;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.rx.reactivestreams.PublisherWithSingle;
+import com.hivemq.client2.rx.reactivestreams.WithSingleSubscriber;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
diff --git a/reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleItem.java b/reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleItem.java
similarity index 98%
rename from reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleItem.java
rename to reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleItem.java
index c6c6d1a16..d6b7b393f 100644
--- a/reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleItem.java
+++ b/reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleItem.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.rx.reactor;
+package com.hivemq.client2.rx.reactor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleSplit.java b/reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleSplit.java
similarity index 97%
rename from reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleSplit.java
rename to reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleSplit.java
index d84d2bd87..218d5f419 100644
--- a/reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleSplit.java
+++ b/reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleSplit.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.rx.reactor;
+package com.hivemq.client2.rx.reactor;
-import com.hivemq.client.rx.reactivestreams.WithSingleSubscriber;
+import com.hivemq.client2.rx.reactivestreams.WithSingleSubscriber;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
diff --git a/reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleTest.java b/reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleTest.java
similarity index 99%
rename from reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleTest.java
rename to reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleTest.java
index 0872ecae9..e4af4c602 100644
--- a/reactor/src/test/java/com/hivemq/client/rx/reactor/FluxWithSingleTest.java
+++ b/reactor/src/test/java/com/hivemq/client2/rx/reactor/FluxWithSingleTest.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.rx.reactor;
+package com.hivemq.client2.rx.reactor;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.hivemq.client.rx.reactivestreams.WithSingleSubscriber;
+import com.hivemq.client2.rx.reactivestreams.WithSingleSubscriber;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.ThrowingSupplier;
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 6658e9120..c71c3ac7c 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -15,7 +15,7 @@ pluginManagement {
}
}
-rootProject.name = "hivemq-mqtt-client"
+rootProject.name = "hivemq-mqtt-client2"
listOf("websocket", "proxy", "epoll", "reactor", "examples").forEach { module ->
include("${rootProject.name}-$module")
diff --git a/src/main/java/com/hivemq/client/annotations/DoNotImplement.java b/src/main/java/com/hivemq/client/annotations/DoNotImplement.java
deleted file mode 100644
index 6048c2ed2..000000000
--- a/src/main/java/com/hivemq/client/annotations/DoNotImplement.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.annotations;
-
-import java.lang.annotation.*;
-
-/**
- * Documents that an interface MUST NOT be implemented by the user.
- *
- * The implementation is provided by the library.
- *
- * This allows the library to later add methods to the interface without breaking backwards compatibility with
- * implementing classes.
- *
- * @author Silvio Giebl
- */
-@Documented
-@Retention(RetentionPolicy.CLASS)
-@Target(ElementType.TYPE)
-public @interface DoNotImplement {}
diff --git a/src/main/java/com/hivemq/client/annotations/Immutable.java b/src/main/java/com/hivemq/client/annotations/Immutable.java
deleted file mode 100644
index 400561cbc..000000000
--- a/src/main/java/com/hivemq/client/annotations/Immutable.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.annotations;
-
-import java.lang.annotation.*;
-
-/**
- * Documents that the annotated type is immutable. This means that its state can not be seen to change and can not be
- * changed by callers.
- *
- * @author Silvio Giebl
- */
-@Documented
-@Retention(RetentionPolicy.CLASS)
-@Target({ElementType.TYPE, ElementType.TYPE_USE})
-public @interface Immutable {}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/advanced/interceptor/MqttClientInterceptors.java b/src/main/java/com/hivemq/client/internal/mqtt/advanced/interceptor/MqttClientInterceptors.java
deleted file mode 100644
index d2f857942..000000000
--- a/src/main/java/com/hivemq/client/internal/mqtt/advanced/interceptor/MqttClientInterceptors.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.internal.mqtt.advanced.interceptor;
-
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.Mqtt5ClientInterceptors;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5IncomingQos1Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5OutgoingQos1Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5IncomingQos2Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5OutgoingQos2Interceptor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Objects;
-
-/**
- * @author Silvio Giebl
- */
-public class MqttClientInterceptors implements Mqtt5ClientInterceptors {
-
- private final @Nullable Mqtt5IncomingQos1Interceptor incomingQos1Interceptor;
- private final @Nullable Mqtt5OutgoingQos1Interceptor outgoingQos1Interceptor;
- private final @Nullable Mqtt5IncomingQos2Interceptor incomingQos2Interceptor;
- private final @Nullable Mqtt5OutgoingQos2Interceptor outgoingQos2Interceptor;
-
- MqttClientInterceptors(
- final @Nullable Mqtt5IncomingQos1Interceptor incomingQos1Interceptor,
- final @Nullable Mqtt5OutgoingQos1Interceptor outgoingQos1Interceptor,
- final @Nullable Mqtt5IncomingQos2Interceptor incomingQos2Interceptor,
- final @Nullable Mqtt5OutgoingQos2Interceptor outgoingQos2Interceptor) {
-
- this.incomingQos1Interceptor = incomingQos1Interceptor;
- this.outgoingQos1Interceptor = outgoingQos1Interceptor;
- this.incomingQos2Interceptor = incomingQos2Interceptor;
- this.outgoingQos2Interceptor = outgoingQos2Interceptor;
- }
-
- @Override
- public @Nullable Mqtt5IncomingQos1Interceptor getIncomingQos1Interceptor() {
- return incomingQos1Interceptor;
- }
-
- @Override
- public @Nullable Mqtt5OutgoingQos1Interceptor getOutgoingQos1Interceptor() {
- return outgoingQos1Interceptor;
- }
-
- @Override
- public @Nullable Mqtt5IncomingQos2Interceptor getIncomingQos2Interceptor() {
- return incomingQos2Interceptor;
- }
-
- @Override
- public @Nullable Mqtt5OutgoingQos2Interceptor getOutgoingQos2Interceptor() {
- return outgoingQos2Interceptor;
- }
-
- @Override
- public MqttClientInterceptorsBuilder.@NotNull Default extend() {
- return new MqttClientInterceptorsBuilder.Default(this);
- }
-
- @Override
- public boolean equals(final @Nullable Object o) {
- if (this == o) {
- return true;
- }
- if (!(o instanceof MqttClientInterceptors)) {
- return false;
- }
- final MqttClientInterceptors that = (MqttClientInterceptors) o;
-
- return Objects.equals(incomingQos1Interceptor, that.incomingQos1Interceptor) &&
- Objects.equals(outgoingQos1Interceptor, that.outgoingQos1Interceptor) &&
- Objects.equals(incomingQos2Interceptor, that.incomingQos2Interceptor) &&
- Objects.equals(outgoingQos2Interceptor, that.outgoingQos2Interceptor);
- }
-
- @Override
- public int hashCode() {
- int result = Objects.hashCode(incomingQos1Interceptor);
- result = 31 * result + Objects.hashCode(outgoingQos1Interceptor);
- result = 31 * result + Objects.hashCode(incomingQos2Interceptor);
- result = 31 * result + Objects.hashCode(outgoingQos2Interceptor);
- return result;
- }
-}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientModule.java b/src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientModule.java
deleted file mode 100644
index 6ba0c6022..000000000
--- a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientModule.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.internal.mqtt.ioc;
-
-import dagger.Module;
-
-/**
- * @author Silvio Giebl
- */
-@Module
-abstract class ClientModule {}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttCommonReasonCode.java b/src/main/java/com/hivemq/client/internal/mqtt/message/MqttCommonReasonCode.java
deleted file mode 100644
index 0a0357b29..000000000
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttCommonReasonCode.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.internal.mqtt.message;
-
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5ReasonCode;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * MQTT Reason Codes that are used in 2 ore more MQTT packets according to the MQTT 5 specification.
- *
- * @author Silvio Giebl
- */
-public enum MqttCommonReasonCode implements Mqtt5ReasonCode {
-
- SUCCESS(0x00),
- NO_MATCHING_SUBSCRIBERS(0x10),
- UNSPECIFIED_ERROR(0x80),
- MALFORMED_PACKET(0x81),
- PROTOCOL_ERROR(0x82),
- IMPLEMENTATION_SPECIFIC_ERROR(0x83),
- NOT_AUTHORIZED(0x87),
- SERVER_BUSY(0x89),
- BAD_AUTHENTICATION_METHOD(0x8C),
- TOPIC_FILTER_INVALID(0x8F),
- TOPIC_NAME_INVALID(0x90),
- PACKET_IDENTIFIER_IN_USE(0x91),
- PACKET_IDENTIFIER_NOT_FOUND(0x92),
- PACKET_TOO_LARGE(0x95),
- QUOTA_EXCEEDED(0x97),
- PAYLOAD_FORMAT_INVALID(0x99),
- RETAIN_NOT_SUPPORTED(0x9A),
- QOS_NOT_SUPPORTED(0x9B),
- USE_ANOTHER_SERVER(0x9C),
- SERVER_MOVED(0x9D),
- SHARED_SUBSCRIPTIONS_NOT_SUPPORTED(0x9E),
- CONNECTION_RATE_EXCEEDED(0x9F),
- SUBSCRIPTION_IDENTIFIERS_NOT_SUPPORTED(0xA1),
- WILDCARD_SUBSCRIPTIONS_NOT_SUPPORTED(0xA2);
-
- private final int code;
-
- MqttCommonReasonCode(final int code) {
- this.code = code;
- }
-
- @Override
- public int getCode() {
- return code;
- }
-
- public static boolean allErrors(final @NotNull ImmutableList extends Mqtt5ReasonCode> reasonCodes) {
- //noinspection ForLoopReplaceableByForEach
- for (int i = 0; i < reasonCodes.size(); i++) {
- if (!reasonCodes.get(i).isError()) {
- return false;
- }
- }
- return true;
- }
-}
diff --git a/src/main/java/com/hivemq/client/internal/rx/RxFutureConverter.java b/src/main/java/com/hivemq/client/internal/rx/RxFutureConverter.java
deleted file mode 100644
index fa15aff6d..000000000
--- a/src/main/java/com/hivemq/client/internal/rx/RxFutureConverter.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.internal.rx;
-
-import io.reactivex.*;
-import io.reactivex.disposables.Disposable;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.BiConsumer;
-
-/**
- * @author Silvio Giebl
- */
-public final class RxFutureConverter {
-
- public static @NotNull CompletableFuture toFuture(final @NotNull Completable completable) {
- return new RxCompletableFuture(completable);
- }
-
- public static @NotNull CompletableFuture<@NotNull Optional> toFuture(final @NotNull Maybe maybe) {
- return new RxMaybeFuture<>(maybe);
- }
-
- public static @NotNull CompletableFuture<@NotNull T> toFuture(final @NotNull Single single) {
- return new RxSingleFuture<>(single);
- }
-
- private static abstract class RxFuture extends CompletableFuture {
-
- volatile @Nullable Disposable disposable;
- volatile boolean cancelled;
-
- public void onSubscribe(final @NotNull Disposable d) {
- disposable = d;
- if (cancelled) {
- d.dispose();
- }
- }
-
- public void onError(final @NotNull Throwable e) {
- if (!cancelled) {
- completeExceptionally(e);
- }
- }
-
- @Override
- public boolean cancel(final boolean mayInterruptIfRunning) {
- cancelled = true;
- final Disposable disposable = this.disposable;
- if (disposable != null) {
- disposable.dispose();
- }
- return super.cancel(mayInterruptIfRunning);
- }
- }
-
- private static class RxCompletableFuture extends RxFuture implements CompletableObserver {
-
- RxCompletableFuture(final @NotNull Completable completable) {
- completable.subscribe(this);
- }
-
- @Override
- public void onComplete() {
- if (!cancelled) {
- complete(null);
- }
- }
- }
-
- private static class RxMaybeFuture extends RxFuture> implements MaybeObserver {
-
- RxMaybeFuture(final @NotNull Maybe maybe) {
- maybe.subscribe(this);
- }
-
- @Override
- public void onSuccess(final @NotNull T t) {
- if (!cancelled) {
- complete(Optional.of(t));
- }
- }
-
- @Override
- public void onComplete() {
- if (!cancelled) {
- complete(Optional.empty());
- }
- }
- }
-
- private static class RxSingleFuture extends RxFuture implements SingleObserver {
-
- RxSingleFuture(final @NotNull Single single) {
- single.subscribe(this);
- }
-
- @Override
- public void onSuccess(final @NotNull T t) {
- if (!cancelled) {
- complete(t);
- }
- }
- }
-
- public static @NotNull Completable toCompletable(final @NotNull CompletableFuture> future) {
- return new FutureCompletable(future);
- }
-
- public static @NotNull Maybe toMaybe(final @NotNull CompletableFuture<@NotNull Optional> future) {
- return new FutureMaybe<>(future);
- }
-
- public static @NotNull Single toSingle(final @NotNull CompletableFuture<@NotNull T> future) {
- return new FutureSingle<>(future);
- }
-
- private static final int INITIAL = 0;
- private static final int SUBSCRIBED_OR_COMPLETE = 1;
- private static final int SUBSCRIBED_AND_COMPLETE_OR_CANCELLED = 2;
-
- private static boolean checkComplete(final @NotNull AtomicInteger done) {
- return !done.compareAndSet(INITIAL, SUBSCRIBED_OR_COMPLETE) &&
- done.compareAndSet(SUBSCRIBED_OR_COMPLETE, SUBSCRIBED_AND_COMPLETE_OR_CANCELLED);
- }
-
- private static void dispose(final @NotNull AtomicInteger done, final @NotNull CompletableFuture> future) {
- done.set(SUBSCRIBED_AND_COMPLETE_OR_CANCELLED);
- future.cancel(false);
- }
-
- private static boolean isDisposed(final @NotNull AtomicInteger done) {
- return done.get() == SUBSCRIBED_AND_COMPLETE_OR_CANCELLED;
- }
-
- private static class FutureCompletable extends Completable implements Disposable, BiConsumer {
-
- private final @NotNull CompletableFuture> future;
- private volatile @Nullable CompletableObserver observer;
- private volatile @Nullable Throwable throwable;
- private final @NotNull AtomicInteger done = new AtomicInteger(INITIAL);
-
- FutureCompletable(final @NotNull CompletableFuture> future) {
- this.future = future;
- future.whenComplete(this);
- }
-
- @Override
- protected void subscribeActual(final @NotNull CompletableObserver observer) {
- this.observer = observer;
- observer.onSubscribe(this);
- if (checkComplete(done)) {
- complete(observer, throwable);
- }
- }
-
- @Override
- public void dispose() {
- RxFutureConverter.dispose(done, future);
- }
-
- @Override
- public boolean isDisposed() {
- return RxFutureConverter.isDisposed(done);
- }
-
- @Override
- public void accept(final @Nullable Object o, final @Nullable Throwable throwable) {
- this.throwable = throwable;
- if (checkComplete(done)) {
- final CompletableObserver observer = this.observer;
- assert observer != null;
- complete(observer, throwable);
- }
- }
-
- private static void complete(final @NotNull CompletableObserver observer, final @Nullable Throwable throwable) {
- if (throwable == null) {
- observer.onComplete();
- } else {
- observer.onError(throwable);
- }
- }
- }
-
- private static class FutureMaybe extends Maybe implements Disposable, BiConsumer, Throwable> {
-
- private final @NotNull CompletableFuture> future;
- private volatile @Nullable MaybeObserver super T> observer;
- private volatile @Nullable T t;
- private volatile @Nullable Throwable throwable;
- private final @NotNull AtomicInteger done = new AtomicInteger(INITIAL);
-
- FutureMaybe(final @NotNull CompletableFuture> future) {
- this.future = future;
- future.whenComplete(this);
- }
-
- @Override
- protected void subscribeActual(final @NotNull MaybeObserver super T> observer) {
- this.observer = observer;
- observer.onSubscribe(this);
- if (checkComplete(done)) {
- complete(observer, t, throwable);
- }
- }
-
- @Override
- public void dispose() {
- RxFutureConverter.dispose(done, future);
- }
-
- @Override
- public boolean isDisposed() {
- return RxFutureConverter.isDisposed(done);
- }
-
- @Override
- @SuppressWarnings("OptionalAssignedToNull")
- public void accept(final @Nullable Optional t, final @Nullable Throwable throwable) {
- final T t1;
- final Throwable throwable1;
- if (throwable == null) {
- if (t == null) {
- t1 = null;
- throwable1 = new NullPointerException();
- } else {
- t1 = t.orElse(null);
- throwable1 = null;
- }
- } else {
- t1 = null;
- throwable1 = throwable;
- }
- this.t = t1;
- this.throwable = throwable1;
- if (checkComplete(done)) {
- final MaybeObserver super T> observer = this.observer;
- assert observer != null;
- complete(observer, t1, throwable1);
- }
- }
-
- private static void complete(
- final @NotNull MaybeObserver super T> observer,
- final @Nullable T t,
- final @Nullable Throwable throwable) {
-
- if (throwable != null) {
- observer.onError(throwable);
- } else if (t != null) {
- observer.onSuccess(t);
- } else {
- observer.onComplete();
- }
- }
- }
-
- private static class FutureSingle extends Single implements Disposable, BiConsumer {
-
- private final @NotNull CompletableFuture future;
- private volatile @Nullable SingleObserver super T> observer;
- private volatile @Nullable T t;
- private volatile @Nullable Throwable throwable;
- private final @NotNull AtomicInteger done = new AtomicInteger(INITIAL);
-
- FutureSingle(final @NotNull CompletableFuture future) {
- this.future = future;
- future.whenComplete(this);
- }
-
- @Override
- protected void subscribeActual(final @NotNull SingleObserver super T> observer) {
- this.observer = observer;
- observer.onSubscribe(this);
- if (checkComplete(done)) {
- complete(observer, t, throwable);
- }
- }
-
- @Override
- public void dispose() {
- RxFutureConverter.dispose(done, future);
- }
-
- @Override
- public boolean isDisposed() {
- return RxFutureConverter.isDisposed(done);
- }
-
- @Override
- public void accept(final @Nullable T t, final @Nullable Throwable throwable) {
- this.t = t;
- this.throwable = throwable;
- if (checkComplete(done)) {
- final SingleObserver super T> observer = this.observer;
- assert observer != null;
- complete(observer, t, throwable);
- }
- }
-
- private static void complete(
- final @NotNull SingleObserver super T> observer,
- final @Nullable T t,
- final @Nullable Throwable throwable) {
-
- if (t != null) {
- observer.onSuccess(t);
- } else {
- observer.onError((throwable != null) ? throwable : new NullPointerException());
- }
- }
- }
-
- private RxFutureConverter() {}
-}
diff --git a/src/main/java/com/hivemq/client/mqtt/MqttClientBuilderBase.java b/src/main/java/com/hivemq/client/mqtt/MqttClientBuilderBase.java
deleted file mode 100644
index c954888e7..000000000
--- a/src/main/java/com/hivemq/client/mqtt/MqttClientBuilderBase.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.mqtt;
-
-import com.hivemq.client.annotations.CheckReturnValue;
-import com.hivemq.client.annotations.DoNotImplement;
-import com.hivemq.client.mqtt.datatypes.MqttClientIdentifier;
-import com.hivemq.client.mqtt.lifecycle.MqttClientAutoReconnect;
-import com.hivemq.client.mqtt.lifecycle.MqttClientAutoReconnectBuilder;
-import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedListener;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedListener;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-
-/**
- * Builder base for an {@link MqttClient}.
- *
- * @param the type of the builder.
- * @author Silvio Giebl
- * @since 1.0
- */
-@DoNotImplement
-public interface MqttClientBuilderBase> {
-
- /**
- * Sets the {@link MqttClientConfig#getClientIdentifier() Client Identifier}.
- *
- * @param identifier the string representation of the Client Identifier.
- * @return the builder.
- */
- @CheckReturnValue
- @NotNull B identifier(@NotNull String identifier);
-
- /**
- * Sets the {@link MqttClientConfig#getClientIdentifier() Client Identifier}.
- *
- * @param identifier the Client Identifier.
- * @return the builder.
- */
- @CheckReturnValue
- @NotNull B identifier(@NotNull MqttClientIdentifier identifier);
-
- /**
- * Sets the {@link MqttClientConfig#getServerAddress() server address} to connect to.
- *
- * @param address the server address.
- * @return the builder
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B serverAddress(@NotNull InetSocketAddress address);
-
- /**
- * Sets the {@link MqttClientConfig#getServerHost() server host} to connect to.
- *
- * @param host the server host.
- * @return the builder.
- */
- @CheckReturnValue
- @NotNull B serverHost(@NotNull String host);
-
- /**
- * Sets the {@link MqttClientConfig#getServerHost() server host} to connect to.
- *
- * @param host the server host.
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B serverHost(@NotNull InetAddress host);
-
- /**
- * Sets the {@link MqttClientConfig#getServerPort() server port} to connect to.
- *
- * @param port the server port.
- * @return the builder.
- */
- @CheckReturnValue
- @NotNull B serverPort(int port);
-
- /**
- * Use {@link #sslWithDefaultConfig()}.
- *
- * @return use {@link #sslWithDefaultConfig()}.
- * @deprecated use {@link #sslWithDefaultConfig()}.
- */
- @Deprecated
- default @NotNull B useSslWithDefaultConfig() {
- return sslWithDefaultConfig();
- }
-
- /**
- * Sets the {@link MqttClientConfig#getSslConfig() secure transport configuration} to the default configuration.
- *
- * This means that the systems default trust store, ciphers and protocols are used.
- *
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B sslWithDefaultConfig();
-
- /**
- * Use {@link #sslConfig(MqttClientSslConfig)}.
- *
- * @param sslConfig use {@link #sslConfig(MqttClientSslConfig)}.
- * @return use {@link #sslConfig(MqttClientSslConfig)}.
- * @deprecated use {@link #sslConfig(MqttClientSslConfig)}.
- */
- @Deprecated
- default @NotNull B useSsl(final @Nullable MqttClientSslConfig sslConfig) {
- return sslConfig(sslConfig);
- }
-
- /**
- * Sets the optional {@link MqttClientConfig#getSslConfig() secure transport configuration}.
- *
- * @param sslConfig the secure transport configuration or null
to remove any previously set secure
- * transport configuration.
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B sslConfig(@Nullable MqttClientSslConfig sslConfig);
-
- /**
- * Use {@link #sslConfig()}.
- *
- * @return use {@link #sslConfig()}.
- * @deprecated use {@link #sslConfig()}.
- */
- @Deprecated
- default MqttClientSslConfigBuilder.@NotNull Nested extends B> useSsl() {
- return sslConfig();
- }
-
- /**
- * Fluent counterpart of {@link #sslConfig(MqttClientSslConfig)}.
- *
- * Calling {@link MqttClientSslConfigBuilder.Nested#applySslConfig()} on the returned builder has the effect of
- * extending the current secure transport configuration.
- *
- * @return the fluent builder for the secure transport configuration.
- * @see #sslConfig(MqttClientSslConfig)
- * @since 1.1
- */
- @CheckReturnValue
- MqttClientSslConfigBuilder.@NotNull Nested extends B> sslConfig();
-
- /**
- * Use {@link #webSocketWithDefaultConfig()}.
- *
- * @return use {@link #webSocketWithDefaultConfig()}.
- * @deprecated use {@link #webSocketWithDefaultConfig()}.
- */
- @Deprecated
- default @NotNull B useWebSocketWithDefaultConfig() {
- return webSocketWithDefaultConfig();
- }
-
- /**
- * Sets the {@link MqttClientConfig#getWebSocketConfig() WebSocket transport configuration} to the default
- * configuration.
- *
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B webSocketWithDefaultConfig();
-
- /**
- * Use {@link #webSocketConfig(MqttWebSocketConfig)}.
- *
- * @param webSocketConfig use {@link #webSocketConfig(MqttWebSocketConfig)}.
- * @return use {@link #webSocketConfig(MqttWebSocketConfig)}.
- * @deprecated use {@link #webSocketConfig(MqttWebSocketConfig)}.
- */
- @Deprecated
- default @NotNull B useWebSocket(final @Nullable MqttWebSocketConfig webSocketConfig) {
- return webSocketConfig(webSocketConfig);
- }
-
- /**
- * Sets the optional {@link MqttClientConfig#getWebSocketConfig() WebSocket transport configuration}.
- *
- * @param webSocketConfig the WebSocket transport configuration or null
to remove any previously set
- * WebSocket transport configuration.
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B webSocketConfig(@Nullable MqttWebSocketConfig webSocketConfig);
-
- /**
- * Use {@link #webSocketConfig()}.
- *
- * @return use {@link #webSocketConfig()}.
- * @deprecated use {@link #webSocketConfig()}.
- */
- @Deprecated
- default MqttWebSocketConfigBuilder.@NotNull Nested extends B> useWebSocket() {
- return webSocketConfig();
- }
-
- /**
- * Fluent counterpart of {@link #webSocketConfig(MqttWebSocketConfig)}.
- *
- * Calling {@link MqttWebSocketConfigBuilder.Nested#applyWebSocketConfig()} on the returned builder has the effect
- * of extending the current WebSocket transport configuration.
- *
- * @return the fluent builder for the WebSocket configuration.
- * @see #webSocketConfig(MqttWebSocketConfig)
- * @since 1.1
- */
- @CheckReturnValue
- MqttWebSocketConfigBuilder.@NotNull Nested extends B> webSocketConfig();
-
- /**
- * Sets the {@link MqttClientConfig#getTransportConfig() transport configuration}.
- *
- * @param transportConfig the transport configuration.
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B transportConfig(@NotNull MqttClientTransportConfig transportConfig);
-
- /**
- * Fluent counterpart of {@link #transportConfig(MqttClientTransportConfig)}.
- *
- * Calling {@link MqttClientTransportConfigBuilder.Nested#applyTransportConfig()} on the returned builder has the
- * effect of extending the current transport configuration.
- *
- * @return the fluent builder for the transport configuration.
- * @see #transportConfig(MqttClientTransportConfig)
- * @since 1.1
- */
- @CheckReturnValue
- MqttClientTransportConfigBuilder.@NotNull Nested extends B> transportConfig();
-
- /**
- * Sets the {@link MqttClientConfig#getExecutorConfig() executor configuration}.
- *
- * @param executorConfig the executor configuration.
- * @return the builder.
- */
- @CheckReturnValue
- @NotNull B executorConfig(@NotNull MqttClientExecutorConfig executorConfig);
-
- /**
- * Fluent counterpart of {@link #executorConfig(MqttClientExecutorConfig)}.
- *
- * Calling {@link MqttClientExecutorConfigBuilder.Nested#applyExecutorConfig()} on the returned builder has the
- * effect of extending the current executor configuration.
- *
- * @return the fluent builder for the executor configuration.
- * @see #executorConfig(MqttClientExecutorConfig)
- */
- @CheckReturnValue
- MqttClientExecutorConfigBuilder.@NotNull Nested extends B> executorConfig();
-
- /**
- * Uses automatic reconnect with the default configuration.
- *
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B automaticReconnectWithDefaultConfig();
-
- /**
- * Sets the optional {@link MqttClientConfig#getAutomaticReconnect() automatic reconnect strategy}.
- *
- * @param autoReconnect the automatic reconnect strategy or null
to remove any previously set automatic
- * reconnect strategy.
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B automaticReconnect(@Nullable MqttClientAutoReconnect autoReconnect);
-
- /**
- * Fluent counterpart of {@link #automaticReconnect(MqttClientAutoReconnect)}.
- *
- * Calling {@link MqttClientAutoReconnectBuilder.Nested#applyAutomaticReconnect()} on the returned builder has the
- * effect of extending the current automatic reconnect strategy.
- *
- * @return the fluent builder for the automatic reconnect strategy.
- * @see #automaticReconnect(MqttClientAutoReconnect)
- * @since 1.1
- */
- @CheckReturnValue
- MqttClientAutoReconnectBuilder.@NotNull Nested extends B> automaticReconnect();
-
- /**
- * Adds a listener which is notified when the client is connected (a successful ConnAck message is received).
- *
- * The listeners are called in the same order in which they are added.
- *
- * @param connectedListener the listener to add.
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B addConnectedListener(@NotNull MqttClientConnectedListener connectedListener);
-
- /**
- * Adds a listener which is notified when the client is disconnected (with or without a Disconnect message) or the
- * connection fails.
- *
- * The listeners are called in the same order in which they are added.
- *
- * @param disconnectedListener the listener to add.
- * @return the builder.
- * @since 1.1
- */
- @CheckReturnValue
- @NotNull B addDisconnectedListener(@NotNull MqttClientDisconnectedListener disconnectedListener);
-}
diff --git a/src/main/java/com/hivemq/client/mqtt/mqtt5/advanced/Mqtt5ClientAdvancedConfigBuilder.java b/src/main/java/com/hivemq/client/mqtt/mqtt5/advanced/Mqtt5ClientAdvancedConfigBuilder.java
deleted file mode 100644
index 9804156b8..000000000
--- a/src/main/java/com/hivemq/client/mqtt/mqtt5/advanced/Mqtt5ClientAdvancedConfigBuilder.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2018-present HiveMQ and the HiveMQ Community
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.hivemq.client.mqtt.mqtt5.advanced;
-
-import com.hivemq.client.annotations.CheckReturnValue;
-import com.hivemq.client.annotations.DoNotImplement;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Builder for a {@link Mqtt5ClientAdvancedConfig}.
- *
- * @author Silvio Giebl
- * @since 1.0
- */
-@DoNotImplement
-public interface Mqtt5ClientAdvancedConfigBuilder
- extends Mqtt5ClientAdvancedConfigBuilderBase {
-
- /**
- * Builds the {@link Mqtt5ClientAdvancedConfig}.
- *
- * @return the built {@link Mqtt5ClientAdvancedConfig}.
- */
- @CheckReturnValue
- @NotNull Mqtt5ClientAdvancedConfig build();
-
- /**
- * Builder for a {@link Mqtt5ClientAdvancedConfig} that is applied to a parent.
- *
- * @param the type of the result when the built {@link Mqtt5ClientAdvancedConfig} is applied to the parent.
- */
- @DoNotImplement
- interface Nested
extends Mqtt5ClientAdvancedConfigBuilderBase> {
-
- /**
- * Builds the {@link Mqtt5ClientAdvancedConfig} and applies it to the parent.
- *
- * @return the result when the built {@link Mqtt5ClientAdvancedConfig} is applied to the parent.
- */
- @NotNull P applyAdvancedConfig();
- }
-}
diff --git a/src/main/java/com/hivemq/client/annotations/CheckReturnValue.java b/src/main/java/com/hivemq/client2/annotations/CheckReturnValue.java
similarity index 95%
rename from src/main/java/com/hivemq/client/annotations/CheckReturnValue.java
rename to src/main/java/com/hivemq/client2/annotations/CheckReturnValue.java
index 10cfbf60d..70e697dfe 100644
--- a/src/main/java/com/hivemq/client/annotations/CheckReturnValue.java
+++ b/src/main/java/com/hivemq/client2/annotations/CheckReturnValue.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.annotations;
+package com.hivemq.client2.annotations;
import java.lang.annotation.*;
diff --git a/src/main/java/com/hivemq/client/internal/annotations/CallByThread.java b/src/main/java/com/hivemq/client2/internal/annotations/CallByThread.java
similarity index 95%
rename from src/main/java/com/hivemq/client/internal/annotations/CallByThread.java
rename to src/main/java/com/hivemq/client2/internal/annotations/CallByThread.java
index 680e06f01..bd7894d25 100644
--- a/src/main/java/com/hivemq/client/internal/annotations/CallByThread.java
+++ b/src/main/java/com/hivemq/client2/internal/annotations/CallByThread.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.annotations;
+package com.hivemq.client2.internal.annotations;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/annotations/NotThreadSafe.java b/src/main/java/com/hivemq/client2/internal/annotations/NotThreadSafe.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/annotations/NotThreadSafe.java
rename to src/main/java/com/hivemq/client2/internal/annotations/NotThreadSafe.java
index b61792038..3ffd00d25 100644
--- a/src/main/java/com/hivemq/client/internal/annotations/NotThreadSafe.java
+++ b/src/main/java/com/hivemq/client2/internal/annotations/NotThreadSafe.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.annotations;
+package com.hivemq.client2.internal.annotations;
import java.lang.annotation.*;
diff --git a/src/main/java/com/hivemq/client/internal/annotations/ThreadSafe.java b/src/main/java/com/hivemq/client2/internal/annotations/ThreadSafe.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/annotations/ThreadSafe.java
rename to src/main/java/com/hivemq/client2/internal/annotations/ThreadSafe.java
index ea5653dac..161af114e 100644
--- a/src/main/java/com/hivemq/client/internal/annotations/ThreadSafe.java
+++ b/src/main/java/com/hivemq/client2/internal/annotations/ThreadSafe.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.annotations;
+package com.hivemq.client2.internal.annotations;
import java.lang.annotation.*;
diff --git a/src/main/java/com/hivemq/client/internal/checkpoint/Confirmable.java b/src/main/java/com/hivemq/client2/internal/checkpoint/Confirmable.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/checkpoint/Confirmable.java
rename to src/main/java/com/hivemq/client2/internal/checkpoint/Confirmable.java
index 4c5f346ac..eeefa3515 100644
--- a/src/main/java/com/hivemq/client/internal/checkpoint/Confirmable.java
+++ b/src/main/java/com/hivemq/client2/internal/checkpoint/Confirmable.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.checkpoint;
+package com.hivemq.client2.internal.checkpoint;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/logging/InternalLogger.java b/src/main/java/com/hivemq/client2/internal/logging/InternalLogger.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/logging/InternalLogger.java
rename to src/main/java/com/hivemq/client2/internal/logging/InternalLogger.java
index 3326953d0..bad153ae5 100644
--- a/src/main/java/com/hivemq/client/internal/logging/InternalLogger.java
+++ b/src/main/java/com/hivemq/client2/internal/logging/InternalLogger.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.logging;
+package com.hivemq.client2.internal.logging;
import org.jetbrains.annotations.NotNull;
@@ -36,4 +36,18 @@ public interface InternalLogger {
void warn(@NotNull String format, @NotNull Object arg);
void warn(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2);
+
+ void debug(@NotNull String message);
+
+ void debug(@NotNull String format, @NotNull Object arg);
+
+ void debug(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2);
+
+ void debug(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2, @NotNull Object arg3);
+
+ void trace(@NotNull String message);
+
+ void trace(@NotNull String format, @NotNull Object arg);
+
+ void trace(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2);
}
diff --git a/src/main/java/com/hivemq/client/internal/logging/InternalLoggerFactory.java b/src/main/java/com/hivemq/client2/internal/logging/InternalLoggerFactory.java
similarity index 92%
rename from src/main/java/com/hivemq/client/internal/logging/InternalLoggerFactory.java
rename to src/main/java/com/hivemq/client2/internal/logging/InternalLoggerFactory.java
index e171be152..c5f6594df 100644
--- a/src/main/java/com/hivemq/client/internal/logging/InternalLoggerFactory.java
+++ b/src/main/java/com/hivemq/client2/internal/logging/InternalLoggerFactory.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.logging;
+package com.hivemq.client2.internal.logging;
-import com.hivemq.client.internal.util.ClassUtil;
+import com.hivemq.client2.internal.util.ClassUtil;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/logging/InternalNoopLogger.java b/src/main/java/com/hivemq/client2/internal/logging/InternalNoopLogger.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/logging/InternalNoopLogger.java
rename to src/main/java/com/hivemq/client2/internal/logging/InternalNoopLogger.java
index ceecb2479..fd2d26f30 100644
--- a/src/main/java/com/hivemq/client/internal/logging/InternalNoopLogger.java
+++ b/src/main/java/com/hivemq/client2/internal/logging/InternalNoopLogger.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.logging;
+package com.hivemq.client2.internal.logging;
import org.jetbrains.annotations.NotNull;
@@ -47,4 +47,26 @@ public void warn(final @NotNull String format, final @NotNull Object arg) {}
@Override
public void warn(final @NotNull String format, final @NotNull Object arg1, final @NotNull Object arg2) {}
+
+ @Override
+ public void debug(@NotNull String message) {}
+
+ @Override
+ public void debug(@NotNull String format, @NotNull Object arg) {}
+
+ @Override
+ public void debug(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2) {}
+
+ @Override
+ public void debug(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2, @NotNull Object arg3) {}
+
+ @Override
+ public void trace(@NotNull String message) {}
+
+ @Override
+ public void trace(@NotNull String format, @NotNull Object arg) {}
+
+ @Override
+ public void trace(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2) {}
+
}
diff --git a/src/main/java/com/hivemq/client/internal/logging/InternalSlf4jLogger.java b/src/main/java/com/hivemq/client2/internal/logging/InternalSlf4jLogger.java
similarity index 66%
rename from src/main/java/com/hivemq/client/internal/logging/InternalSlf4jLogger.java
rename to src/main/java/com/hivemq/client2/internal/logging/InternalSlf4jLogger.java
index a95831987..bec9d7681 100644
--- a/src/main/java/com/hivemq/client/internal/logging/InternalSlf4jLogger.java
+++ b/src/main/java/com/hivemq/client2/internal/logging/InternalSlf4jLogger.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.logging;
+package com.hivemq.client2.internal.logging;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
@@ -65,4 +65,39 @@ public void warn(final @NotNull String format, final @NotNull Object arg) {
public void warn(final @NotNull String format, final @NotNull Object arg1, final @NotNull Object arg2) {
delegate.warn(format, arg1, arg2);
}
+
+ @Override
+ public void debug(@NotNull String message) {
+ delegate.debug(message);
+ }
+
+ @Override
+ public void debug(@NotNull String format, @NotNull Object arg) {
+ delegate.debug(format, arg);
+ }
+
+ @Override
+ public void debug(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2) {
+ delegate.debug(format, arg1, arg2);
+ }
+
+ @Override
+ public void debug(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2, @NotNull Object arg3) {
+ delegate.debug(format, arg1, arg2, arg3);
+ }
+
+ @Override
+ public void trace(@NotNull String message) {
+ delegate.trace(message);
+ }
+
+ @Override
+ public void trace(@NotNull String format, @NotNull Object arg) {
+ delegate.trace(format, arg);
+ }
+
+ @Override
+ public void trace(@NotNull String format, @NotNull Object arg1, @NotNull Object arg2) {
+ delegate.trace(format, arg1, arg2);
+ }
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttAsyncClient.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttAsyncClient.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttAsyncClient.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttAsyncClient.java
index e9c768431..365b41714 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttAsyncClient.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttAsyncClient.java
@@ -14,34 +14,33 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
-
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectBuilder;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnectBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishBuilder;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribeBuilder;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribeBuilder;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.rx.RxFutureConverter;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.MqttGlobalPublishFilter;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5AsyncClient;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5Connect;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.Mqtt5Subscribe;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAck;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.Mqtt5Unsubscribe;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.unsuback.Mqtt5UnsubAck;
-import io.reactivex.FlowableSubscriber;
-import io.reactivex.schedulers.Schedulers;
+package com.hivemq.client2.internal.mqtt;
+
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectBuilder;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnectBuilder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishBuilder;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribe;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribeBuilder;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribeBuilder;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.MqttGlobalPublishFilter;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5AsyncClient;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAck;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5Connect;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAck;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5Subscribe;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5UnsubAck;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5Unsubscribe;
+import io.reactivex.rxjava3.core.FlowableSubscriber;
+import io.reactivex.rxjava3.schedulers.Schedulers;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscription;
@@ -113,7 +112,7 @@ public class MqttAsyncClient implements Mqtt5AsyncClient {
public @NotNull CompletableFuture<@NotNull Mqtt5ConnAck> connect(final @Nullable Mqtt5Connect connect) {
final MqttConnect mqttConnect = MqttChecks.connect(connect);
- return RxFutureConverter.toFuture(delegate.connect(mqttConnect));
+ return delegate.connect(mqttConnect).toCompletionStage().toCompletableFuture();
}
@Override
@@ -125,7 +124,7 @@ public class MqttAsyncClient implements Mqtt5AsyncClient {
public @NotNull CompletableFuture<@NotNull Mqtt5SubAck> subscribe(final @Nullable Mqtt5Subscribe subscribe) {
final MqttSubscribe mqttSubscribe = MqttChecks.subscribe(subscribe);
- return handleSubAck(RxFutureConverter.toFuture(delegate.subscribe(mqttSubscribe)), mqttSubscribe);
+ return handleSubAck(delegate.subscribe(mqttSubscribe).toCompletionStage().toCompletableFuture(), mqttSubscribe);
}
@Override
@@ -169,13 +168,13 @@ public class MqttAsyncClient implements Mqtt5AsyncClient {
Checks.notNull(executor, "Executor");
return handleSubAck(delegate.subscribePublishesUnsafe(mqttSubscribe, manualAcknowledgement)
- .observeOnBoth(Schedulers.from(executor), true)
+ .observeBothOn(Schedulers.from(executor), true)
.subscribeSingleFuture(new CallbackSubscriber(callback)), mqttSubscribe);
}
@Override
- public @NotNull MqttSubscribeAndCallbackBuilder subscribeWith() {
- return new MqttSubscribeAndCallbackBuilder();
+ public @NotNull SubscribeBuilder subscribeWith() {
+ return new SubscribeBuilder();
}
@Override
@@ -228,7 +227,8 @@ public void publishes(
final MqttUnsubscribe mqttUnsubscribe = MqttChecks.unsubscribe(unsubscribe);
- return handleUnsubAck(RxFutureConverter.toFuture(delegate.unsubscribe(mqttUnsubscribe)), mqttUnsubscribe);
+ return handleUnsubAck(
+ delegate.unsubscribe(mqttUnsubscribe).toCompletionStage().toCompletableFuture(), mqttUnsubscribe);
}
@Override
@@ -240,7 +240,7 @@ public void publishes(
public @NotNull CompletableFuture<@NotNull Mqtt5PublishResult> publish(final @Nullable Mqtt5Publish publish) {
final MqttPublish mqttPublish = MqttChecks.publish(publish);
- return RxFutureConverter.toFuture(delegate.publish(mqttPublish));
+ return delegate.publish(mqttPublish).toCompletionStage().toCompletableFuture();
}
@Override
@@ -250,7 +250,7 @@ public void publishes(
@Override
public @NotNull CompletableFuture reauth() {
- return RxFutureConverter.toFuture(delegate.reauth());
+ return delegate.reauth().toCompletionStage((Void) null).toCompletableFuture();
}
@Override
@@ -262,7 +262,7 @@ public void publishes(
public @NotNull CompletableFuture disconnect(final @Nullable Mqtt5Disconnect disconnect) {
final MqttDisconnect mqttDisconnect = MqttChecks.disconnect(disconnect);
- return RxFutureConverter.toFuture(delegate.disconnect(mqttDisconnect));
+ return delegate.disconnect(mqttDisconnect).toCompletionStage((Void) null).toCompletableFuture();
}
@Override
@@ -310,32 +310,33 @@ public void onComplete() {}
public void onError(final @NotNull Throwable t) {}
}
- private class MqttSubscribeAndCallbackBuilder extends MqttSubscribeBuilder
- implements Mqtt5SubscribeAndCallbackBuilder.Start.Complete, Mqtt5SubscribeAndCallbackBuilder.Call.Ex {
+ private class SubscribeBuilder extends MqttSubscribeBuilder
+ implements Mqtt5AsyncClient.SubscribeBuilder.Start.Complete,
+ Mqtt5AsyncClient.SubscribeBuilder.AfterCallback {
private @Nullable Consumer callback;
private @Nullable Executor executor;
private boolean manualAcknowledgement;
@Override
- protected @NotNull MqttSubscribeAndCallbackBuilder self() {
+ protected @NotNull SubscribeBuilder self() {
return this;
}
@Override
- public @NotNull MqttSubscribeAndCallbackBuilder callback(final @Nullable Consumer callback) {
+ public @NotNull SubscribeBuilder callback(final @Nullable Consumer callback) {
this.callback = Checks.notNull(callback, "Callback");
return this;
}
@Override
- public @NotNull MqttSubscribeAndCallbackBuilder executor(final @Nullable Executor executor) {
+ public @NotNull SubscribeBuilder executor(final @Nullable Executor executor) {
this.executor = Checks.notNull(executor, "Executor");
return this;
}
@Override
- public @NotNull MqttSubscribeAndCallbackBuilder manualAcknowledgement(final boolean manualAcknowledgement) {
+ public @NotNull SubscribeBuilder manualAcknowledgement(final boolean manualAcknowledgement) {
this.manualAcknowledgement = manualAcknowledgement;
return this;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttBlockingClient.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttBlockingClient.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttBlockingClient.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttBlockingClient.java
index 2103c73da..6b2b57310 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttBlockingClient.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttBlockingClient.java
@@ -14,39 +14,39 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
-
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectBuilder;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnectBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishBuilder;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribeBuilder;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribeBuilder;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.AsyncRuntimeException;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.MqttGlobalPublishFilter;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5BlockingClient;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5SubAckException;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5UnsubAckException;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5ReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5Connect;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.Mqtt5Subscribe;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAck;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.Mqtt5Unsubscribe;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.unsuback.Mqtt5UnsubAck;
-import io.reactivex.Flowable;
-import io.reactivex.FlowableSubscriber;
-import io.reactivex.internal.subscriptions.SubscriptionHelper;
+package com.hivemq.client2.internal.mqtt;
+
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectBuilder;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnectBuilder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishBuilder;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribe;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribeBuilder;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribeBuilder;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.AsyncRuntimeException;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.MqttGlobalPublishFilter;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5BlockingClient;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5SubAckException;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5UnsubAckException;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5ReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAck;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5Connect;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAck;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5Subscribe;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5UnsubAck;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5Unsubscribe;
+import io.reactivex.rxjava3.core.Flowable;
+import io.reactivex.rxjava3.core.FlowableSubscriber;
+import io.reactivex.rxjava3.internal.subscriptions.SubscriptionHelper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscription;
@@ -126,17 +126,17 @@ public class MqttBlockingClient implements Mqtt5BlockingClient {
}
@Override
- public @NotNull Mqtt5Publishes publishes(final @Nullable MqttGlobalPublishFilter filter) {
+ public @NotNull Publishes publishes(final @Nullable MqttGlobalPublishFilter filter) {
return publishes(filter, false);
}
@Override
- public @NotNull Mqtt5Publishes publishes(
+ public @NotNull Publishes publishes(
final @Nullable MqttGlobalPublishFilter filter, final boolean manualAcknowledgement) {
Checks.notNull(filter, "Global publish filter");
- return new MqttPublishes(delegate.publishesUnsafe(filter, manualAcknowledgement));
+ return new Publishes(delegate.publishesUnsafe(filter, manualAcknowledgement));
}
@Override
@@ -216,14 +216,14 @@ public void disconnect(final @NotNull Mqtt5Disconnect disconnect) {
return delegate.toAsync();
}
- private static class MqttPublishes implements Mqtt5Publishes, FlowableSubscriber {
+ private static class Publishes implements Mqtt5BlockingClient.Publishes, FlowableSubscriber {
private final @NotNull AtomicReference<@Nullable Subscription> subscription = new AtomicReference<>();
private final @NotNull LinkedList entries = new LinkedList<>();
private @Nullable Mqtt5Publish queuedPublish;
private @Nullable Throwable error;
- MqttPublishes(final @NotNull Flowable publishes) {
+ Publishes(final @NotNull Flowable publishes) {
publishes.subscribe(this);
}
@@ -319,9 +319,6 @@ public void onError(final @NotNull Throwable t) {
public @NotNull Optional receive(final long timeout, final @Nullable TimeUnit timeUnit)
throws InterruptedException {
- if (timeout < 0) {
- throw new IllegalArgumentException("Timeout must be greater than 0.");
- }
Checks.notNull(timeUnit, "Time unit");
final Entry entry;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientConfig.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttClientConfig.java
similarity index 74%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientConfig.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttClientConfig.java
index 5c291f44b..67f7aa708 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientConfig.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttClientConfig.java
@@ -14,28 +14,28 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
-
-import com.hivemq.client.internal.mqtt.advanced.MqttClientAdvancedConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttClientIdentifierImpl;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.internal.mqtt.ioc.SingletonComponent;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.internal.netty.NettyEventLoopProvider;
-import com.hivemq.client.internal.util.ExecutorUtil;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.MqttClientState;
-import com.hivemq.client.mqtt.MqttVersion;
-import com.hivemq.client.mqtt.datatypes.MqttClientIdentifier;
-import com.hivemq.client.mqtt.lifecycle.MqttClientAutoReconnect;
-import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedListener;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedListener;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5ClientConfig;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5ClientConnectionConfig;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5WillPublish;
+package com.hivemq.client2.internal.mqtt;
+
+import com.hivemq.client2.internal.mqtt.advanced.MqttAdvancedConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttClientIdentifierImpl;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.internal.mqtt.ioc.SingletonComponent;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.internal.netty.NettyEventLoopProvider;
+import com.hivemq.client2.internal.util.ExecutorUtil;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.MqttClientState;
+import com.hivemq.client2.mqtt.MqttVersion;
+import com.hivemq.client2.mqtt.datatypes.MqttClientIdentifier;
+import com.hivemq.client2.mqtt.lifecycle.MqttAutoReconnect;
+import com.hivemq.client2.mqtt.lifecycle.MqttConnectedListener;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectedListener;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5ClientConfig;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5ClientConnectionConfig;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5WillPublish;
import io.netty.channel.EventLoop;
import io.netty.handler.ssl.SslContext;
import org.jetbrains.annotations.NotNull;
@@ -51,12 +51,12 @@ public class MqttClientConfig implements Mqtt5ClientConfig {
private final @NotNull MqttVersion mqttVersion;
private volatile @NotNull MqttClientIdentifierImpl clientIdentifier;
- private final @NotNull MqttClientTransportConfigImpl transportConfig;
- private final @NotNull MqttClientExecutorConfigImpl executorConfig;
- private final @NotNull MqttClientAdvancedConfig advancedConfig;
+ private final @NotNull MqttTransportConfigImpl transportConfig;
+ private final @NotNull MqttExecutorConfigImpl executorConfig;
+ private final @NotNull MqttAdvancedConfig advancedConfig;
private final @NotNull ConnectDefaults connectDefaults;
- private final @NotNull ImmutableList connectedListeners;
- private final @NotNull ImmutableList disconnectedListeners;
+ private final @NotNull ImmutableList connectedListeners;
+ private final @NotNull ImmutableList disconnectedListeners;
private final @NotNull ClientComponent clientComponent;
@@ -66,7 +66,7 @@ public class MqttClientConfig implements Mqtt5ClientConfig {
private final @NotNull AtomicReference<@NotNull MqttClientState> state;
private volatile @Nullable MqttClientConnectionConfig connectionConfig;
- private @NotNull MqttClientTransportConfigImpl currentTransportConfig;
+ private @NotNull MqttTransportConfigImpl currentTransportConfig;
private @Nullable SslContext currentSslContext;
private boolean resubscribeIfSessionExpired;
private boolean republishIfSessionExpired;
@@ -74,12 +74,12 @@ public class MqttClientConfig implements Mqtt5ClientConfig {
public MqttClientConfig(
final @NotNull MqttVersion mqttVersion,
final @NotNull MqttClientIdentifierImpl clientIdentifier,
- final @NotNull MqttClientTransportConfigImpl transportConfig,
- final @NotNull MqttClientExecutorConfigImpl executorConfig,
- final @NotNull MqttClientAdvancedConfig advancedConfig,
+ final @NotNull MqttTransportConfigImpl transportConfig,
+ final @NotNull MqttExecutorConfigImpl executorConfig,
+ final @NotNull MqttAdvancedConfig advancedConfig,
final @NotNull ConnectDefaults connectDefaults,
- final @NotNull ImmutableList connectedListeners,
- final @NotNull ImmutableList disconnectedListeners) {
+ final @NotNull ImmutableList connectedListeners,
+ final @NotNull ImmutableList disconnectedListeners) {
this.mqttVersion = mqttVersion;
this.clientIdentifier = clientIdentifier;
@@ -102,7 +102,7 @@ public MqttClientConfig(
}
@Override
- public @NotNull Optional getClientIdentifier() {
+ public @NotNull Optional getIdentifier() {
return (clientIdentifier == MqttClientIdentifierImpl.REQUEST_CLIENT_IDENTIFIER_FROM_SERVER) ? Optional.empty() :
Optional.of(clientIdentifier);
}
@@ -116,17 +116,17 @@ public void setClientIdentifier(final @NotNull MqttClientIdentifierImpl clientId
}
@Override
- public @NotNull MqttClientTransportConfigImpl getTransportConfig() {
+ public @NotNull MqttTransportConfigImpl getTransportConfig() {
return transportConfig;
}
@Override
- public @NotNull MqttClientExecutorConfigImpl getExecutorConfig() {
+ public @NotNull MqttExecutorConfigImpl getExecutorConfig() {
return executorConfig;
}
@Override
- public @NotNull MqttClientAdvancedConfig getAdvancedConfig() {
+ public @NotNull MqttAdvancedConfig getAdvancedConfig() {
return advancedConfig;
}
@@ -150,22 +150,22 @@ public void setClientIdentifier(final @NotNull MqttClientIdentifierImpl clientId
}
@Override
- public @NotNull Optional getAutomaticReconnect() {
- for (final MqttClientDisconnectedListener disconnectedListener : disconnectedListeners) {
- if (disconnectedListener instanceof MqttClientAutoReconnect) {
- return Optional.of((MqttClientAutoReconnect) disconnectedListener);
+ public @NotNull Optional getAutomaticReconnect() {
+ for (final MqttDisconnectedListener disconnectedListener : disconnectedListeners) {
+ if (disconnectedListener instanceof MqttAutoReconnect) {
+ return Optional.of((MqttAutoReconnect) disconnectedListener);
}
}
return Optional.empty();
}
@Override
- public @NotNull ImmutableList getConnectedListeners() {
+ public @NotNull ImmutableList getConnectedListeners() {
return connectedListeners;
}
@Override
- public @NotNull ImmutableList getDisconnectedListeners() {
+ public @NotNull ImmutableList getDisconnectedListeners() {
return disconnectedListeners;
}
@@ -236,11 +236,11 @@ public void setConnectionConfig(final @Nullable MqttClientConnectionConfig conne
this.connectionConfig = connectionConfig;
}
- public @NotNull MqttClientTransportConfigImpl getCurrentTransportConfig() {
+ public @NotNull MqttTransportConfigImpl getCurrentTransportConfig() {
return currentTransportConfig;
}
- public void setCurrentTransportConfig(final @NotNull MqttClientTransportConfigImpl currentTransportConfig) {
+ public void setCurrentTransportConfig(final @NotNull MqttTransportConfigImpl currentTransportConfig) {
if (!this.currentTransportConfig.equals(currentTransportConfig)) {
this.currentTransportConfig = currentTransportConfig;
currentSslContext = null;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientConnectionConfig.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttClientConnectionConfig.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientConnectionConfig.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttClientConnectionConfig.java
index b48f1c175..80a2d144e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientConnectionConfig.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttClientConnectionConfig.java
@@ -14,18 +14,20 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
-
-import com.hivemq.client.internal.mqtt.handler.publish.outgoing.MqttTopicAliasAutoMapping;
-import com.hivemq.client.internal.mqtt.handler.publish.outgoing.MqttTopicAliasMapping;
-import com.hivemq.client.internal.util.UnsignedDataTypes;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt3.Mqtt3ClientConnectionConfig;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5ClientConnectionConfig;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+package com.hivemq.client2.internal.mqtt;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.handler.publish.outgoing.MqttTopicAliasAutoMapping;
+import com.hivemq.client2.internal.mqtt.handler.publish.outgoing.MqttTopicAliasMapping;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt3.Mqtt3ClientConnectionConfig;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5ClientConnectionConfig;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
import io.netty.channel.Channel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.util.Optional;
@@ -48,37 +50,37 @@ public class MqttClientConnectionConfig
private static final int FLAG_CLEAN_START = 1 << 8;
private static final int FLAG_CLEAN_STOP = 1 << 9;
- private final @NotNull MqttClientTransportConfigImpl transportConfig;
- private final short keepAlive;
- private volatile int sessionExpiryInterval;
+ private final @NotNull MqttTransportConfigImpl transportConfig;
+ private final /*unsigned*/ short keepAlive;
+ private volatile /*unsigned*/ int sessionExpiryInterval;
private final @Nullable Mqtt5EnhancedAuthMechanism enhancedAuthMechanism;
- private final short receiveMaximum;
- private final int maximumPacketSize;
- private final short topicAliasMaximum;
- private final short sendMaximum;
- private final int sendMaximumPacketSize;
+ private final /*unsigned*/ short receiveMaximum;
+ private final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int maximumPacketSize;
+ private final /*unsigned*/ short topicAliasMaximum;
+ private final /*unsigned*/ short sendMaximum;
+ private final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int sendMaximumPacketSize;
private final @Nullable MqttTopicAliasMapping sendTopicAliasMapping;
private final @NotNull MqttQos maximumQos;
private final @NotNull Channel channel;
private final int flags;
public MqttClientConnectionConfig(
- final @NotNull MqttClientTransportConfigImpl transportConfig,
- final int keepAlive,
+ final @NotNull MqttTransportConfigImpl transportConfig,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int keepAlive,
final boolean cleanStart,
final boolean cleanStop,
- final long sessionExpiryInterval,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long sessionExpiryInterval,
final boolean hasSimpleAuth,
final boolean hasWillPublish,
final @Nullable Mqtt5EnhancedAuthMechanism enhancedAuthMechanism,
- final int receiveMaximum,
- final int maximumPacketSize,
- final int topicAliasMaximum,
+ final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int receiveMaximum,
+ final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int maximumPacketSize,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int topicAliasMaximum,
final boolean problemInformationRequested,
final boolean responseInformationRequested,
- final int sendMaximum,
- final int sendMaximumPacketSize,
- final int sendTopicAliasMaximum,
+ final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendMaximum,
+ final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int sendMaximumPacketSize,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendTopicAliasMaximum,
final @NotNull MqttQos maximumQos,
final boolean retainAvailable,
final boolean wildcardSubscriptionAvailable,
@@ -135,12 +137,12 @@ public MqttClientConnectionConfig(
}
@Override
- public @NotNull MqttClientTransportConfigImpl getTransportConfig() {
+ public @NotNull MqttTransportConfigImpl getTransportConfig() {
return transportConfig;
}
@Override
- public int getKeepAlive() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getKeepAlive() {
return keepAlive & UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE;
}
@@ -153,11 +155,13 @@ public boolean isCleanStop() {
}
@Override
- public long getSessionExpiryInterval() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long getSessionExpiryInterval() {
return sessionExpiryInterval & UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE;
}
- public void setSessionExpiryInterval(final long sessionExpiryInterval) {
+ public void setSessionExpiryInterval(
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long sessionExpiryInterval) {
+
this.sessionExpiryInterval = (int) sessionExpiryInterval;
}
@@ -191,17 +195,17 @@ public boolean hasWillPublish() {
}
@Override
- public int getReceiveMaximum() {
+ public @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getReceiveMaximum() {
return receiveMaximum & UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE;
}
@Override
- public int getMaximumPacketSize() {
+ public @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int getMaximumPacketSize() {
return maximumPacketSize;
}
@Override
- public int getTopicAliasMaximum() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getTopicAliasMaximum() {
return topicAliasMaximum & UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE;
}
@@ -216,17 +220,17 @@ public boolean isResponseInformationRequested() {
}
@Override
- public int getSendMaximum() {
+ public @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getSendMaximum() {
return sendMaximum & UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE;
}
@Override
- public int getSendMaximumPacketSize() {
+ public @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int getSendMaximumPacketSize() {
return sendMaximumPacketSize;
}
@Override
- public int getSendTopicAliasMaximum() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getSendTopicAliasMaximum() {
return (sendTopicAliasMapping == null) ? 0 : sendTopicAliasMapping.getTopicAliasMaximum();
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientExecutorConfigImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttExecutorConfigImpl.java
similarity index 71%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientExecutorConfigImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttExecutorConfigImpl.java
index 4f1b290f9..91b5986b2 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientExecutorConfigImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttExecutorConfigImpl.java
@@ -14,12 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.mqtt.MqttClientExecutorConfig;
-import io.reactivex.Scheduler;
+import com.hivemq.client2.mqtt.MqttExecutorConfig;
+import io.reactivex.rxjava3.core.Scheduler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
import java.util.Objects;
import java.util.Optional;
@@ -29,19 +31,20 @@
/**
* @author Silvio Giebl
*/
-public class MqttClientExecutorConfigImpl implements MqttClientExecutorConfig {
+@Unmodifiable
+public class MqttExecutorConfigImpl implements MqttExecutorConfig {
public static final int DEFAULT_NETTY_THREADS = 0;
- public static final @NotNull MqttClientExecutorConfigImpl DEFAULT =
- new MqttClientExecutorConfigImpl(null, DEFAULT_NETTY_THREADS, DEFAULT_APPLICATION_SCHEDULER);
+ public static final @NotNull MqttExecutorConfigImpl DEFAULT =
+ new MqttExecutorConfigImpl(null, DEFAULT_NETTY_THREADS, DEFAULT_APPLICATION_SCHEDULER);
private final @Nullable Executor nettyExecutor;
- private final int nettyThreads;
+ private final @Range(from = 0, to = Integer.MAX_VALUE) int nettyThreads;
private final @NotNull Scheduler applicationScheduler;
- MqttClientExecutorConfigImpl(
+ MqttExecutorConfigImpl(
final @Nullable Executor nettyExecutor,
- final int nettyThreads,
+ final @Range(from = 0, to = Integer.MAX_VALUE) int nettyThreads,
final @NotNull Scheduler applicationScheduler) {
this.nettyExecutor = nettyExecutor;
@@ -63,7 +66,7 @@ public class MqttClientExecutorConfigImpl implements MqttClientExecutorConfig {
return (nettyThreads == DEFAULT_NETTY_THREADS) ? OptionalInt.empty() : OptionalInt.of(nettyThreads);
}
- public int getRawNettyThreads() {
+ public @Range(from = 0, to = Integer.MAX_VALUE) int getRawNettyThreads() {
return nettyThreads;
}
@@ -73,8 +76,8 @@ public int getRawNettyThreads() {
}
@Override
- public MqttClientExecutorConfigImplBuilder.@NotNull Default extend() {
- return new MqttClientExecutorConfigImplBuilder.Default(this);
+ public MqttExecutorConfigImplBuilder.@NotNull Default extend() {
+ return new MqttExecutorConfigImplBuilder.Default(this);
}
@Override
@@ -82,10 +85,10 @@ public boolean equals(final @Nullable Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof MqttClientExecutorConfigImpl)) {
+ if (!(o instanceof MqttExecutorConfigImpl)) {
return false;
}
- final MqttClientExecutorConfigImpl that = (MqttClientExecutorConfigImpl) o;
+ final MqttExecutorConfigImpl that = (MqttExecutorConfigImpl) o;
return Objects.equals(nettyExecutor, that.nettyExecutor) && (nettyThreads == that.nettyThreads) &&
applicationScheduler.equals(that.applicationScheduler);
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientExecutorConfigImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttExecutorConfigImplBuilder.java
similarity index 61%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientExecutorConfigImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttExecutorConfigImplBuilder.java
index 6c68726af..0053293a7 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientExecutorConfigImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttExecutorConfigImplBuilder.java
@@ -14,13 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.MqttClientExecutorConfigBuilder;
-import io.reactivex.Scheduler;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.MqttExecutorConfigBuilder;
+import io.reactivex.rxjava3.core.Scheduler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.util.concurrent.Executor;
import java.util.function.Function;
@@ -28,15 +29,15 @@
/**
* @author Silvio Giebl
*/
-public abstract class MqttClientExecutorConfigImplBuilder> {
+public abstract class MqttExecutorConfigImplBuilder> {
private @Nullable Executor nettyExecutor;
- private int nettyThreads = MqttClientExecutorConfigImpl.DEFAULT_NETTY_THREADS;
- private @NotNull Scheduler applicationScheduler = MqttClientExecutorConfigImpl.DEFAULT_APPLICATION_SCHEDULER;
+ private @Range(from = 0, to = Integer.MAX_VALUE) int nettyThreads = MqttExecutorConfigImpl.DEFAULT_NETTY_THREADS;
+ private @NotNull Scheduler applicationScheduler = MqttExecutorConfigImpl.DEFAULT_APPLICATION_SCHEDULER;
- MqttClientExecutorConfigImplBuilder() {}
+ MqttExecutorConfigImplBuilder() {}
- MqttClientExecutorConfigImplBuilder(final @NotNull MqttClientExecutorConfigImpl executorConfig) {
+ MqttExecutorConfigImplBuilder(final @NotNull MqttExecutorConfigImpl executorConfig) {
nettyExecutor = executorConfig.getRawNettyExecutor();
nettyThreads = executorConfig.getRawNettyThreads();
applicationScheduler = executorConfig.getApplicationScheduler();
@@ -63,16 +64,15 @@ public abstract class MqttClientExecutorConfigImplBuilder
- implements MqttClientExecutorConfigBuilder {
+ public static class Default extends MqttExecutorConfigImplBuilder implements MqttExecutorConfigBuilder {
public Default() {}
- Default(final @NotNull MqttClientExecutorConfigImpl executorConfig) {
+ Default(final @NotNull MqttExecutorConfigImpl executorConfig) {
super(executorConfig);
}
@@ -82,14 +82,14 @@ public Default() {}
}
}
- public static class Nested extends MqttClientExecutorConfigImplBuilder>
- implements MqttClientExecutorConfigBuilder.Nested {
+ public static class Nested
extends MqttExecutorConfigImplBuilder>
+ implements MqttExecutorConfigBuilder.Nested {
- private final @NotNull Function super MqttClientExecutorConfigImpl, P> parentConsumer;
+ private final @NotNull Function super MqttExecutorConfigImpl, P> parentConsumer;
Nested(
- final @NotNull MqttClientExecutorConfigImpl executorConfig,
- final @NotNull Function super MqttClientExecutorConfigImpl, P> parentConsumer) {
+ final @NotNull MqttExecutorConfigImpl executorConfig,
+ final @NotNull Function super MqttExecutorConfigImpl, P> parentConsumer) {
super(executorConfig);
this.parentConsumer = parentConsumer;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttProxyConfigImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttProxyConfigImpl.java
similarity index 86%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttProxyConfigImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttProxyConfigImpl.java
index 080c3fb0f..017619572 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttProxyConfigImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttProxyConfigImpl.java
@@ -14,12 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.mqtt.MqttProxyConfig;
-import com.hivemq.client.mqtt.MqttProxyProtocol;
+import com.hivemq.client2.mqtt.MqttProxyConfig;
+import com.hivemq.client2.mqtt.MqttProxyProtocol;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
import java.net.InetSocketAddress;
import java.util.Objects;
@@ -28,20 +30,21 @@
/**
* @author Silvio Giebl
*/
+@Unmodifiable
public class MqttProxyConfigImpl implements MqttProxyConfig {
private final @NotNull MqttProxyProtocol protocol;
private final @NotNull InetSocketAddress address;
private final @Nullable String username;
private final @Nullable String password;
- private final int handshakeTimeoutMs;
+ private final @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs;
MqttProxyConfigImpl(
final @NotNull MqttProxyProtocol protocol,
final @NotNull InetSocketAddress address,
final @Nullable String username,
final @Nullable String password,
- final int handshakeTimeoutMs) {
+ final @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs) {
this.protocol = protocol;
this.address = address;
@@ -79,7 +82,7 @@ public class MqttProxyConfigImpl implements MqttProxyConfig {
}
@Override
- public int getHandshakeTimeoutMs() {
+ public @Range(from = 0, to = Integer.MAX_VALUE) int getHandshakeTimeoutMs() {
return handshakeTimeoutMs;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttProxyConfigImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttProxyConfigImplBuilder.java
similarity index 92%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttProxyConfigImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttProxyConfigImplBuilder.java
index d074c9e06..b9bf2cde5 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttProxyConfigImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttProxyConfigImplBuilder.java
@@ -14,14 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.InetSocketAddressUtil;
-import com.hivemq.client.mqtt.MqttProxyConfigBuilder;
-import com.hivemq.client.mqtt.MqttProxyProtocol;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.InetSocketAddressUtil;
+import com.hivemq.client2.mqtt.MqttProxyConfigBuilder;
+import com.hivemq.client2.mqtt.MqttProxyProtocol;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -39,7 +40,8 @@ public abstract class MqttProxyConfigImplBuilder(this::subscribe);
}
- @Override
- public @NotNull FlowableWithSingle subscribeStream(
- final @NotNull Mqtt5Subscribe subscribe) {
-
- return subscribePublishes(subscribe);
- }
-
- @Override
- public MqttSubscribeBuilder.@NotNull Nested> subscribeStreamWith() {
- return new MqttSubscribeBuilder.Nested<>(this::subscribeStream);
- }
-
@Override
public @NotNull FlowableWithSingle subscribePublishes(
final @Nullable Mqtt5Subscribe subscribe) {
@@ -141,7 +130,7 @@ public MqttRxClient(final @NotNull MqttClientConfig clientConfig) {
@NotNull FlowableWithSingle subscribePublishes(
final @NotNull MqttSubscribe subscribe, final boolean manualAcknowledgement) {
- return subscribePublishesUnsafe(subscribe, manualAcknowledgement).observeOnBoth(
+ return subscribePublishesUnsafe(subscribe, manualAcknowledgement).observeBothOn(
clientConfig.getExecutorConfig().getApplicationScheduler(), true);
}
@@ -204,19 +193,19 @@ public MqttRxClient(final @NotNull MqttClientConfig clientConfig) {
}
@Override
- public @NotNull Flowable publish(final @Nullable Flowable publishFlowable) {
- Checks.notNull(publishFlowable, "Publish flowable");
+ public @NotNull Flowable publish(final @NotNull Publisher publisher) {
+ Checks.notNull(publisher, "Publisher");
- return publish(publishFlowable, PUBLISH_MAPPER);
+ return publish(publisher, PUBLISH_MAPPER);
}
public @NotNull Flowable publish(
- final @NotNull Flowable publishFlowable, final @NotNull Function
publishMapper) {
+ final @NotNull Publisher
publisher, final @NotNull Function
publishMapper) {
final Scheduler applicationScheduler = clientConfig.getExecutorConfig().getApplicationScheduler();
- if (publishFlowable instanceof ScalarCallable) {
+ if (publisher instanceof ScalarSupplier) {
//noinspection unchecked
- final P publish = ((ScalarCallable
) publishFlowable).call();
+ final P publish = ((ScalarSupplier
) publisher).get();
if (publish == null) {
return Flowable.empty();
}
@@ -229,7 +218,8 @@ public MqttRxClient(final @NotNull MqttClientConfig clientConfig) {
return new MqttAckSingleFlowable(clientConfig, mqttPublish).observeOn(applicationScheduler, true);
}
return new MqttAckFlowable(
- clientConfig, publishFlowable.subscribeOn(applicationScheduler).map(publishMapper)).observeOn(
+ clientConfig,
+ Flowable.fromPublisher(publisher).subscribeOn(applicationScheduler).map(publishMapper)).observeOn(
applicationScheduler, true);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttRxClientBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttRxClientBuilder.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttRxClientBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttRxClientBuilder.java
index f1f1ed2d0..4f3961ba8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttRxClientBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttRxClientBuilder.java
@@ -14,22 +14,22 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
-
-import com.hivemq.client.internal.mqtt.advanced.MqttClientAdvancedConfig;
-import com.hivemq.client.internal.mqtt.advanced.MqttClientAdvancedConfigBuilder;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuthBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.MqttVersion;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5ClientBuilder;
-import com.hivemq.client.mqtt.mqtt5.advanced.Mqtt5ClientAdvancedConfig;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
+package com.hivemq.client2.internal.mqtt;
+
+import com.hivemq.client2.internal.mqtt.advanced.MqttAdvancedConfig;
+import com.hivemq.client2.internal.mqtt.advanced.MqttAdvancedConfigBuilder;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuthBuilder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishBuilder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.MqttVersion;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5ClientBuilder;
+import com.hivemq.client2.mqtt.mqtt5.advanced.Mqtt5AdvancedConfig;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -38,7 +38,7 @@
*/
public class MqttRxClientBuilder extends MqttRxClientBuilderBase implements Mqtt5ClientBuilder {
- private @NotNull MqttClientAdvancedConfig advancedConfig = MqttClientAdvancedConfig.DEFAULT;
+ private @NotNull MqttAdvancedConfig advancedConfig = MqttAdvancedConfig.DEFAULT;
private @Nullable MqttSimpleAuth simpleAuth;
private @Nullable Mqtt5EnhancedAuthMechanism enhancedAuthMechanism;
private @Nullable MqttWillPublish willPublish;
@@ -55,14 +55,14 @@ public MqttRxClientBuilder() {}
}
@Override
- public @NotNull MqttRxClientBuilder advancedConfig(final @NotNull Mqtt5ClientAdvancedConfig advancedConfig) {
- this.advancedConfig = Checks.notImplemented(advancedConfig, MqttClientAdvancedConfig.class, "Advanced config");
+ public @NotNull MqttRxClientBuilder advancedConfig(final @NotNull Mqtt5AdvancedConfig advancedConfig) {
+ this.advancedConfig = Checks.notImplemented(advancedConfig, MqttAdvancedConfig.class, "Advanced config");
return this;
}
@Override
- public MqttClientAdvancedConfigBuilder.@NotNull Nested advancedConfig() {
- return new MqttClientAdvancedConfigBuilder.Nested<>(advancedConfig, this::advancedConfig);
+ public MqttAdvancedConfigBuilder.@NotNull Nested advancedConfigWith() {
+ return new MqttAdvancedConfigBuilder.Nested<>(advancedConfig, this::advancedConfig);
}
@Override
@@ -72,7 +72,7 @@ public MqttRxClientBuilder() {}
}
@Override
- public MqttSimpleAuthBuilder.@NotNull Nested simpleAuth() {
+ public MqttSimpleAuthBuilder.@NotNull Nested simpleAuthWith() {
return new MqttSimpleAuthBuilder.Nested<>(this::simpleAuth);
}
@@ -90,7 +90,7 @@ public MqttRxClientBuilder() {}
}
@Override
- public MqttPublishBuilder.@NotNull WillNested willPublish() {
+ public MqttPublishBuilder.@NotNull WillNested willPublishWith() {
return new MqttPublishBuilder.WillNested<>(this::willPublish);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttRxClientBuilderBase.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttRxClientBuilderBase.java
similarity index 53%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttRxClientBuilderBase.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttRxClientBuilderBase.java
index 0fd42b948..1d766c880 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttRxClientBuilderBase.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttRxClientBuilderBase.java
@@ -14,40 +14,41 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
-
-import com.hivemq.client.internal.mqtt.advanced.MqttClientAdvancedConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttClientIdentifierImpl;
-import com.hivemq.client.internal.mqtt.lifecycle.MqttClientAutoReconnectImpl;
-import com.hivemq.client.internal.mqtt.lifecycle.MqttClientAutoReconnectImplBuilder;
-import com.hivemq.client.internal.mqtt.mqtt3.Mqtt3RxClientViewBuilder;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.*;
-import com.hivemq.client.mqtt.datatypes.MqttClientIdentifier;
-import com.hivemq.client.mqtt.lifecycle.MqttClientAutoReconnect;
-import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedListener;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedListener;
+package com.hivemq.client2.internal.mqtt;
+
+import com.hivemq.client2.internal.mqtt.advanced.MqttAdvancedConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttClientIdentifierImpl;
+import com.hivemq.client2.internal.mqtt.lifecycle.MqttAutoReconnectImpl;
+import com.hivemq.client2.internal.mqtt.lifecycle.MqttAutoReconnectImplBuilder;
+import com.hivemq.client2.internal.mqtt.mqtt3.Mqtt3RxClientViewBuilder;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.*;
+import com.hivemq.client2.mqtt.datatypes.MqttClientIdentifier;
+import com.hivemq.client2.mqtt.lifecycle.MqttAutoReconnect;
+import com.hivemq.client2.mqtt.lifecycle.MqttConnectedListener;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectedListener;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.util.concurrent.TimeUnit;
/**
* @author Silvio Giebl
*/
public abstract class MqttRxClientBuilderBase>
- extends MqttClientTransportConfigImplBuilder {
+ extends MqttTransportConfigImplBuilder {
private @NotNull MqttClientIdentifierImpl identifier =
MqttClientIdentifierImpl.REQUEST_CLIENT_IDENTIFIER_FROM_SERVER;
- private @Nullable MqttClientTransportConfigImpl transportConfig = MqttClientTransportConfigImpl.DEFAULT;
- private @NotNull MqttClientExecutorConfigImpl executorConfig = MqttClientExecutorConfigImpl.DEFAULT;
- private @Nullable MqttClientAutoReconnectImpl autoReconnect;
- private ImmutableList.@Nullable Builder connectedListenersBuilder;
- private ImmutableList.@Nullable Builder disconnectedListenersBuilder;
+ private @Nullable MqttTransportConfigImpl transportConfig = MqttTransportConfigImpl.DEFAULT;
+ private @NotNull MqttExecutorConfigImpl executorConfig = MqttExecutorConfigImpl.DEFAULT;
+ private @Nullable MqttAutoReconnectImpl autoReconnect;
+ private ImmutableList.@Nullable Builder connectedListenersBuilder;
+ private ImmutableList.@Nullable Builder disconnectedListenersBuilder;
protected MqttRxClientBuilderBase() {}
@@ -98,20 +99,43 @@ protected MqttRxClientBuilderBase(final @NotNull MqttRxClientBuilderBase> clie
}
@Override
- public @NotNull B sslWithDefaultConfig() {
+ public @NotNull B localAddress(final @Nullable InetSocketAddress address) {
transportConfig = null;
- return super.sslWithDefaultConfig();
+ return super.localAddress(address);
}
@Override
- public @NotNull B sslConfig(final @Nullable MqttClientSslConfig sslConfig) {
- return super.sslConfig(sslConfig);
+ public @NotNull B localAddress(final @Nullable String address) {
+ transportConfig = null;
+ return super.localAddress(address);
}
@Override
- public @NotNull B webSocketWithDefaultConfig() {
+ public @NotNull B localAddress(final @Nullable InetAddress address) {
+ transportConfig = null;
+ return super.localAddress(address);
+ }
+
+ @Override
+ public @NotNull B localPort(final int port) {
+ transportConfig = null;
+ return super.localPort(port);
+ }
+
+ public @NotNull B tls() {
transportConfig = null;
- return super.webSocketWithDefaultConfig();
+ return super.tls();
+ }
+
+ @Override
+ public @NotNull B tlsConfig(final @Nullable MqttTlsConfig tlsConfig) {
+ transportConfig = null;
+ return super.tlsConfig(tlsConfig);
+ }
+
+ public @NotNull B webSocket() {
+ transportConfig = null;
+ return super.webSocket();
}
@Override
@@ -120,43 +144,60 @@ protected MqttRxClientBuilderBase(final @NotNull MqttRxClientBuilderBase> clie
return super.webSocketConfig(webSocketConfig);
}
- public @NotNull B transportConfig(final @Nullable MqttClientTransportConfig transportConfig) {
+ @Override
+ public @NotNull B proxyConfig(final @Nullable MqttProxyConfig proxyConfig) {
+ transportConfig = null;
+ return super.proxyConfig(proxyConfig);
+ }
+
+ @Override
+ public @NotNull B socketConnectTimeout(final long timeout, final @Nullable TimeUnit timeUnit) {
+ transportConfig = null;
+ return super.socketConnectTimeout(timeout, timeUnit);
+ }
+
+ @Override
+ public @NotNull B mqttConnectTimeout(final long timeout, final @Nullable TimeUnit timeUnit) {
+ transportConfig = null;
+ return super.mqttConnectTimeout(timeout, timeUnit);
+ }
+
+ public @NotNull B transportConfig(final @Nullable MqttTransportConfig transportConfig) {
this.transportConfig =
- Checks.notImplemented(transportConfig, MqttClientTransportConfigImpl.class, "Transport config");
+ Checks.notImplemented(transportConfig, MqttTransportConfigImpl.class, "Transport config");
set(this.transportConfig);
return self();
}
- public MqttClientTransportConfigImplBuilder.@NotNull Nested transportConfig() {
- return new MqttClientTransportConfigImplBuilder.Nested<>(this, this::transportConfig);
+ public MqttTransportConfigImplBuilder.@NotNull Nested transportConfigWith() {
+ return new MqttTransportConfigImplBuilder.Nested<>(this, this::transportConfig);
}
- public @NotNull B executorConfig(final @Nullable MqttClientExecutorConfig executorConfig) {
- this.executorConfig =
- Checks.notImplemented(executorConfig, MqttClientExecutorConfigImpl.class, "Executor config");
+ public @NotNull B executorConfig(final @Nullable MqttExecutorConfig executorConfig) {
+ this.executorConfig = Checks.notImplemented(executorConfig, MqttExecutorConfigImpl.class, "Executor config");
return self();
}
- public MqttClientExecutorConfigImplBuilder.@NotNull Nested executorConfig() {
- return new MqttClientExecutorConfigImplBuilder.Nested<>(executorConfig, this::executorConfig);
+ public MqttExecutorConfigImplBuilder.@NotNull Nested executorConfigWith() {
+ return new MqttExecutorConfigImplBuilder.Nested<>(executorConfig, this::executorConfig);
}
- public @NotNull B automaticReconnectWithDefaultConfig() {
- this.autoReconnect = MqttClientAutoReconnectImpl.DEFAULT;
+ public @NotNull B automaticReconnect() {
+ this.autoReconnect = MqttAutoReconnectImpl.DEFAULT;
return self();
}
- public @NotNull B automaticReconnect(final @Nullable MqttClientAutoReconnect autoReconnect) {
+ public @NotNull B automaticReconnect(final @Nullable MqttAutoReconnect autoReconnect) {
this.autoReconnect =
- Checks.notImplementedOrNull(autoReconnect, MqttClientAutoReconnectImpl.class, "Automatic reconnect");
+ Checks.notImplementedOrNull(autoReconnect, MqttAutoReconnectImpl.class, "Automatic reconnect");
return self();
}
- public MqttClientAutoReconnectImplBuilder.@NotNull Nested automaticReconnect() {
- return new MqttClientAutoReconnectImplBuilder.Nested<>(autoReconnect, this::automaticReconnect);
+ public MqttAutoReconnectImplBuilder.@NotNull Nested automaticReconnectWith() {
+ return new MqttAutoReconnectImplBuilder.Nested<>(autoReconnect, this::automaticReconnect);
}
- public @NotNull B addConnectedListener(final @Nullable MqttClientConnectedListener connectedListener) {
+ public @NotNull B addConnectedListener(final @Nullable MqttConnectedListener connectedListener) {
Checks.notNull(connectedListener, "Connected listener");
if (connectedListenersBuilder == null) {
connectedListenersBuilder = ImmutableList.builder();
@@ -165,7 +206,7 @@ protected MqttRxClientBuilderBase(final @NotNull MqttRxClientBuilderBase> clie
return self();
}
- public @NotNull B addDisconnectedListener(final @Nullable MqttClientDisconnectedListener disconnectedListener) {
+ public @NotNull B addDisconnectedListener(final @Nullable MqttDisconnectedListener disconnectedListener) {
Checks.notNull(disconnectedListener, "Disconnected listener");
if (disconnectedListenersBuilder == null) {
disconnectedListenersBuilder = ImmutableList.builder();
@@ -175,21 +216,21 @@ protected MqttRxClientBuilderBase(final @NotNull MqttRxClientBuilderBase> clie
}
@Override
- @NotNull MqttClientTransportConfigImpl buildTransportConfig() {
+ @NotNull MqttTransportConfigImpl buildTransportConfig() {
if (transportConfig == null) {
return super.buildTransportConfig();
}
return transportConfig;
}
- private @NotNull ImmutableList buildConnectedListeners() {
+ private @NotNull ImmutableList buildConnectedListeners() {
if (connectedListenersBuilder == null) {
return ImmutableList.of();
}
return connectedListenersBuilder.build();
}
- private @NotNull ImmutableList buildDisconnectedListeners() {
+ private @NotNull ImmutableList buildDisconnectedListeners() {
if (disconnectedListenersBuilder == null) {
if (autoReconnect == null) {
return ImmutableList.of();
@@ -199,14 +240,13 @@ protected MqttRxClientBuilderBase(final @NotNull MqttRxClientBuilderBase> clie
if (autoReconnect == null) {
return disconnectedListenersBuilder.build();
}
- return ImmutableList.builder().add(autoReconnect)
- .addAll(disconnectedListenersBuilder.build())
- .build();
+ return ImmutableList.builder(disconnectedListenersBuilder.getSize() + 1).add(
+ autoReconnect).addAll(disconnectedListenersBuilder.build()).build();
}
protected @NotNull MqttClientConfig buildClientConfig(
final @NotNull MqttVersion mqttVersion,
- final @NotNull MqttClientAdvancedConfig advancedConfig,
+ final @NotNull MqttAdvancedConfig advancedConfig,
final @NotNull MqttClientConfig.ConnectDefaults connectDefaults) {
return new MqttClientConfig(mqttVersion, identifier, buildTransportConfig(), executorConfig, advancedConfig,
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientSslConfigImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTlsConfigImpl.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientSslConfigImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttTlsConfigImpl.java
index d0f02d20a..717fe636e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientSslConfigImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTlsConfigImpl.java
@@ -14,12 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.MqttClientSslConfig;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.MqttTlsConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
import javax.net.ssl.*;
import java.util.List;
@@ -30,7 +32,8 @@
* @author David Katz
* @author Silvio Giebl
*/
-public class MqttClientSslConfigImpl implements MqttClientSslConfig {
+@Unmodifiable
+public class MqttTlsConfigImpl implements MqttTlsConfig {
static final @Nullable HostnameVerifier DEFAULT_HOSTNAME_VERIFIER;
@@ -44,23 +47,22 @@ public class MqttClientSslConfigImpl implements MqttClientSslConfig {
DEFAULT_HOSTNAME_VERIFIER = hostnameVerifier;
}
- static final @NotNull MqttClientSslConfigImpl DEFAULT =
- new MqttClientSslConfigImpl(null, null, null, null, (int) DEFAULT_HANDSHAKE_TIMEOUT_MS,
- DEFAULT_HOSTNAME_VERIFIER);
+ static final @NotNull MqttTlsConfigImpl DEFAULT =
+ new MqttTlsConfigImpl(null, null, null, null, DEFAULT_HANDSHAKE_TIMEOUT_MS, DEFAULT_HOSTNAME_VERIFIER);
private final @Nullable KeyManagerFactory keyManagerFactory;
private final @Nullable TrustManagerFactory trustManagerFactory;
private final @Nullable ImmutableList cipherSuites;
private final @Nullable ImmutableList protocols;
- private final int handshakeTimeoutMs;
+ private final @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs;
private final @Nullable HostnameVerifier hostnameVerifier;
- MqttClientSslConfigImpl(
+ MqttTlsConfigImpl(
final @Nullable KeyManagerFactory keyManagerFactory,
final @Nullable TrustManagerFactory trustManagerFactory,
final @Nullable ImmutableList cipherSuites,
final @Nullable ImmutableList protocols,
- final int handshakeTimeoutMs,
+ final @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs,
final @Nullable HostnameVerifier hostnameVerifier) {
this.keyManagerFactory = keyManagerFactory;
@@ -108,7 +110,7 @@ public class MqttClientSslConfigImpl implements MqttClientSslConfig {
}
@Override
- public long getHandshakeTimeoutMs() {
+ public @Range(from = 0, to = Integer.MAX_VALUE) int getHandshakeTimeoutMs() {
return handshakeTimeoutMs;
}
@@ -122,8 +124,8 @@ public long getHandshakeTimeoutMs() {
}
@Override
- public MqttClientSslConfigImplBuilder.@NotNull Default extend() {
- return new MqttClientSslConfigImplBuilder.Default(this);
+ public MqttTlsConfigImplBuilder.@NotNull Default extend() {
+ return new MqttTlsConfigImplBuilder.Default(this);
}
@Override
@@ -131,10 +133,10 @@ public boolean equals(final @Nullable Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof MqttClientSslConfigImpl)) {
+ if (!(o instanceof MqttTlsConfigImpl)) {
return false;
}
- final MqttClientSslConfigImpl that = (MqttClientSslConfigImpl) o;
+ final MqttTlsConfigImpl that = (MqttTlsConfigImpl) o;
return Objects.equals(keyManagerFactory, that.keyManagerFactory) &&
Objects.equals(trustManagerFactory, that.trustManagerFactory) &&
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientSslConfigImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTlsConfigImplBuilder.java
similarity index 61%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientSslConfigImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttTlsConfigImplBuilder.java
index f5fa63816..6b8b8a2f7 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientSslConfigImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTlsConfigImplBuilder.java
@@ -14,13 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.MqttClientSslConfigBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.MqttTlsConfigBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.KeyManagerFactory;
@@ -32,25 +33,26 @@
/**
* @author Silvio Giebl
*/
-public abstract class MqttClientSslConfigImplBuilder> {
+public abstract class MqttTlsConfigImplBuilder> {
private @Nullable KeyManagerFactory keyManagerFactory;
private @Nullable TrustManagerFactory trustManagerFactory;
private @Nullable ImmutableList cipherSuites;
private @Nullable ImmutableList protocols;
- private int handshakeTimeoutMs = (int) MqttClientSslConfigImpl.DEFAULT_HANDSHAKE_TIMEOUT_MS;
- private @Nullable HostnameVerifier hostnameVerifier = MqttClientSslConfigImpl.DEFAULT_HOSTNAME_VERIFIER;
-
- MqttClientSslConfigImplBuilder() {}
-
- MqttClientSslConfigImplBuilder(final @Nullable MqttClientSslConfigImpl sslConfig) {
- if (sslConfig != null) {
- keyManagerFactory = sslConfig.getRawKeyManagerFactory();
- trustManagerFactory = sslConfig.getRawTrustManagerFactory();
- cipherSuites = sslConfig.getRawCipherSuites();
- protocols = sslConfig.getRawProtocols();
- handshakeTimeoutMs = (int) sslConfig.getHandshakeTimeoutMs();
- hostnameVerifier = sslConfig.getRawHostnameVerifier();
+ private @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs =
+ MqttTlsConfigImpl.DEFAULT_HANDSHAKE_TIMEOUT_MS;
+ private @Nullable HostnameVerifier hostnameVerifier = MqttTlsConfigImpl.DEFAULT_HOSTNAME_VERIFIER;
+
+ MqttTlsConfigImplBuilder() {}
+
+ MqttTlsConfigImplBuilder(final @Nullable MqttTlsConfigImpl tlsConfig) {
+ if (tlsConfig != null) {
+ keyManagerFactory = tlsConfig.getRawKeyManagerFactory();
+ trustManagerFactory = tlsConfig.getRawTrustManagerFactory();
+ cipherSuites = tlsConfig.getRawCipherSuites();
+ protocols = tlsConfig.getRawProtocols();
+ handshakeTimeoutMs = tlsConfig.getHandshakeTimeoutMs();
+ hostnameVerifier = tlsConfig.getRawHostnameVerifier();
}
}
@@ -85,21 +87,21 @@ public abstract class MqttClientSslConfigImplBuilder implements MqttClientSslConfigBuilder {
+ public static class Default extends MqttTlsConfigImplBuilder implements MqttTlsConfigBuilder {
public Default() {}
- Default(final @Nullable MqttClientSslConfigImpl sslConfig) {
- super(sslConfig);
+ Default(final @Nullable MqttTlsConfigImpl tlsConfig) {
+ super(tlsConfig);
}
@Override
@@ -108,16 +110,16 @@ public Default() {}
}
}
- public static class Nested extends MqttClientSslConfigImplBuilder>
- implements MqttClientSslConfigBuilder.Nested {
+ public static class Nested
extends MqttTlsConfigImplBuilder>
+ implements MqttTlsConfigBuilder.Nested {
- private final @NotNull Function super MqttClientSslConfigImpl, P> parentConsumer;
+ private final @NotNull Function super MqttTlsConfigImpl, P> parentConsumer;
Nested(
- final @Nullable MqttClientSslConfigImpl sslConfig,
- final @NotNull Function super MqttClientSslConfigImpl, P> parentConsumer) {
+ final @Nullable MqttTlsConfigImpl tlsConfig,
+ final @NotNull Function super MqttTlsConfigImpl, P> parentConsumer) {
- super(sslConfig);
+ super(tlsConfig);
this.parentConsumer = parentConsumer;
}
@@ -127,7 +129,7 @@ public static class Nested
extends MqttClientSslConfigImplBuilder>
}
@Override
- public @NotNull P applySslConfig() {
+ public @NotNull P applyTlsConfig() {
return parentConsumer.apply(build());
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientTransportConfigImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTransportConfigImpl.java
similarity index 64%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientTransportConfigImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttTransportConfigImpl.java
index fa2489853..3fca7e302 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientTransportConfigImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTransportConfigImpl.java
@@ -14,12 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.internal.util.InetSocketAddressUtil;
-import com.hivemq.client.mqtt.*;
+import com.hivemq.client2.internal.util.InetSocketAddressUtil;
+import com.hivemq.client2.mqtt.MqttProxyConfig;
+import com.hivemq.client2.mqtt.MqttTlsConfig;
+import com.hivemq.client2.mqtt.MqttTransportConfig;
+import com.hivemq.client2.mqtt.MqttWebSocketConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
import java.net.InetSocketAddress;
import java.util.Objects;
@@ -28,32 +33,33 @@
/**
* @author Silvio Giebl
*/
-public class MqttClientTransportConfigImpl implements MqttClientTransportConfig {
+@Unmodifiable
+public class MqttTransportConfigImpl implements MqttTransportConfig {
- public static final @NotNull MqttClientTransportConfigImpl DEFAULT = new MqttClientTransportConfigImpl(
- InetSocketAddressUtil.create(MqttClient.DEFAULT_SERVER_HOST, MqttClient.DEFAULT_SERVER_PORT), null, null,
- null, null, DEFAULT_SOCKET_CONNECT_TIMEOUT_MS, DEFAULT_MQTT_CONNECT_TIMEOUT_MS);
+ public static final @NotNull MqttTransportConfigImpl DEFAULT =
+ new MqttTransportConfigImpl(InetSocketAddressUtil.create(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT), null,
+ null, null, null, DEFAULT_SOCKET_CONNECT_TIMEOUT_MS, DEFAULT_MQTT_CONNECT_TIMEOUT_MS);
private final @NotNull InetSocketAddress serverAddress;
private final @Nullable InetSocketAddress localAddress;
- private final @Nullable MqttClientSslConfigImpl sslConfig;
+ private final @Nullable MqttTlsConfigImpl tlsConfig;
private final @Nullable MqttWebSocketConfigImpl webSocketConfig;
private final @Nullable MqttProxyConfigImpl proxyConfig;
- private final int socketConnectTimeoutMs;
- private final int mqttConnectTimeoutMs;
+ private final @Range(from = 0, to = Integer.MAX_VALUE) int socketConnectTimeoutMs;
+ private final @Range(from = 0, to = Integer.MAX_VALUE) int mqttConnectTimeoutMs;
- MqttClientTransportConfigImpl(
+ MqttTransportConfigImpl(
final @NotNull InetSocketAddress serverAddress,
final @Nullable InetSocketAddress localAddress,
- final @Nullable MqttClientSslConfigImpl sslConfig,
+ final @Nullable MqttTlsConfigImpl tlsConfig,
final @Nullable MqttWebSocketConfigImpl webSocketConfig,
final @Nullable MqttProxyConfigImpl proxyConfig,
- final int socketConnectTimeoutMs,
- final int mqttConnectTimeoutMs) {
+ final @Range(from = 0, to = Integer.MAX_VALUE) int socketConnectTimeoutMs,
+ final @Range(from = 0, to = Integer.MAX_VALUE) int mqttConnectTimeoutMs) {
this.serverAddress = serverAddress;
this.localAddress = localAddress;
- this.sslConfig = sslConfig;
+ this.tlsConfig = tlsConfig;
this.webSocketConfig = webSocketConfig;
this.proxyConfig = proxyConfig;
this.socketConnectTimeoutMs = socketConnectTimeoutMs;
@@ -79,12 +85,12 @@ public class MqttClientTransportConfigImpl implements MqttClientTransportConfig
}
@Override
- public @NotNull Optional getSslConfig() {
- return Optional.ofNullable(sslConfig);
+ public @NotNull Optional getTlsConfig() {
+ return Optional.ofNullable(tlsConfig);
}
- public @Nullable MqttClientSslConfigImpl getRawSslConfig() {
- return sslConfig;
+ public @Nullable MqttTlsConfigImpl getRawTlsConfig() {
+ return tlsConfig;
}
@Override
@@ -106,18 +112,18 @@ public class MqttClientTransportConfigImpl implements MqttClientTransportConfig
}
@Override
- public int getSocketConnectTimeoutMs() {
+ public @Range(from = 0, to = Integer.MAX_VALUE) int getSocketConnectTimeoutMs() {
return socketConnectTimeoutMs;
}
@Override
- public int getMqttConnectTimeoutMs() {
+ public @Range(from = 0, to = Integer.MAX_VALUE) int getMqttConnectTimeoutMs() {
return mqttConnectTimeoutMs;
}
@Override
- public MqttClientTransportConfigImplBuilder.@NotNull Default extend() {
- return new MqttClientTransportConfigImplBuilder.Default(this);
+ public MqttTransportConfigImplBuilder.@NotNull Default extend() {
+ return new MqttTransportConfigImplBuilder.Default(this);
}
@Override
@@ -125,13 +131,13 @@ public boolean equals(final @Nullable Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof MqttClientTransportConfigImpl)) {
+ if (!(o instanceof MqttTransportConfigImpl)) {
return false;
}
- final MqttClientTransportConfigImpl that = (MqttClientTransportConfigImpl) o;
+ final MqttTransportConfigImpl that = (MqttTransportConfigImpl) o;
return serverAddress.equals(that.serverAddress) && Objects.equals(localAddress, that.localAddress) &&
- Objects.equals(sslConfig, that.sslConfig) && Objects.equals(webSocketConfig, that.webSocketConfig) &&
+ Objects.equals(tlsConfig, that.tlsConfig) && Objects.equals(webSocketConfig, that.webSocketConfig) &&
Objects.equals(proxyConfig, that.proxyConfig) &&
(socketConnectTimeoutMs == that.socketConnectTimeoutMs) &&
(mqttConnectTimeoutMs == that.mqttConnectTimeoutMs);
@@ -141,7 +147,7 @@ public boolean equals(final @Nullable Object o) {
public int hashCode() {
int result = serverAddress.hashCode();
result = 31 * result + Objects.hashCode(localAddress);
- result = 31 * result + Objects.hashCode(sslConfig);
+ result = 31 * result + Objects.hashCode(tlsConfig);
result = 31 * result + Objects.hashCode(webSocketConfig);
result = 31 * result + Objects.hashCode(proxyConfig);
result = 31 * result + Integer.hashCode(socketConnectTimeoutMs);
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientTransportConfigImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTransportConfigImplBuilder.java
similarity index 72%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttClientTransportConfigImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttTransportConfigImplBuilder.java
index 69aa1186d..a121d501e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttClientTransportConfigImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttTransportConfigImplBuilder.java
@@ -14,61 +14,62 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
-
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.InetSocketAddressUtil;
-import com.hivemq.client.mqtt.MqttClientSslConfig;
-import com.hivemq.client.mqtt.MqttClientTransportConfigBuilder;
-import com.hivemq.client.mqtt.MqttProxyConfig;
-import com.hivemq.client.mqtt.MqttWebSocketConfig;
+package com.hivemq.client2.internal.mqtt;
+
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.InetSocketAddressUtil;
+import com.hivemq.client2.mqtt.MqttProxyConfig;
+import com.hivemq.client2.mqtt.MqttTlsConfig;
+import com.hivemq.client2.mqtt.MqttTransportConfigBuilder;
+import com.hivemq.client2.mqtt.MqttWebSocketConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
-import static com.hivemq.client.mqtt.MqttClient.*;
-
/**
* @author Silvio Giebl
*/
-public abstract class MqttClientTransportConfigImplBuilder> {
+public abstract class MqttTransportConfigImplBuilder> {
private @Nullable InetSocketAddress serverAddress;
- private @NotNull Object serverHost = DEFAULT_SERVER_HOST; // String or InetAddress
+ private @NotNull Object serverHost = MqttTransportConfigImpl.DEFAULT_SERVER_HOST; // String or InetAddress
private int serverPort = -1;
private @Nullable InetSocketAddress localAddress;
- private @Nullable MqttClientSslConfigImpl sslConfig;
+ private @Nullable MqttTlsConfigImpl tlsConfig;
private @Nullable MqttWebSocketConfigImpl webSocketConfig;
private @Nullable MqttProxyConfigImpl proxyConfig;
- private int socketConnectTimeoutMs = MqttClientTransportConfigImpl.DEFAULT_SOCKET_CONNECT_TIMEOUT_MS;
- private int mqttConnectTimeoutMs = MqttClientTransportConfigImpl.DEFAULT_MQTT_CONNECT_TIMEOUT_MS;
+ private @Range(from = 0, to = Integer.MAX_VALUE) int socketConnectTimeoutMs =
+ MqttTransportConfigImpl.DEFAULT_SOCKET_CONNECT_TIMEOUT_MS;
+ private @Range(from = 0, to = Integer.MAX_VALUE) int mqttConnectTimeoutMs =
+ MqttTransportConfigImpl.DEFAULT_MQTT_CONNECT_TIMEOUT_MS;
- MqttClientTransportConfigImplBuilder() {}
+ MqttTransportConfigImplBuilder() {}
- MqttClientTransportConfigImplBuilder(final @NotNull MqttClientTransportConfigImpl transportConfig) {
+ MqttTransportConfigImplBuilder(final @NotNull MqttTransportConfigImpl transportConfig) {
set(transportConfig);
}
- MqttClientTransportConfigImplBuilder(final @NotNull MqttClientTransportConfigImplBuilder> builder) {
+ MqttTransportConfigImplBuilder(final @NotNull MqttTransportConfigImplBuilder> builder) {
serverAddress = builder.serverAddress;
serverHost = builder.serverHost;
serverPort = builder.serverPort;
localAddress = builder.localAddress;
- sslConfig = builder.sslConfig;
+ tlsConfig = builder.tlsConfig;
webSocketConfig = builder.webSocketConfig;
proxyConfig = builder.proxyConfig;
socketConnectTimeoutMs = builder.socketConnectTimeoutMs;
mqttConnectTimeoutMs = builder.mqttConnectTimeoutMs;
}
- void set(final @NotNull MqttClientTransportConfigImpl transportConfig) {
+ void set(final @NotNull MqttTransportConfigImpl transportConfig) {
serverAddress = transportConfig.getServerAddress();
localAddress = transportConfig.getRawLocalAddress();
- sslConfig = transportConfig.getRawSslConfig();
+ tlsConfig = transportConfig.getRawTlsConfig();
webSocketConfig = transportConfig.getRawWebSocketConfig();
proxyConfig = transportConfig.getRawProxyConfig();
socketConnectTimeoutMs = transportConfig.getSocketConnectTimeoutMs();
@@ -177,21 +178,21 @@ private int getLocalPort() {
return self();
}
- public @NotNull B sslWithDefaultConfig() {
- this.sslConfig = MqttClientSslConfigImpl.DEFAULT;
+ public @NotNull B tls() {
+ this.tlsConfig = MqttTlsConfigImpl.DEFAULT;
return self();
}
- public @NotNull B sslConfig(final @Nullable MqttClientSslConfig sslConfig) {
- this.sslConfig = Checks.notImplementedOrNull(sslConfig, MqttClientSslConfigImpl.class, "SSL config");
+ public @NotNull B tlsConfig(final @Nullable MqttTlsConfig tlsConfig) {
+ this.tlsConfig = Checks.notImplementedOrNull(tlsConfig, MqttTlsConfigImpl.class, "TLS config");
return self();
}
- public MqttClientSslConfigImplBuilder.@NotNull Nested sslConfig() {
- return new MqttClientSslConfigImplBuilder.Nested<>(sslConfig, this::sslConfig);
+ public MqttTlsConfigImplBuilder.@NotNull Nested tlsConfigWith() {
+ return new MqttTlsConfigImplBuilder.Nested<>(tlsConfig, this::tlsConfig);
}
- public @NotNull B webSocketWithDefaultConfig() {
+ public @NotNull B webSocket() {
this.webSocketConfig = MqttWebSocketConfigImpl.DEFAULT;
return self();
}
@@ -202,7 +203,7 @@ private int getLocalPort() {
return self();
}
- public MqttWebSocketConfigImplBuilder.@NotNull Nested webSocketConfig() {
+ public MqttWebSocketConfigImplBuilder.@NotNull Nested webSocketConfigWith() {
return new MqttWebSocketConfigImplBuilder.Nested<>(webSocketConfig, this::webSocketConfig);
}
@@ -211,7 +212,7 @@ private int getLocalPort() {
return self();
}
- public MqttProxyConfigImplBuilder.@NotNull Nested proxyConfig() {
+ public MqttProxyConfigImplBuilder.@NotNull Nested proxyConfigWith() {
return new MqttProxyConfigImplBuilder.Nested<>(proxyConfig, this::proxyConfig);
}
@@ -243,29 +244,28 @@ private int getServerPort() {
if (serverPort != -1) {
return serverPort;
}
- if (sslConfig == null) {
+ if (tlsConfig == null) {
if (webSocketConfig == null) {
- return DEFAULT_SERVER_PORT;
+ return MqttTransportConfigImpl.DEFAULT_SERVER_PORT;
}
- return DEFAULT_SERVER_PORT_WEBSOCKET;
+ return MqttTransportConfigImpl.DEFAULT_SERVER_PORT_WEBSOCKET;
}
if (webSocketConfig == null) {
- return DEFAULT_SERVER_PORT_SSL;
+ return MqttTransportConfigImpl.DEFAULT_SERVER_PORT_TLS;
}
- return DEFAULT_SERVER_PORT_WEBSOCKET_SSL;
+ return MqttTransportConfigImpl.DEFAULT_SERVER_PORT_WEBSOCKET_TLS;
}
- @NotNull MqttClientTransportConfigImpl buildTransportConfig() {
- return new MqttClientTransportConfigImpl(getServerAddress(), localAddress, sslConfig, webSocketConfig,
- proxyConfig, socketConnectTimeoutMs, mqttConnectTimeoutMs);
+ @NotNull MqttTransportConfigImpl buildTransportConfig() {
+ return new MqttTransportConfigImpl(getServerAddress(), localAddress, tlsConfig, webSocketConfig, proxyConfig,
+ socketConnectTimeoutMs, mqttConnectTimeoutMs);
}
- public static class Default extends MqttClientTransportConfigImplBuilder
- implements MqttClientTransportConfigBuilder {
+ public static class Default extends MqttTransportConfigImplBuilder implements MqttTransportConfigBuilder {
public Default() {}
- Default(final @NotNull MqttClientTransportConfigImpl transportConfig) {
+ Default(final @NotNull MqttTransportConfigImpl transportConfig) {
super(transportConfig);
}
@@ -275,27 +275,27 @@ public Default() {}
}
@Override
- public @NotNull MqttClientTransportConfigImpl build() {
+ public @NotNull MqttTransportConfigImpl build() {
return buildTransportConfig();
}
}
- public static class Nested extends MqttClientTransportConfigImplBuilder>
- implements MqttClientTransportConfigBuilder.Nested {
+ public static class Nested
extends MqttTransportConfigImplBuilder>
+ implements MqttTransportConfigBuilder.Nested {
- private final @NotNull Function super MqttClientTransportConfigImpl, P> parentConsumer;
+ private final @NotNull Function super MqttTransportConfigImpl, P> parentConsumer;
public Nested(
- final @NotNull MqttClientTransportConfigImpl transportConfig,
- final @NotNull Function super MqttClientTransportConfigImpl, P> parentConsumer) {
+ final @NotNull MqttTransportConfigImpl transportConfig,
+ final @NotNull Function super MqttTransportConfigImpl, P> parentConsumer) {
super(transportConfig);
this.parentConsumer = parentConsumer;
}
Nested(
- final @NotNull MqttClientTransportConfigImplBuilder> builder,
- final @NotNull Function super MqttClientTransportConfigImpl, P> parentConsumer) {
+ final @NotNull MqttTransportConfigImplBuilder> builder,
+ final @NotNull Function super MqttTransportConfigImpl, P> parentConsumer) {
super(builder);
this.parentConsumer = parentConsumer;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttWebSocketConfigImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttWebSocketConfigImpl.java
similarity index 62%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttWebSocketConfigImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttWebSocketConfigImpl.java
index b2a08a16f..b14b9c93a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttWebSocketConfigImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttWebSocketConfigImpl.java
@@ -14,47 +14,49 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.mqtt.MqttWebSocketConfig;
+import com.hivemq.client2.mqtt.MqttWebSocketConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author David Katz
* @author Christian Hoff
*/
+@Unmodifiable
public class MqttWebSocketConfigImpl implements MqttWebSocketConfig {
static final @NotNull MqttWebSocketConfigImpl DEFAULT =
- new MqttWebSocketConfigImpl(DEFAULT_SERVER_PATH, DEFAULT_QUERY_STRING, DEFAULT_MQTT_SUBPROTOCOL,
- DEFAULT_HANDSHAKE_TIMEOUT_MS);
+ new MqttWebSocketConfigImpl(DEFAULT_PATH, DEFAULT_QUERY, DEFAULT_SUBPROTOCOL, DEFAULT_HANDSHAKE_TIMEOUT_MS);
- private final @NotNull String serverPath;
- private final @NotNull String queryString;
+ private final @NotNull String path;
+ private final @NotNull String query;
private final @NotNull String subprotocol;
- private final int handshakeTimeoutMs;
+ private final @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs;
MqttWebSocketConfigImpl(
- final @NotNull String serverPath,
- final @NotNull String queryString,
+ final @NotNull String path,
+ final @NotNull String query,
final @NotNull String subprotocol,
- final int handshakeTimeoutMs) {
+ final @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs) {
- this.serverPath = serverPath;
- this.queryString = queryString;
+ this.path = path;
+ this.query = query;
this.subprotocol = subprotocol;
this.handshakeTimeoutMs = handshakeTimeoutMs;
}
@Override
- public @NotNull String getServerPath() {
- return serverPath;
+ public @NotNull String getPath() {
+ return path;
}
@Override
- public @NotNull String getQueryString() {
- return queryString;
+ public @NotNull String getQuery() {
+ return query;
}
@Override
@@ -63,7 +65,7 @@ public class MqttWebSocketConfigImpl implements MqttWebSocketConfig {
}
@Override
- public int getHandshakeTimeoutMs() {
+ public @Range(from = 0, to = Integer.MAX_VALUE) int getHandshakeTimeoutMs() {
return handshakeTimeoutMs;
}
@@ -82,14 +84,14 @@ public boolean equals(final @Nullable Object o) {
}
final MqttWebSocketConfigImpl that = (MqttWebSocketConfigImpl) o;
- return serverPath.equals(that.serverPath) && queryString.equals(that.queryString) &&
- subprotocol.equals(that.subprotocol) && (handshakeTimeoutMs == that.handshakeTimeoutMs);
+ return path.equals(that.path) && query.equals(that.query) && subprotocol.equals(that.subprotocol) &&
+ (handshakeTimeoutMs == that.handshakeTimeoutMs);
}
@Override
public int hashCode() {
- int result = serverPath.hashCode();
- result = 31 * result + queryString.hashCode();
+ int result = path.hashCode();
+ result = 31 * result + query.hashCode();
result = 31 * result + subprotocol.hashCode();
result = 31 * result + Integer.hashCode(handshakeTimeoutMs);
return result;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/MqttWebSocketConfigImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/MqttWebSocketConfigImplBuilder.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/MqttWebSocketConfigImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/MqttWebSocketConfigImplBuilder.java
index 808207498..5ab43dcf8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/MqttWebSocketConfigImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/MqttWebSocketConfigImplBuilder.java
@@ -14,12 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt;
+package com.hivemq.client2.internal.mqtt;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.MqttWebSocketConfigBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.MqttWebSocketConfigBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -29,17 +30,18 @@
*/
public abstract class MqttWebSocketConfigImplBuilder> {
- private @NotNull String serverPath = MqttWebSocketConfigImpl.DEFAULT_SERVER_PATH;
- private @NotNull String queryString = MqttWebSocketConfigImpl.DEFAULT_QUERY_STRING;
- private @NotNull String subprotocol = MqttWebSocketConfigImpl.DEFAULT_MQTT_SUBPROTOCOL;
- private int handshakeTimeoutMs = MqttWebSocketConfigImpl.DEFAULT_HANDSHAKE_TIMEOUT_MS;
+ private @NotNull String path = MqttWebSocketConfigImpl.DEFAULT_PATH;
+ private @NotNull String query = MqttWebSocketConfigImpl.DEFAULT_QUERY;
+ private @NotNull String subprotocol = MqttWebSocketConfigImpl.DEFAULT_SUBPROTOCOL;
+ private @Range(from = 0, to = Integer.MAX_VALUE) int handshakeTimeoutMs =
+ MqttWebSocketConfigImpl.DEFAULT_HANDSHAKE_TIMEOUT_MS;
MqttWebSocketConfigImplBuilder() {}
MqttWebSocketConfigImplBuilder(final @Nullable MqttWebSocketConfigImpl webSocketConfig) {
if (webSocketConfig != null) {
- serverPath = webSocketConfig.getServerPath();
- queryString = webSocketConfig.getQueryString();
+ path = webSocketConfig.getPath();
+ query = webSocketConfig.getQuery();
subprotocol = webSocketConfig.getSubprotocol();
handshakeTimeoutMs = webSocketConfig.getHandshakeTimeoutMs();
}
@@ -47,14 +49,14 @@ public abstract class MqttWebSocketConfigImplBuilder implements MqttWebSocketConfigBuilder {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/advanced/MqttClientAdvancedConfig.java b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/MqttAdvancedConfig.java
similarity index 53%
rename from src/main/java/com/hivemq/client/internal/mqtt/advanced/MqttClientAdvancedConfig.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/advanced/MqttAdvancedConfig.java
index 45e6e4729..037255479 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/advanced/MqttClientAdvancedConfig.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/MqttAdvancedConfig.java
@@ -14,41 +14,32 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.advanced;
+package com.hivemq.client2.internal.mqtt.advanced;
-import com.hivemq.client.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
-import com.hivemq.client.mqtt.mqtt5.advanced.Mqtt5ClientAdvancedConfig;
+import com.hivemq.client2.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
+import com.hivemq.client2.mqtt.mqtt5.advanced.Mqtt5AdvancedConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import java.util.Objects;
/**
* @author Silvio Giebl
*/
-public class MqttClientAdvancedConfig implements Mqtt5ClientAdvancedConfig {
+@Unmodifiable
+public class MqttAdvancedConfig implements Mqtt5AdvancedConfig {
- public static final @NotNull MqttClientAdvancedConfig DEFAULT = new MqttClientAdvancedConfig(false, false, null);
+ public static final @NotNull MqttAdvancedConfig DEFAULT = new MqttAdvancedConfig(false, null);
- private final boolean allowServerReAuth;
private final boolean validatePayloadFormat;
private final @Nullable MqttClientInterceptors interceptors;
- MqttClientAdvancedConfig(
- final boolean allowServerReAuth,
- final boolean validatePayloadFormat,
- final @Nullable MqttClientInterceptors interceptors) {
-
- this.allowServerReAuth = allowServerReAuth;
+ MqttAdvancedConfig(final boolean validatePayloadFormat, final @Nullable MqttClientInterceptors interceptors) {
this.validatePayloadFormat = validatePayloadFormat;
this.interceptors = interceptors;
}
- @Override
- public boolean isAllowServerReAuth() {
- return allowServerReAuth;
- }
-
@Override
public boolean isValidatePayloadFormat() {
return validatePayloadFormat;
@@ -60,8 +51,8 @@ public boolean isValidatePayloadFormat() {
}
@Override
- public MqttClientAdvancedConfigBuilder.@NotNull Default extend() {
- return new MqttClientAdvancedConfigBuilder.Default(this);
+ public MqttAdvancedConfigBuilder.@NotNull Default extend() {
+ return new MqttAdvancedConfigBuilder.Default(this);
}
@Override
@@ -69,19 +60,17 @@ public boolean equals(final @Nullable Object o) {
if (this == o) {
return true;
}
- if (!(o instanceof MqttClientAdvancedConfig)) {
+ if (!(o instanceof MqttAdvancedConfig)) {
return false;
}
- final MqttClientAdvancedConfig that = (MqttClientAdvancedConfig) o;
+ final MqttAdvancedConfig that = (MqttAdvancedConfig) o;
- return (allowServerReAuth == that.allowServerReAuth) && (validatePayloadFormat == that.validatePayloadFormat) &&
- Objects.equals(interceptors, that.interceptors);
+ return (validatePayloadFormat == that.validatePayloadFormat) && Objects.equals(interceptors, that.interceptors);
}
@Override
public int hashCode() {
- int result = Boolean.hashCode(allowServerReAuth);
- result = 31 * result + Boolean.hashCode(validatePayloadFormat);
+ int result = Boolean.hashCode(validatePayloadFormat);
result = 31 * result + Objects.hashCode(interceptors);
return result;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/advanced/MqttClientAdvancedConfigBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/MqttAdvancedConfigBuilder.java
similarity index 55%
rename from src/main/java/com/hivemq/client/internal/mqtt/advanced/MqttClientAdvancedConfigBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/advanced/MqttAdvancedConfigBuilder.java
index 0b243925d..ffdd7217d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/advanced/MqttClientAdvancedConfigBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/MqttAdvancedConfigBuilder.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.advanced;
+package com.hivemq.client2.internal.mqtt.advanced;
-import com.hivemq.client.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
-import com.hivemq.client.internal.mqtt.advanced.interceptor.MqttClientInterceptorsBuilder;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.mqtt5.advanced.Mqtt5ClientAdvancedConfigBuilder;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.Mqtt5ClientInterceptors;
+import com.hivemq.client2.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
+import com.hivemq.client2.internal.mqtt.advanced.interceptor.MqttClientInterceptorsBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.mqtt5.advanced.Mqtt5AdvancedConfigBuilder;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.Mqtt5ClientInterceptors;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -29,27 +29,20 @@
/**
* @author Silvio Giebl
*/
-public abstract class MqttClientAdvancedConfigBuilder> {
+public abstract class MqttAdvancedConfigBuilder> {
- private boolean allowServerReAuth;
private boolean validatePayloadFormat;
private @Nullable MqttClientInterceptors interceptors;
- MqttClientAdvancedConfigBuilder() {}
+ MqttAdvancedConfigBuilder() {}
- MqttClientAdvancedConfigBuilder(final @NotNull MqttClientAdvancedConfig advancedConfig) {
- allowServerReAuth = advancedConfig.isAllowServerReAuth();
+ MqttAdvancedConfigBuilder(final @NotNull MqttAdvancedConfig advancedConfig) {
validatePayloadFormat = advancedConfig.isValidatePayloadFormat();
interceptors = advancedConfig.getInterceptors();
}
abstract @NotNull B self();
- public @NotNull B allowServerReAuth(final boolean allowServerReAuth) {
- this.allowServerReAuth = allowServerReAuth;
- return self();
- }
-
public @NotNull B validatePayloadFormat(final boolean validatePayloadFormat) {
this.validatePayloadFormat = validatePayloadFormat;
return self();
@@ -60,20 +53,19 @@ public abstract class MqttClientAdvancedConfigBuilder interceptors() {
+ public MqttClientInterceptorsBuilder.@NotNull Nested interceptorsWith() {
return new MqttClientInterceptorsBuilder.Nested<>(interceptors, this::interceptors);
}
- public @NotNull MqttClientAdvancedConfig build() {
- return new MqttClientAdvancedConfig(allowServerReAuth, validatePayloadFormat, interceptors);
+ public @NotNull MqttAdvancedConfig build() {
+ return new MqttAdvancedConfig(validatePayloadFormat, interceptors);
}
- public static class Default extends MqttClientAdvancedConfigBuilder
- implements Mqtt5ClientAdvancedConfigBuilder {
+ public static class Default extends MqttAdvancedConfigBuilder implements Mqtt5AdvancedConfigBuilder {
public Default() {}
- Default(final @NotNull MqttClientAdvancedConfig advancedConfig) {
+ Default(final @NotNull MqttAdvancedConfig advancedConfig) {
super(advancedConfig);
}
@@ -83,14 +75,14 @@ public Default() {}
}
}
- public static class Nested extends MqttClientAdvancedConfigBuilder>
- implements Mqtt5ClientAdvancedConfigBuilder.Nested {
+ public static class Nested
extends MqttAdvancedConfigBuilder>
+ implements Mqtt5AdvancedConfigBuilder.Nested {
- private final @NotNull Function super MqttClientAdvancedConfig, P> parentConsumer;
+ private final @NotNull Function super MqttAdvancedConfig, P> parentConsumer;
public Nested(
- final @NotNull MqttClientAdvancedConfig advancedConfig,
- final @NotNull Function super MqttClientAdvancedConfig, P> parentConsumer) {
+ final @NotNull MqttAdvancedConfig advancedConfig,
+ final @NotNull Function super MqttAdvancedConfig, P> parentConsumer) {
super(advancedConfig);
this.parentConsumer = parentConsumer;
diff --git a/src/main/java/com/hivemq/client2/internal/mqtt/advanced/interceptor/MqttClientInterceptors.java b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/interceptor/MqttClientInterceptors.java
new file mode 100644
index 000000000..c9efb602d
--- /dev/null
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/interceptor/MqttClientInterceptors.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2018-present HiveMQ and the HiveMQ Community
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hivemq.client2.internal.mqtt.advanced.interceptor;
+
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.Mqtt5ClientInterceptors;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5InboundQos1Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5OutboundQos1Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5InboundQos2Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5OutboundQos2Interceptor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
+
+import java.util.Objects;
+
+/**
+ * @author Silvio Giebl
+ */
+@Unmodifiable
+public class MqttClientInterceptors implements Mqtt5ClientInterceptors {
+
+ private final @Nullable Mqtt5InboundQos1Interceptor inboundQos1Interceptor;
+ private final @Nullable Mqtt5OutboundQos1Interceptor outboundQos1Interceptor;
+ private final @Nullable Mqtt5InboundQos2Interceptor inboundQos2Interceptor;
+ private final @Nullable Mqtt5OutboundQos2Interceptor outboundQos2Interceptor;
+
+ MqttClientInterceptors(
+ final @Nullable Mqtt5InboundQos1Interceptor inboundQos1Interceptor,
+ final @Nullable Mqtt5OutboundQos1Interceptor outboundQos1Interceptor,
+ final @Nullable Mqtt5InboundQos2Interceptor inboundQos2Interceptor,
+ final @Nullable Mqtt5OutboundQos2Interceptor outboundQos2Interceptor) {
+
+ this.inboundQos1Interceptor = inboundQos1Interceptor;
+ this.outboundQos1Interceptor = outboundQos1Interceptor;
+ this.inboundQos2Interceptor = inboundQos2Interceptor;
+ this.outboundQos2Interceptor = outboundQos2Interceptor;
+ }
+
+ @Override
+ public @Nullable Mqtt5InboundQos1Interceptor getInboundQos1Interceptor() {
+ return inboundQos1Interceptor;
+ }
+
+ @Override
+ public @Nullable Mqtt5OutboundQos1Interceptor getOutboundQos1Interceptor() {
+ return outboundQos1Interceptor;
+ }
+
+ @Override
+ public @Nullable Mqtt5InboundQos2Interceptor getInboundQos2Interceptor() {
+ return inboundQos2Interceptor;
+ }
+
+ @Override
+ public @Nullable Mqtt5OutboundQos2Interceptor getOutboundQos2Interceptor() {
+ return outboundQos2Interceptor;
+ }
+
+ @Override
+ public MqttClientInterceptorsBuilder.@NotNull Default extend() {
+ return new MqttClientInterceptorsBuilder.Default(this);
+ }
+
+ @Override
+ public boolean equals(final @Nullable Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof MqttClientInterceptors)) {
+ return false;
+ }
+ final MqttClientInterceptors that = (MqttClientInterceptors) o;
+
+ return Objects.equals(inboundQos1Interceptor, that.inboundQos1Interceptor) &&
+ Objects.equals(outboundQos1Interceptor, that.outboundQos1Interceptor) &&
+ Objects.equals(inboundQos2Interceptor, that.inboundQos2Interceptor) &&
+ Objects.equals(outboundQos2Interceptor, that.outboundQos2Interceptor);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = Objects.hashCode(inboundQos1Interceptor);
+ result = 31 * result + Objects.hashCode(outboundQos1Interceptor);
+ result = 31 * result + Objects.hashCode(inboundQos2Interceptor);
+ result = 31 * result + Objects.hashCode(outboundQos2Interceptor);
+ return result;
+ }
+}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/advanced/interceptor/MqttClientInterceptorsBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/interceptor/MqttClientInterceptorsBuilder.java
similarity index 55%
rename from src/main/java/com/hivemq/client/internal/mqtt/advanced/interceptor/MqttClientInterceptorsBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/advanced/interceptor/MqttClientInterceptorsBuilder.java
index a308c02f0..316cc5be8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/advanced/interceptor/MqttClientInterceptorsBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/advanced/interceptor/MqttClientInterceptorsBuilder.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.advanced.interceptor;
+package com.hivemq.client2.internal.mqtt.advanced.interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.Mqtt5ClientInterceptorsBuilder;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5IncomingQos1Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5OutgoingQos1Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5IncomingQos2Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5OutgoingQos2Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.Mqtt5ClientInterceptorsBuilder;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5InboundQos1Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5OutboundQos1Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5InboundQos2Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5OutboundQos2Interceptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -31,47 +31,47 @@
*/
public abstract class MqttClientInterceptorsBuilder> {
- private @Nullable Mqtt5IncomingQos1Interceptor incomingQos1Interceptor;
- private @Nullable Mqtt5OutgoingQos1Interceptor outgoingQos1Interceptor;
- private @Nullable Mqtt5IncomingQos2Interceptor incomingQos2Interceptor;
- private @Nullable Mqtt5OutgoingQos2Interceptor outgoingQos2Interceptor;
+ private @Nullable Mqtt5InboundQos1Interceptor inboundQos1Interceptor;
+ private @Nullable Mqtt5OutboundQos1Interceptor outboundQos1Interceptor;
+ private @Nullable Mqtt5InboundQos2Interceptor inboundQos2Interceptor;
+ private @Nullable Mqtt5OutboundQos2Interceptor outboundQos2Interceptor;
MqttClientInterceptorsBuilder() {}
MqttClientInterceptorsBuilder(final @Nullable MqttClientInterceptors interceptors) {
if (interceptors != null) {
- incomingQos1Interceptor = interceptors.getIncomingQos1Interceptor();
- outgoingQos1Interceptor = interceptors.getOutgoingQos1Interceptor();
- incomingQos2Interceptor = interceptors.getIncomingQos2Interceptor();
- outgoingQos2Interceptor = interceptors.getOutgoingQos2Interceptor();
+ inboundQos1Interceptor = interceptors.getInboundQos1Interceptor();
+ outboundQos1Interceptor = interceptors.getOutboundQos1Interceptor();
+ inboundQos2Interceptor = interceptors.getInboundQos2Interceptor();
+ outboundQos2Interceptor = interceptors.getOutboundQos2Interceptor();
}
}
abstract @NotNull B self();
- public @NotNull B incomingQos1Interceptor(final @Nullable Mqtt5IncomingQos1Interceptor incomingQos1Interceptor) {
- this.incomingQos1Interceptor = incomingQos1Interceptor;
+ public @NotNull B inboundQos1Interceptor(final @Nullable Mqtt5InboundQos1Interceptor inboundQos1Interceptor) {
+ this.inboundQos1Interceptor = inboundQos1Interceptor;
return self();
}
- public @NotNull B outgoingQos1Interceptor(final @Nullable Mqtt5OutgoingQos1Interceptor outgoingQos1Interceptor) {
- this.outgoingQos1Interceptor = outgoingQos1Interceptor;
+ public @NotNull B outboundQos1Interceptor(final @Nullable Mqtt5OutboundQos1Interceptor outboundQos1Interceptor) {
+ this.outboundQos1Interceptor = outboundQos1Interceptor;
return self();
}
- public @NotNull B incomingQos2Interceptor(final @Nullable Mqtt5IncomingQos2Interceptor incomingQos2Interceptor) {
- this.incomingQos2Interceptor = incomingQos2Interceptor;
+ public @NotNull B inboundQos2Interceptor(final @Nullable Mqtt5InboundQos2Interceptor inboundQos2Interceptor) {
+ this.inboundQos2Interceptor = inboundQos2Interceptor;
return self();
}
- public @NotNull B outgoingQos2Interceptor(final @Nullable Mqtt5OutgoingQos2Interceptor outgoingQos2Interceptor) {
- this.outgoingQos2Interceptor = outgoingQos2Interceptor;
+ public @NotNull B outboundQos2Interceptor(final @Nullable Mqtt5OutboundQos2Interceptor outboundQos2Interceptor) {
+ this.outboundQos2Interceptor = outboundQos2Interceptor;
return self();
}
public @NotNull MqttClientInterceptors build() {
- return new MqttClientInterceptors(incomingQos1Interceptor, outgoingQos1Interceptor, incomingQos2Interceptor,
- outgoingQos2Interceptor);
+ return new MqttClientInterceptors(inboundQos1Interceptor, outboundQos1Interceptor, inboundQos2Interceptor,
+ outboundQos2Interceptor);
}
public static class Default extends MqttClientInterceptorsBuilder
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/MqttCodecModule.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/MqttCodecModule.java
similarity index 75%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/MqttCodecModule.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/MqttCodecModule.java
index 5aaff1947..f75d45d0c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/MqttCodecModule.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/MqttCodecModule.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec;
+package com.hivemq.client2.internal.mqtt.codec;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoders;
-import com.hivemq.client.internal.mqtt.codec.decoder.mqtt3.Mqtt3ClientMessageDecoders;
-import com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5ClientMessageDecoders;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoders;
-import com.hivemq.client.internal.mqtt.codec.encoder.mqtt3.Mqtt3ClientMessageEncoders;
-import com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5ClientMessageEncoders;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoders;
+import com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3.Mqtt3ClientMessageDecoders;
+import com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5ClientMessageDecoders;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoders;
+import com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3.Mqtt3ClientMessageEncoders;
+import com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5ClientMessageEncoders;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoder.java
similarity index 75%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoder.java
index 8abec3f1b..d97daa31f 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoder.java
@@ -14,23 +14,27 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder;
-
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectRestrictions;
-import com.hivemq.client.mqtt.exceptions.MqttDecodeException;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectRestrictions;
+import com.hivemq.client2.mqtt.exceptions.MqttDecodeException;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
+
import java.util.List;
/**
@@ -43,6 +47,7 @@
public class MqttDecoder extends ByteToMessageDecoder {
public static final @NotNull String NAME = "decoder";
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttDecoder.class);
private static final int MIN_FIXED_HEADER_LENGTH = 2;
private final @NotNull MqttMessageDecoders decoders;
@@ -106,15 +111,18 @@ protected void decode(
}
in.writerIndex(readerIndexAfterFixedHeader + remainingLength);
- out.add(decoder.decode(flags, in, context));
+ MqttMessage msg = decoder.decode(flags, in, context);
+ LOGGER.trace("Decoded MqttMessage {} from {}", msg, ctx.channel().remoteAddress());
+ out.add(msg);
in.writerIndex(writerIndex);
-
} catch (final MqttDecoderException e) {
in.clear();
final Mqtt5MessageType type = Mqtt5MessageType.fromCode(messageType);
final String message =
"Exception while decoding " + ((type == null) ? "UNKNOWN" : type) + ": " + e.getMessage();
- MqttDisconnectUtil.disconnect(ctx.channel(), e.getReasonCode(), new MqttDecodeException(message));
+ LOGGER.debug(message + ", Reason code: {}, remote address: {}", e.getReasonCode(), ctx.channel().remoteAddress());
+ MqttDisconnectUtil.disconnect(ctx.channel(), e.getReasonCode(),
+ new MqttDecodeException(message.concat(", Reason code: ").concat(e.getReasonCode().toString())));
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoderContext.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoderContext.java
similarity index 95%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoderContext.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoderContext.java
index cce067581..005cd1daa 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoderContext.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoderContext.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder;
+package com.hivemq.client2.internal.mqtt.codec.decoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicImpl;
import org.jetbrains.annotations.Nullable;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoderException.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoderException.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoderException.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoderException.java
index d4ac754a9..d95fd71d4 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttDecoderException.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttDecoderException.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder;
+package com.hivemq.client2.internal.mqtt.codec.decoder;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoder.java
similarity index 92%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoder.java
index 47560d3f6..145e32937 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoder.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder;
+package com.hivemq.client2.internal.mqtt.codec.decoder;
-import com.hivemq.client.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoderUtil.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoderUtil.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoderUtil.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoderUtil.java
index 32c33d9d7..312594e43 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoderUtil.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoderUtil.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder;
+package com.hivemq.client2.internal.mqtt.codec.decoder;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish.NO_PACKET_IDENTIFIER_QOS_0;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish.NO_PACKET_IDENTIFIER_QOS_0;
/**
* Util for decoders for MQTT messages of different versions.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoders.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoders.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoders.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoders.java
index 0403bbe1e..a92d4ec5a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttMessageDecoders.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttMessageDecoders.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder;
+package com.hivemq.client2.internal.mqtt.codec.decoder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttPingRespDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttPingRespDecoder.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttPingRespDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttPingRespDecoder.java
index 3660628a8..13fddfdc0 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/MqttPingRespDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/MqttPingRespDecoder.java
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder;
+package com.hivemq.client2.internal.mqtt.codec.decoder;
-import com.hivemq.client.internal.mqtt.message.ping.MqttPingResp;
+import com.hivemq.client2.internal.mqtt.message.ping.MqttPingResp;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
-import static com.hivemq.client.internal.mqtt.message.ping.MqttPingResp.INSTANCE;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
+import static com.hivemq.client2.internal.mqtt.message.ping.MqttPingResp.INSTANCE;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3ClientMessageDecoders.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3ClientMessageDecoders.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3ClientMessageDecoders.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3ClientMessageDecoders.java
index b70a8df4c..65e852323 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3ClientMessageDecoders.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3ClientMessageDecoders.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoders;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttPingRespDecoder;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoders;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttPingRespDecoder;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3ConnAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3ConnAckDecoder.java
similarity index 70%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3ConnAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3ConnAckDecoder.java
index beeb576f1..d5ed22f16 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3ConnAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3ConnAckDecoder.java
@@ -14,23 +14,23 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.mqtt.message.connect.connack.mqtt3.Mqtt3ConnAckView;
-import com.hivemq.client.mqtt.mqtt3.message.connect.connack.Mqtt3ConnAckReturnCode;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.mqtt3.Mqtt3ConnAckView;
+import com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3ConnAckReturnCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt3.Mqtt3MessageDecoderUtil.wrongReturnCode;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3.Mqtt3MessageDecoderUtil.wrongReturnCode;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3MessageDecoderUtil.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3MessageDecoderUtil.java
similarity index 87%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3MessageDecoderUtil.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3MessageDecoderUtil.java
index 89313143f..637a04992 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3MessageDecoderUtil.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3MessageDecoderUtil.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubAckDecoder.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubAckDecoder.java
index b27396df7..2716774db 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubAckDecoder.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck;
-import com.hivemq.client.internal.mqtt.message.publish.puback.mqtt3.Mqtt3PubAckView;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubAck;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PubAckView;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubCompDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubCompDecoder.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubCompDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubCompDecoder.java
index 15cb121e4..874f193e7 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubCompDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubCompDecoder.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.mqtt3.Mqtt3PubCompView;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubComp;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PubCompView;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRecDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRecDecoder.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRecDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRecDecoder.java
index da8be5614..fdda8fb14 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRecDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRecDecoder.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.mqtt3.Mqtt3PubRecView;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRec;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PubRecView;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRelDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRelDecoder.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRelDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRelDecoder.java
index 2d57d6db3..0ee455a23 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRelDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PubRelDecoder.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.mqtt3.Mqtt3PubRelView;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRel;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PubRelView;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PublishDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PublishDecoder.java
similarity index 74%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PublishDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PublishDecoder.java
index 612a14be8..d1cf26f46 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3PublishDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3PublishDecoder.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicImpl;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish;
-import com.hivemq.client.internal.mqtt.message.publish.mqtt3.Mqtt3PublishView;
-import com.hivemq.client.internal.util.ByteBufferUtil;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicImpl;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PublishView;
+import com.hivemq.client2.internal.util.ByteBufferUtil;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
@@ -32,7 +32,7 @@
import javax.inject.Singleton;
import java.nio.ByteBuffer;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.*;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3SubAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3SubAckDecoder.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3SubAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3SubAckDecoder.java
index a1a067d2f..99f6a2abb 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3SubAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3SubAckDecoder.java
@@ -14,24 +14,24 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAck;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.mqtt3.Mqtt3SubAckView;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt3.message.subscribe.suback.Mqtt3SubAckReturnCode;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAck;
+import com.hivemq.client2.internal.mqtt.message.subscribe.mqtt3.Mqtt3SubAckView;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt3.message.subscribe.Mqtt3SubAckReturnCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt3.Mqtt3MessageDecoderUtil.wrongReturnCode;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3.Mqtt3MessageDecoderUtil.wrongReturnCode;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3UnsubAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3UnsubAckDecoder.java
similarity index 69%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3UnsubAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3UnsubAckDecoder.java
index fe4ee306e..7bf19f7c0 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt3/Mqtt3UnsubAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt3/Mqtt3UnsubAckDecoder.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.MqttUnsubAck;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.mqtt3.Mqtt3UnsubAckView;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubAck;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.mqtt3.Mqtt3UnsubAckView;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkRemainingLength;
/**
* @author Daniel Krüger
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5AuthDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5AuthDecoder.java
similarity index 72%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5AuthDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5AuthDecoder.java
index a6109c0f6..1d70e4888 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5AuthDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5AuthDecoder.java
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuth;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuth;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
@@ -33,10 +33,10 @@
import javax.inject.Singleton;
import java.nio.ByteBuffer;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.auth.MqttAuthProperty.*;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.auth.MqttAuthProperty.*;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5ClientMessageDecoders.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5ClientMessageDecoders.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5ClientMessageDecoders.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5ClientMessageDecoders.java
index 00c7af4be..52aed2207 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5ClientMessageDecoders.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5ClientMessageDecoders.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoders;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttPingRespDecoder;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoders;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttPingRespDecoder;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5ConnAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5ConnAckDecoder.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5ConnAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5ConnAckDecoder.java
index 2949a5b6c..6b90fb735 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5ConnAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5ConnAckDecoder.java
@@ -14,20 +14,20 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.*;
-import com.hivemq.client.internal.mqtt.message.auth.MqttEnhancedAuth;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAckRestrictions;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt3.message.connect.connack.Mqtt3ConnAckReturnCode;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAckReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.*;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttEnhancedAuth;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAckRestrictions;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3ConnAckReturnCode;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAckReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
@@ -35,12 +35,12 @@
import javax.inject.Singleton;
import java.nio.ByteBuffer;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck.KEEP_ALIVE_FROM_CONNECT;
-import static com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
-import static com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAckProperty.*;
-import static com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAckRestrictions.*;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck.KEEP_ALIVE_FROM_CONNECT;
+import static com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
+import static com.hivemq.client2.internal.mqtt.message.connect.MqttConnAckProperty.*;
+import static com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAckRestrictions.*;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5DisconnectDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5DisconnectDecoder.java
similarity index 71%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5DisconnectDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5DisconnectDecoder.java
index 35b8319b0..a8d3bf814 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5DisconnectDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5DisconnectDecoder.java
@@ -14,28 +14,28 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect.DEFAULT_REASON_CODE;
-import static com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
-import static com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnectProperty.*;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
+import static com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnectProperty.*;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5MessageDecoderUtil.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5MessageDecoderUtil.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5MessageDecoderUtil.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5MessageDecoderUtil.java
index 7beccb86b..26f4f3e1d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5MessageDecoderUtil.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5MessageDecoderUtil.java
@@ -14,25 +14,25 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.datatypes.MqttBinaryData;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttBinaryData;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.nio.ByteBuffer;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.malformedUTF8String;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.malformedUTF8String;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
/**
* Util for decoders for MQTT 5 messages.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubAckDecoder.java
similarity index 68%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubAckDecoder.java
index 307f81edb..47a284a52 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubAckDecoder.java
@@ -14,29 +14,29 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.publish.puback.Mqtt5PubAckReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubAck;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubAckReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck.DEFAULT_REASON_CODE;
-import static com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAckProperty.REASON_STRING;
-import static com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAckProperty.USER_PROPERTY;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubAck.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubAckProperty.REASON_STRING;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubAckProperty.USER_PROPERTY;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubCompDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubCompDecoder.java
similarity index 67%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubCompDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubCompDecoder.java
index 552fe31e7..6f1ce2acc 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubCompDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubCompDecoder.java
@@ -14,29 +14,29 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.publish.pubcomp.Mqtt5PubCompReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubComp;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubCompReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp.DEFAULT_REASON_CODE;
-import static com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubCompProperty.REASON_STRING;
-import static com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubCompProperty.USER_PROPERTY;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubComp.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubCompProperty.REASON_STRING;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubCompProperty.USER_PROPERTY;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRecDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRecDecoder.java
similarity index 68%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRecDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRecDecoder.java
index 735b7f649..6397257d0 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRecDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRecDecoder.java
@@ -14,29 +14,29 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.publish.pubrec.Mqtt5PubRecReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRec;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubRecReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec.DEFAULT_REASON_CODE;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRecProperty.REASON_STRING;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRecProperty.USER_PROPERTY;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRec.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRecProperty.REASON_STRING;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRecProperty.USER_PROPERTY;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRelDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRelDecoder.java
similarity index 68%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRelDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRelDecoder.java
index 34b98248b..aa28d08a8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRelDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PubRelDecoder.java
@@ -14,29 +14,29 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.publish.pubrel.Mqtt5PubRelReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRel;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubRelReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel.DEFAULT_REASON_CODE;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRelProperty.REASON_STRING;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRelProperty.USER_PROPERTY;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRel.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRelProperty.REASON_STRING;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRelProperty.USER_PROPERTY;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PublishDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PublishDecoder.java
similarity index 86%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PublishDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PublishDecoder.java
index 8d31a2785..441a76f2f 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5PublishDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5PublishDecoder.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.*;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish;
-import com.hivemq.client.internal.util.ByteBufferUtil;
-import com.hivemq.client.internal.util.Utf8Util;
-import com.hivemq.client.internal.util.collections.ImmutableIntList;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PayloadFormatIndicator;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.*;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish;
+import com.hivemq.client2.internal.util.ByteBufferUtil;
+import com.hivemq.client2.internal.util.Utf8Util;
+import com.hivemq.client2.internal.util.collections.ImmutableIntList;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PayloadFormatIndicator;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
@@ -36,11 +36,11 @@
import javax.inject.Singleton;
import java.nio.ByteBuffer;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttPublish.NO_MESSAGE_EXPIRY;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttPublishProperty.*;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish.*;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPublish.NO_MESSAGE_EXPIRY;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPublishProperty.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish.*;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5SubAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5SubAckDecoder.java
similarity index 73%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5SubAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5SubAckDecoder.java
index e4b0d4cda..f7df5c0b2 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5SubAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5SubAckDecoder.java
@@ -14,28 +14,28 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAck;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAckReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAck;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAckReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAckProperty.REASON_STRING;
-import static com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAckProperty.USER_PROPERTY;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAckProperty.REASON_STRING;
+import static com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAckProperty.USER_PROPERTY;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5UnsubAckDecoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5UnsubAckDecoder.java
similarity index 72%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5UnsubAckDecoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5UnsubAckDecoder.java
index 3144b0cbf..bf128d50e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/decoder/mqtt5/Mqtt5UnsubAckDecoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/decoder/mqtt5/Mqtt5UnsubAckDecoder.java
@@ -14,28 +14,28 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.decoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderContext;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoderException;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertyImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.MqttUnsubAck;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.unsuback.Mqtt5UnsubAckReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderContext;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoderException;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertyImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubAck;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5UnsubAckReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
-import static com.hivemq.client.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
-import static com.hivemq.client.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.MqttUnsubAckProperty.REASON_STRING;
-import static com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.MqttUnsubAckProperty.USER_PROPERTY;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.checkFixedHeaderFlags;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.MqttMessageDecoderUtil.remainingLengthTooShort;
+import static com.hivemq.client2.internal.mqtt.codec.decoder.mqtt5.Mqtt5MessageDecoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubAckProperty.REASON_STRING;
+import static com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubAckProperty.USER_PROPERTY;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttEncoder.java
similarity index 78%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttEncoder.java
index 3b99bb907..c8a57f23e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttEncoder.java
@@ -14,11 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder;
+package com.hivemq.client2.internal.mqtt.codec.encoder;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.ChannelDuplexHandler;
@@ -37,6 +39,7 @@
public class MqttEncoder extends ChannelDuplexHandler {
public static final @NotNull String NAME = "encoder";
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttEncoder.class);
private final @NotNull MqttMessageEncoders encoders;
private final @NotNull MqttEncoderContext context;
@@ -67,8 +70,10 @@ public void write(
throw new UnsupportedOperationException();
}
final ByteBuf out = messageEncoder.castAndEncode(message, context);
+ LOGGER.trace("Write MqttMessage {} to {}", message, ctx.channel().remoteAddress());
ctx.write(out, promise);
} else {
+ LOGGER.trace("Write message {} to {}", msg, ctx.channel().remoteAddress());
ctx.write(msg, promise);
}
}
@@ -78,22 +83,26 @@ public void flush(final @NotNull ChannelHandlerContext ctx) {
if (inRead) {
pendingFlush = true;
} else {
+ LOGGER.trace("flush");
ctx.flush();
}
}
@Override
public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull Object msg) {
+ LOGGER.trace("channelRead: {} from {}", msg, ctx.channel().remoteAddress());
inRead = true;
ctx.fireChannelRead(msg);
}
@Override
public void channelReadComplete(final @NotNull ChannelHandlerContext ctx) {
+ LOGGER.trace("channelRead complete");
ctx.fireChannelReadComplete();
inRead = false;
if (pendingFlush) {
pendingFlush = false;
+ LOGGER.trace("flush pendingFlush");
ctx.flush();
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttEncoderContext.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttEncoderContext.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttEncoderContext.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttEncoderContext.java
index ce903a0d5..b6fad855d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttEncoderContext.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttEncoderContext.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder;
+package com.hivemq.client2.internal.mqtt.codec.encoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
import io.netty.buffer.ByteBufAllocator;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoder.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoder.java
index 1131417f7..88a16e030 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoder.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder;
+package com.hivemq.client2.internal.mqtt.codec.encoder;
-import com.hivemq.client.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoderUtil.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoderUtil.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoderUtil.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoderUtil.java
index c6102b65a..aae4d7d7f 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoderUtil.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoderUtil.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder;
+package com.hivemq.client2.internal.mqtt.codec.encoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttBinaryData;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.MqttMessage;
-import com.hivemq.client.mqtt.exceptions.MqttEncodeException;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttBinaryData;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.mqtt.exceptions.MqttEncodeException;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoders.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoders.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoders.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoders.java
index b0592ed8c..e54a29373 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttMessageEncoders.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttMessageEncoders.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder;
+package com.hivemq.client2.internal.mqtt.codec.encoder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttPingReqEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttPingReqEncoder.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttPingReqEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttPingReqEncoder.java
index 411711187..18662388c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/MqttPingReqEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/MqttPingReqEncoder.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder;
+package com.hivemq.client2.internal.mqtt.codec.encoder;
-import com.hivemq.client.internal.mqtt.message.ping.MqttPingReq;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.internal.mqtt.message.ping.MqttPingReq;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.UnpooledByteBufAllocator;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3ClientMessageEncoders.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3ClientMessageEncoders.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3ClientMessageEncoders.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3ClientMessageEncoders.java
index 3e978f027..57a77d012 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3ClientMessageEncoders.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3ClientMessageEncoders.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoders;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttPingReqEncoder;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoders;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttPingReqEncoder;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3ConnectEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3ConnectEncoder.java
similarity index 87%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3ConnectEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3ConnectEncoder.java
index 4358591a4..4419f6bc3 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3ConnectEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3ConnectEncoder.java
@@ -14,22 +14,22 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
-
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttStatefulConnect;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttStatefulConnect;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.*;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3DisconnectEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3DisconnectEncoder.java
similarity index 80%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3DisconnectEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3DisconnectEncoder.java
index 0f473f019..c7f224508 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3DisconnectEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3DisconnectEncoder.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoderContext;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoder;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoderContext;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoder;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.UnpooledByteBufAllocator;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3MessageEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3MessageEncoder.java
similarity index 87%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3MessageEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3MessageEncoder.java
index c0c2c5b93..94bf7c688 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3MessageEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3MessageEncoder.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoderContext;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoder;
-import com.hivemq.client.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoderContext;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoder;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
-import static com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.encodedPacketLength;
-import static com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.maximumPacketSizeExceeded;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.encodedPacketLength;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.maximumPacketSizeExceeded;
/**
* Base class of encoders for MQTT 3 messages.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubAckEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubAckEncoder.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubAckEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubAckEncoder.java
index 4143c90cd..a515c478c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubAckEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubAckEncoder.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
-import com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubAck;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubCompEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubCompEncoder.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubCompEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubCompEncoder.java
index 5a537146c..44e202ac1 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubCompEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubCompEncoder.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubComp;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRecEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRecEncoder.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRecEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRecEncoder.java
index ab678e32c..69e078a94 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRecEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRecEncoder.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRec;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRelEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRelEncoder.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRelEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRelEncoder.java
index 01ef046a4..3b53ac831 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRelEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PubRelEncoder.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3.Mqtt3MessageEncoder.Mqtt3MessageWithIdEncoder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRel;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import javax.inject.Inject;
import javax.inject.Singleton;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PublishEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PublishEncoder.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PublishEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PublishEncoder.java
index 1deec43a0..d299d8d73 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3PublishEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3PublishEncoder.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
-
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoderContext;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
+
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoderContext;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3SubscribeEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3SubscribeEncoder.java
similarity index 84%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3SubscribeEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3SubscribeEncoder.java
index 9d8030b9c..0322eea85 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3SubscribeEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3SubscribeEncoder.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttStatefulSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscription;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttStatefulSubscribe;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscription;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
@@ -74,7 +74,7 @@ private void encodePayload(final @NotNull MqttStatefulSubscribe message, final @
for (int i = 0; i < subscriptions.size(); i++) {
final MqttSubscription subscription = subscriptions.get(i);
subscription.getTopicFilter().encode(out);
- out.writeByte(subscription.getQos().getCode());
+ out.writeByte(subscription.getMaxQos().getCode());
}
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3UnsubscribeEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3UnsubscribeEncoder.java
similarity index 86%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3UnsubscribeEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3UnsubscribeEncoder.java
index 9e5c70de1..6f99c0c05 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt3/Mqtt3UnsubscribeEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt3/Mqtt3UnsubscribeEncoder.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt3;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt3;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicFilterImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttStatefulUnsubscribe;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt3.message.Mqtt3MessageType;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicFilterImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttStatefulUnsubscribe;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt3.message.Mqtt3MessageType;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5AuthEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5AuthEncoder.java
similarity index 84%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5AuthEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5AuthEncoder.java
index 19c8c13e9..263e10303 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5AuthEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5AuthEncoder.java
@@ -14,20 +14,20 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuth;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuth;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.auth.MqttAuthProperty.AUTHENTICATION_DATA;
-import static com.hivemq.client.internal.mqtt.message.auth.MqttAuthProperty.AUTHENTICATION_METHOD;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.auth.MqttAuthProperty.AUTHENTICATION_DATA;
+import static com.hivemq.client2.internal.mqtt.message.auth.MqttAuthProperty.AUTHENTICATION_METHOD;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5ClientMessageEncoders.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5ClientMessageEncoders.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5ClientMessageEncoders.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5ClientMessageEncoders.java
index ef3cf01ad..afecd53aa 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5ClientMessageEncoders.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5ClientMessageEncoders.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoders;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttPingReqEncoder;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoders;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttPingReqEncoder;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5ConnectEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5ConnectEncoder.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5ConnectEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5ConnectEncoder.java
index d2917c25a..8fb819854 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5ConnectEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5ConnectEncoder.java
@@ -14,31 +14,31 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoderContext;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.auth.MqttEnhancedAuth;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectRestrictions;
-import com.hivemq.client.internal.mqtt.message.connect.MqttStatefulConnect;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublishProperty;
-import com.hivemq.client.mqtt.exceptions.MqttEncodeException;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoderContext;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttEnhancedAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectRestrictions;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttStatefulConnect;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublishProperty;
+import com.hivemq.client2.mqtt.exceptions.MqttEncodeException;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.*;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.connect.MqttConnect.DEFAULT_SESSION_EXPIRY_INTERVAL;
-import static com.hivemq.client.internal.mqtt.message.connect.MqttConnectProperty.*;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.connect.MqttConnect.DEFAULT_SESSION_EXPIRY_INTERVAL;
+import static com.hivemq.client2.internal.mqtt.message.connect.MqttConnectProperty.*;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5DisconnectEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5DisconnectEncoder.java
similarity index 70%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5DisconnectEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5DisconnectEncoder.java
index 83d25be1e..991c2c180 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5DisconnectEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5DisconnectEncoder.java
@@ -14,22 +14,22 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect.DEFAULT_REASON_CODE;
-import static com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
-import static com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnectProperty.SERVER_REFERENCE;
-import static com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnectProperty.SESSION_EXPIRY_INTERVAL;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect.SESSION_EXPIRY_INTERVAL_FROM_CONNECT;
+import static com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnectProperty.SERVER_REFERENCE;
+import static com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnectProperty.SESSION_EXPIRY_INTERVAL;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageEncoderUtil.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageEncoderUtil.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageEncoderUtil.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageEncoderUtil.java
index 95f928939..9aac4db3e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageEncoderUtil.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageEncoderUtil.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.datatypes.MqttBinaryData;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PayloadFormatIndicator;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttBinaryData;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PayloadFormatIndicator;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageWithUserPropertiesEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageWithUserPropertiesEncoder.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageWithUserPropertiesEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageWithUserPropertiesEncoder.java
index 565cf88a9..f4e104e96 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageWithUserPropertiesEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5MessageWithUserPropertiesEncoder.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoderContext;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.MqttMessage;
-import com.hivemq.client.internal.mqtt.message.MqttMessageWithUserProperties;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5ReasonCode;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoderContext;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.internal.mqtt.message.MqttMessageWithUserProperties;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5ReasonCode;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
-import static com.hivemq.client.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.*;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.encodeNullableProperty;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.nullablePropertyEncodedLength;
-import static com.hivemq.client.internal.mqtt.message.MqttProperty.REASON_STRING;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.MqttMessageEncoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.encodeNullableProperty;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.nullablePropertyEncodedLength;
+import static com.hivemq.client2.internal.mqtt.message.MqttProperty.REASON_STRING;
/**
* Base class of encoders for MQTT messages with omissible User Properties.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubAckEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubAckEncoder.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubAckEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubAckEncoder.java
index e4ad274b5..03a694ea5 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubAckEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubAckEncoder.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
-import com.hivemq.client.mqtt.mqtt5.message.publish.puback.Mqtt5PubAckReasonCode;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubAck;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubAckReasonCode;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubAck.DEFAULT_REASON_CODE;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubCompEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubCompEncoder.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubCompEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubCompEncoder.java
index f1cac1fd6..cacde6f90 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubCompEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubCompEncoder.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
-import com.hivemq.client.mqtt.mqtt5.message.publish.pubcomp.Mqtt5PubCompReasonCode;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubComp;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubCompReasonCode;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubComp.DEFAULT_REASON_CODE;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRecEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRecEncoder.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRecEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRecEncoder.java
index 42fb61b0a..f936c39c7 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRecEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRecEncoder.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
-import com.hivemq.client.mqtt.mqtt5.message.publish.pubrec.Mqtt5PubRecReasonCode;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRec;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubRecReasonCode;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRec.DEFAULT_REASON_CODE;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRelEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRelEncoder.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRelEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRelEncoder.java
index cba0adab5..d21d1688a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRelEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PubRelEncoder.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
-import com.hivemq.client.mqtt.mqtt5.message.publish.pubrel.Mqtt5PubRelReasonCode;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRel;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubRelReasonCode;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel.DEFAULT_REASON_CODE;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPubRel.DEFAULT_REASON_CODE;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PublishEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PublishEncoder.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PublishEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PublishEncoder.java
index 0ee94dcda..a50c7ae5d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5PublishEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5PublishEncoder.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
-
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoderContext;
-import com.hivemq.client.internal.mqtt.datatypes.MqttBinaryData;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish;
-import com.hivemq.client.internal.util.collections.ImmutableIntList;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
+
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoderContext;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttBinaryData;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish;
+import com.hivemq.client2.internal.util.collections.ImmutableIntList;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.jetbrains.annotations.NotNull;
@@ -32,10 +32,10 @@
import javax.inject.Singleton;
import java.nio.ByteBuffer;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttPublish.NO_MESSAGE_EXPIRY;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttPublishProperty.*;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish.DEFAULT_NO_TOPIC_ALIAS;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPublish.NO_MESSAGE_EXPIRY;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttPublishProperty.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish.DEFAULT_NO_TOPIC_ALIAS;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5SubscribeEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5SubscribeEncoder.java
similarity index 81%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5SubscribeEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5SubscribeEncoder.java
index 5060fe17c..54a5ab106 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5SubscribeEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5SubscribeEncoder.java
@@ -14,23 +14,23 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttStatefulSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscription;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttStatefulSubscribe;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscription;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import javax.inject.Singleton;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.encodeVariableByteIntegerProperty;
-import static com.hivemq.client.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.variableByteIntegerPropertyEncodedLength;
-import static com.hivemq.client.internal.mqtt.message.subscribe.MqttStatefulSubscribe.DEFAULT_NO_SUBSCRIPTION_IDENTIFIER;
-import static com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribeProperty.SUBSCRIPTION_IDENTIFIER;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.encodeVariableByteIntegerProperty;
+import static com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5.Mqtt5MessageEncoderUtil.variableByteIntegerPropertyEncodedLength;
+import static com.hivemq.client2.internal.mqtt.message.subscribe.MqttStatefulSubscribe.DEFAULT_NO_SUBSCRIPTION_IDENTIFIER;
+import static com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribeProperty.SUBSCRIPTION_IDENTIFIER;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5UnsubscribeEncoder.java b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5UnsubscribeEncoder.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5UnsubscribeEncoder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5UnsubscribeEncoder.java
index f5b1fd2cd..a2157c20b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/codec/encoder/mqtt5/Mqtt5UnsubscribeEncoder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/codec/encoder/mqtt5/Mqtt5UnsubscribeEncoder.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.codec.encoder.mqtt5;
+package com.hivemq.client2.internal.mqtt.codec.encoder.mqtt5;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicFilterImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttStatefulUnsubscribe;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicFilterImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttStatefulUnsubscribe;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttBinaryData.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttBinaryData.java
similarity index 98%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttBinaryData.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttBinaryData.java
index 367909753..c4416e624 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttBinaryData.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttBinaryData.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.internal.util.ByteBufferUtil;
+import com.hivemq.client2.internal.util.ByteBufferUtil;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttClientIdentifierImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttClientIdentifierImpl.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttClientIdentifierImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttClientIdentifierImpl.java
index 96524b3dd..9dbe3d12b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttClientIdentifierImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttClientIdentifierImpl.java
@@ -14,22 +14,22 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttClientIdentifier;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttClientIdentifier;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
* @see MqttClientIdentifier
* @see MqttUtf8StringImpl
*/
-@Immutable
+@Unmodifiable
public class MqttClientIdentifierImpl extends MqttUtf8StringImpl implements MqttClientIdentifier {
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttSharedTopicFilterImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttSharedTopicFilterImpl.java
similarity index 97%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttSharedTopicFilterImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttSharedTopicFilterImpl.java
index ac1daba1f..eb647b781 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttSharedTopicFilterImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttSharedTopicFilterImpl.java
@@ -14,22 +14,22 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.util.ByteArrayUtil;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttSharedTopicFilter;
+import com.hivemq.client2.internal.util.ByteArrayUtil;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttSharedTopicFilter;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
* @see MqttSharedTopicFilter
* @see MqttUtf8StringImpl
*/
-@Immutable
+@Unmodifiable
public class MqttSharedTopicFilterImpl extends MqttTopicFilterImpl implements MqttSharedTopicFilter {
private static final int SHARE_PREFIX_LENGTH = SHARE_PREFIX.length();
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicFilterImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicFilterImpl.java
similarity index 97%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicFilterImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicFilterImpl.java
index 1a37b0429..a4cc3e85b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicFilterImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicFilterImpl.java
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
-
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.datatypes.MqttTopic;
-import com.hivemq.client.mqtt.datatypes.MqttTopicFilter;
+package com.hivemq.client2.internal.mqtt.datatypes;
+
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.datatypes.MqttTopic;
+import com.hivemq.client2.mqtt.datatypes.MqttTopicFilter;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import java.util.Arrays;
@@ -34,7 +34,7 @@
* @see MqttTopicFilter
* @see MqttUtf8StringImpl
*/
-@Immutable
+@Unmodifiable
public class MqttTopicFilterImpl extends MqttUtf8StringImpl implements MqttTopicFilter {
static final int WILDCARD_CHECK_FAILURE = -1;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicFilterImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicFilterImplBuilder.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicFilterImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicFilterImplBuilder.java
index c28b618c4..2048e7af3 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicFilterImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicFilterImplBuilder.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttSharedTopicFilterBuilder;
-import com.hivemq.client.mqtt.datatypes.MqttTopicFilterBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttSharedTopicFilterBuilder;
+import com.hivemq.client2.mqtt.datatypes.MqttTopicFilterBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicImpl.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicImpl.java
index 18f11e3f6..e30b2c4f5 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicImpl.java
@@ -14,23 +14,23 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.datatypes.MqttTopic;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.datatypes.MqttTopic;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
* @see MqttTopic
* @see MqttUtf8StringImpl
*/
-@Immutable
+@Unmodifiable
public class MqttTopicImpl extends MqttUtf8StringImpl implements MqttTopic {
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicImplBuilder.java
similarity index 95%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicImplBuilder.java
index 2a1c3238d..f2a0eec58 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicImplBuilder.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttTopicBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttTopicBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicIterator.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicIterator.java
similarity index 98%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicIterator.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicIterator.java
index 9635d226e..de037b86d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicIterator.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicIterator.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.internal.util.ByteArrayUtil;
+import com.hivemq.client2.internal.util.ByteArrayUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicLevel.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicLevel.java
similarity index 97%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicLevel.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicLevel.java
index 90b89ef3e..9cf179f5b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicLevel.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicLevel.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.internal.util.ByteArray;
+import com.hivemq.client2.internal.util.ByteArray;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicLevels.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicLevels.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicLevels.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicLevels.java
index 325ce7100..ae5c530a6 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttTopicLevels.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttTopicLevels.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.internal.util.ByteArrayUtil;
+import com.hivemq.client2.internal.util.ByteArrayUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertiesImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertiesImpl.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertiesImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertiesImpl.java
index e3c11e19a..8e996f51f 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertiesImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertiesImpl.java
@@ -14,20 +14,20 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
* @see Mqtt5UserProperties
*/
-@Immutable
+@Unmodifiable
public class MqttUserPropertiesImpl implements Mqtt5UserProperties {
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertiesImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertiesImplBuilder.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertiesImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertiesImplBuilder.java
index 2c5cb44cc..9841b8b9a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertiesImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertiesImplBuilder.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
-
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserPropertiesBuilder;
-import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperty;
+package com.hivemq.client2.internal.mqtt.datatypes;
+
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt5.datatypes.Mqtt5UserPropertiesBuilder;
+import com.hivemq.client2.mqtt.mqtt5.datatypes.Mqtt5UserProperty;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertyImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertyImpl.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertyImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertyImpl.java
index 9e48a7d17..65fff4324 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUserPropertyImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUserPropertyImpl.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.message.MqttProperty;
-import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperty;
+import com.hivemq.client2.internal.mqtt.message.MqttProperty;
+import com.hivemq.client2.mqtt.mqtt5.datatypes.Mqtt5UserProperty;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
* @see Mqtt5UserProperty
*/
-@Immutable
+@Unmodifiable
public class MqttUserPropertyImpl implements Mqtt5UserProperty {
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUtf8StringImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUtf8StringImpl.java
similarity index 98%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUtf8StringImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUtf8StringImpl.java
index ba3a92d08..7ef029762 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttUtf8StringImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttUtf8StringImpl.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.internal.util.Utf8Util;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.Utf8Util;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -35,7 +35,7 @@
* @author Silvio Giebl
* @see MqttUtf8String
*/
-@Immutable
+@Unmodifiable
public class MqttUtf8StringImpl implements MqttUtf8String {
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttVariableByteInteger.java b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttVariableByteInteger.java
similarity index 98%
rename from src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttVariableByteInteger.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttVariableByteInteger.java
index 3ca9da933..055bd0056 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/datatypes/MqttVariableByteInteger.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/datatypes/MqttVariableByteInteger.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.datatypes;
+package com.hivemq.client2.internal.mqtt.datatypes;
import io.netty.buffer.ByteBuf;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/exceptions/MqttClientStateExceptions.java b/src/main/java/com/hivemq/client2/internal/mqtt/exceptions/MqttClientStateExceptions.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/exceptions/MqttClientStateExceptions.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/exceptions/MqttClientStateExceptions.java
index a09585696..56e61f496 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/exceptions/MqttClientStateExceptions.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/exceptions/MqttClientStateExceptions.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.exceptions;
+package com.hivemq.client2.internal.mqtt.exceptions;
-import com.hivemq.client.mqtt.exceptions.MqttClientStateException;
+import com.hivemq.client2.mqtt.exceptions.MqttClientStateException;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/exceptions/mqtt3/Mqtt3ExceptionFactory.java b/src/main/java/com/hivemq/client2/internal/mqtt/exceptions/mqtt3/Mqtt3ExceptionFactory.java
similarity index 68%
rename from src/main/java/com/hivemq/client/internal/mqtt/exceptions/mqtt3/Mqtt3ExceptionFactory.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/exceptions/mqtt3/Mqtt3ExceptionFactory.java
index 6c3083380..4e5a77596 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/exceptions/mqtt3/Mqtt3ExceptionFactory.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/exceptions/mqtt3/Mqtt3ExceptionFactory.java
@@ -14,17 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.exceptions.mqtt3;
+package com.hivemq.client2.internal.mqtt.exceptions.mqtt3;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.mqtt.message.connect.connack.mqtt3.Mqtt3ConnAckView;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAck;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.mqtt3.Mqtt3SubAckView;
-import com.hivemq.client.mqtt.exceptions.MqttSessionExpiredException;
-import com.hivemq.client.mqtt.mqtt3.exceptions.*;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5MessageException;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5Message;
-import io.reactivex.functions.Function;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.mqtt3.Mqtt3ConnAckView;
+import com.hivemq.client2.internal.mqtt.message.disconnect.mqtt3.Mqtt3DisconnectView;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PubAckView;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PubRecView;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAck;
+import com.hivemq.client2.internal.mqtt.message.subscribe.mqtt3.Mqtt3SubAckView;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.mqtt3.Mqtt3UnsubAckView;
+import com.hivemq.client2.mqtt.exceptions.MqttSessionExpiredException;
+import com.hivemq.client2.mqtt.mqtt3.exceptions.*;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5MessageException;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5Message;
+import io.reactivex.rxjava3.functions.Function;
import org.jetbrains.annotations.NotNull;
/**
@@ -73,15 +77,15 @@ public final class Mqtt3ExceptionFactory {
case CONNACK:
return new Mqtt3ConnAckException(Mqtt3ConnAckView.of((MqttConnAck) mqttMessage), message, cause);
case DISCONNECT:
- return new Mqtt3DisconnectException(message, cause);
+ return new Mqtt3DisconnectException(Mqtt3DisconnectView.INSTANCE, message, cause);
case PUBACK:
- return new Mqtt3PubAckException(message, cause);
+ return new Mqtt3PubAckException(Mqtt3PubAckView.INSTANCE, message, cause);
case PUBREC:
- return new Mqtt3PubRecException(message, cause);
+ return new Mqtt3PubRecException(Mqtt3PubRecView.INSTANCE, message, cause);
case SUBACK:
return new Mqtt3SubAckException(Mqtt3SubAckView.of((MqttSubAck) mqttMessage), message, cause);
case UNSUBACK:
- return new Mqtt3UnsubAckException(message, cause);
+ return new Mqtt3UnsubAckException(Mqtt3UnsubAckView.INSTANCE, message, cause);
default:
throw new IllegalStateException();
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttChannelInitializer.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttChannelInitializer.java
similarity index 68%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/MqttChannelInitializer.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttChannelInitializer.java
index 8c39895cb..3cee57c03 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttChannelInitializer.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttChannelInitializer.java
@@ -14,25 +14,27 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler;
-
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientSslConfigImpl;
-import com.hivemq.client.internal.mqtt.MqttProxyConfigImpl;
-import com.hivemq.client.internal.mqtt.MqttWebSocketConfigImpl;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoder;
-import com.hivemq.client.internal.mqtt.handler.auth.MqttAuthHandler;
-import com.hivemq.client.internal.mqtt.handler.connect.MqttConnAckFlow;
-import com.hivemq.client.internal.mqtt.handler.connect.MqttConnAckSingle;
-import com.hivemq.client.internal.mqtt.handler.connect.MqttConnectHandler;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectHandler;
-import com.hivemq.client.internal.mqtt.handler.proxy.MqttProxyInitializer;
-import com.hivemq.client.internal.mqtt.handler.ssl.MqttSslInitializer;
-import com.hivemq.client.internal.mqtt.handler.websocket.MqttWebSocketInitializer;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.mqtt.exceptions.ConnectionFailedException;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
+package com.hivemq.client2.internal.mqtt.handler;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttProxyConfigImpl;
+import com.hivemq.client2.internal.mqtt.MqttTlsConfigImpl;
+import com.hivemq.client2.internal.mqtt.MqttWebSocketConfigImpl;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoder;
+import com.hivemq.client2.internal.mqtt.handler.auth.MqttAuthHandler;
+import com.hivemq.client2.internal.mqtt.handler.connect.MqttConnAckFlow;
+import com.hivemq.client2.internal.mqtt.handler.connect.MqttConnAckSingle;
+import com.hivemq.client2.internal.mqtt.handler.connect.MqttConnectHandler;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectHandler;
+import com.hivemq.client2.internal.mqtt.handler.proxy.MqttProxyInitializer;
+import com.hivemq.client2.internal.mqtt.handler.tls.MqttTlsInitializer;
+import com.hivemq.client2.internal.mqtt.handler.websocket.MqttWebSocketInitializer;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.mqtt.exceptions.ConnectionFailedException;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
import dagger.Lazy;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
@@ -46,7 +48,7 @@
* Initializes:
*
* the proxy handlers (optional)
- * the SSL/TLS handlers (optional)
+ * the TLS handlers (optional)
* the WebSocket handlers (optional)
* the basic MQTT handlers: Encoder, AuthHandler, ConnectHandler, DisconnectHandler
*
@@ -57,6 +59,7 @@
@ConnectionScope
public class MqttChannelInitializer extends ChannelInboundHandlerAdapter {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttChannelInitializer.class);
private final @NotNull MqttClientConfig clientConfig;
private final @NotNull MqttConnect connect;
private final @NotNull MqttConnAckFlow connAckFlow;
@@ -91,6 +94,7 @@ public class MqttChannelInitializer extends ChannelInboundHandlerAdapter {
@Override
public void handlerAdded(final @NotNull ChannelHandlerContext ctx) {
+ LOGGER.debug("Initialize channel");
ctx.pipeline().remove(this);
((SocketChannel) ctx.channel()).config()
@@ -107,18 +111,20 @@ public void handlerAdded(final @NotNull ChannelHandlerContext ctx) {
private void initProxy(final @NotNull Channel channel) {
final MqttProxyConfigImpl proxyConfig = clientConfig.getCurrentTransportConfig().getRawProxyConfig();
if (proxyConfig == null) {
- initSsl(channel);
+ initTls(channel);
} else {
- MqttProxyInitializer.initChannel(channel, clientConfig, proxyConfig, this::initSsl, this::onError);
+ LOGGER.trace("initProxy");
+ MqttProxyInitializer.initChannel(channel, clientConfig, proxyConfig, this::initTls, this::onError);
}
}
- private void initSsl(final @NotNull Channel channel) {
- final MqttClientSslConfigImpl sslConfig = clientConfig.getCurrentTransportConfig().getRawSslConfig();
- if (sslConfig == null) {
+ private void initTls(final @NotNull Channel channel) {
+ final MqttTlsConfigImpl tlsConfig = clientConfig.getCurrentTransportConfig().getRawTlsConfig();
+ if (tlsConfig == null) {
initWebsocket(channel);
} else {
- MqttSslInitializer.initChannel(channel, clientConfig, sslConfig, this::initWebsocket, this::onError);
+ LOGGER.trace("initTls");
+ MqttTlsInitializer.initChannel(channel, clientConfig, tlsConfig, this::initWebsocket, this::onError);
}
}
@@ -128,20 +134,24 @@ private void initWebsocket(final @NotNull Channel channel) {
if (webSocketConfig == null) {
initMqtt(channel);
} else {
+ LOGGER.trace("initWebsocket");
webSocketInitializer.get()
.initChannel(channel, clientConfig, webSocketConfig, this::initMqtt, this::onError);
}
}
private void initMqtt(final @NotNull Channel channel) {
+ LOGGER.trace("initMqtt");
channel.pipeline()
.addLast(MqttEncoder.NAME, encoder)
.addLast(MqttAuthHandler.NAME, authHandler)
.addLast(MqttConnectHandler.NAME, connectHandler)
.addLast(MqttDisconnectHandler.NAME, disconnectHandler);
+ LOGGER.debug("Channel initialization succeeded");
}
private void onError(final @NotNull Channel channel, final @NotNull Throwable cause) {
+ LOGGER.debug("Channel initialization failed: {}", cause);
channel.close();
MqttConnAckSingle.reconnect(clientConfig, MqttDisconnectSource.CLIENT, new ConnectionFailedException(cause),
connect, connAckFlow, channel.eventLoop());
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttConnectionAwareHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttConnectionAwareHandler.java
similarity index 92%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/MqttConnectionAwareHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttConnectionAwareHandler.java
index 76d21539c..c800054fe 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttConnectionAwareHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttConnectionAwareHandler.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler;
+package com.hivemq.client2.internal.mqtt.handler;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttSession.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttSession.java
similarity index 71%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/MqttSession.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttSession.java
index b2319d966..0fd18dd6d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttSession.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttSession.java
@@ -14,19 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler;
+package com.hivemq.client2.internal.mqtt.handler;
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoder;
-import com.hivemq.client.internal.mqtt.handler.publish.incoming.MqttIncomingQosHandler;
-import com.hivemq.client.internal.mqtt.handler.publish.outgoing.MqttOutgoingQosHandler;
-import com.hivemq.client.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
-import com.hivemq.client.internal.mqtt.ioc.ClientScope;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.mqtt.exceptions.MqttSessionExpiredException;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoder;
+import com.hivemq.client2.internal.mqtt.handler.publish.incoming.MqttIncomingQosHandler;
+import com.hivemq.client2.internal.mqtt.handler.publish.outgoing.MqttOutgoingQosHandler;
+import com.hivemq.client2.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
+import com.hivemq.client2.internal.mqtt.ioc.ClientScope;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.mqtt.exceptions.MqttSessionExpiredException;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoop;
import io.netty.util.concurrent.ScheduledFuture;
@@ -34,6 +36,7 @@
import org.jetbrains.annotations.Nullable;
import javax.inject.Inject;
+
import java.util.concurrent.TimeUnit;
/**
@@ -42,6 +45,7 @@
@ClientScope
public class MqttSession {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttSession.class);
private final @NotNull MqttSubscriptionHandler subscriptionHandler;
private final @NotNull MqttIncomingQosHandler incomingQosHandler;
private final @NotNull MqttOutgoingQosHandler outgoingQosHandler;
@@ -65,10 +69,16 @@ public void startOrResume(
final @NotNull MqttClientConnectionConfig connectionConfig,
final @NotNull ChannelPipeline pipeline,
final @NotNull EventLoop eventLoop) {
-
- if (hasSession && !connAck.isSessionPresent()) {
- final String message = "Session expired as CONNACK did not contain the session present flag.";
- end(new MqttSessionExpiredException(message, new Mqtt5ConnAckException(connAck, message)));
+ if (hasSession) {
+ if (!connAck.isSessionPresent()) {
+ final String message = "Session expired as CONNACK did not contain the session present flag.";
+ end(new MqttSessionExpiredException(message, new Mqtt5ConnAckException(connAck, message)));
+ LOGGER.trace("Session START");
+ } else {
+ LOGGER.trace("Session RESUME");
+ }
+ } else {
+ LOGGER.trace("Session START");
}
hasSession = true;
@@ -109,6 +119,7 @@ public void expire(
@CallByThread("Netty EventLoop")
private void end(final @NotNull Throwable cause) {
+ LOGGER.debug("Session END, cause {}", cause);
if (hasSession) {
hasSession = false;
outgoingQosHandler.onSessionEnd(cause);
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttSessionAwareHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttSessionAwareHandler.java
similarity index 87%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/MqttSessionAwareHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttSessionAwareHandler.java
index 4da38e553..caa68ae65 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/MqttSessionAwareHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/MqttSessionAwareHandler.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler;
+package com.hivemq.client2.internal.mqtt.handler;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.EventLoop;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/AbstractMqttAuthHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/AbstractMqttAuthHandler.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/auth/AbstractMqttAuthHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/AbstractMqttAuthHandler.java
index b7155f92a..a6516ed77 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/AbstractMqttAuthHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/AbstractMqttAuthHandler.java
@@ -14,23 +14,23 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.auth;
-
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.handler.util.MqttTimeoutInboundHandler;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuth;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuthBuilder;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5ClientConfig;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5AuthException;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5Auth;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthBuilder;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.auth;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.handler.util.MqttTimeoutInboundHandler;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuthBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5ClientConfig;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5AuthException;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5Auth;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthBuilder;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.ChannelHandlerContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -41,7 +41,7 @@
import java.util.function.Consumer;
import java.util.function.Supplier;
-import static com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode.CONTINUE_AUTHENTICATION;
+import static com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode.CONTINUE_AUTHENTICATION;
/**
* Base for enhanced auth handling according to the MQTT 5 specification.
@@ -50,7 +50,7 @@
*/
abstract class AbstractMqttAuthHandler extends MqttTimeoutInboundHandler implements MqttAuthHandler {
- static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(AbstractMqttAuthHandler.class);
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(AbstractMqttAuthHandler.class);
enum MqttAuthState {
NONE,
@@ -72,7 +72,9 @@ enum MqttAuthState {
}
/**
- * Handles an incoming AUTH message. Sends a DISCONNECT message if the AUTH message is not valid.
+ * Handles an incoming AUTH message.
+ *
+ * Sends a DISCONNECT message if the AUTH message is not valid.
*
* @param ctx the channel handler context.
* @param auth the incoming AUTH message.
@@ -114,17 +116,21 @@ private boolean validateAuth(final @NotNull ChannelHandlerContext ctx, final @No
}
/**
- * Handles an incoming AUTH message with the Reason Code CONTINUE AUTHENTICATION.
+ * Handles an incoming AUTH message with the reason code CONTINUE AUTHENTICATION.
*
- * Calls {@link Mqtt5EnhancedAuthMechanism#onContinue(Mqtt5ClientConfig, Mqtt5Auth, Mqtt5AuthBuilder)}.
- * Sends a new AUTH message if the enhanced auth mechanism accepted the incoming AUTH message.
- * Otherwise sends a DISCONNECT message.
+ * Sends a DISCONNECT message if client side authentication is pending, or
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onContinue(Mqtt5ClientConfig, Mqtt5Auth, Mqtt5AuthBuilder)} which
+ * can add enhanced auth data to the outgoing AUTH message, then
+ * Sends the AUTH message with the reason code CONTINUE AUTHENTICATION, or
+ * Sends a DISCONNECT message if the enhanced auth mechanism rejected the incoming AUTH message, which leads
+ * to {@link #onDisconnectEvent} being called.
*
*
* @param ctx the channel handler context.
- * @param auth the received AUTH message.
+ * @param auth the incoming AUTH message.
*/
private void readAuthContinue(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAuth auth) {
+ LOGGER.debug("Read AUTH continue {}", auth);
if (state != MqttAuthState.WAIT_FOR_SERVER) {
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
new Mqtt5AuthException(auth, "Must not receive AUTH with reason code CONTINUE_AUTHENTICATION " +
@@ -136,14 +142,16 @@ private void readAuthContinue(final @NotNull ChannelHandlerContext ctx, final @N
state = MqttAuthState.IN_PROGRESS_RESPONSE;
callMechanismFutureResult(() -> authMechanism.onContinue(clientConfig, auth, authBuilder), ctx2 -> {
state = MqttAuthState.WAIT_FOR_SERVER;
- ctx2.writeAndFlush(authBuilder.build()).addListener(this);
+ MqttAuth auth2 = authBuilder.build();
+ LOGGER.debug("Write AUTH {}", auth2);
+ ctx2.writeAndFlush(auth2).addListener(this);
}, (ctx2, throwable) -> MqttDisconnectUtil.disconnect(ctx2.channel(), Mqtt5DisconnectReasonCode.NOT_AUTHORIZED,
new Mqtt5AuthException(auth, "Server auth not accepted.")));
}
/**
- * Disconnects on an incoming AUTH message with the Reason Code SUCCESS.
+ * Handles an incoming AUTH message with the reason code SUCCESS.
*
* @param ctx the channel handler context.
* @param auth the incoming AUTH message.
@@ -151,7 +159,7 @@ private void readAuthContinue(final @NotNull ChannelHandlerContext ctx, final @N
abstract void readAuthSuccess(@NotNull ChannelHandlerContext ctx, @NotNull MqttAuth auth);
/**
- * Disconnects on an incoming AUTH message with the Reason Code REAUTHENTICATE.
+ * Handles an incoming AUTH message with the reason code REAUTHENTICATE.
*
* @param ctx the channel handler context.
* @param auth the incoming AUTH message.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttAuthHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttAuthHandler.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttAuthHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttAuthHandler.java
index db2038ebb..6805568d8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttAuthHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttAuthHandler.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.auth;
+package com.hivemq.client2.internal.mqtt.handler.auth;
import io.netty.channel.ChannelHandler;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttConnectAuthHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttConnectAuthHandler.java
similarity index 66%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttConnectAuthHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttConnectAuthHandler.java
index c8ad5076b..7a6a48c30 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttConnectAuthHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttConnectAuthHandler.java
@@ -14,30 +14,32 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.auth;
-
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuth;
-import com.hivemq.client.internal.mqtt.message.auth.MqttEnhancedAuthBuilder;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttStatefulConnect;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.netty.DefaultChannelOutboundHandler;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.exceptions.ConnectionFailedException;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5ClientConfig;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5AuthException;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuth;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuthBuilder;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5Connect;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.auth;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttEnhancedAuthBuilder;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttStatefulConnect;
+import com.hivemq.client2.internal.netty.DefaultChannelOutboundHandler;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.exceptions.ConnectionFailedException;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5ClientConfig;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5AuthException;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuth;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuthBuilder;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAck;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5Connect;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
import org.jetbrains.annotations.NotNull;
@@ -54,6 +56,8 @@
@ConnectionScope
public class MqttConnectAuthHandler extends AbstractMqttAuthHandler implements DefaultChannelOutboundHandler {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttConnectAuthHandler.class);
+
@Inject
MqttConnectAuthHandler(final @NotNull MqttClientConfig clientConfig, final @NotNull MqttConnect connect) {
super(clientConfig, Checks.stateNotNull(connect.getRawEnhancedAuthMechanism(), "Auth mechanism"));
@@ -75,9 +79,11 @@ public void write(
/**
* Handles the outgoing CONNECT message.
*
- * Calls {@link Mqtt5EnhancedAuthMechanism#onAuth(Mqtt5ClientConfig, Mqtt5Connect, Mqtt5EnhancedAuthBuilder)}
- * which adds enhanced auth data to the CONNECT message.
- * Sends the CONNECT message with the enhanced auth data.
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onAuth(Mqtt5ClientConfig, Mqtt5Connect, Mqtt5EnhancedAuthBuilder)}
+ * which can add enhanced auth data to the outgoing CONNECT message, then
+ * Sends the CONNECT message with the enhanced auth data, or
+ * Closes the connection with a {@link ConnectionFailedException} if the enhanced auth mechanism rejected the
+ * CONNECT message, which leads to {@link #onDisconnectEvent} being called.
*
*
* @param connect the CONNECT message.
@@ -90,6 +96,7 @@ private void writeConnect(final @NotNull MqttConnect connect, final @NotNull Cha
state = MqttAuthState.WAIT_FOR_SERVER;
final MqttStatefulConnect statefulConnect =
connect.createStateful(clientConfig.getRawClientIdentifier(), enhancedAuthBuilder.build());
+ LOGGER.debug("Write CONNECT {}", statefulConnect);
ctx.writeAndFlush(statefulConnect, promise).addListener(this);
}, (ctx, throwable) -> MqttDisconnectUtil.close(ctx.channel(), new ConnectionFailedException(throwable)));
@@ -108,18 +115,14 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
/**
* Handles the incoming CONNACK message.
- *
- * Calls {@link Mqtt5EnhancedAuthMechanism#onAuthRejected(Mqtt5ClientConfig, Mqtt5ConnAck)} and closes the
- * channel if the CONNACK message contains an Error Code.
- * Sends a DISCONNECT message if the enhanced auth data of the CONNACK message is not valid.
- * Otherwise calls {@link Mqtt5EnhancedAuthMechanism#onAuthSuccess(Mqtt5ClientConfig, Mqtt5ConnAck)}.
- * Sends a DISCONNECT message if the enhanced auth mechanism did not accept the enhanced auth data.
- *
+ *
+ * Sends a DISCONNECT message if the CONNACK message has a successful reason code but is not valid.
*
* @param ctx the channel handler context.
* @param connAck the received CONNACK message.
*/
private void readConnAck(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttConnAck connAck) {
+ LOGGER.debug("Read CONNACK {}", connAck);
cancelTimeout();
if (connAck.getReasonCode().isError()) {
@@ -129,6 +132,16 @@ private void readConnAck(final @NotNull ChannelHandlerContext ctx, final @NotNul
}
}
+ /**
+ * Handles the incoming CONNACK message with an error reason code.
+ *
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onAuthRejected(Mqtt5ClientConfig, Mqtt5ConnAck)} and
+ * Fires a disconnect event with a {@link Mqtt5ConnAckException} which leads to closing the connection.
+ *
+ *
+ * @param ctx the channel handler context.
+ * @param connAck the received CONNACK message.
+ */
private void readConnAckError(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttConnAck connAck) {
callMechanism(() -> authMechanism.onAuthRejected(clientConfig, connAck));
state = MqttAuthState.NONE;
@@ -138,6 +151,18 @@ private void readConnAckError(final @NotNull ChannelHandlerContext ctx, final @N
MqttDisconnectSource.SERVER);
}
+ /**
+ * Handles the incoming CONNACK message with a successful reason code.
+ *
+ * Sends a DISCONNECT message if client side authentication is pending, or
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onAuthSuccess(Mqtt5ClientConfig, Mqtt5ConnAck)}, then
+ * Fires the CONNACK message to the next handler, or
+ * Sends a DISCONNECT message if the enhanced auth mechanism rejected the CONNACK message.
+ *
+ *
+ * @param ctx the channel handler context.
+ * @param connAck the received CONNACK message.
+ */
private void readConnAckSuccess(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttConnAck connAck) {
if (state != MqttAuthState.WAIT_FOR_SERVER) {
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
@@ -157,7 +182,7 @@ private void readConnAckSuccess(final @NotNull ChannelHandlerContext ctx, final
}
/**
- * Validates the enhanced auth data of an incoming CONNACK message.
+ * Validates the enhanced auth data of the incoming CONNACK message.
*
* If validation fails, disconnection and closing of the channel is already handled.
*
@@ -181,35 +206,37 @@ private boolean validateConnAck(final @NotNull ChannelHandlerContext ctx, final
}
/**
- * Disconnects on an incoming AUTH message with the Reason Code SUCCESS.
+ * Disconnects on an incoming AUTH message with the reason code SUCCESS.
*
* @param ctx the channel handler context.
* @param auth the incoming AUTH message.
*/
@Override
void readAuthSuccess(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAuth auth) {
+ LOGGER.debug("Read AUTH success {}", auth);
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
new Mqtt5AuthException(auth, "Must not receive AUTH with reason code SUCCESS during connect auth."));
}
/**
- * Disconnects on an incoming AUTH message with the Reason Code REAUTHENTICATE.
+ * Disconnects on an incoming AUTH message with the reason code REAUTHENTICATE.
*
* @param ctx the channel handler context.
* @param auth the incoming AUTH message.
*/
@Override
void readReAuth(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAuth auth) {
+ LOGGER.debug("Read re-AUTH {}", auth);
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
new Mqtt5AuthException(auth,
"Must not receive AUTH with reason code REAUTHENTICATE during connect auth."));
}
/**
- * Calls {@link Mqtt5EnhancedAuthMechanism#onAuthError(Mqtt5ClientConfig, Throwable)} with the cause why the channel
- * was closed if auth is still in progress.
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onAuthError(Mqtt5ClientConfig, Throwable)} with the cause why the
+ * connection was disconnected if auth is still in progress.
*
- * @param disconnectEvent the channel close event.
+ * @param disconnectEvent the disconnect event.
*/
@Override
protected void onDisconnectEvent(
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttDisconnectOnAuthHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttDisconnectOnAuthHandler.java
similarity index 74%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttDisconnectOnAuthHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttDisconnectOnAuthHandler.java
index 8ffa3adb0..672f7f3ae 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttDisconnectOnAuthHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttDisconnectOnAuthHandler.java
@@ -14,14 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.auth;
+package com.hivemq.client2.internal.mqtt.handler.auth;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuth;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5AuthException;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuth;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5AuthException;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
@@ -40,6 +42,8 @@
@Singleton
public class MqttDisconnectOnAuthHandler extends ChannelInboundHandlerAdapter implements MqttAuthHandler {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttDisconnectOnAuthHandler.class);
+
@Inject
MqttDisconnectOnAuthHandler() {}
@@ -55,12 +59,14 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void readAuth(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAuth auth) {
+ LOGGER.debug("Read AUTH {}", auth);
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
new Mqtt5AuthException(auth, "Server must not send AUTH"));
}
private void readConnAck(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttConnAck connAck) {
if (connAck.getRawEnhancedAuth() != null) {
+ LOGGER.debug("Read CONNACK with auth {}", connAck);
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
new Mqtt5ConnAckException(connAck, "Server must not include auth in CONNACK"));
} else {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttReAuthCompletable.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttReAuthCompletable.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttReAuthCompletable.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttReAuthCompletable.java
index f8335c314..ee84aec60 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttReAuthCompletable.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttReAuthCompletable.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.auth;
+package com.hivemq.client2.internal.mqtt.handler.auth;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.rx.CompletableFlow;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.rx.CompletableFlow;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
-import io.reactivex.Completable;
-import io.reactivex.CompletableObserver;
-import io.reactivex.internal.disposables.EmptyDisposable;
+import io.reactivex.rxjava3.core.Completable;
+import io.reactivex.rxjava3.core.CompletableObserver;
+import io.reactivex.rxjava3.internal.disposables.EmptyDisposable;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttReAuthHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttReAuthHandler.java
similarity index 65%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttReAuthHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttReAuthHandler.java
index 3bd0ebcb0..5f5bafec1 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/auth/MqttReAuthHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/auth/MqttReAuthHandler.java
@@ -14,29 +14,31 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.auth;
-
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuth;
-import com.hivemq.client.internal.mqtt.message.auth.MqttAuthBuilder;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.rx.CompletableFlow;
-import com.hivemq.client.mqtt.mqtt5.Mqtt5ClientConfig;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5AuthException;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5Auth;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthBuilder;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.auth;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttAuthBuilder;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.rx.CompletableFlow;
+import com.hivemq.client2.mqtt.mqtt5.Mqtt5ClientConfig;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5AuthException;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5Auth;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthBuilder;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.ChannelHandlerContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import static com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode.CONTINUE_AUTHENTICATION;
-import static com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode.REAUTHENTICATE;
+import static com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode.CONTINUE_AUTHENTICATION;
+import static com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode.REAUTHENTICATE;
/**
* Enhanced reauth handling according to the MQTT 5 specification.
@@ -46,6 +48,8 @@
@ConnectionScope
public class MqttReAuthHandler extends AbstractMqttAuthHandler {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttReAuthHandler.class);
+
private @Nullable CompletableFlow flow;
MqttReAuthHandler(final @NotNull MqttConnectAuthHandler connectAuthHandler) {
@@ -59,9 +63,15 @@ void reauth(final @NotNull CompletableFlow flow) {
}
/**
- * Sends a AUTH message with the Reason Code REAUTHENTICATE.
- *
- * Calls {@link Mqtt5EnhancedAuthMechanism#onReAuth(Mqtt5ClientConfig, Mqtt5AuthBuilder)}.
+ *
+ * Errors the flow if the client is not connected, or
+ * Errors the flow if reauthentication is pending, or
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onReAuth(Mqtt5ClientConfig, Mqtt5AuthBuilder)} which can add
+ * enhanced auth data to the outgoing AUTH message, then
+ * Sends the AUTH message with the reason code REAUTHENTICATE, or
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onReAuthError(Mqtt5ClientConfig, Throwable)} if the enhanced auth
+ * mechanism rejected the reauthentication (it does not disconnect).
+ *
*
* @param flow the flow for the reauth result.
*/
@@ -81,7 +91,9 @@ private void writeReAuth(final @NotNull CompletableFlow flow) {
state = MqttAuthState.IN_PROGRESS_INIT;
callMechanismFuture(() -> authMechanism.onReAuth(clientConfig, authBuilder), ctx -> {
state = MqttAuthState.WAIT_FOR_SERVER;
- ctx.writeAndFlush(authBuilder.build()).addListener(this);
+ MqttAuth auth = authBuilder.build();
+ LOGGER.debug("Write re-AUTH {}", auth);
+ ctx.writeAndFlush(auth).addListener(this);
}, (ctx, throwable) -> {
callMechanism(() -> authMechanism.onReAuthError(clientConfig, throwable));
state = MqttAuthState.NONE;
@@ -102,10 +114,13 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
/**
- * Handles an incoming AUTH message with the Reason Code SUCCESS.
+ * Handles an incoming AUTH message with the reason code SUCCESS.
*
- * Calls {@link Mqtt5EnhancedAuthMechanism#onReAuthSuccess(Mqtt5ClientConfig, Mqtt5Auth)}.
- * Sends a DISCONNECT message if the enhanced auth mechanism did not accept the AUTH message.
+ * Sends a DISCONNECT message if client side authentication is pending, or
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onReAuthSuccess(Mqtt5ClientConfig, Mqtt5Auth)}, then
+ * Completes the flow, or
+ * Sends a DISCONNECT message if the enhanced auth mechanism rejected the incoming AUTH message, which leads
+ * to {@link #onDisconnectEvent} being called.
*
*
* @param ctx the channel handler context.
@@ -113,6 +128,7 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
*/
@Override
void readAuthSuccess(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAuth auth) {
+ LOGGER.debug("Read AUTH success {}", auth);
if (state != MqttAuthState.WAIT_FOR_SERVER) {
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
new Mqtt5AuthException(auth,
@@ -138,11 +154,12 @@ void readAuthSuccess(final @NotNull ChannelHandlerContext ctx, final @NotNull Mq
/**
* Handles an incoming AUTH message with the Reason Code REAUTHENTICATE.
*
- * Sends a DISCONNECT message if server reauth is not allowed.
- * Otherwise calls
- * {@link Mqtt5EnhancedAuthMechanism#onServerReAuth(Mqtt5ClientConfig, Mqtt5Auth, Mqtt5AuthBuilder)}.
- * Sends a new AUTH message if the enhanced auth mechanism accepted the incoming AUTH message.
- * Otherwise sends a DISCONNECT message.
+ * Sends a DISCONNECT message if reauthentication is already pending, or
+ * Calls {@link Mqtt5EnhancedAuthMechanism#onServerReAuth(Mqtt5ClientConfig, Mqtt5Auth, Mqtt5AuthBuilder)}
+ * which can add enhanced auth data to the outgoing AUTH message, then
+ * Sends the AUTH message with the reason code CONTINUE AUTHENTICATION, or
+ * Sends a DISCONNECT message if the enhanced auth mechanism rejected the incoming AUTH message, which leads
+ * to {@link #onDisconnectEvent} being called.
*
*
* @param ctx the channel handler context.
@@ -150,11 +167,7 @@ void readAuthSuccess(final @NotNull ChannelHandlerContext ctx, final @NotNull Mq
*/
@Override
void readReAuth(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAuth auth) {
- if (!clientConfig.getAdvancedConfig().isAllowServerReAuth()) {
- MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
- new Mqtt5AuthException(auth, "Must not receive AUTH with reason code REAUTHENTICATE."));
- return;
- }
+ LOGGER.debug("Read re-AUTH {}", auth);
if (state != MqttAuthState.NONE) {
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
new Mqtt5AuthException(auth,
@@ -166,7 +179,9 @@ void readReAuth(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAut
state = MqttAuthState.IN_PROGRESS_INIT;
callMechanismFutureResult(() -> authMechanism.onServerReAuth(clientConfig, auth, authBuilder), ctx2 -> {
state = MqttAuthState.WAIT_FOR_SERVER;
- ctx2.writeAndFlush(authBuilder.build()).addListener(this);
+ MqttAuth auth2 = authBuilder.build();
+ LOGGER.debug("Write AUTH {}", auth2);
+ ctx2.writeAndFlush(auth2).addListener(this);
}, (ctx2, throwable) -> MqttDisconnectUtil.disconnect(ctx2.channel(), Mqtt5DisconnectReasonCode.NOT_AUTHORIZED,
new Mqtt5AuthException(auth, "Server AUTH with reason code REAUTHENTICATE not accepted.")));
@@ -181,6 +196,7 @@ void readReAuth(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttAut
* @param disconnect the incoming DISCONNECT message.
*/
private void readDisconnect(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttDisconnect disconnect) {
+ LOGGER.trace("Read DISCONNECT {}", disconnect);
cancelTimeout();
if (state != MqttAuthState.NONE) {
@@ -193,7 +209,7 @@ private void readDisconnect(final @NotNull ChannelHandlerContext ctx, final @Not
/**
* Calls {@link Mqtt5EnhancedAuthMechanism#onReAuthError(Mqtt5ClientConfig, Throwable)} with the cause why the
- * channel was closed if reauth is still in progress.
+ * connection was disconnected if reauth is still in progress.
*
* @param disconnectEvent the channel close event.
*/
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnAckFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnAckFlow.java
similarity index 91%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnAckFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnAckFlow.java
index b6d2215ca..11b736260 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnAckFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnAckFlow.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.connect;
+package com.hivemq.client2.internal.mqtt.handler.connect;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
-import io.reactivex.SingleObserver;
-import io.reactivex.disposables.Disposable;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAck;
+import io.reactivex.rxjava3.core.SingleObserver;
+import io.reactivex.rxjava3.disposables.Disposable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnAckSingle.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnAckSingle.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnAckSingle.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnAckSingle.java
index 31e8f13c0..51e4c15d3 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnAckSingle.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnAckSingle.java
@@ -14,32 +14,32 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.connect;
-
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientTransportConfigImpl;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.lifecycle.MqttClientDisconnectedContextImpl;
-import com.hivemq.client.internal.mqtt.lifecycle.MqttClientReconnector;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.mqtt.exceptions.ConnectionFailedException;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedContext;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedListener;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
+package com.hivemq.client2.internal.mqtt.handler.connect;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttTransportConfigImpl;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.lifecycle.MqttDisconnectedContextImpl;
+import com.hivemq.client2.internal.mqtt.lifecycle.MqttReconnector;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.mqtt.exceptions.ConnectionFailedException;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectedContext;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectedListener;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAck;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.EventLoop;
-import io.reactivex.Single;
-import io.reactivex.SingleObserver;
-import io.reactivex.internal.disposables.EmptyDisposable;
+import io.reactivex.rxjava3.core.Single;
+import io.reactivex.rxjava3.core.SingleObserver;
+import io.reactivex.rxjava3.internal.disposables.EmptyDisposable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.concurrent.TimeUnit;
-import static com.hivemq.client.mqtt.MqttClientState.*;
+import static com.hivemq.client2.mqtt.MqttClientState.*;
/**
* @author Silvio Giebl
@@ -85,14 +85,16 @@ private static void connect(
.build()
.bootstrap();
- final MqttClientTransportConfigImpl transportConfig = clientConfig.getCurrentTransportConfig();
+ final MqttTransportConfigImpl transportConfig = clientConfig.getCurrentTransportConfig();
+ LOGGER.trace("connect: schedule CONNECT {} to {}", connect, transportConfig.getRemoteAddress());
bootstrap.group(eventLoop)
.connect(transportConfig.getRemoteAddress(), transportConfig.getRawLocalAddress())
.addListener(future -> {
final Throwable cause = future.cause();
if (cause != null) {
final ConnectionFailedException e = new ConnectionFailedException(cause);
+ LOGGER.debug("connect failed: {}, remote address {}", e, transportConfig.getRemoteAddress());
if (eventLoop.inEventLoop()) {
reconnect(clientConfig, MqttDisconnectSource.CLIENT, e, connect, flow, eventLoop);
} else {
@@ -137,12 +139,12 @@ private static void reconnect(
final @Nullable MqttConnAckFlow flow,
final @NotNull EventLoop eventLoop) {
- final MqttClientReconnector reconnector =
- new MqttClientReconnector(eventLoop, attempts, connect, clientConfig.getCurrentTransportConfig());
- final MqttClientDisconnectedContext context =
- MqttClientDisconnectedContextImpl.of(clientConfig, source, cause, reconnector);
+ final MqttReconnector reconnector =
+ new MqttReconnector(eventLoop, attempts, connect, clientConfig.getCurrentTransportConfig());
+ final MqttDisconnectedContext context =
+ MqttDisconnectedContextImpl.of(clientConfig, source, cause, reconnector);
- for (final MqttClientDisconnectedListener disconnectedListener : clientConfig.getDisconnectedListeners()) {
+ for (final MqttDisconnectedListener disconnectedListener : clientConfig.getDisconnectedListeners()) {
try {
disconnectedListener.onDisconnected(context);
} catch (final Throwable t) {
@@ -151,6 +153,7 @@ private static void reconnect(
}
if (reconnector.isReconnect()) {
+ LOGGER.debug("Schedule reconnect.");
clientConfig.getRawState().set(DISCONNECTED_RECONNECT);
eventLoop.schedule(() -> {
reconnector.getFuture().whenComplete((ignored, throwable) -> {
@@ -177,6 +180,7 @@ private static void reconnect(
clientConfig.setRepublishIfSessionExpired(reconnector.isRepublishIfSessionExpired());
reconnector.afterOnDisconnected();
} else {
+ LOGGER.debug("Do not schedule reconnect.");
clientConfig.getRawState().set(DISCONNECTED);
clientConfig.releaseEventLoop();
if (flow != null) {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnectHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnectHandler.java
similarity index 80%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnectHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnectHandler.java
index ff5d470a3..b06c5f086 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/connect/MqttConnectHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/connect/MqttConnectHandler.java
@@ -14,35 +14,35 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.connect;
-
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.codec.decoder.MqttDecoder;
-import com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttClientIdentifierImpl;
-import com.hivemq.client.internal.mqtt.handler.MqttSession;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.handler.ping.MqttPingHandler;
-import com.hivemq.client.internal.mqtt.handler.util.MqttTimeoutInboundHandler;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.lifecycle.MqttClientConnectedContextImpl;
-import com.hivemq.client.internal.mqtt.message.MqttMessage;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectRestrictions;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAckRestrictions;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.MqttClientState;
-import com.hivemq.client.mqtt.MqttVersion;
-import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedContext;
-import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedListener;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.connect;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.codec.decoder.MqttDecoder;
+import com.hivemq.client2.internal.mqtt.codec.encoder.MqttEncoder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttClientIdentifierImpl;
+import com.hivemq.client2.internal.mqtt.handler.MqttSession;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.handler.ping.MqttPingHandler;
+import com.hivemq.client2.internal.mqtt.handler.util.MqttTimeoutInboundHandler;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.lifecycle.MqttConnectedContextImpl;
+import com.hivemq.client2.internal.mqtt.message.MqttMessage;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAckRestrictions;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectRestrictions;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.MqttClientState;
+import com.hivemq.client2.mqtt.MqttVersion;
+import com.hivemq.client2.mqtt.lifecycle.MqttConnectedContext;
+import com.hivemq.client2.mqtt.lifecycle.MqttConnectedListener;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import org.jetbrains.annotations.NotNull;
@@ -118,13 +118,16 @@ private void writeConnect(final @NotNull ChannelHandlerContext ctx) {
if (!connectWritten) {
connectWritten = true;
connectFlushTime = System.nanoTime();
- ctx.writeAndFlush((connect.getRawEnhancedAuthMechanism() == null) ?
- connect.createStateful(clientConfig.getRawClientIdentifier(), null) : connect).addListener(this);
+ Object connectObj = connect.getRawEnhancedAuthMechanism() == null ?
+ connect.createStateful(clientConfig.getRawClientIdentifier(), null) : connect;
+ LOGGER.debug("Write CONNECT {} to {}", connectObj, ctx.channel().remoteAddress());
+ ctx.writeAndFlush(connectObj).addListener(this);
}
}
@Override
protected void operationSuccessful(final @NotNull ChannelHandlerContext ctx) {
+ LOGGER.trace("operationSuccessful");
if (connect.getRawEnhancedAuthMechanism() == null) {
scheduleTimeout(ctx.channel());
}
@@ -154,6 +157,7 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
* @param channel the channel.
*/
private void readConnAck(final @NotNull MqttConnAck connAck, final @NotNull Channel channel) {
+ LOGGER.debug("Read CONNACK {} from {}", connAck, ctx.channel().remoteAddress());
if (connAck.getReasonCode().isError()) {
MqttDisconnectUtil.fireDisconnectEvent(channel, new Mqtt5ConnAckException(connAck,
"CONNECT failed as CONNACK contained an Error Code: " + connAck.getReasonCode() + "."),
@@ -176,11 +180,10 @@ private void readConnAck(final @NotNull MqttConnAck connAck, final @NotNull Chan
clientConfig.getRawState().set(MqttClientState.CONNECTED);
- final ImmutableList connectedListeners = clientConfig.getConnectedListeners();
+ final ImmutableList connectedListeners = clientConfig.getConnectedListeners();
if (!connectedListeners.isEmpty()) {
- final MqttClientConnectedContext context =
- MqttClientConnectedContextImpl.of(clientConfig, connect, connAck);
- for (final MqttClientConnectedListener connectedListener : connectedListeners) {
+ final MqttConnectedContext context = MqttConnectedContextImpl.of(clientConfig, connect, connAck);
+ for (final MqttConnectedListener connectedListener : connectedListeners) {
try {
connectedListener.onConnected(context);
} catch (final Throwable t) {
@@ -205,6 +208,7 @@ private void readConnAck(final @NotNull MqttConnAck connAck, final @NotNull Chan
* @param channel the channel.
*/
private void readOtherThanConnAck(final @NotNull Object msg, final @NotNull Channel channel) {
+ LOGGER.error("Read NON CONNACK {} from {}", msg, ctx.channel().remoteAddress());
if (msg instanceof MqttMessage) {
MqttDisconnectUtil.disconnect(channel, Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
((MqttMessage) msg).getType() + " message must not be received before CONNACK");
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectCompletable.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectCompletable.java
similarity index 78%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectCompletable.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectCompletable.java
index 6b70bac2e..14cb7e09a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectCompletable.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectCompletable.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.disconnect;
+package com.hivemq.client2.internal.mqtt.handler.disconnect;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.rx.CompletableFlow;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.rx.CompletableFlow;
import io.netty.channel.Channel;
-import io.reactivex.Completable;
-import io.reactivex.CompletableObserver;
-import io.reactivex.internal.disposables.EmptyDisposable;
+import io.reactivex.rxjava3.core.Completable;
+import io.reactivex.rxjava3.core.CompletableObserver;
+import io.reactivex.rxjava3.internal.disposables.EmptyDisposable;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectEvent.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectEvent.java
similarity index 86%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectEvent.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectEvent.java
index 69a31479b..829dad17e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectEvent.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectEvent.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.disconnect;
+package com.hivemq.client2.internal.mqtt.handler.disconnect;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.rx.CompletableFlow;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5DisconnectException;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.rx.CompletableFlow;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5DisconnectException;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5Disconnect;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectHandler.java
similarity index 74%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectHandler.java
index 145c8afe0..2def0398b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectHandler.java
@@ -14,30 +14,31 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.disconnect;
-
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.handler.MqttConnectionAwareHandler;
-import com.hivemq.client.internal.mqtt.handler.MqttSession;
-import com.hivemq.client.internal.mqtt.handler.connect.MqttConnAckSingle;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectRestrictions;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.rx.CompletableFlow;
-import com.hivemq.client.mqtt.MqttVersion;
-import com.hivemq.client.mqtt.exceptions.ConnectionClosedException;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5DisconnectException;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.disconnect;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.handler.MqttConnectionAwareHandler;
+import com.hivemq.client2.internal.mqtt.handler.MqttSession;
+import com.hivemq.client2.internal.mqtt.handler.connect.MqttConnAckSingle;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectRestrictions;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.rx.CompletableFlow;
+import com.hivemq.client2.mqtt.MqttVersion;
+import com.hivemq.client2.mqtt.exceptions.ConnectionClosedException;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5ConnAckException;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5DisconnectException;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.EventLoop;
@@ -50,7 +51,7 @@
import java.io.IOException;
import java.util.concurrent.TimeUnit;
-import static com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil.fireDisconnectEvent;
+import static com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil.fireDisconnectEvent;
/**
* If the server initiated the closing of the channel (a Disconnect message is received or the channel is closed without
@@ -91,6 +92,7 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void readDisconnect(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttDisconnect disconnect) {
+ LOGGER.debug("Read DISCONNECT {} from {}", disconnect, ctx.channel().remoteAddress());
if (state == null) {
state = STATE_CLOSED;
fireDisconnectEvent(ctx.channel(), new Mqtt5DisconnectException(disconnect, "Server sent DISCONNECT."),
@@ -99,6 +101,7 @@ private void readDisconnect(final @NotNull ChannelHandlerContext ctx, final @Not
}
private void readConnAck(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttConnAck connAck) {
+ LOGGER.debug("Read CONNACK {} from {}", connAck, ctx.channel().remoteAddress());
if (state == null) {
state = STATE_CLOSED;
MqttDisconnectUtil.disconnect(ctx.channel(), Mqtt5DisconnectReasonCode.PROTOCOL_ERROR,
@@ -127,13 +130,15 @@ public void channelInactive(final @NotNull ChannelHandlerContext ctx) {
public void exceptionCaught(final @NotNull ChannelHandlerContext ctx, final @NotNull Throwable cause) {
if (state == null) {
state = STATE_CLOSED;
+ // will be logged in MqttDisconnectUtil
fireDisconnectEvent(ctx.channel(), new ConnectionClosedException(cause), MqttDisconnectSource.CLIENT);
} else if (!(cause instanceof IOException)) {
- LOGGER.warn("Exception while disconnecting: {}", cause);
+ LOGGER.warn("Exception while disconnecting: {}, remote address: {}", cause, ctx.channel().remoteAddress());
}
}
public void disconnect(final @NotNull MqttDisconnect disconnect, final @NotNull CompletableFlow flow) {
+ LOGGER.trace("disconnect: schedule DISCONNECT {}", disconnect);
if (!clientConfig.executeInEventLoop(() -> writeDisconnect(disconnect, flow))) {
flow.onError(MqttClientStateExceptions.notConnected());
}
@@ -143,6 +148,7 @@ private void writeDisconnect(final @NotNull MqttDisconnect disconnect, final @No
final ChannelHandlerContext ctx = this.ctx;
if ((ctx != null) && (state == null)) {
state = STATE_CLOSED;
+ LOGGER.trace("Fire DISCONNECT event {}", disconnect);
fireDisconnectEvent(ctx.channel(), new MqttDisconnectEvent.ByUser(disconnect, flow));
} else {
flow.onError(MqttClientStateExceptions.notConnected());
@@ -158,10 +164,14 @@ protected void onDisconnectEvent(
final Channel channel = ctx.channel();
if (disconnectEvent.getSource() == MqttDisconnectSource.SERVER) {
+ LOGGER.debug("OnDisconnectedEvent: server closed connection: source: {}, cause: {}, remote address: {}",
+ disconnectEvent.getSource(), disconnectEvent.getCause(), ctx.channel().remoteAddress());
disconnected(channel, disconnectEvent);
channel.close();
return;
}
+ LOGGER.debug("OnDisconnectedEvent: source: {}, cause: {}", disconnectEvent.getSource(),
+ disconnectEvent.getCause());
MqttDisconnect disconnect = disconnectEvent.getDisconnect();
if (disconnect != null) {
@@ -182,31 +192,44 @@ protected void onDisconnectEvent(
if (disconnectEvent instanceof MqttDisconnectEvent.ByUser) {
final MqttDisconnectEvent.ByUser disconnectEventByUser = (MqttDisconnectEvent.ByUser) disconnectEvent;
+ LOGGER.debug("Write DISCONNECT (by user) {} to {}", disconnect, ctx.channel().remoteAddress());
ctx.writeAndFlush(disconnect).addListener(f -> {
if (f.isSuccess()) {
((DuplexChannel) channel).shutdownOutput().addListener(cf -> {
if (cf.isSuccess()) {
+ LOGGER.trace("DISCONNECT successful");
state = new DisconnectingState(channel, disconnectEventByUser);
} else {
+ LOGGER.debug("DISCONNECT failed: {}, remote address {}", cf.cause(), ctx.channel().remoteAddress());
disconnected(channel, disconnectEvent);
disconnectEventByUser.getFlow().onError(new ConnectionClosedException(cf.cause()));
}
});
} else {
+ LOGGER.debug("DISCONNECT failed: {}, remote address {}", f.cause(), ctx.channel().remoteAddress());
disconnected(channel, disconnectEvent);
disconnectEventByUser.getFlow().onError(new ConnectionClosedException(f.cause()));
}
});
} else if (clientConfig.getMqttVersion() == MqttVersion.MQTT_5_0) {
+ LOGGER.debug("Write DISCONNECT {} to {}", disconnect, ctx.channel().remoteAddress());
ctx.writeAndFlush(disconnect)
- .addListener(f -> channel.close().addListener(cf -> disconnected(channel, disconnectEvent)));
+ .addListener(f -> channel.close().addListener(cf -> {
+ LOGGER.trace("DISCONNECT done");
+ disconnected(channel, disconnectEvent);}));
} else {
- channel.close().addListener(cf -> disconnected(channel, disconnectEvent));
+ LOGGER.debug("Close channel (DISCONNECT) {} to {}", disconnect, ctx.channel().remoteAddress());
+ channel.close().addListener(cf -> {
+ LOGGER.trace("DISCONNECT done");
+ disconnected(channel, disconnectEvent);});
}
} else {
- channel.close().addListener(cf -> disconnected(channel, disconnectEvent));
+ LOGGER.debug("Close channel (DISCONNECT) to {}", ctx.channel().remoteAddress());
+ channel.close().addListener(cf -> {
+ LOGGER.trace("DISCONNECT done");
+ disconnected(channel, disconnectEvent);});
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectUtil.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectUtil.java
similarity index 81%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectUtil.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectUtil.java
index ebacaab11..44d599911 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/disconnect/MqttDisconnectUtil.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/disconnect/MqttDisconnectUtil.java
@@ -14,15 +14,18 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.disconnect;
+package com.hivemq.client2.internal.mqtt.handler.disconnect;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnect;
-import com.hivemq.client.internal.mqtt.message.disconnect.MqttDisconnectBuilder;
-import com.hivemq.client.mqtt.exceptions.ConnectionClosedException;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5DisconnectException;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnect;
+import com.hivemq.client2.internal.mqtt.message.disconnect.MqttDisconnectBuilder;
+import com.hivemq.client2.mqtt.exceptions.ConnectionClosedException;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5DisconnectException;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.Channel;
+
import org.jetbrains.annotations.NotNull;
/**
@@ -33,6 +36,7 @@
*/
public final class MqttDisconnectUtil {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttDisconnectUtil.class);
/**
* Closes the channel from the client side without sending a DISCONNECT message.
*
@@ -98,7 +102,8 @@ public static void fireDisconnectEvent(
static void fireDisconnectEvent(
final @NotNull Channel channel, final @NotNull MqttDisconnectEvent disconnectEvent) {
-
+ LOGGER.trace("Fire DISCONNECT event: source: {}, cause: {}", disconnectEvent.getSource(),
+ disconnectEvent.getCause());
channel.pipeline().fireUserEventTriggered(disconnectEvent);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/ping/MqttPingHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/ping/MqttPingHandler.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/ping/MqttPingHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/ping/MqttPingHandler.java
index 3f11d6f72..fd979fa0f 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/ping/MqttPingHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/ping/MqttPingHandler.java
@@ -14,15 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.ping;
-
-import com.hivemq.client.internal.mqtt.handler.MqttConnectionAwareHandler;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
-import com.hivemq.client.internal.mqtt.message.ping.MqttPingReq;
-import com.hivemq.client.internal.mqtt.message.ping.MqttPingResp;
-import com.hivemq.client.internal.netty.DefaultChannelOutboundHandler;
+package com.hivemq.client2.internal.mqtt.handler.ping;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.handler.MqttConnectionAwareHandler;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.message.ping.MqttPingReq;
+import com.hivemq.client2.internal.mqtt.message.ping.MqttPingResp;
+import com.hivemq.client2.internal.netty.DefaultChannelOutboundHandler;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
@@ -46,6 +48,7 @@ public class MqttPingHandler extends MqttConnectionAwareHandler
implements DefaultChannelOutboundHandler, Runnable, ChannelFutureListener {
public static final @NotNull String NAME = "ping";
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttPingHandler.class);
private static final boolean PINGRESP_REQUIRED = false; // TODO configurable
private final long keepAliveNanos;
@@ -78,6 +81,7 @@ public void flush(final @NotNull ChannelHandlerContext ctx) {
public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull Object msg) {
lastReadTimeNanos = System.nanoTime();
if (msg instanceof MqttPingResp) {
+ LOGGER.debug("Read PINGRESP from {}", ctx.channel().remoteAddress());
messageRead = true;
} else {
messageRead = !PINGRESP_REQUIRED;
@@ -100,10 +104,12 @@ public void run() {
}
if (pingReqWritten) {
if (!pingReqFlushed) {
+ LOGGER.warn("Timeout while writing PINGREQ to {}", ctx.channel().remoteAddress());
MqttDisconnectUtil.close(ctx.channel(), "Timeout while writing PINGREQ");
return;
}
if (!messageRead) {
+ LOGGER.warn("Timeout while waiting for PINGRESP from {}", ctx.channel().remoteAddress());
MqttDisconnectUtil.close(ctx.channel(), "Timeout while waiting for PINGRESP");
return;
}
@@ -116,6 +122,7 @@ public void run() {
pingReqWritten = false;
schedule(ctx, nextDelayNanos);
} else {
+ LOGGER.debug("Write PINGREQ to {}", ctx.channel().remoteAddress());
pingReqWritten = true;
schedule(ctx, keepAliveNanos);
lastFlushTimeNanos = timeNanos;
@@ -126,7 +133,10 @@ public void run() {
@Override
public void operationComplete(final @NotNull ChannelFuture future) {
if (future.isSuccess()) {
+ LOGGER.trace("PINGREQ sent");
pingReqFlushed = true;
+ } else {
+ LOGGER.debug("PINGREQ failed: cancelled: {}, cause: {}", future.isCancelled(), future.cause());
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/proxy/MqttProxyAdapterHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/proxy/MqttProxyAdapterHandler.java
similarity index 97%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/proxy/MqttProxyAdapterHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/proxy/MqttProxyAdapterHandler.java
index b58b0ccd1..00163e4da 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/proxy/MqttProxyAdapterHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/proxy/MqttProxyAdapterHandler.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.proxy;
+package com.hivemq.client2.internal.mqtt.handler.proxy;
-import com.hivemq.client.internal.mqtt.MqttProxyConfigImpl;
+import com.hivemq.client2.internal.mqtt.MqttProxyConfigImpl;
import io.netty.channel.*;
import io.netty.handler.proxy.HttpProxyHandler;
import io.netty.handler.proxy.ProxyHandler;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/proxy/MqttProxyInitializer.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/proxy/MqttProxyInitializer.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/proxy/MqttProxyInitializer.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/proxy/MqttProxyInitializer.java
index 83be60cfc..8f4866d79 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/proxy/MqttProxyInitializer.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/proxy/MqttProxyInitializer.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.proxy;
+package com.hivemq.client2.internal.mqtt.handler.proxy;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttProxyConfigImpl;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttProxyConfigImpl;
import io.netty.channel.Channel;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlow.java
similarity index 85%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlow.java
index a534b615e..7b5d7ea6a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlow.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.util.collections.HandleList.Handle;
-import com.hivemq.client.mqtt.MqttGlobalPublishFilter;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.util.collections.HandleList.Handle;
+import com.hivemq.client2.mqtt.MqttGlobalPublishFilter;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlowable.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlowable.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlowable.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlowable.java
index 05a71dc17..4164fcff8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlowable.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttGlobalIncomingPublishFlowable.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
-
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.mqtt.MqttGlobalPublishFilter;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
-import io.reactivex.Flowable;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
+
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.mqtt.MqttGlobalPublishFilter;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import io.reactivex.rxjava3.core.Flowable;
import org.jetbrains.annotations.NotNull;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishConfirmable.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishConfirmable.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishConfirmable.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishConfirmable.java
index de5b296b1..b41d24146 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishConfirmable.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishConfirmable.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
-import com.hivemq.client.internal.checkpoint.Confirmable;
+import com.hivemq.client2.internal.checkpoint.Confirmable;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.atomic.AtomicBoolean;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlow.java
similarity index 89%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlow.java
index a1ed75d3a..58d923ebd 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlow.java
@@ -14,15 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
-
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.util.FlowWithEventLoop;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
-import io.reactivex.Emitter;
-import io.reactivex.internal.util.BackpressureHelper;
-import io.reactivex.plugins.RxJavaPlugins;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
+
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.util.FlowWithEventLoop;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import io.reactivex.rxjava3.core.Emitter;
+import io.reactivex.rxjava3.internal.util.BackpressureHelper;
+import io.reactivex.rxjava3.plugins.RxJavaPlugins;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
@@ -36,6 +38,7 @@
*/
abstract class MqttIncomingPublishFlow extends FlowWithEventLoop
implements Emitter, Subscription, Runnable {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttIncomingPublishFlow.class);
private static final int STATE_NO_NEW_REQUESTS = 0;
private static final int STATE_NEW_REQUESTS = 1;
@@ -72,6 +75,7 @@ abstract class MqttIncomingPublishFlow extends FlowWithEventLoop
@CallByThread("Netty EventLoop")
@Override
public void onNext(final @NotNull Mqtt5Publish result) {
+ LOGGER.trace("onNext: {}, {}", result, subscriber);
subscriber.onNext(result);
if (requested != Long.MAX_VALUE) {
requested--;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlows.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlows.java
similarity index 85%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlows.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlows.java
index 75465668f..749012830 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlows.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishFlows.java
@@ -14,21 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
-
-import com.hivemq.client.internal.annotations.NotThreadSafe;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicFilterImpl;
-import com.hivemq.client.internal.mqtt.ioc.ClientScope;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscription;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.mqtt3.Mqtt3UnsubAckView;
-import com.hivemq.client.internal.util.collections.HandleList;
-import com.hivemq.client.internal.util.collections.HandleList.Handle;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.MqttGlobalPublishFilter;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAckReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.unsuback.Mqtt5UnsubAckReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
+
+import com.hivemq.client2.internal.annotations.NotThreadSafe;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicFilterImpl;
+import com.hivemq.client2.internal.mqtt.ioc.ClientScope;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribe;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscription;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.mqtt3.Mqtt3UnsubAckView;
+import com.hivemq.client2.internal.util.collections.HandleList;
+import com.hivemq.client2.internal.util.collections.HandleList.Handle;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.MqttGlobalPublishFilter;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAckReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5UnsubAckReasonCode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishService.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishService.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishService.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishService.java
index 7dd36fca5..8df58ae00 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingPublishService.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingPublishService.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
-
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.checkpoint.Confirmable;
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.ioc.ClientScope;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.util.collections.ChunkedArrayQueue;
-import com.hivemq.client.internal.util.collections.HandleList.Handle;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
+
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.checkpoint.Confirmable;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.ioc.ClientScope;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.util.collections.ChunkedArrayQueue;
+import com.hivemq.client2.internal.util.collections.HandleList.Handle;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
import org.jetbrains.annotations.NotNull;
/**
@@ -109,6 +109,7 @@ private void onPublish(final @NotNull MqttStatefulPublishWithFlows publishWithFl
referencedFlowCount++;
}
}
+ LOGGER.trace("emit {}", publishWithFlows.publish);
emit(publishWithFlows);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingQosHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingQosHandler.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingQosHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingQosHandler.java
index ad1e2f7d4..d21dc9530 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttIncomingQosHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttIncomingQosHandler.java
@@ -14,32 +14,25 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
-
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
-import com.hivemq.client.internal.mqtt.handler.MqttSessionAwareHandler;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.ioc.ClientScope;
-import com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish;
-import com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck;
-import com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAckBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubCompBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRecBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel;
-import com.hivemq.client.internal.util.collections.IntIndex;
-import com.hivemq.client.mqtt.MqttVersion;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5IncomingQos1Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5IncomingQos2Interceptor;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.publish.pubcomp.Mqtt5PubCompReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
+
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
+import com.hivemq.client2.internal.mqtt.handler.MqttSessionAwareHandler;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.ioc.ClientScope;
+import com.hivemq.client2.internal.mqtt.message.publish.*;
+import com.hivemq.client2.internal.util.collections.IntIndex;
+import com.hivemq.client2.mqtt.MqttVersion;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5InboundQos1Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5InboundQos2Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PubCompReasonCode;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.EventLoop;
import org.jetbrains.annotations.NotNull;
@@ -104,6 +97,7 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void readPublish(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttStatefulPublish publish) {
+ LOGGER.debug("Read PUBLISH {} from {}", publish, ctx.channel().remoteAddress());
switch (publish.stateless().getQos()) {
case AT_MOST_ONCE:
readPublishQos0(publish);
@@ -271,14 +265,17 @@ private boolean ack(
}
private void writePubAck(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubAck pubAck) {
+ LOGGER.debug("Write PUBACK {} to {}", pubAck, ctx.channel().remoteAddress());
ctx.writeAndFlush(pubAck, ctx.voidPromise());
}
private void writePubRec(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubRec pubRec) {
+ LOGGER.debug("Write PUBREC {} to {}", pubRec, ctx.channel().remoteAddress());
ctx.writeAndFlush(pubRec, ctx.voidPromise());
}
private void readPubRel(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubRel pubRel) {
+ LOGGER.debug("Read PUBREL {} from {}", pubRel, ctx.channel().remoteAddress());
final Object prevMessage = messages.remove(pubRel.getPacketIdentifier());
if (prevMessage instanceof MqttPubRec) { // normal case
writePubComp(ctx, buildPubComp(new MqttPubCompBuilder(pubRel)));
@@ -305,6 +302,7 @@ ctx, buildPubComp(new MqttPubCompBuilder(pubRel).reasonCode(
}
private void writePubComp(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubComp pubComp) {
+ LOGGER.debug("Write PUBCOMP {} to {}", pubComp, ctx.channel().remoteAddress());
ctx.writeAndFlush(pubComp, ctx.voidPromise());
}
@@ -317,7 +315,7 @@ public void onSessionEnd(final @NotNull Throwable cause) {
private @NotNull MqttPubAck buildPubAck(final @NotNull MqttPubAckBuilder pubAckBuilder) {
final MqttClientInterceptors interceptors = clientConfig.getAdvancedConfig().getInterceptors();
if (interceptors != null) {
- final Mqtt5IncomingQos1Interceptor interceptor = interceptors.getIncomingQos1Interceptor();
+ final Mqtt5InboundQos1Interceptor interceptor = interceptors.getInboundQos1Interceptor();
if (interceptor != null) {
interceptor.onPublish(clientConfig, pubAckBuilder.getPublish().stateless(), pubAckBuilder);
}
@@ -328,7 +326,7 @@ public void onSessionEnd(final @NotNull Throwable cause) {
private @NotNull MqttPubRec buildPubRec(final @NotNull MqttPubRecBuilder pubRecBuilder) {
final MqttClientInterceptors interceptors = clientConfig.getAdvancedConfig().getInterceptors();
if (interceptors != null) {
- final Mqtt5IncomingQos2Interceptor interceptor = interceptors.getIncomingQos2Interceptor();
+ final Mqtt5InboundQos2Interceptor interceptor = interceptors.getInboundQos2Interceptor();
if (interceptor != null) {
interceptor.onPublish(clientConfig, pubRecBuilder.getPublish().stateless(), pubRecBuilder);
}
@@ -339,7 +337,7 @@ public void onSessionEnd(final @NotNull Throwable cause) {
private @NotNull MqttPubComp buildPubComp(final @NotNull MqttPubCompBuilder pubCompBuilder) {
final MqttClientInterceptors interceptors = clientConfig.getAdvancedConfig().getInterceptors();
if (interceptors != null) {
- final Mqtt5IncomingQos2Interceptor interceptor = interceptors.getIncomingQos2Interceptor();
+ final Mqtt5InboundQos2Interceptor interceptor = interceptors.getInboundQos2Interceptor();
if (interceptor != null) {
interceptor.onPubRel(clientConfig, pubCompBuilder.getPubRel(), pubCompBuilder);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttStatefulPublishWithFlows.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttStatefulPublishWithFlows.java
similarity index 83%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttStatefulPublishWithFlows.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttStatefulPublishWithFlows.java
index ec8e4c216..3a39a9570 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttStatefulPublishWithFlows.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttStatefulPublishWithFlows.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
-import com.hivemq.client.internal.annotations.NotThreadSafe;
-import com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish;
-import com.hivemq.client.internal.util.collections.HandleList;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.internal.annotations.NotThreadSafe;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish;
+import com.hivemq.client2.internal.util.collections.HandleList;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlow.java
similarity index 75%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlow.java
index 6559528ac..33b8c453d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlow.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicFilterImpl;
-import com.hivemq.client.internal.mqtt.handler.subscribe.MqttSubscriptionFlow;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAck;
-import com.hivemq.client.internal.util.collections.HandleList;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAck;
-import com.hivemq.client.rx.FlowableWithSingleSubscriber;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicFilterImpl;
+import com.hivemq.client2.internal.mqtt.handler.subscribe.MqttSubscriptionFlow;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAck;
+import com.hivemq.client2.internal.util.collections.HandleList;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAck;
+import com.hivemq.client2.rx.FlowableWithSingleSubscriber;
import org.jetbrains.annotations.NotNull;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowTree.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowTree.java
similarity index 95%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowTree.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowTree.java
index 8309955da..724760aee 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowTree.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowTree.java
@@ -14,19 +14,19 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
-
-import com.hivemq.client.internal.annotations.NotThreadSafe;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicFilterImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicIterator;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicLevel;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicLevels;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscription;
-import com.hivemq.client.internal.util.collections.HandleList.Handle;
-import com.hivemq.client.internal.util.collections.Index;
-import com.hivemq.client.internal.util.collections.NodeList;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.Mqtt5RetainHandling;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
+
+import com.hivemq.client2.internal.annotations.NotThreadSafe;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicFilterImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicIterator;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicLevel;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicLevels;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscription;
+import com.hivemq.client2.internal.util.collections.HandleList.Handle;
+import com.hivemq.client2.internal.util.collections.Index;
+import com.hivemq.client2.internal.util.collections.NodeList;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5RetainHandling;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -569,8 +569,8 @@ private static void getSubscriptions(
final MqttTopicFilterImpl topicFilter =
MqttTopicLevel.toFilter(entry.topicFilterPrefix, topicLevels, multiLevelWildcard);
assert topicFilter != null : "reconstructed topic filter must be valid";
- final MqttQos qos = MqttSubscription.decodeQos(entry.subscriptionOptions);
- assert qos != null : "reconstructed qos must be valid";
+ final MqttQos maxQos = MqttSubscription.decodeMaxQos(entry.subscriptionOptions);
+ assert maxQos != null : "reconstructed maxQos must be valid";
final boolean noLocal = MqttSubscription.decodeNoLocal(entry.subscriptionOptions);
final Mqtt5RetainHandling retainHandling =
MqttSubscription.decodeRetainHandling(entry.subscriptionOptions);
@@ -578,7 +578,7 @@ private static void getSubscriptions(
final boolean retainAsPublished =
MqttSubscription.decodeRetainAsPublished(entry.subscriptionOptions);
final MqttSubscription subscription =
- new MqttSubscription(topicFilter, qos, noLocal, retainHandling, retainAsPublished);
+ new MqttSubscription(topicFilter, maxQos, noLocal, retainHandling, retainAsPublished);
map.computeIfAbsent(entry.subscriptionIdentifier, k -> new LinkedList<>()).add(subscription);
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowable.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowable.java
similarity index 78%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowable.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowable.java
index 8cc939d9e..f430a99e7 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowable.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlowable.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribe;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAck;
-import com.hivemq.client.rx.FlowableWithSingle;
-import com.hivemq.client.rx.reactivestreams.WithSingleSubscriber;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribe;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAck;
+import com.hivemq.client2.rx.FlowableWithSingle;
+import com.hivemq.client2.rx.reactivestreams.WithSingleSubscriber;
import org.jetbrains.annotations.NotNull;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlows.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlows.java
similarity index 84%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlows.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlows.java
index d4f3ad00f..d286c5659 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlows.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/incoming/MqttSubscribedPublishFlows.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.incoming;
+package com.hivemq.client2.internal.mqtt.handler.publish.incoming;
-import com.hivemq.client.internal.annotations.NotThreadSafe;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicFilterImpl;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscription;
+import com.hivemq.client2.internal.annotations.NotThreadSafe;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicFilterImpl;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscription;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlow.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlow.java
index 85b875bed..5ac0c538e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlow.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.util.FlowWithEventLoop;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult;
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.util.FlowWithEventLoop;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlowable.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlowable.java
similarity index 79%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlowable.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlowable.java
index 6c0f4a274..cfa6890f4 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlowable.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlowable.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
-
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
-import io.reactivex.Flowable;
-import io.reactivex.internal.subscriptions.EmptySubscription;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
+
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
+import io.reactivex.rxjava3.core.Flowable;
+import io.reactivex.rxjava3.internal.subscriptions.EmptySubscription;
import org.jetbrains.annotations.NotNull;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlowableFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlowableFlow.java
similarity index 92%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlowableFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlowableFlow.java
index 44d3ef4fe..8d34192d7 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckFlowableFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckFlowableFlow.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
-
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.publish.outgoing.MqttPublishFlowableAckLink.LinkedFlow;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult;
-import com.hivemq.client.internal.util.collections.ChunkedArrayQueue;
-import io.reactivex.internal.util.BackpressureHelper;
-import io.reactivex.plugins.RxJavaPlugins;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
+
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.publish.outgoing.MqttPublishFlowableAckLink.LinkedFlow;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult;
+import com.hivemq.client2.internal.util.collections.ChunkedArrayQueue;
+import io.reactivex.rxjava3.internal.util.BackpressureHelper;
+import io.reactivex.rxjava3.plugins.RxJavaPlugins;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckSingle.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckSingle.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckSingle.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckSingle.java
index 160d34afa..a80cf6854 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckSingle.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckSingle.java
@@ -14,20 +14,20 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
-import io.reactivex.Flowable;
-import io.reactivex.Single;
-import io.reactivex.SingleObserver;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.internal.disposables.EmptyDisposable;
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
+import io.reactivex.rxjava3.core.Flowable;
+import io.reactivex.rxjava3.core.Single;
+import io.reactivex.rxjava3.core.SingleObserver;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.internal.disposables.EmptyDisposable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckSingleFlowable.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckSingleFlowable.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckSingleFlowable.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckSingleFlowable.java
index 0592e148e..00bcec441 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttAckSingleFlowable.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttAckSingleFlowable.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
-
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
-import io.reactivex.Flowable;
-import io.reactivex.internal.subscriptions.EmptySubscription;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
+
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5PublishResult;
+import io.reactivex.rxjava3.core.Flowable;
+import io.reactivex.rxjava3.internal.subscriptions.EmptySubscription;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttOutgoingQosHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttOutgoingQosHandler.java
similarity index 83%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttOutgoingQosHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttOutgoingQosHandler.java
index 7eb3e534e..d19bab965 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttOutgoingQosHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttOutgoingQosHandler.java
@@ -14,52 +14,45 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
-
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
-import com.hivemq.client.internal.mqtt.exceptions.MqttClientStateExceptions;
-import com.hivemq.client.internal.mqtt.handler.MqttSessionAwareHandler;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.handler.publish.outgoing.MqttPubRelWithFlow.MqttQos2CompleteWithFlow;
-import com.hivemq.client.internal.mqtt.handler.publish.outgoing.MqttPubRelWithFlow.MqttQos2IntermediateWithFlow;
-import com.hivemq.client.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
-import com.hivemq.client.internal.mqtt.ioc.ClientScope;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult.MqttQos1Result;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult.MqttQos2CompleteResult;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult.MqttQos2IntermediateResult;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishResult.MqttQos2Result;
-import com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish;
-import com.hivemq.client.internal.mqtt.message.publish.puback.MqttPubAck;
-import com.hivemq.client.internal.mqtt.message.publish.pubcomp.MqttPubComp;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRelBuilder;
-import com.hivemq.client.internal.netty.ContextFuture;
-import com.hivemq.client.internal.netty.DefaultContextPromise;
-import com.hivemq.client.internal.util.Ranges;
-import com.hivemq.client.internal.util.UnsignedDataTypes;
-import com.hivemq.client.internal.util.collections.IntIndex;
-import com.hivemq.client.internal.util.collections.NodeList;
-import com.hivemq.client.mqtt.MqttClientState;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.exceptions.ConnectionClosedException;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5OutgoingQos1Interceptor;
-import com.hivemq.client.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5OutgoingQos2Interceptor;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5PubAckException;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5PubRecException;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
+
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.advanced.interceptor.MqttClientInterceptors;
+import com.hivemq.client2.internal.mqtt.exceptions.MqttClientStateExceptions;
+import com.hivemq.client2.internal.mqtt.handler.MqttSessionAwareHandler;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.handler.publish.outgoing.MqttPubRelWithFlow.MqttQos2CompleteWithFlow;
+import com.hivemq.client2.internal.mqtt.handler.publish.outgoing.MqttPubRelWithFlow.MqttQos2IntermediateWithFlow;
+import com.hivemq.client2.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
+import com.hivemq.client2.internal.mqtt.ioc.ClientScope;
+import com.hivemq.client2.internal.mqtt.message.publish.*;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult.MqttQos1Result;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult.MqttQos2CompleteResult;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult.MqttQos2IntermediateResult;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishResult.MqttQos2Result;
+import com.hivemq.client2.internal.netty.ContextFuture;
+import com.hivemq.client2.internal.netty.DefaultContextPromise;
+import com.hivemq.client2.internal.util.Ranges;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.internal.util.collections.IntIndex;
+import com.hivemq.client2.internal.util.collections.NodeList;
+import com.hivemq.client2.mqtt.MqttClientState;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.exceptions.ConnectionClosedException;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos1.Mqtt5OutboundQos1Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.advanced.interceptor.qos2.Mqtt5OutboundQos2Interceptor;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5PubAckException;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5PubRecException;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.EventLoop;
-import io.reactivex.Flowable;
-import io.reactivex.FlowableSubscriber;
+import io.reactivex.rxjava3.core.Flowable;
+import io.reactivex.rxjava3.core.FlowableSubscriber;
import org.jctools.queues.SpscUnboundedArrayQueue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -69,7 +62,7 @@
import java.io.IOException;
import java.util.concurrent.atomic.AtomicInteger;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish.NO_PACKET_IDENTIFIER_QOS_0;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish.NO_PACKET_IDENTIFIER_QOS_0;
/**
* @author Silvio Giebl
@@ -153,8 +146,11 @@ public void onSubscribe(final @NotNull Subscription subscription) {
@Override
public void onNext(final @NotNull MqttPublishWithFlow publishWithFlow) {
+ LOGGER.trace("onNext: queuing/scheduling outgoing {}", publishWithFlow.getPublish());
+
queue.offer(publishWithFlow);
if (queuedCounter.getAndIncrement() == 0) {
+ LOGGER.trace("Trigger actual publish (runnable)");
publishWithFlow.getAckFlow().getEventLoop().execute(this);
}
}
@@ -187,14 +183,17 @@ void request(final long n) {
@CallByThread("Netty EventLoop")
@Override
public void run() {
+ LOGGER.trace("run BEGIN");
if (!hasSession) {
if (!isRepublishIfSessionExpired()) {
clearQueued(MqttClientStateExceptions.notConnected());
}
+ LOGGER.trace("run: !hasSession");
return;
}
final ChannelHandlerContext ctx = this.ctx;
if (ctx == null) {
+ LOGGER.trace("run: ctx == null");
return;
}
final Channel channel = ctx.channel();
@@ -220,9 +219,11 @@ public void run() {
final boolean wasWritable = channel.isWritable();
ctx.flush();
if ((dequeued > 0) && (queuedCounter.addAndGet(-dequeued) > 0) && wasWritable) {
+ LOGGER.trace("Retrigger actual publish (runnable)");
channel.eventLoop().execute(this);
}
}
+ LOGGER.trace("run END");
}
@Override
@@ -261,7 +262,7 @@ private void writePublish(
private void writeQos0Publish(
final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPublishWithFlow publishWithFlow) {
-
+ LOGGER.debug("Write PUBLISH {} to {}", publishWithFlow.getPublish(), ctx.channel().remoteAddress());
ctx.write(publishWithFlow.getPublish().createStateful(NO_PACKET_IDENTIFIER_QOS_0, false, topicAliasMapping),
new DefaultContextPromise<>(ctx.channel(), publishWithFlow)).addListener(this);
}
@@ -301,7 +302,7 @@ private void writeQos1Or2Publish(
final @NotNull ChannelHandlerContext ctx,
final @NotNull MqttStatefulPublish publish,
final @NotNull MqttPublishWithFlow publishWithFlow) {
-
+ LOGGER.debug("Write PUBLISH {} to {}", publish, ctx.channel().remoteAddress());
currentPending = publishWithFlow;
ctx.write(publish, ctx.voidPromise());
currentPending = null;
@@ -321,6 +322,7 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void readPubAck(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubAck pubAck) {
+ LOGGER.debug("Read PUBACK {} from {}", pubAck, ctx.channel().remoteAddress());
final int packetIdentifier = pubAck.getPacketIdentifier();
final MqttPubOrRelWithFlow removed = pendingIndex.remove(packetIdentifier);
@@ -351,6 +353,7 @@ private void readPubAck(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void readPubRec(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubRec pubRec) {
+ LOGGER.debug("Read PUBREC {} from {}", pubRec, ctx.channel().remoteAddress());
final int packetIdentifier = pubRec.getPacketIdentifier();
final MqttPubOrRelWithFlow got = pendingIndex.get(packetIdentifier);
@@ -397,6 +400,7 @@ private void readPubRec(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void writePubRel(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubRel pubRel) {
+ LOGGER.debug("Write PUBREL {} to {}", pubRel, ctx.channel().remoteAddress());
ctx.write(pubRel, ctx.voidPromise());
}
@@ -409,6 +413,7 @@ private void replacePending(
}
private void readPubComp(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttPubComp pubComp) {
+ LOGGER.debug("Read PUBCOMP {} from {}", pubComp, ctx.channel().remoteAddress());
final int packetIdentifier = pubComp.getPacketIdentifier();
final MqttPubOrRelWithFlow removed = pendingIndex.remove(packetIdentifier);
@@ -464,6 +469,7 @@ private void completePending(
@Override
public void exceptionCaught(final @NotNull ChannelHandlerContext ctx, final @NotNull Throwable cause) {
if (!(cause instanceof IOException) && (currentPending != null)) {
+ LOGGER.debug("Exception caught: {}, remote address: {}", cause, ctx.channel().remoteAddress());
pendingIndex.remove(currentPending.packetIdentifier);
currentPending.getAckFlow().onNext(new MqttPublishResult(currentPending.getPublish(), cause));
completePending(ctx, currentPending);
@@ -509,6 +515,7 @@ private boolean isRepublishIfSessionExpired() {
}
private void clearQueued(final @NotNull Throwable cause) {
+ LOGGER.trace("clear queued, cause: {}", cause);
int polled = 0;
while (true) {
final MqttPublishWithFlow publishWithFlow = queue.poll();
@@ -532,7 +539,7 @@ private static void error(final @NotNull ChannelHandlerContext ctx, final @NotNu
private void onPubAck(final @NotNull MqttPublish publish, final @NotNull MqttPubAck pubAck) {
final MqttClientInterceptors interceptors = clientConfig.getAdvancedConfig().getInterceptors();
if (interceptors != null) {
- final Mqtt5OutgoingQos1Interceptor interceptor = interceptors.getOutgoingQos1Interceptor();
+ final Mqtt5OutboundQos1Interceptor interceptor = interceptors.getOutboundQos1Interceptor();
if (interceptor != null) {
interceptor.onPubAck(clientConfig, publish, pubAck);
}
@@ -542,7 +549,7 @@ private void onPubAck(final @NotNull MqttPublish publish, final @NotNull MqttPub
private void onPubRecError(final @NotNull MqttPublish publish, final @NotNull MqttPubRec pubRec) {
final MqttClientInterceptors interceptors = clientConfig.getAdvancedConfig().getInterceptors();
if (interceptors != null) {
- final Mqtt5OutgoingQos2Interceptor interceptor = interceptors.getOutgoingQos2Interceptor();
+ final Mqtt5OutboundQos2Interceptor interceptor = interceptors.getOutboundQos2Interceptor();
if (interceptor != null) {
interceptor.onPubRecError(clientConfig, publish, pubRec);
}
@@ -553,7 +560,7 @@ private void onPubRecError(final @NotNull MqttPublish publish, final @NotNull Mq
final MqttPubRelBuilder pubRelBuilder = new MqttPubRelBuilder(pubRec);
final MqttClientInterceptors interceptors = clientConfig.getAdvancedConfig().getInterceptors();
if (interceptors != null) {
- final Mqtt5OutgoingQos2Interceptor interceptor = interceptors.getOutgoingQos2Interceptor();
+ final Mqtt5OutboundQos2Interceptor interceptor = interceptors.getOutboundQos2Interceptor();
if (interceptor != null) {
interceptor.onPubRec(clientConfig, publish, pubRec, pubRelBuilder);
}
@@ -564,7 +571,7 @@ private void onPubRecError(final @NotNull MqttPublish publish, final @NotNull Mq
private void onPubComp(final @NotNull MqttPubRel pubRel, final @NotNull MqttPubComp pubComp) {
final MqttClientInterceptors interceptors = clientConfig.getAdvancedConfig().getInterceptors();
if (interceptors != null) {
- final Mqtt5OutgoingQos2Interceptor interceptor = interceptors.getOutgoingQos2Interceptor();
+ final Mqtt5OutboundQos2Interceptor interceptor = interceptors.getOutboundQos2Interceptor();
if (interceptor != null) {
interceptor.onPubComp(clientConfig, pubRel, pubComp);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPubOrRelWithFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPubOrRelWithFlow.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPubOrRelWithFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPubOrRelWithFlow.java
index edff5b74a..f43c1638a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPubOrRelWithFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPubOrRelWithFlow.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.util.collections.NodeList;
+import com.hivemq.client2.internal.util.collections.NodeList;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPubRelWithFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPubRelWithFlow.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPubRelWithFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPubRelWithFlow.java
index b3c8c6504..c7465139a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPubRelWithFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPubRelWithFlow.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.pubrec.MqttPubRec;
-import com.hivemq.client.internal.mqtt.message.publish.pubrel.MqttPubRel;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRec;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPubRel;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
import org.jetbrains.annotations.NotNull;
import java.util.function.BooleanSupplier;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishFlowableAckLink.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishFlowableAckLink.java
similarity index 92%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishFlowableAckLink.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishFlowableAckLink.java
index b72298d2c..ce3e5dd69 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishFlowableAckLink.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishFlowableAckLink.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
-
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import io.reactivex.Flowable;
-import io.reactivex.FlowableSubscriber;
-import io.reactivex.plugins.RxJavaPlugins;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
+
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import io.reactivex.rxjava3.core.Flowable;
+import io.reactivex.rxjava3.core.FlowableSubscriber;
+import io.reactivex.rxjava3.plugins.RxJavaPlugins;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishFlowables.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishFlowables.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishFlowables.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishFlowables.java
index f7586fdc3..4de60e075 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishFlowables.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishFlowables.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.ioc.ClientScope;
-import io.reactivex.Flowable;
-import io.reactivex.internal.util.BackpressureHelper;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.ioc.ClientScope;
+import io.reactivex.rxjava3.core.Flowable;
+import io.reactivex.rxjava3.internal.util.BackpressureHelper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reactivestreams.Subscriber;
@@ -50,7 +50,9 @@ public void add(final @NotNull Flowable publishFlowable) {
synchronized (this) {
while (requested == 0) {
try {
+ LOGGER.debug("Publish blocked (requested == 0)");
this.wait();
+ LOGGER.debug("Publish unblocked");
} catch (final InterruptedException e) {
LOGGER.error("thread interrupted while waiting to publish.", e);
return;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishWithFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishWithFlow.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishWithFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishWithFlow.java
index d5f573327..ad361d3a2 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttPublishWithFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttPublishWithFlow.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttTopicAliasAutoMapping.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttTopicAliasAutoMapping.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttTopicAliasAutoMapping.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttTopicAliasAutoMapping.java
index e3f22c4d3..c080f5653 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttTopicAliasAutoMapping.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttTopicAliasAutoMapping.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicImpl;
-import com.hivemq.client.internal.util.collections.Index;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicImpl;
+import com.hivemq.client2.internal.util.collections.Index;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import static com.hivemq.client.internal.mqtt.message.publish.MqttStatefulPublish.*;
+import static com.hivemq.client2.internal.mqtt.message.publish.MqttStatefulPublish.*;
/**
* @author Silvio Giebl
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttTopicAliasMapping.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttTopicAliasMapping.java
similarity index 86%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttTopicAliasMapping.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttTopicAliasMapping.java
index 75b42e79f..8a4e57151 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/publish/outgoing/MqttTopicAliasMapping.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/publish/outgoing/MqttTopicAliasMapping.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.publish.outgoing;
+package com.hivemq.client2.internal.mqtt.handler.publish.outgoing;
-import com.hivemq.client.internal.mqtt.datatypes.MqttTopicImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttTopicImpl;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubAckSingle.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubAckSingle.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubAckSingle.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubAckSingle.java
index ab914a897..fc4dda01b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubAckSingle.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubAckSingle.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAck;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAck;
-import io.reactivex.Single;
-import io.reactivex.SingleObserver;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAck;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribe;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAck;
+import io.reactivex.rxjava3.core.Single;
+import io.reactivex.rxjava3.core.SingleObserver;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubOrUnsubAckFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubOrUnsubAckFlow.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubOrUnsubAckFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubOrUnsubAckFlow.java
index 0dad079a3..a4e95c693 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubOrUnsubAckFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubOrUnsubAckFlow.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.util.FlowWithEventLoop;
-import io.reactivex.SingleObserver;
-import io.reactivex.disposables.Disposable;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.util.FlowWithEventLoop;
+import io.reactivex.rxjava3.core.SingleObserver;
+import io.reactivex.rxjava3.disposables.Disposable;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubOrUnsubWithFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubOrUnsubWithFlow.java
similarity index 87%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubOrUnsubWithFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubOrUnsubWithFlow.java
index a8ae37a8e..1be0be063 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubOrUnsubWithFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubOrUnsubWithFlow.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
-import com.hivemq.client.internal.util.collections.NodeList;
+import com.hivemq.client2.internal.util.collections.NodeList;
import org.jetbrains.annotations.Nullable;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscribeWithFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscribeWithFlow.java
similarity index 86%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscribeWithFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscribeWithFlow.java
index a2f388682..524a32dbd 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscribeWithFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscribeWithFlow.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAck;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAck;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribe;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscriptionFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscriptionFlow.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscriptionFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscriptionFlow.java
index 0b1be90dd..62e4b5f5e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscriptionFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscriptionFlow.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
import io.netty.channel.EventLoop;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscriptionHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscriptionHandler.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscriptionHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscriptionHandler.java
index 3e2ca8cad..067edd62f 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttSubscriptionHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttSubscriptionHandler.java
@@ -14,39 +14,39 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
-
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.logging.InternalLogger;
-import com.hivemq.client.internal.logging.InternalLoggerFactory;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientConnectionConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.handler.MqttSessionAwareHandler;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.internal.mqtt.handler.publish.incoming.MqttGlobalIncomingPublishFlow;
-import com.hivemq.client.internal.mqtt.handler.publish.incoming.MqttIncomingPublishFlows;
-import com.hivemq.client.internal.mqtt.handler.publish.incoming.MqttSubscribedPublishFlow;
-import com.hivemq.client.internal.mqtt.ioc.ClientScope;
-import com.hivemq.client.internal.mqtt.message.MqttCommonReasonCode;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttStatefulSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.MqttSubscribe;
-import com.hivemq.client.internal.mqtt.message.subscribe.suback.MqttSubAck;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttStatefulUnsubscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.MqttUnsubAck;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.mqtt3.Mqtt3UnsubAckView;
-import com.hivemq.client.internal.util.Ranges;
-import com.hivemq.client.internal.util.UnsignedDataTypes;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.internal.util.collections.IntIndex;
-import com.hivemq.client.internal.util.collections.NodeList;
-import com.hivemq.client.mqtt.MqttClientState;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5SubAckException;
-import com.hivemq.client.mqtt.mqtt5.exceptions.Mqtt5UnsubAckException;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.subscribe.suback.Mqtt5SubAckReasonCode;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.unsuback.Mqtt5UnsubAckReasonCode;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
+
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConnectionConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.handler.MqttSessionAwareHandler;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.handler.publish.incoming.MqttGlobalIncomingPublishFlow;
+import com.hivemq.client2.internal.mqtt.handler.publish.incoming.MqttIncomingPublishFlows;
+import com.hivemq.client2.internal.mqtt.handler.publish.incoming.MqttSubscribedPublishFlow;
+import com.hivemq.client2.internal.mqtt.ioc.ClientScope;
+import com.hivemq.client2.internal.mqtt.message.MqttReasonCodes;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttStatefulSubscribe;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubAck;
+import com.hivemq.client2.internal.mqtt.message.subscribe.MqttSubscribe;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttStatefulUnsubscribe;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubAck;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.mqtt3.Mqtt3UnsubAckView;
+import com.hivemq.client2.internal.util.Ranges;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.internal.util.collections.IntIndex;
+import com.hivemq.client2.internal.util.collections.NodeList;
+import com.hivemq.client2.mqtt.MqttClientState;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5SubAckException;
+import com.hivemq.client2.mqtt.mqtt5.exceptions.Mqtt5UnsubAckException;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.subscribe.Mqtt5SubAckReasonCode;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5UnsubAckReasonCode;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.EventLoop;
import org.jetbrains.annotations.NotNull;
@@ -119,6 +119,7 @@ public void onSessionStartOrResume(
public void subscribe(
final @NotNull MqttSubscribe subscribe, final @NotNull MqttSubscriptionFlow flow) {
+ LOGGER.trace("subscribe: schedule SUBSCRIBE {}", subscribe);
flow.getEventLoop().execute(() -> {
if (flow.init()) {
@@ -132,6 +133,7 @@ public void subscribe(
public void unsubscribe(
final @NotNull MqttUnsubscribe unsubscribe, final @NotNull MqttSubOrUnsubAckFlow flow) {
+ LOGGER.trace("unsubscribe: schedule UNSUBSCRIBE {}", unsubscribe);
flow.getEventLoop().execute(() -> {
if (flow.init()) {
@@ -199,6 +201,7 @@ private void writeSubscribe(
subscribeWithFlow.subscribe.createStateful(subscribeWithFlow.packetIdentifier, subscriptionIdentifier);
currentPending = subscribeWithFlow;
+ LOGGER.debug("Write SUBSCRIBE {} to {}", statefulSubscribe, ctx.channel().remoteAddress());
ctx.write(statefulSubscribe, ctx.voidPromise());
currentPending = null;
}
@@ -210,6 +213,7 @@ private void writeUnsubscribe(
unsubscribeWithFlow.unsubscribe.createStateful(unsubscribeWithFlow.packetIdentifier);
currentPending = unsubscribeWithFlow;
+ LOGGER.debug("Write UNSUBSCRIBE {} to {}", statefulUnsubscribe, ctx.channel().remoteAddress());
ctx.write(statefulUnsubscribe, ctx.voidPromise());
currentPending = null;
}
@@ -226,6 +230,7 @@ public void channelRead(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void readSubAck(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttSubAck subAck) {
+ LOGGER.debug("Read SUBACK {} from {}", subAck, ctx.channel().remoteAddress());
final MqttSubOrUnsubWithFlow subOrUnsubWithFlow = pendingIndex.remove(subAck.getPacketIdentifier());
if (subOrUnsubWithFlow == null) {
@@ -243,7 +248,7 @@ private void readSubAck(final @NotNull ChannelHandlerContext ctx, final @NotNull
final ImmutableList reasonCodes = subAck.getReasonCodes();
final boolean countNotMatching = subscribeWithFlow.subscribe.getSubscriptions().size() != reasonCodes.size();
- final boolean allErrors = MqttCommonReasonCode.allErrors(subAck.getReasonCodes());
+ final boolean allErrors = MqttReasonCodes.allErrors(subAck.getReasonCodes());
incomingPublishFlows.subAck(subscribeWithFlow.subscribe, subscribeWithFlow.subscriptionIdentifier, reasonCodes);
@@ -273,6 +278,7 @@ private void readSubAck(final @NotNull ChannelHandlerContext ctx, final @NotNull
}
private void readUnsubAck(final @NotNull ChannelHandlerContext ctx, final @NotNull MqttUnsubAck unsubAck) {
+ LOGGER.debug("Read UNSUBACK {} from {}", unsubAck, ctx.channel().remoteAddress());
final MqttSubOrUnsubWithFlow subOrUnsubWithFlow = pendingIndex.remove(unsubAck.getPacketIdentifier());
if (subOrUnsubWithFlow == null) {
@@ -290,7 +296,7 @@ private void readUnsubAck(final @NotNull ChannelHandlerContext ctx, final @NotNu
final ImmutableList reasonCodes = unsubAck.getReasonCodes();
final boolean countNotMatching = unsubscribeWithFlow.unsubscribe.getTopicFilters().size() != reasonCodes.size();
- final boolean allErrors = MqttCommonReasonCode.allErrors(unsubAck.getReasonCodes());
+ final boolean allErrors = MqttReasonCodes.allErrors(unsubAck.getReasonCodes());
if ((reasonCodes == Mqtt3UnsubAckView.REASON_CODES_ALL_SUCCESS) || !(countNotMatching || allErrors)) {
@@ -326,6 +332,7 @@ private void completePending(final @NotNull MqttSubOrUnsubWithFlow oldPending) {
@Override
public void exceptionCaught(final @NotNull ChannelHandlerContext ctx, final @NotNull Throwable cause) {
+ LOGGER.debug("Exception caught: {}, remote address: {}", cause, ctx.channel().remoteAddress());
if (!(cause instanceof IOException) && (currentPending != null)) {
pending.remove(currentPending);
packetIdentifiers.returnId(currentPending.packetIdentifier);
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttUnsubAckSingle.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttUnsubAckSingle.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttUnsubAckSingle.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttUnsubAckSingle.java
index 197a87716..06004222c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttUnsubAckSingle.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttUnsubAckSingle.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
-
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.ioc.ClientComponent;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.MqttUnsubAck;
-import com.hivemq.client.mqtt.mqtt5.message.unsubscribe.unsuback.Mqtt5UnsubAck;
-import io.reactivex.Single;
-import io.reactivex.SingleObserver;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
+
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.ioc.ClientComponent;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubAck;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
+import com.hivemq.client2.mqtt.mqtt5.message.unsubscribe.Mqtt5UnsubAck;
+import io.reactivex.rxjava3.core.Single;
+import io.reactivex.rxjava3.core.SingleObserver;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttUnsubscribeWithFlow.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttUnsubscribeWithFlow.java
similarity index 85%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttUnsubscribeWithFlow.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttUnsubscribeWithFlow.java
index e0f9a180c..dedf217da 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/subscribe/MqttUnsubscribeWithFlow.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/subscribe/MqttUnsubscribeWithFlow.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.subscribe;
+package com.hivemq.client2.internal.mqtt.handler.subscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
-import com.hivemq.client.internal.mqtt.message.unsubscribe.unsuback.MqttUnsubAck;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubAck;
+import com.hivemq.client2.internal.mqtt.message.unsubscribe.MqttUnsubscribe;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/ssl/MqttSslAdapterHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/tls/MqttTlsAdapterHandler.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/ssl/MqttSslAdapterHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/tls/MqttTlsAdapterHandler.java
index 143e8b95f..05efe4e2a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/ssl/MqttSslAdapterHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/tls/MqttTlsAdapterHandler.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.ssl;
+package com.hivemq.client2.internal.mqtt.handler.tls;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
@@ -32,7 +32,7 @@
/**
* @author Silvio Giebl
*/
-class MqttSslAdapterHandler extends ChannelInboundHandlerAdapter {
+class MqttTlsAdapterHandler extends ChannelInboundHandlerAdapter {
public static final @NotNull String NAME = "ssl.adapter";
@@ -43,7 +43,7 @@ class MqttSslAdapterHandler extends ChannelInboundHandlerAdapter {
private final @NotNull BiConsumer onError;
private boolean handshakeDone = false;
- public MqttSslAdapterHandler(
+ public MqttTlsAdapterHandler(
final @NotNull SslHandler sslHandler,
final @NotNull String host,
final @Nullable HostnameVerifier hostnameVerifier,
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/ssl/MqttSslInitializer.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/tls/MqttTlsInitializer.java
similarity index 71%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/ssl/MqttSslInitializer.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/tls/MqttTlsInitializer.java
index dfdd808b6..61590bc21 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/ssl/MqttSslInitializer.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/tls/MqttTlsInitializer.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.ssl;
+package com.hivemq.client2.internal.mqtt.handler.tls;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientSslConfigImpl;
-import com.hivemq.client.internal.util.collections.ImmutableList;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttTlsConfigImpl;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
import io.netty.channel.Channel;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
@@ -37,14 +37,14 @@
* @author Christoph Schäbel
* @author Silvio Giebl
*/
-public final class MqttSslInitializer {
+public final class MqttTlsInitializer {
- private static final @NotNull String SSL_HANDLER_NAME = "ssl";
+ private static final @NotNull String SSL_HANDLER_NAME = "tls";
public static void initChannel(
final @NotNull Channel channel,
final @NotNull MqttClientConfig clientConfig,
- final @NotNull MqttClientSslConfigImpl sslConfig,
+ final @NotNull MqttTlsConfigImpl tlsConfig,
final @NotNull Consumer onSuccess,
final @NotNull BiConsumer onError) {
@@ -54,7 +54,7 @@ public static void initChannel(
try {
SslContext sslContext = clientConfig.getCurrentSslContext();
if (sslContext == null) {
- sslContext = createSslContext(sslConfig);
+ sslContext = createSslContext(tlsConfig);
clientConfig.setCurrentSslContext(sslContext);
}
sslHandler = sslContext.newHandler(channel.alloc(), serverAddress.getHostString(), serverAddress.getPort());
@@ -63,32 +63,32 @@ public static void initChannel(
return;
}
- sslHandler.setHandshakeTimeoutMillis(sslConfig.getHandshakeTimeoutMs());
+ sslHandler.setHandshakeTimeoutMillis(tlsConfig.getHandshakeTimeoutMs());
- final HostnameVerifier hostnameVerifier = sslConfig.getRawHostnameVerifier();
+ final HostnameVerifier hostnameVerifier = tlsConfig.getRawHostnameVerifier();
if (hostnameVerifier == null) {
final SSLParameters sslParameters = sslHandler.engine().getSSLParameters();
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
sslHandler.engine().setSSLParameters(sslParameters);
}
- final MqttSslAdapterHandler sslAdapterHandler =
- new MqttSslAdapterHandler(sslHandler, serverAddress.getHostString(), hostnameVerifier, onSuccess,
+ final MqttTlsAdapterHandler tlsAdapterHandler =
+ new MqttTlsAdapterHandler(sslHandler, serverAddress.getHostString(), hostnameVerifier, onSuccess,
onError);
- channel.pipeline().addLast(SSL_HANDLER_NAME, sslHandler).addLast(MqttSslAdapterHandler.NAME, sslAdapterHandler);
+ channel.pipeline().addLast(SSL_HANDLER_NAME, sslHandler).addLast(MqttTlsAdapterHandler.NAME, tlsAdapterHandler);
}
- static @NotNull SslContext createSslContext(final @NotNull MqttClientSslConfigImpl sslConfig) throws SSLException {
- final ImmutableList protocols = sslConfig.getRawProtocols();
+ static @NotNull SslContext createSslContext(final @NotNull MqttTlsConfigImpl tlsConfig) throws SSLException {
+ final ImmutableList protocols = tlsConfig.getRawProtocols();
return SslContextBuilder.forClient()
- .trustManager(sslConfig.getRawTrustManagerFactory())
- .keyManager(sslConfig.getRawKeyManagerFactory())
+ .trustManager(tlsConfig.getRawTrustManagerFactory())
+ .keyManager(tlsConfig.getRawKeyManagerFactory())
.protocols((protocols == null) ? null : protocols.toArray(new String[0]))
- .ciphers(sslConfig.getRawCipherSuites(), SupportedCipherSuiteFilter.INSTANCE)
+ .ciphers(tlsConfig.getRawCipherSuites(), SupportedCipherSuiteFilter.INSTANCE)
.build();
}
- private MqttSslInitializer() {}
+ private MqttTlsInitializer() {}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/util/FlowWithEventLoop.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/util/FlowWithEventLoop.java
similarity index 95%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/util/FlowWithEventLoop.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/util/FlowWithEventLoop.java
index 4c116c9e4..75ac38584 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/util/FlowWithEventLoop.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/util/FlowWithEventLoop.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.util;
+package com.hivemq.client2.internal.mqtt.handler.util;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
import io.netty.channel.EventLoop;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/util/MqttTimeoutInboundHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/util/MqttTimeoutInboundHandler.java
similarity index 83%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/util/MqttTimeoutInboundHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/util/MqttTimeoutInboundHandler.java
index 06857674f..166479edc 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/util/MqttTimeoutInboundHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/util/MqttTimeoutInboundHandler.java
@@ -14,13 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.util;
+package com.hivemq.client2.internal.mqtt.handler.util;
-import com.hivemq.client.internal.annotations.CallByThread;
-import com.hivemq.client.internal.mqtt.handler.MqttConnectionAwareHandler;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
-import com.hivemq.client.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
+import com.hivemq.client2.internal.annotations.CallByThread;
+import com.hivemq.client2.internal.logging.InternalLogger;
+import com.hivemq.client2.internal.logging.InternalLoggerFactory;
+import com.hivemq.client2.internal.mqtt.handler.MqttConnectionAwareHandler;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectEvent;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.mqtt.mqtt5.message.disconnect.Mqtt5DisconnectReasonCode;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
@@ -40,6 +42,7 @@
public abstract class MqttTimeoutInboundHandler extends MqttConnectionAwareHandler
implements Runnable, ChannelFutureListener {
+ private static final @NotNull InternalLogger LOGGER = InternalLoggerFactory.getLogger(MqttTimeoutInboundHandler.class);
private @Nullable ScheduledFuture> timeoutFuture;
/**
@@ -109,6 +112,7 @@ protected void cancelTimeout() {
@Override
protected void onDisconnectEvent(
final @NotNull ChannelHandlerContext ctx, final @NotNull MqttDisconnectEvent disconnectEvent) {
+ LOGGER.debug("OnDisconnectedEvent: source: {}, cause: {}", disconnectEvent.getSource(), disconnectEvent.getCause());
cancelTimeout();
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebSocketCodec.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebSocketCodec.java
similarity index 95%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebSocketCodec.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebSocketCodec.java
index ede95cc2b..c0653a182 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebSocketCodec.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebSocketCodec.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.websocket;
+package com.hivemq.client2.internal.mqtt.handler.websocket;
-import com.hivemq.client.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
+import com.hivemq.client2.internal.mqtt.handler.disconnect.MqttDisconnectUtil;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandler;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebSocketInitializer.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebSocketInitializer.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebSocketInitializer.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebSocketInitializer.java
index ed1c4c3f4..f0a12f1b9 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebSocketInitializer.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebSocketInitializer.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.websocket;
+package com.hivemq.client2.internal.mqtt.handler.websocket;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.MqttClientTransportConfigImpl;
-import com.hivemq.client.internal.mqtt.MqttWebSocketConfigImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttVariableByteInteger;
-import com.hivemq.client.internal.mqtt.ioc.ConnectionScope;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.MqttTransportConfigImpl;
+import com.hivemq.client2.internal.mqtt.MqttWebSocketConfigImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.ioc.ConnectionScope;
import io.netty.channel.Channel;
import io.netty.handler.codec.http.HttpClientCodec;
import io.netty.handler.codec.http.HttpObjectAggregator;
@@ -61,11 +61,11 @@ public void initChannel(
final URI uri;
try {
- final MqttClientTransportConfigImpl transportConfig = clientConfig.getCurrentTransportConfig();
+ final MqttTransportConfigImpl transportConfig = clientConfig.getCurrentTransportConfig();
final InetSocketAddress serverAddress = transportConfig.getServerAddress();
- uri = new URI((transportConfig.getRawSslConfig() == null) ? "ws" : "wss", null,
- serverAddress.getHostString(), serverAddress.getPort(), "/" + webSocketConfig.getServerPath(),
- webSocketConfig.getQueryString(), null);
+ uri = new URI((transportConfig.getRawTlsConfig() == null) ? "ws" : "wss", null,
+ serverAddress.getHostString(), serverAddress.getPort(), "/" + webSocketConfig.getPath(),
+ webSocketConfig.getQuery(), null);
} catch (final URISyntaxException e) {
onError.accept(channel, e);
return;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebsocketHandshakeHandler.java b/src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebsocketHandshakeHandler.java
similarity index 98%
rename from src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebsocketHandshakeHandler.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebsocketHandshakeHandler.java
index dcde3a0ad..4572acbb0 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/handler/websocket/MqttWebsocketHandshakeHandler.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/handler/websocket/MqttWebsocketHandshakeHandler.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.handler.websocket;
+package com.hivemq.client2.internal.mqtt.handler.websocket;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientComponent.java b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ClientComponent.java
similarity index 77%
rename from src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientComponent.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/ioc/ClientComponent.java
index b79446b0c..6ccd41f6d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientComponent.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ClientComponent.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.ioc;
+package com.hivemq.client2.internal.mqtt.ioc;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.handler.publish.incoming.MqttIncomingQosHandler;
-import com.hivemq.client.internal.mqtt.handler.publish.outgoing.MqttOutgoingQosHandler;
-import com.hivemq.client.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.handler.publish.incoming.MqttIncomingQosHandler;
+import com.hivemq.client2.internal.mqtt.handler.publish.outgoing.MqttOutgoingQosHandler;
+import com.hivemq.client2.internal.mqtt.handler.subscribe.MqttSubscriptionHandler;
import dagger.BindsInstance;
import dagger.Subcomponent;
import org.jetbrains.annotations.NotNull;
@@ -29,7 +29,7 @@
*
* @author Silvio Giebl
*/
-@Subcomponent(modules = {ClientModule.class})
+@Subcomponent
@ClientScope
public interface ClientComponent {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientScope.java b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ClientScope.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientScope.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/ioc/ClientScope.java
index 34ede4af2..e9449a4f5 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ClientScope.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ClientScope.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.ioc;
+package com.hivemq.client2.internal.mqtt.ioc;
import javax.inject.Scope;
import java.lang.annotation.Documented;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionComponent.java b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionComponent.java
similarity index 84%
rename from src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionComponent.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionComponent.java
index 60fbb2e66..dd469dc9e 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionComponent.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionComponent.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.ioc;
+package com.hivemq.client2.internal.mqtt.ioc;
-import com.hivemq.client.internal.mqtt.codec.MqttCodecModule;
-import com.hivemq.client.internal.mqtt.handler.connect.MqttConnAckFlow;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.codec.MqttCodecModule;
+import com.hivemq.client2.internal.mqtt.handler.connect.MqttConnAckFlow;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
import dagger.BindsInstance;
import dagger.Subcomponent;
import io.netty.bootstrap.Bootstrap;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionModule.java b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionModule.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionModule.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionModule.java
index 34d516c4c..8be9ee528 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionModule.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionModule.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.ioc;
+package com.hivemq.client2.internal.mqtt.ioc;
-import com.hivemq.client.internal.mqtt.handler.MqttChannelInitializer;
-import com.hivemq.client.internal.mqtt.handler.auth.MqttAuthHandler;
-import com.hivemq.client.internal.mqtt.handler.auth.MqttConnectAuthHandler;
-import com.hivemq.client.internal.mqtt.handler.auth.MqttDisconnectOnAuthHandler;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.netty.NettyEventLoopProvider;
+import com.hivemq.client2.internal.mqtt.handler.MqttChannelInitializer;
+import com.hivemq.client2.internal.mqtt.handler.auth.MqttAuthHandler;
+import com.hivemq.client2.internal.mqtt.handler.auth.MqttConnectAuthHandler;
+import com.hivemq.client2.internal.mqtt.handler.auth.MqttDisconnectOnAuthHandler;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.netty.NettyEventLoopProvider;
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionScope.java b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionScope.java
similarity index 96%
rename from src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionScope.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionScope.java
index 56363f8fe..89b17371c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/ioc/ConnectionScope.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/ConnectionScope.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.ioc;
+package com.hivemq.client2.internal.mqtt.ioc;
import javax.inject.Scope;
import java.lang.annotation.Documented;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/ioc/SingletonComponent.java b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/SingletonComponent.java
similarity index 95%
rename from src/main/java/com/hivemq/client/internal/mqtt/ioc/SingletonComponent.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/ioc/SingletonComponent.java
index 7129a5407..3534076b6 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/ioc/SingletonComponent.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/ioc/SingletonComponent.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.ioc;
+package com.hivemq.client2.internal.mqtt.ioc;
import dagger.Component;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientAutoReconnectImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttAutoReconnectImpl.java
similarity index 50%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientAutoReconnectImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttAutoReconnectImpl.java
index 28be4ecdd..906bd3880 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientAutoReconnectImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttAutoReconnectImpl.java
@@ -14,13 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle;
+package com.hivemq.client2.internal.mqtt.lifecycle;
-import com.hivemq.client.mqtt.lifecycle.MqttClientAutoReconnect;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedContext;
-import com.hivemq.client.mqtt.lifecycle.MqttClientReconnector;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.lifecycle.MqttAutoReconnect;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectedContext;
+import com.hivemq.client2.mqtt.lifecycle.MqttReconnector;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Range;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
@@ -28,26 +29,28 @@
/**
* @author Silvio Giebl
*/
-public class MqttClientAutoReconnectImpl implements MqttClientAutoReconnect {
+public class MqttAutoReconnectImpl implements MqttAutoReconnect {
- static final long DEFAULT_START_DELAY_NANOS =
- TimeUnit.SECONDS.toNanos(MqttClientAutoReconnect.DEFAULT_START_DELAY_S);
- static final long DEFAULT_MAX_DELAY_NANOS = TimeUnit.SECONDS.toNanos(MqttClientAutoReconnect.DEFAULT_MAX_DELAY_S);
- public static final @NotNull MqttClientAutoReconnectImpl DEFAULT =
- new MqttClientAutoReconnectImpl(DEFAULT_START_DELAY_NANOS, DEFAULT_MAX_DELAY_NANOS);
+ static final long DEFAULT_START_DELAY_NANOS = TimeUnit.SECONDS.toNanos(MqttAutoReconnect.DEFAULT_START_DELAY_S);
+ static final long DEFAULT_MAX_DELAY_NANOS = TimeUnit.SECONDS.toNanos(MqttAutoReconnect.DEFAULT_MAX_DELAY_S);
+ public static final @NotNull MqttAutoReconnectImpl DEFAULT =
+ new MqttAutoReconnectImpl(DEFAULT_START_DELAY_NANOS, DEFAULT_MAX_DELAY_NANOS);
- private final long initialDelayNanos;
- private final long maxDelayNanos;
+ private final @Range(from = 1, to = Long.MAX_VALUE) long initialDelayNanos;
+ private final @Range(from = 0, to = Long.MAX_VALUE) long maxDelayNanos;
+
+ MqttAutoReconnectImpl(
+ final @Range(from = 1, to = Long.MAX_VALUE) long initialDelayNanos,
+ final @Range(from = 0, to = Long.MAX_VALUE) long maxDelayNanos) {
- MqttClientAutoReconnectImpl(final long initialDelayNanos, final long maxDelayNanos) {
this.initialDelayNanos = initialDelayNanos;
this.maxDelayNanos = maxDelayNanos;
}
@Override
- public void onDisconnected(final @NotNull MqttClientDisconnectedContext context) {
+ public void onDisconnected(final @NotNull MqttDisconnectedContext context) {
if (context.getSource() != MqttDisconnectSource.USER) {
- final MqttClientReconnector reconnector = context.getReconnector();
+ final MqttReconnector reconnector = context.getReconnector();
final long delay =
(long) Math.min(initialDelayNanos * Math.pow(2, reconnector.getAttempts()), maxDelayNanos);
final long randomDelay = (long) (delay / 4d / Integer.MAX_VALUE * ThreadLocalRandom.current().nextInt());
@@ -56,17 +59,17 @@ public void onDisconnected(final @NotNull MqttClientDisconnectedContext context)
}
@Override
- public long getInitialDelay(final @NotNull TimeUnit timeUnit) {
+ public @Range(from = 1, to = Long.MAX_VALUE) long getInitialDelay(final @NotNull TimeUnit timeUnit) {
return timeUnit.convert(initialDelayNanos, TimeUnit.NANOSECONDS);
}
@Override
- public long getMaxDelay(final @NotNull TimeUnit timeUnit) {
+ public @Range(from = 0, to = Long.MAX_VALUE) long getMaxDelay(final @NotNull TimeUnit timeUnit) {
return timeUnit.convert(maxDelayNanos, TimeUnit.NANOSECONDS);
}
@Override
- public MqttClientAutoReconnectImplBuilder.@NotNull Default extend() {
- return new MqttClientAutoReconnectImplBuilder.Default(this);
+ public MqttAutoReconnectImplBuilder.@NotNull Default extend() {
+ return new MqttAutoReconnectImplBuilder.Default(this);
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientAutoReconnectImplBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttAutoReconnectImplBuilder.java
similarity index 62%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientAutoReconnectImplBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttAutoReconnectImplBuilder.java
index dc7e866b6..1fbcf76be 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientAutoReconnectImplBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttAutoReconnectImplBuilder.java
@@ -14,12 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle;
+package com.hivemq.client2.internal.mqtt.lifecycle;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.lifecycle.MqttClientAutoReconnectBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.lifecycle.MqttAutoReconnectBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -27,14 +28,15 @@
/**
* @author Silvio Giebl
*/
-public abstract class MqttClientAutoReconnectImplBuilder> {
+public abstract class MqttAutoReconnectImplBuilder> {
- private long initialDelayNanos = MqttClientAutoReconnectImpl.DEFAULT_START_DELAY_NANOS;
- private long maxDelayNanos = MqttClientAutoReconnectImpl.DEFAULT_MAX_DELAY_NANOS;
+ private @Range(from = 1, to = Long.MAX_VALUE) long initialDelayNanos =
+ MqttAutoReconnectImpl.DEFAULT_START_DELAY_NANOS;
+ private @Range(from = 0, to = Long.MAX_VALUE) long maxDelayNanos = MqttAutoReconnectImpl.DEFAULT_MAX_DELAY_NANOS;
- MqttClientAutoReconnectImplBuilder() {}
+ MqttAutoReconnectImplBuilder() {}
- MqttClientAutoReconnectImplBuilder(final @Nullable MqttClientAutoReconnectImpl autoReconnect) {
+ MqttAutoReconnectImplBuilder(final @Nullable MqttAutoReconnectImpl autoReconnect) {
if (autoReconnect != null) {
initialDelayNanos = autoReconnect.getInitialDelay(TimeUnit.NANOSECONDS);
maxDelayNanos = autoReconnect.getMaxDelay(TimeUnit.NANOSECONDS);
@@ -61,16 +63,15 @@ public abstract class MqttClientAutoReconnectImplBuilder
- implements MqttClientAutoReconnectBuilder {
+ public static class Default extends MqttAutoReconnectImplBuilder implements MqttAutoReconnectBuilder {
public Default() {}
- Default(final @Nullable MqttClientAutoReconnectImpl autoReconnect) {
+ Default(final @Nullable MqttAutoReconnectImpl autoReconnect) {
super(autoReconnect);
}
@@ -80,14 +81,14 @@ public Default() {}
}
}
- public static class Nested extends MqttClientAutoReconnectImplBuilder>
- implements MqttClientAutoReconnectBuilder.Nested {
+ public static class Nested
extends MqttAutoReconnectImplBuilder>
+ implements MqttAutoReconnectBuilder.Nested {
- private final @NotNull Function super MqttClientAutoReconnectImpl, P> parentConsumer;
+ private final @NotNull Function super MqttAutoReconnectImpl, P> parentConsumer;
public Nested(
- final @Nullable MqttClientAutoReconnectImpl autoReconnect,
- final @NotNull Function super MqttClientAutoReconnectImpl, P> parentConsumer) {
+ final @Nullable MqttAutoReconnectImpl autoReconnect,
+ final @NotNull Function super MqttAutoReconnectImpl, P> parentConsumer) {
super(autoReconnect);
this.parentConsumer = parentConsumer;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientConnectedContextImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttConnectedContextImpl.java
similarity index 65%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientConnectedContextImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttConnectedContextImpl.java
index bd9ae8362..3181f617f 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientConnectedContextImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttConnectedContextImpl.java
@@ -14,38 +14,38 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle;
+package com.hivemq.client2.internal.mqtt.lifecycle;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.lifecycle.mqtt3.Mqtt3ClientConnectedContextView;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.mqtt.MqttVersion;
-import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedContext;
-import com.hivemq.client.mqtt.mqtt5.lifecycle.Mqtt5ClientConnectedContext;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.lifecycle.mqtt3.Mqtt3ConnectedContextView;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.mqtt.MqttVersion;
+import com.hivemq.client2.mqtt.lifecycle.MqttConnectedContext;
+import com.hivemq.client2.mqtt.mqtt5.lifecycle.Mqtt5ConnectedContext;
import org.jetbrains.annotations.NotNull;
/**
* @author Silvio Giebl
*/
-public class MqttClientConnectedContextImpl implements Mqtt5ClientConnectedContext {
+public class MqttConnectedContextImpl implements Mqtt5ConnectedContext {
- public static @NotNull MqttClientConnectedContext of(
+ public static @NotNull MqttConnectedContext of(
final @NotNull MqttClientConfig clientConfig,
final @NotNull MqttConnect connect,
final @NotNull MqttConnAck connAck) {
if (clientConfig.getMqttVersion() == MqttVersion.MQTT_3_1_1) {
- return Mqtt3ClientConnectedContextView.of(clientConfig, connect, connAck);
+ return Mqtt3ConnectedContextView.of(clientConfig, connect, connAck);
}
- return new MqttClientConnectedContextImpl(clientConfig, connect, connAck);
+ return new MqttConnectedContextImpl(clientConfig, connect, connAck);
}
private final @NotNull MqttClientConfig clientConfig;
private final @NotNull MqttConnect connect;
private final @NotNull MqttConnAck connAck;
- private MqttClientConnectedContextImpl(
+ private MqttConnectedContextImpl(
final @NotNull MqttClientConfig clientConfig,
final @NotNull MqttConnect connect,
final @NotNull MqttConnAck connAck) {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientDisconnectedContextImpl.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttDisconnectedContextImpl.java
similarity index 61%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientDisconnectedContextImpl.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttDisconnectedContextImpl.java
index 9296bea82..8ba674f2d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientDisconnectedContextImpl.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttDisconnectedContextImpl.java
@@ -14,43 +14,43 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle;
+package com.hivemq.client2.internal.mqtt.lifecycle;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.lifecycle.mqtt3.Mqtt3ClientDisconnectedContextView;
-import com.hivemq.client.mqtt.MqttVersion;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedContext;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt5.lifecycle.Mqtt5ClientDisconnectedContext;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.lifecycle.mqtt3.Mqtt3DisconnectedContextView;
+import com.hivemq.client2.mqtt.MqttVersion;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectedContext;
+import com.hivemq.client2.mqtt.mqtt5.lifecycle.Mqtt5DisconnectedContext;
import org.jetbrains.annotations.NotNull;
/**
* @author Silvio Giebl
*/
-public class MqttClientDisconnectedContextImpl implements Mqtt5ClientDisconnectedContext {
+public class MqttDisconnectedContextImpl implements Mqtt5DisconnectedContext {
- public static @NotNull MqttClientDisconnectedContext of(
+ public static @NotNull MqttDisconnectedContext of(
final @NotNull MqttClientConfig clientConfig,
final @NotNull MqttDisconnectSource source,
final @NotNull Throwable cause,
- final @NotNull MqttClientReconnector reconnector) {
+ final @NotNull MqttReconnector reconnector) {
if (clientConfig.getMqttVersion() == MqttVersion.MQTT_3_1_1) {
- return Mqtt3ClientDisconnectedContextView.of(clientConfig, source, cause, reconnector);
+ return Mqtt3DisconnectedContextView.of(clientConfig, source, cause, reconnector);
}
- return new MqttClientDisconnectedContextImpl(clientConfig, source, cause, reconnector);
+ return new MqttDisconnectedContextImpl(clientConfig, source, cause, reconnector);
}
private final @NotNull MqttClientConfig clientConfig;
private final @NotNull MqttDisconnectSource source;
private final @NotNull Throwable cause;
- private final @NotNull MqttClientReconnector reconnector;
+ private final @NotNull MqttReconnector reconnector;
- private MqttClientDisconnectedContextImpl(
+ private MqttDisconnectedContextImpl(
final @NotNull MqttClientConfig clientConfig,
final @NotNull MqttDisconnectSource source,
final @NotNull Throwable cause,
- final @NotNull MqttClientReconnector reconnector) {
+ final @NotNull MqttReconnector reconnector) {
this.clientConfig = clientConfig;
this.source = source;
@@ -74,7 +74,7 @@ private MqttClientDisconnectedContextImpl(
}
@Override
- public @NotNull MqttClientReconnector getReconnector() {
+ public @NotNull MqttReconnector getReconnector() {
return reconnector;
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientReconnector.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttReconnector.java
similarity index 67%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientReconnector.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttReconnector.java
index 48ee6b414..7d4af210c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/MqttClientReconnector.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/MqttReconnector.java
@@ -14,20 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle;
-
-import com.hivemq.client.internal.mqtt.MqttClientTransportConfigImpl;
-import com.hivemq.client.internal.mqtt.MqttClientTransportConfigImplBuilder;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectBuilder;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.MqttClientTransportConfig;
-import com.hivemq.client.mqtt.mqtt5.lifecycle.Mqtt5ClientReconnector;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5Connect;
+package com.hivemq.client2.internal.mqtt.lifecycle;
+
+import com.hivemq.client2.internal.mqtt.MqttTransportConfigImpl;
+import com.hivemq.client2.internal.mqtt.MqttTransportConfigImplBuilder;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectBuilder;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.MqttTransportConfig;
+import com.hivemq.client2.mqtt.mqtt5.lifecycle.Mqtt5Reconnector;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5Connect;
import io.netty.channel.EventLoop;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
@@ -36,25 +37,25 @@
/**
* @author Silvio Giebl
*/
-public class MqttClientReconnector implements Mqtt5ClientReconnector {
+public class MqttReconnector implements Mqtt5Reconnector {
private final @NotNull EventLoop eventLoop;
- private final int attempts;
+ private final @Range(from = 0, to = Integer.MAX_VALUE) int attempts;
private boolean reconnect = DEFAULT_RECONNECT;
private @Nullable CompletableFuture> future;
private boolean resubscribeIfSessionExpired = DEFAULT_RESUBSCRIBE_IF_SESSION_EXPIRED;
private boolean republishIfSessionExpired = DEFAULT_REPUBLISH_IF_SESSION_EXPIRED;
private long delayNanos = TimeUnit.MILLISECONDS.toNanos(DEFAULT_DELAY_MS);
- private @NotNull MqttClientTransportConfigImpl transportConfig;
+ private @NotNull MqttTransportConfigImpl transportConfig;
private @NotNull MqttConnect connect;
private boolean afterOnDisconnected;
- public MqttClientReconnector(
+ public MqttReconnector(
final @NotNull EventLoop eventLoop,
- final int attempts,
+ final @Range(from = 0, to = Integer.MAX_VALUE) int attempts,
final @NotNull MqttConnect connect,
- final @NotNull MqttClientTransportConfigImpl transportConfig) {
+ final @NotNull MqttTransportConfigImpl transportConfig) {
this.eventLoop = eventLoop;
this.attempts = attempts;
@@ -63,20 +64,20 @@ public MqttClientReconnector(
}
@Override
- public int getAttempts() {
+ public @Range(from = 0, to = Integer.MAX_VALUE) int getAttempts() {
checkInEventLoop();
return attempts;
}
@Override
- public @NotNull MqttClientReconnector reconnect(final boolean reconnect) {
+ public @NotNull MqttReconnector reconnect(final boolean reconnect) {
checkInEventLoop();
this.reconnect = reconnect;
return this;
}
@Override
- public @NotNull MqttClientReconnector reconnectWhen(
+ public @NotNull MqttReconnector reconnectWhen(
@Nullable CompletableFuture future, final @Nullable BiConsumer super T, ? super Throwable> callback) {
checkInOnDisconnected("reconnectWhen");
@@ -101,7 +102,7 @@ public boolean isReconnect() {
}
@Override
- public @NotNull MqttClientReconnector resubscribeIfSessionExpired(final boolean resubscribe) {
+ public @NotNull MqttReconnector resubscribeIfSessionExpired(final boolean resubscribe) {
checkInOnDisconnected("resubscribeIfSessionExpired");
resubscribeIfSessionExpired = resubscribe;
return this;
@@ -114,7 +115,7 @@ public boolean isResubscribeIfSessionExpired() {
}
@Override
- public @NotNull MqttClientReconnector republishIfSessionExpired(final boolean republish) {
+ public @NotNull MqttReconnector republishIfSessionExpired(final boolean republish) {
checkInOnDisconnected("republishIfSessionExpired");
republishIfSessionExpired = republish;
return this;
@@ -127,7 +128,7 @@ public boolean isRepublishIfSessionExpired() {
}
@Override
- public @NotNull MqttClientReconnector delay(final long delay, final @Nullable TimeUnit timeUnit) {
+ public @NotNull MqttReconnector delay(final long delay, final @Nullable TimeUnit timeUnit) {
checkInOnDisconnected("delay");
Checks.notNull(timeUnit, "Time unit");
this.delayNanos = timeUnit.toNanos(delay);
@@ -142,34 +143,34 @@ public long getDelay(final @NotNull TimeUnit timeUnit) {
}
@Override
- public @NotNull MqttClientReconnector transportConfig(final @Nullable MqttClientTransportConfig transportConfig) {
+ public @NotNull MqttReconnector transportConfig(final @Nullable MqttTransportConfig transportConfig) {
checkInEventLoop();
this.transportConfig =
- Checks.notImplemented(transportConfig, MqttClientTransportConfigImpl.class, "Transport config");
+ Checks.notImplemented(transportConfig, MqttTransportConfigImpl.class, "Transport config");
return this;
}
@Override
- public MqttClientTransportConfigImplBuilder.@NotNull Nested transportConfig() {
+ public MqttTransportConfigImplBuilder.@NotNull Nested transportConfigWith() {
checkInEventLoop();
- return new MqttClientTransportConfigImplBuilder.Nested<>(transportConfig, this::transportConfig);
+ return new MqttTransportConfigImplBuilder.Nested<>(transportConfig, this::transportConfig);
}
@Override
- public @NotNull MqttClientTransportConfigImpl getTransportConfig() {
+ public @NotNull MqttTransportConfigImpl getTransportConfig() {
checkInEventLoop();
return transportConfig;
}
@Override
- public @NotNull MqttClientReconnector connect(final @Nullable Mqtt5Connect connect) {
+ public @NotNull MqttReconnector connect(final @Nullable Mqtt5Connect connect) {
checkInEventLoop();
this.connect = MqttChecks.connect(connect);
return this;
}
@Override
- public MqttConnectBuilder.@NotNull Nested connectWith() {
+ public MqttConnectBuilder.@NotNull Nested connectWith() {
checkInEventLoop();
return new MqttConnectBuilder.Nested<>(connect, this::connect);
}
@@ -185,7 +186,7 @@ public void afterOnDisconnected() {
}
private void checkInEventLoop() {
- Checks.state(eventLoop.inEventLoop(), "MqttClientReconnector must be called from the eventLoop.");
+ Checks.state(eventLoop.inEventLoop(), "MqttReconnector must be called from the eventLoop.");
}
private void checkInOnDisconnected(final @NotNull String method) {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientConnectedContextView.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3ConnectedContextView.java
similarity index 66%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientConnectedContextView.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3ConnectedContextView.java
index aac46e0f5..8f6158647 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientConnectedContextView.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3ConnectedContextView.java
@@ -14,29 +14,29 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle.mqtt3;
+package com.hivemq.client2.internal.mqtt.lifecycle.mqtt3;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.mqtt.message.connect.connack.mqtt3.Mqtt3ConnAckView;
-import com.hivemq.client.internal.mqtt.message.connect.mqtt3.Mqtt3ConnectView;
-import com.hivemq.client.internal.mqtt.mqtt3.Mqtt3ClientConfigView;
-import com.hivemq.client.mqtt.lifecycle.MqttClientConnectedContext;
-import com.hivemq.client.mqtt.mqtt3.lifecycle.Mqtt3ClientConnectedContext;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.mqtt3.Mqtt3ConnAckView;
+import com.hivemq.client2.internal.mqtt.message.connect.mqtt3.Mqtt3ConnectView;
+import com.hivemq.client2.internal.mqtt.mqtt3.Mqtt3ClientConfigView;
+import com.hivemq.client2.mqtt.lifecycle.MqttConnectedContext;
+import com.hivemq.client2.mqtt.mqtt3.lifecycle.Mqtt3ConnectedContext;
import org.jetbrains.annotations.NotNull;
/**
* @author Silvio Giebl
*/
-public class Mqtt3ClientConnectedContextView implements Mqtt3ClientConnectedContext {
+public class Mqtt3ConnectedContextView implements Mqtt3ConnectedContext {
- public static @NotNull MqttClientConnectedContext of(
+ public static @NotNull MqttConnectedContext of(
final @NotNull MqttClientConfig clientConfig,
final @NotNull MqttConnect connect,
final @NotNull MqttConnAck connAck) {
- return new Mqtt3ClientConnectedContextView(
+ return new Mqtt3ConnectedContextView(
new Mqtt3ClientConfigView(clientConfig), Mqtt3ConnectView.of(connect), Mqtt3ConnAckView.of(connAck));
}
@@ -44,7 +44,7 @@ public class Mqtt3ClientConnectedContextView implements Mqtt3ClientConnectedCont
private final @NotNull Mqtt3ConnectView connect;
private final @NotNull Mqtt3ConnAckView connAck;
- private Mqtt3ClientConnectedContextView(
+ private Mqtt3ConnectedContextView(
final @NotNull Mqtt3ClientConfigView clientConfig,
final @NotNull Mqtt3ConnectView connect,
final @NotNull Mqtt3ConnAckView connAck) {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientDisconnectedContextView.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3DisconnectedContextView.java
similarity index 58%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientDisconnectedContextView.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3DisconnectedContextView.java
index bf65d8596..a34c3a412 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientDisconnectedContextView.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3DisconnectedContextView.java
@@ -14,42 +14,42 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle.mqtt3;
+package com.hivemq.client2.internal.mqtt.lifecycle.mqtt3;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.exceptions.mqtt3.Mqtt3ExceptionFactory;
-import com.hivemq.client.internal.mqtt.lifecycle.MqttClientReconnector;
-import com.hivemq.client.internal.mqtt.mqtt3.Mqtt3ClientConfigView;
-import com.hivemq.client.mqtt.lifecycle.MqttClientDisconnectedContext;
-import com.hivemq.client.mqtt.lifecycle.MqttDisconnectSource;
-import com.hivemq.client.mqtt.mqtt3.lifecycle.Mqtt3ClientDisconnectedContext;
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.exceptions.mqtt3.Mqtt3ExceptionFactory;
+import com.hivemq.client2.internal.mqtt.lifecycle.MqttReconnector;
+import com.hivemq.client2.internal.mqtt.mqtt3.Mqtt3ClientConfigView;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectSource;
+import com.hivemq.client2.mqtt.lifecycle.MqttDisconnectedContext;
+import com.hivemq.client2.mqtt.mqtt3.lifecycle.Mqtt3DisconnectedContext;
import org.jetbrains.annotations.NotNull;
/**
* @author Silvio Giebl
*/
-public class Mqtt3ClientDisconnectedContextView implements Mqtt3ClientDisconnectedContext {
+public class Mqtt3DisconnectedContextView implements Mqtt3DisconnectedContext {
- public static @NotNull MqttClientDisconnectedContext of(
+ public static @NotNull MqttDisconnectedContext of(
final @NotNull MqttClientConfig clientConfig,
final @NotNull MqttDisconnectSource source,
final @NotNull Throwable cause,
- final @NotNull MqttClientReconnector reconnector) {
+ final @NotNull MqttReconnector reconnector) {
- return new Mqtt3ClientDisconnectedContextView(new Mqtt3ClientConfigView(clientConfig), source,
- Mqtt3ExceptionFactory.map(cause), new Mqtt3ClientReconnectorView(reconnector));
+ return new Mqtt3DisconnectedContextView(new Mqtt3ClientConfigView(clientConfig), source,
+ Mqtt3ExceptionFactory.map(cause), new Mqtt3ReconnectorView(reconnector));
}
private final @NotNull Mqtt3ClientConfigView clientConfig;
private final @NotNull MqttDisconnectSource source;
private final @NotNull Throwable cause;
- private final @NotNull Mqtt3ClientReconnectorView reconnector;
+ private final @NotNull Mqtt3ReconnectorView reconnector;
- private Mqtt3ClientDisconnectedContextView(
+ private Mqtt3DisconnectedContextView(
final @NotNull Mqtt3ClientConfigView clientConfig,
final @NotNull MqttDisconnectSource source,
final @NotNull Throwable cause,
- final @NotNull Mqtt3ClientReconnectorView reconnector) {
+ final @NotNull Mqtt3ReconnectorView reconnector) {
this.clientConfig = clientConfig;
this.source = source;
@@ -73,7 +73,7 @@ private Mqtt3ClientDisconnectedContextView(
}
@Override
- public @NotNull Mqtt3ClientReconnectorView getReconnector() {
+ public @NotNull Mqtt3ReconnectorView getReconnector() {
return reconnector;
}
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientReconnectorView.java b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3ReconnectorView.java
similarity index 56%
rename from src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientReconnectorView.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3ReconnectorView.java
index d56bf3763..510970ffb 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/lifecycle/mqtt3/Mqtt3ClientReconnectorView.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/lifecycle/mqtt3/Mqtt3ReconnectorView.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.lifecycle.mqtt3;
-
-import com.hivemq.client.internal.mqtt.MqttClientTransportConfigImpl;
-import com.hivemq.client.internal.mqtt.MqttClientTransportConfigImplBuilder;
-import com.hivemq.client.internal.mqtt.lifecycle.MqttClientReconnector;
-import com.hivemq.client.internal.mqtt.message.connect.mqtt3.Mqtt3ConnectView;
-import com.hivemq.client.internal.mqtt.message.connect.mqtt3.Mqtt3ConnectViewBuilder;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.mqtt.MqttClientTransportConfig;
-import com.hivemq.client.mqtt.mqtt3.lifecycle.Mqtt3ClientReconnector;
-import com.hivemq.client.mqtt.mqtt3.message.connect.Mqtt3Connect;
+package com.hivemq.client2.internal.mqtt.lifecycle.mqtt3;
+
+import com.hivemq.client2.internal.mqtt.MqttTransportConfigImpl;
+import com.hivemq.client2.internal.mqtt.MqttTransportConfigImplBuilder;
+import com.hivemq.client2.internal.mqtt.lifecycle.MqttReconnector;
+import com.hivemq.client2.internal.mqtt.message.connect.mqtt3.Mqtt3ConnectView;
+import com.hivemq.client2.internal.mqtt.message.connect.mqtt3.Mqtt3ConnectViewBuilder;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.mqtt.MqttTransportConfig;
+import com.hivemq.client2.mqtt.mqtt3.lifecycle.Mqtt3Reconnector;
+import com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3Connect;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -35,22 +35,22 @@
/**
* @author Silvio Giebl
*/
-public class Mqtt3ClientReconnectorView implements Mqtt3ClientReconnector {
+public class Mqtt3ReconnectorView implements Mqtt3Reconnector {
- private final @NotNull MqttClientReconnector delegate;
+ private final @NotNull MqttReconnector delegate;
- Mqtt3ClientReconnectorView(final @NotNull MqttClientReconnector delegate) {
+ Mqtt3ReconnectorView(final @NotNull MqttReconnector delegate) {
this.delegate = delegate;
}
@Override
- public @NotNull Mqtt3ClientReconnectorView reconnect(final boolean reconnect) {
+ public @NotNull Mqtt3ReconnectorView reconnect(final boolean reconnect) {
delegate.reconnect(reconnect);
return this;
}
@Override
- public @NotNull Mqtt3ClientReconnectorView reconnectWhen(
+ public @NotNull Mqtt3ReconnectorView reconnectWhen(
final @Nullable CompletableFuture future,
final @Nullable BiConsumer super T, ? super Throwable> callback) {
@@ -64,7 +64,7 @@ public boolean isReconnect() {
}
@Override
- public @NotNull Mqtt3ClientReconnectorView resubscribeIfSessionExpired(final boolean resubscribe) {
+ public @NotNull Mqtt3ReconnectorView resubscribeIfSessionExpired(final boolean resubscribe) {
delegate.resubscribeIfSessionExpired(resubscribe);
return this;
}
@@ -75,7 +75,7 @@ public boolean isResubscribeIfSessionExpired() {
}
@Override
- public @NotNull Mqtt3ClientReconnectorView republishIfSessionExpired(final boolean republish) {
+ public @NotNull Mqtt3ReconnectorView republishIfSessionExpired(final boolean republish) {
delegate.republishIfSessionExpired(republish);
return this;
}
@@ -91,7 +91,7 @@ public int getAttempts() {
}
@Override
- public @NotNull Mqtt3ClientReconnectorView delay(final long delay, final @Nullable TimeUnit timeUnit) {
+ public @NotNull Mqtt3ReconnectorView delay(final long delay, final @Nullable TimeUnit timeUnit) {
delegate.delay(delay, timeUnit);
return this;
}
@@ -102,31 +102,29 @@ public long getDelay(final @NotNull TimeUnit timeUnit) {
}
@Override
- public @NotNull Mqtt3ClientReconnectorView transportConfig(
- final @Nullable MqttClientTransportConfig transportConfig) {
-
+ public @NotNull Mqtt3ReconnectorView transportConfig(final @Nullable MqttTransportConfig transportConfig) {
delegate.transportConfig(transportConfig);
return this;
}
@Override
- public MqttClientTransportConfigImplBuilder.@NotNull Nested transportConfig() {
- return new MqttClientTransportConfigImplBuilder.Nested<>(getTransportConfig(), this::transportConfig);
+ public MqttTransportConfigImplBuilder.@NotNull Nested transportConfigWith() {
+ return new MqttTransportConfigImplBuilder.Nested<>(getTransportConfig(), this::transportConfig);
}
@Override
- public @NotNull MqttClientTransportConfigImpl getTransportConfig() {
+ public @NotNull MqttTransportConfigImpl getTransportConfig() {
return delegate.getTransportConfig();
}
@Override
- public @NotNull Mqtt3ClientReconnectorView connect(final @Nullable Mqtt3Connect connect) {
+ public @NotNull Mqtt3ReconnectorView connect(final @Nullable Mqtt3Connect connect) {
delegate.connect(MqttChecks.connect(connect));
return this;
}
@Override
- public Mqtt3ConnectViewBuilder.@NotNull Nested connectWith() {
+ public Mqtt3ConnectViewBuilder.@NotNull Nested connectWith() {
return new Mqtt3ConnectViewBuilder.Nested<>(getConnect(), this::connect);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttMessage.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttMessage.java
similarity index 84%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/MqttMessage.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/MqttMessage.java
index 373e7acc5..7b498242c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttMessage.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttMessage.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message;
+package com.hivemq.client2.internal.mqtt.message;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5Message;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5Message;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttMessageWithUserProperties.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttMessageWithUserProperties.java
similarity index 91%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/MqttMessageWithUserProperties.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/MqttMessageWithUserProperties.java
index 897a88879..4a2150619 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttMessageWithUserProperties.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttMessageWithUserProperties.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message;
-
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.util.StringUtil;
-import com.hivemq.client.internal.util.collections.ImmutableList;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5ReasonCode;
+package com.hivemq.client2.internal.mqtt.message;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.util.StringUtil;
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5ReasonCode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -165,11 +165,11 @@ public abstract static class WithCodesAndId extends W
implements MqttMessage.WithId {
private final int packetIdentifier;
- private final @NotNull ImmutableList<@NotNull R> reasonCodes;
+ private final @NotNull ImmutableList reasonCodes;
protected WithCodesAndId(
final int packetIdentifier,
- final @NotNull ImmutableList<@NotNull R> reasonCodes,
+ final @NotNull ImmutableList reasonCodes,
final @Nullable MqttUtf8StringImpl reasonString,
final @NotNull MqttUserPropertiesImpl userProperties) {
@@ -183,7 +183,7 @@ public int getPacketIdentifier() {
return packetIdentifier;
}
- public @NotNull ImmutableList<@NotNull R> getReasonCodes() {
+ public @NotNull ImmutableList getReasonCodes() {
return reasonCodes;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttProperty.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttProperty.java
similarity index 97%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/MqttProperty.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/MqttProperty.java
index dc8cbf3ba..21656b89a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttProperty.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttProperty.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message;
+package com.hivemq.client2.internal.mqtt.message;
/**
* All possible MQTT properties and its byte code according to the MQTT 5 specification.
diff --git a/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttReasonCodes.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttReasonCodes.java
new file mode 100644
index 000000000..958915e8f
--- /dev/null
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttReasonCodes.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2018-present HiveMQ and the HiveMQ Community
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hivemq.client2.internal.mqtt.message;
+
+import com.hivemq.client2.internal.util.collections.ImmutableList;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5ReasonCode;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * MQTT Reason Codes according to the MQTT 5 specification.
+ *
+ * @author Silvio Giebl
+ */
+public class MqttReasonCodes {
+
+ public static final int SUCCESS = 0x00;
+ public static final int GRANTED_QOS_1 = 0x01;
+ public static final int GRANTED_QOS_2 = 0x02;
+ public static final int DISCONNECT_WITH_WILL_MESSAGE = 0x04;
+ public static final int NO_MATCHING_SUBSCRIBERS = 0x10;
+ public static final int NO_SUBSCRIPTIONS_EXISTED = 0x11;
+ public static final int CONTINUE_AUTHENTICATION = 0x18;
+ public static final int REAUTHENTICATE = 0x19;
+ public static final int UNSPECIFIED_ERROR = 0x80;
+ public static final int MALFORMED_PACKET = 0x81;
+ public static final int PROTOCOL_ERROR = 0x82;
+ public static final int IMPLEMENTATION_SPECIFIC_ERROR = 0x83;
+ public static final int UNSUPPORTED_PROTOCOL_VERSION = 0x84;
+ public static final int CLIENT_IDENTIFIER_NOT_VALID = 0x85;
+ public static final int BAD_USER_NAME_OR_PASSWORD = 0x86;
+ public static final int NOT_AUTHORIZED = 0x87;
+ public static final int SERVER_UNAVAILABLE = 0x88;
+ public static final int SERVER_BUSY = 0x89;
+ public static final int BANNED = 0x8A;
+ public static final int SERVER_SHUTTING_DOWN = 0x8B;
+ public static final int BAD_AUTHENTICATION_METHOD = 0x8C;
+ public static final int KEEP_ALIVE_TIMEOUT = 0x8D;
+ public static final int SESSION_TAKEN_OVER = 0x8E;
+ public static final int TOPIC_FILTER_INVALID = 0x8F;
+ public static final int TOPIC_NAME_INVALID = 0x90;
+ public static final int PACKET_IDENTIFIER_IN_USE = 0x91;
+ public static final int PACKET_IDENTIFIER_NOT_FOUND = 0x92;
+ public static final int RECEIVE_MAXIMUM_EXCEEDED = 0x93;
+ public static final int TOPIC_ALIAS_INVALID = 0x94;
+ public static final int PACKET_TOO_LARGE = 0x95;
+ public static final int MESSAGE_RATE_TOO_HIGH = 0x96;
+ public static final int QUOTA_EXCEEDED = 0x97;
+ public static final int ADMINISTRATIVE_ACTION = 0x98;
+ public static final int PAYLOAD_FORMAT_INVALID = 0x99;
+ public static final int RETAIN_NOT_SUPPORTED = 0x9A;
+ public static final int QOS_NOT_SUPPORTED = 0x9B;
+ public static final int USE_ANOTHER_SERVER = 0x9C;
+ public static final int SERVER_MOVED = 0x9D;
+ public static final int SHARED_SUBSCRIPTIONS_NOT_SUPPORTED = 0x9E;
+ public static final int CONNECTION_RATE_EXCEEDED = 0x9F;
+ public static final int MAXIMUM_CONNECT_TIME = 0xA0;
+ public static final int SUBSCRIPTION_IDENTIFIERS_NOT_SUPPORTED = 0xA1;
+ public static final int WILDCARD_SUBSCRIPTIONS_NOT_SUPPORTED = 0xA2;
+
+ public static boolean allErrors(final @NotNull ImmutableList extends Mqtt5ReasonCode> reasonCodes) {
+ //noinspection ForLoopReplaceableByForEach
+ for (int i = 0; i < reasonCodes.size(); i++) {
+ if (!reasonCodes.get(i).isError()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private MqttReasonCodes() {}
+}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttStatefulMessage.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttStatefulMessage.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/MqttStatefulMessage.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/MqttStatefulMessage.java
index 2c50ff506..a52332453 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/MqttStatefulMessage.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/MqttStatefulMessage.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message;
+package com.hivemq.client2.internal.mqtt.message;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.mqtt.mqtt5.message.Mqtt5MessageType;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.mqtt.mqtt5.message.Mqtt5MessageType;
import org.jetbrains.annotations.NotNull;
/**
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuth.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuth.java
similarity index 82%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuth.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuth.java
index 7d7a44cad..8983d708a 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuth.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuth.java
@@ -14,18 +14,18 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth;
+package com.hivemq.client2.internal.mqtt.message.auth;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.MqttMessageWithUserProperties;
-import com.hivemq.client.internal.util.ByteBufferUtil;
-import com.hivemq.client.internal.util.StringUtil;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5Auth;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.MqttMessageWithUserProperties;
+import com.hivemq.client2.internal.util.ByteBufferUtil;
+import com.hivemq.client2.internal.util.StringUtil;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5Auth;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import java.nio.ByteBuffer;
import java.util.Objects;
@@ -34,7 +34,7 @@
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttAuth extends MqttMessageWithUserProperties.WithReason.WithCode
implements Mqtt5Auth {
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuthBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuthBuilder.java
similarity index 80%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuthBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuthBuilder.java
index 9294f60fa..8d5061c1c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuthBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuthBuilder.java
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth;
+package com.hivemq.client2.internal.mqtt.message.auth;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImplBuilder;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthBuilder;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImplBuilder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthBuilder;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5AuthReasonCode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -79,7 +79,7 @@ public MqttAuthBuilder(final @NotNull Mqtt5AuthReasonCode reasonCode, final @Not
}
@Override
- public MqttUserPropertiesImplBuilder.@NotNull Nested userProperties() {
+ public MqttUserPropertiesImplBuilder.@NotNull Nested userPropertiesWith() {
return new MqttUserPropertiesImplBuilder.Nested<>(userProperties, this::userProperties);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuthProperty.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuthProperty.java
similarity index 90%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuthProperty.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuthProperty.java
index 8e7243954..e8c74354d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttAuthProperty.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttAuthProperty.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth;
+package com.hivemq.client2.internal.mqtt.message.auth;
-import com.hivemq.client.internal.mqtt.message.MqttProperty;
+import com.hivemq.client2.internal.mqtt.message.MqttProperty;
/**
* All possible MQTT AUTH properties and its byte code according to the MQTT 5 specification.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttEnhancedAuth.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttEnhancedAuth.java
similarity index 87%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttEnhancedAuth.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttEnhancedAuth.java
index a5bf5ad82..21f94aa47 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttEnhancedAuth.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttEnhancedAuth.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth;
+package com.hivemq.client2.internal.mqtt.message.auth;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.util.ByteBufferUtil;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuth;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.util.ByteBufferUtil;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuth;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import java.nio.ByteBuffer;
import java.util.Objects;
@@ -30,7 +30,7 @@
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttEnhancedAuth implements Mqtt5EnhancedAuth {
private final @NotNull MqttUtf8StringImpl method;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttEnhancedAuthBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttEnhancedAuthBuilder.java
similarity index 83%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttEnhancedAuthBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttEnhancedAuthBuilder.java
index f842235e0..b1b4701d9 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttEnhancedAuthBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttEnhancedAuthBuilder.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth;
+package com.hivemq.client2.internal.mqtt.message.auth;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuthBuilder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuthBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttSimpleAuth.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttSimpleAuth.java
similarity index 87%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttSimpleAuth.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttSimpleAuth.java
index 3a2f46d1c..d9e955728 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttSimpleAuth.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttSimpleAuth.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth;
+package com.hivemq.client2.internal.mqtt.message.auth;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.util.ByteBufferUtil;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.util.ByteBufferUtil;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import java.nio.ByteBuffer;
import java.util.Objects;
@@ -31,7 +31,7 @@
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttSimpleAuth implements Mqtt5SimpleAuth {
private final @Nullable MqttUtf8StringImpl username;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttSimpleAuthBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttSimpleAuthBuilder.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttSimpleAuthBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttSimpleAuthBuilder.java
index f75f3984a..aa2e8346d 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/MqttSimpleAuthBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/MqttSimpleAuthBuilder.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth;
+package com.hivemq.client2.internal.mqtt.message.auth;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5SimpleAuthBuilder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5SimpleAuthBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthView.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthView.java
similarity index 85%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthView.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthView.java
index 2b13c3b6c..1a14806df 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthView.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthView.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth.mqtt3;
-
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt3.message.auth.Mqtt3SimpleAuth;
+package com.hivemq.client2.internal.mqtt.message.auth.mqtt3;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt3.message.auth.Mqtt3SimpleAuth;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import java.nio.ByteBuffer;
import java.util.Optional;
@@ -31,7 +31,7 @@
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class Mqtt3SimpleAuthView implements Mqtt3SimpleAuth {
private static @NotNull MqttSimpleAuth delegate(
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthViewBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthViewBuilder.java
similarity index 88%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthViewBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthViewBuilder.java
index 208858663..921cb43b8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthViewBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/auth/mqtt3/Mqtt3SimpleAuthViewBuilder.java
@@ -14,13 +14,13 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.auth.mqtt3;
+package com.hivemq.client2.internal.mqtt.message.auth.mqtt3;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt3.message.auth.Mqtt3SimpleAuthBuilder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt3.message.auth.Mqtt3SimpleAuthBuilder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAck.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAck.java
similarity index 81%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAck.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAck.java
index 582e38938..1caf8c551 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAck.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAck.java
@@ -14,21 +14,23 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect.connack;
-
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttClientIdentifierImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUtf8StringImpl;
-import com.hivemq.client.internal.mqtt.message.MqttMessageWithUserProperties;
-import com.hivemq.client.internal.util.StringUtil;
-import com.hivemq.client.mqtt.datatypes.MqttClientIdentifier;
-import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuth;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAckReasonCode;
+package com.hivemq.client2.internal.mqtt.message.connect;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttClientIdentifierImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUtf8StringImpl;
+import com.hivemq.client2.internal.mqtt.message.MqttMessageWithUserProperties;
+import com.hivemq.client2.internal.util.StringUtil;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.datatypes.MqttClientIdentifier;
+import com.hivemq.client2.mqtt.datatypes.MqttUtf8String;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5EnhancedAuth;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAck;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAckReasonCode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
import java.util.Objects;
import java.util.Optional;
@@ -38,7 +40,7 @@
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttConnAck extends MqttMessageWithUserProperties.WithReason.WithCode
implements Mqtt5ConnAck {
@@ -46,8 +48,8 @@ public class MqttConnAck extends MqttMessageWithUserProperties.WithReason.WithCo
public static final int KEEP_ALIVE_FROM_CONNECT = -1;
private final boolean sessionPresent;
- private final long sessionExpiryInterval;
- private final int serverKeepAlive;
+ private final @Range(from = -1, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long sessionExpiryInterval;
+ private final @Range(from = -1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int serverKeepAlive;
private final @Nullable MqttClientIdentifierImpl assignedClientIdentifier;
private final @Nullable Mqtt5EnhancedAuth enhancedAuth;
private final @NotNull MqttConnAckRestrictions restrictions;
@@ -57,8 +59,8 @@ public class MqttConnAck extends MqttMessageWithUserProperties.WithReason.WithCo
public MqttConnAck(
final @NotNull Mqtt5ConnAckReasonCode reasonCode,
final boolean sessionPresent,
- final long sessionExpiryInterval,
- final int serverKeepAlive,
+ final @Range(from = -1, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long sessionExpiryInterval,
+ final @Range(from = -1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int serverKeepAlive,
final @Nullable MqttClientIdentifierImpl assignedClientIdentifier,
final @Nullable Mqtt5EnhancedAuth enhancedAuth,
final @NotNull MqttConnAckRestrictions restrictions,
@@ -89,7 +91,7 @@ public boolean isSessionPresent() {
OptionalLong.of(sessionExpiryInterval);
}
- public long getRawSessionExpiryInterval() {
+ public @Range(from = -1, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long getRawSessionExpiryInterval() {
return sessionExpiryInterval;
}
@@ -98,7 +100,7 @@ public long getRawSessionExpiryInterval() {
return (serverKeepAlive == KEEP_ALIVE_FROM_CONNECT) ? OptionalInt.empty() : OptionalInt.of(serverKeepAlive);
}
- public int getRawServerKeepAlive() {
+ public @Range(from = -1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getRawServerKeepAlive() {
return serverKeepAlive;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAckProperty.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAckProperty.java
similarity index 94%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAckProperty.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAckProperty.java
index 6d734ca6e..05e58a1d1 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAckProperty.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAckProperty.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect.connack;
+package com.hivemq.client2.internal.mqtt.message.connect;
-import com.hivemq.client.internal.mqtt.message.MqttProperty;
+import com.hivemq.client2.internal.mqtt.message.MqttProperty;
/**
* All possible MQTT CONNACK properties and its byte code according to the MQTT 5 specification.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAckRestrictions.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAckRestrictions.java
similarity index 78%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAckRestrictions.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAckRestrictions.java
index 6489af4f9..963269d56 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/MqttConnAckRestrictions.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnAckRestrictions.java
@@ -14,18 +14,21 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect.connack;
+package com.hivemq.client2.internal.mqtt.message.connect;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.mqtt.datatypes.MqttQos;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAckRestrictions;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.datatypes.MqttQos;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAckRestrictions;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttConnAckRestrictions implements Mqtt5ConnAckRestrictions {
public static final @NotNull MqttConnAckRestrictions DEFAULT =
@@ -34,9 +37,9 @@ public class MqttConnAckRestrictions implements Mqtt5ConnAckRestrictions {
DEFAULT_WILDCARD_SUBSCRIPTION_AVAILABLE, DEFAULT_SHARED_SUBSCRIPTION_AVAILABLE,
DEFAULT_SUBSCRIPTION_IDENTIFIERS_AVAILABLE);
- private final int receiveMaximum;
- private final int maximumPacketSize;
- private final int topicAliasMaximum;
+ private final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int receiveMaximum;
+ private final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int maximumPacketSize;
+ private final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int topicAliasMaximum;
private final @NotNull MqttQos maximumQos;
private final boolean retainAvailable;
private final boolean wildcardSubscriptionAvailable;
@@ -44,9 +47,9 @@ public class MqttConnAckRestrictions implements Mqtt5ConnAckRestrictions {
private final boolean subscriptionIdentifiersAvailable;
public MqttConnAckRestrictions(
- final int receiveMaximum,
- final int maximumPacketSize,
- final int topicAliasMaximum,
+ final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int receiveMaximum,
+ final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int maximumPacketSize,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int topicAliasMaximum,
final @NotNull MqttQos maximumQos,
final boolean retainAvailable,
final boolean wildcardSubscriptionAvailable,
@@ -64,17 +67,17 @@ public MqttConnAckRestrictions(
}
@Override
- public int getReceiveMaximum() {
+ public @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getReceiveMaximum() {
return receiveMaximum;
}
@Override
- public int getMaximumPacketSize() {
+ public @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int getMaximumPacketSize() {
return maximumPacketSize;
}
@Override
- public int getTopicAliasMaximum() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getTopicAliasMaximum() {
return topicAliasMaximum;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnect.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnect.java
similarity index 80%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnect.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnect.java
index 1933a069b..72fb031c2 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnect.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnect.java
@@ -14,23 +14,25 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect;
-
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.MqttClientConfig;
-import com.hivemq.client.internal.mqtt.datatypes.MqttClientIdentifierImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.message.MqttMessageWithUserProperties;
-import com.hivemq.client.internal.mqtt.message.auth.MqttEnhancedAuth;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.internal.util.StringUtil;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5Connect;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5WillPublish;
+package com.hivemq.client2.internal.mqtt.message.connect;
+
+import com.hivemq.client2.internal.mqtt.MqttClientConfig;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttClientIdentifierImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.message.MqttMessageWithUserProperties;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttEnhancedAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.internal.util.StringUtil;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5Connect;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5WillPublish;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
import java.util.Objects;
import java.util.Optional;
@@ -38,25 +40,25 @@
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttConnect extends MqttMessageWithUserProperties implements Mqtt5Connect {
public static final @NotNull MqttConnect DEFAULT =
new MqttConnect(DEFAULT_KEEP_ALIVE, DEFAULT_CLEAN_START, DEFAULT_SESSION_EXPIRY_INTERVAL,
MqttConnectRestrictions.DEFAULT, null, null, null, MqttUserPropertiesImpl.NO_USER_PROPERTIES);
- private final int keepAlive;
+ private final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int keepAlive;
private final boolean cleanStart;
- private final long sessionExpiryInterval;
+ private final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long sessionExpiryInterval;
private final @NotNull MqttConnectRestrictions restrictions;
private final @Nullable MqttSimpleAuth simpleAuth;
private final @Nullable Mqtt5EnhancedAuthMechanism enhancedAuthMechanism;
private final @Nullable MqttWillPublish willPublish;
public MqttConnect(
- final int keepAlive,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int keepAlive,
final boolean cleanStart,
- final long sessionExpiryInterval,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long sessionExpiryInterval,
final @NotNull MqttConnectRestrictions restrictions,
final @Nullable MqttSimpleAuth simpleAuth,
final @Nullable Mqtt5EnhancedAuthMechanism enhancedAuthMechanism,
@@ -74,7 +76,7 @@ public MqttConnect(
}
@Override
- public int getKeepAlive() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getKeepAlive() {
return keepAlive;
}
@@ -84,7 +86,7 @@ public boolean isCleanStart() {
}
@Override
- public long getSessionExpiryInterval() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long getSessionExpiryInterval() {
return sessionExpiryInterval;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectBuilder.java
similarity index 79%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectBuilder.java
index 884c9b242..080dcc6a8 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectBuilder.java
@@ -14,25 +14,27 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect;
-
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImplBuilder;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuthBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublish;
-import com.hivemq.client.internal.mqtt.message.publish.MqttPublishBuilder;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
-import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
-import com.hivemq.client.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5ConnectBuilder;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5ConnectRestrictions;
-import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
+package com.hivemq.client2.internal.mqtt.message.connect;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImplBuilder;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuthBuilder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttPublishBuilder;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.mqtt5.auth.Mqtt5EnhancedAuthMechanism;
+import com.hivemq.client2.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
+import com.hivemq.client2.mqtt.mqtt5.message.auth.Mqtt5SimpleAuth;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnectBuilder;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnectRestrictions;
+import com.hivemq.client2.mqtt.mqtt5.message.publish.Mqtt5Publish;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.util.function.Function;
@@ -41,9 +43,11 @@
*/
public abstract class MqttConnectBuilder> {
- private int keepAlive = MqttConnect.DEFAULT_KEEP_ALIVE;
+ private @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int keepAlive =
+ MqttConnect.DEFAULT_KEEP_ALIVE;
private boolean cleanStart = MqttConnect.DEFAULT_CLEAN_START;
- private long sessionExpiryInterval = MqttConnect.DEFAULT_SESSION_EXPIRY_INTERVAL;
+ private @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_INT_MAX_VALUE) long sessionExpiryInterval =
+ MqttConnect.DEFAULT_SESSION_EXPIRY_INTERVAL;
private @NotNull MqttConnectRestrictions restrictions = MqttConnectRestrictions.DEFAULT;
private @Nullable MqttSimpleAuth simpleAuth;
private @Nullable Mqtt5EnhancedAuthMechanism enhancedAuthMechanism;
@@ -95,7 +99,7 @@ public abstract class MqttConnectBuilder> {
return self();
}
- public MqttConnectRestrictionsBuilder.@NotNull Nested restrictions() {
+ public MqttConnectRestrictionsBuilder.@NotNull Nested restrictionsWith() {
return new MqttConnectRestrictionsBuilder.Nested<>(restrictions, this::restrictions);
}
@@ -104,7 +108,7 @@ public abstract class MqttConnectBuilder> {
return self();
}
- public MqttSimpleAuthBuilder.@NotNull Nested simpleAuth() {
+ public MqttSimpleAuthBuilder.@NotNull Nested simpleAuthWith() {
return new MqttSimpleAuthBuilder.Nested<>(this::simpleAuth);
}
@@ -119,7 +123,7 @@ public abstract class MqttConnectBuilder> {
return self();
}
- public MqttPublishBuilder.@NotNull WillNested willPublish() {
+ public MqttPublishBuilder.@NotNull WillNested willPublishWith() {
return new MqttPublishBuilder.WillNested<>(this::willPublish);
}
@@ -128,7 +132,7 @@ public abstract class MqttConnectBuilder> {
return self();
}
- public MqttUserPropertiesImplBuilder.@NotNull Nested userProperties() {
+ public MqttUserPropertiesImplBuilder.@NotNull Nested userPropertiesWith() {
return new MqttUserPropertiesImplBuilder.Nested<>(userProperties, this::userProperties);
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectProperty.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectProperty.java
similarity index 93%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectProperty.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectProperty.java
index ab7af390a..37a221c2c 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectProperty.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectProperty.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect;
+package com.hivemq.client2.internal.mqtt.message.connect;
-import com.hivemq.client.internal.mqtt.message.MqttProperty;
+import com.hivemq.client2.internal.mqtt.message.MqttProperty;
/**
* All possible MQTT CONNECT properties and its byte code according to the MQTT 5 specification.
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectRestrictions.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectRestrictions.java
similarity index 66%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectRestrictions.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectRestrictions.java
index 31f9000bd..9db802f7b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectRestrictions.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectRestrictions.java
@@ -14,17 +14,20 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect;
+package com.hivemq.client2.internal.mqtt.message.connect;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5ConnectRestrictions;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnectRestrictions;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttConnectRestrictions implements Mqtt5ConnectRestrictions {
public static final @NotNull MqttConnectRestrictions DEFAULT =
@@ -32,22 +35,22 @@ public class MqttConnectRestrictions implements Mqtt5ConnectRestrictions {
DEFAULT_SEND_MAXIMUM_PACKET_SIZE, DEFAULT_TOPIC_ALIAS_MAXIMUM, DEFAULT_SEND_TOPIC_ALIAS_MAXIMUM,
DEFAULT_REQUEST_PROBLEM_INFORMATION, DEFAULT_REQUEST_RESPONSE_INFORMATION);
- private final int receiveMaximum;
- private final int sendMaximum;
- private final int maximumPacketSize;
- private final int sendMaximumPacketSize;
- private final int topicAliasMaximum;
- private final int sendTopicAliasMaximum;
+ private final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int receiveMaximum;
+ private final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendMaximum;
+ private final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int maximumPacketSize;
+ private final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int sendMaximumPacketSize;
+ private final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int topicAliasMaximum;
+ private final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendTopicAliasMaximum;
private final boolean requestProblemInformation;
private final boolean requestResponseInformation;
public MqttConnectRestrictions(
- final int receiveMaximum,
- final int sendMaximum,
- final int maximumPacketSize,
- final int sendMaximumPacketSize,
- final int topicAliasMaximum,
- final int sendTopicAliasMaximum,
+ final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int receiveMaximum,
+ final @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendMaximum,
+ final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int maximumPacketSize,
+ final @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int sendMaximumPacketSize,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int topicAliasMaximum,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendTopicAliasMaximum,
final boolean requestProblemInformation,
final boolean requestResponseInformation) {
@@ -62,32 +65,32 @@ public MqttConnectRestrictions(
}
@Override
- public int getReceiveMaximum() {
+ public @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getReceiveMaximum() {
return receiveMaximum;
}
@Override
- public int getSendMaximum() {
+ public @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getSendMaximum() {
return sendMaximum;
}
@Override
- public int getMaximumPacketSize() {
+ public @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int getMaximumPacketSize() {
return maximumPacketSize;
}
@Override
- public int getSendMaximumPacketSize() {
+ public @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int getSendMaximumPacketSize() {
return sendMaximumPacketSize;
}
@Override
- public int getTopicAliasMaximum() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getTopicAliasMaximum() {
return topicAliasMaximum;
}
@Override
- public int getSendTopicAliasMaximum() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getSendTopicAliasMaximum() {
return sendTopicAliasMaximum;
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectRestrictionsBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectRestrictionsBuilder.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectRestrictionsBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectRestrictionsBuilder.java
index be9e533af..0b67f84ed 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttConnectRestrictionsBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttConnectRestrictionsBuilder.java
@@ -14,12 +14,15 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect;
+package com.hivemq.client2.internal.mqtt.message.connect;
-import com.hivemq.client.internal.mqtt.util.MqttChecks;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.mqtt5.message.connect.Mqtt5ConnectRestrictionsBuilder;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttVariableByteInteger;
+import com.hivemq.client2.internal.mqtt.util.MqttChecks;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnectRestrictionsBuilder;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Range;
import java.util.function.Function;
@@ -28,12 +31,18 @@
*/
public abstract class MqttConnectRestrictionsBuilder> {
- private int receiveMaximum = MqttConnectRestrictions.DEFAULT_RECEIVE_MAXIMUM;
- private int sendMaximum = MqttConnectRestrictions.DEFAULT_SEND_MAXIMUM;
- private int maximumPacketSize = MqttConnectRestrictions.DEFAULT_MAXIMUM_PACKET_SIZE;
- private int sendMaximumPacketSize = MqttConnectRestrictions.DEFAULT_SEND_MAXIMUM_PACKET_SIZE;
- private int topicAliasMaximum = MqttConnectRestrictions.DEFAULT_TOPIC_ALIAS_MAXIMUM;
- private int sendTopicAliasMaximum = MqttConnectRestrictions.DEFAULT_SEND_TOPIC_ALIAS_MAXIMUM;
+ private @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int receiveMaximum =
+ MqttConnectRestrictions.DEFAULT_RECEIVE_MAXIMUM;
+ private @Range(from = 1, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendMaximum =
+ MqttConnectRestrictions.DEFAULT_SEND_MAXIMUM;
+ private @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int maximumPacketSize =
+ MqttConnectRestrictions.DEFAULT_MAXIMUM_PACKET_SIZE;
+ private @Range(from = 1, to = MqttVariableByteInteger.MAXIMUM_PACKET_SIZE_LIMIT) int sendMaximumPacketSize =
+ MqttConnectRestrictions.DEFAULT_SEND_MAXIMUM_PACKET_SIZE;
+ private @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int topicAliasMaximum =
+ MqttConnectRestrictions.DEFAULT_TOPIC_ALIAS_MAXIMUM;
+ private @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int sendTopicAliasMaximum =
+ MqttConnectRestrictions.DEFAULT_SEND_TOPIC_ALIAS_MAXIMUM;
private boolean requestProblemInformation = MqttConnectRestrictions.DEFAULT_REQUEST_PROBLEM_INFORMATION;
private boolean requestResponseInformation = MqttConnectRestrictions.DEFAULT_REQUEST_RESPONSE_INFORMATION;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttStatefulConnect.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttStatefulConnect.java
similarity index 84%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttStatefulConnect.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttStatefulConnect.java
index 9dd27a79e..dd83617e2 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/MqttStatefulConnect.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/MqttStatefulConnect.java
@@ -14,19 +14,19 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect;
+package com.hivemq.client2.internal.mqtt.message.connect;
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttClientIdentifierImpl;
-import com.hivemq.client.internal.mqtt.message.MqttStatefulMessage;
-import com.hivemq.client.internal.mqtt.message.auth.MqttEnhancedAuth;
+import com.hivemq.client2.internal.mqtt.datatypes.MqttClientIdentifierImpl;
+import com.hivemq.client2.internal.mqtt.message.MqttStatefulMessage;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttEnhancedAuth;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class MqttStatefulConnect extends MqttStatefulMessage {
private final @NotNull MqttClientIdentifierImpl clientIdentifier;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/mqtt3/Mqtt3ConnAckView.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnAckView.java
similarity index 84%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/mqtt3/Mqtt3ConnAckView.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnAckView.java
index 161315ec9..123bb7df0 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/connack/mqtt3/Mqtt3ConnAckView.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnAckView.java
@@ -14,26 +14,26 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect.connack.mqtt3;
-
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAck;
-import com.hivemq.client.internal.mqtt.message.connect.connack.MqttConnAckRestrictions;
-import com.hivemq.client.mqtt.mqtt3.message.connect.connack.Mqtt3ConnAck;
-import com.hivemq.client.mqtt.mqtt3.message.connect.connack.Mqtt3ConnAckReturnCode;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAck;
-import com.hivemq.client.mqtt.mqtt5.message.connect.connack.Mqtt5ConnAckReasonCode;
-import io.reactivex.functions.Function;
+package com.hivemq.client2.internal.mqtt.message.connect.mqtt3;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAck;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnAckRestrictions;
+import com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3ConnAck;
+import com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3ConnAckReturnCode;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAck;
+import com.hivemq.client2.mqtt.mqtt5.message.connect.Mqtt5ConnAckReasonCode;
+import io.reactivex.rxjava3.functions.Function;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
-import static com.hivemq.client.mqtt.mqtt3.message.connect.connack.Mqtt3ConnAckReturnCode.*;
+import static com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3ConnAckReturnCode.*;
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class Mqtt3ConnAckView implements Mqtt3ConnAck {
public static final @NotNull Function MAPPER = Mqtt3ConnAckView::of;
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectView.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectView.java
similarity index 76%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectView.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectView.java
index 12bc13374..eb2348a2b 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectView.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectView.java
@@ -14,34 +14,36 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect.mqtt3;
-
-import com.hivemq.client.annotations.Immutable;
-import com.hivemq.client.internal.mqtt.datatypes.MqttUserPropertiesImpl;
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.auth.mqtt3.Mqtt3SimpleAuthView;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnectRestrictions;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.internal.mqtt.message.publish.mqtt3.Mqtt3PublishView;
-import com.hivemq.client.mqtt.mqtt3.message.auth.Mqtt3SimpleAuth;
-import com.hivemq.client.mqtt.mqtt3.message.connect.Mqtt3Connect;
-import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3Publish;
+package com.hivemq.client2.internal.mqtt.message.connect.mqtt3;
+
+import com.hivemq.client2.internal.mqtt.datatypes.MqttUserPropertiesImpl;
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.mqtt3.Mqtt3SimpleAuthView;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnectRestrictions;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PublishView;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.mqtt3.message.auth.Mqtt3SimpleAuth;
+import com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3Connect;
+import com.hivemq.client2.mqtt.mqtt3.message.publish.Mqtt3Publish;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
+import org.jetbrains.annotations.Unmodifiable;
import java.util.Optional;
/**
* @author Silvio Giebl
*/
-@Immutable
+@Unmodifiable
public class Mqtt3ConnectView implements Mqtt3Connect {
public static final @NotNull Mqtt3ConnectView DEFAULT = of(DEFAULT_KEEP_ALIVE, DEFAULT_CLEAN_SESSION, null, null);
private static @NotNull MqttConnect delegate(
- final int keepAlive,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int keepAlive,
final boolean cleanSession,
final @Nullable MqttSimpleAuth simpleAuth,
final @Nullable MqttWillPublish willPublish) {
@@ -52,7 +54,7 @@ public class Mqtt3ConnectView implements Mqtt3Connect {
}
static @NotNull Mqtt3ConnectView of(
- final int keepAlive,
+ final @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int keepAlive,
final boolean cleanSession,
final @Nullable MqttSimpleAuth simpleAuth,
final @Nullable MqttWillPublish willPublish) {
@@ -71,7 +73,7 @@ private Mqtt3ConnectView(final @NotNull MqttConnect delegate) {
}
@Override
- public int getKeepAlive() {
+ public @Range(from = 0, to = UnsignedDataTypes.UNSIGNED_SHORT_MAX_VALUE) int getKeepAlive() {
return delegate.getKeepAlive();
}
diff --git a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectViewBuilder.java b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectViewBuilder.java
similarity index 80%
rename from src/main/java/com/hivemq/client/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectViewBuilder.java
rename to src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectViewBuilder.java
index 81325a6c2..715c23474 100644
--- a/src/main/java/com/hivemq/client/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectViewBuilder.java
+++ b/src/main/java/com/hivemq/client2/internal/mqtt/message/connect/mqtt3/Mqtt3ConnectViewBuilder.java
@@ -14,21 +14,23 @@
* limitations under the License.
*/
-package com.hivemq.client.internal.mqtt.message.connect.mqtt3;
-
-import com.hivemq.client.internal.mqtt.message.auth.MqttSimpleAuth;
-import com.hivemq.client.internal.mqtt.message.auth.mqtt3.Mqtt3SimpleAuthView;
-import com.hivemq.client.internal.mqtt.message.auth.mqtt3.Mqtt3SimpleAuthViewBuilder;
-import com.hivemq.client.internal.mqtt.message.connect.MqttConnect;
-import com.hivemq.client.internal.mqtt.message.publish.MqttWillPublish;
-import com.hivemq.client.internal.mqtt.message.publish.mqtt3.Mqtt3PublishView;
-import com.hivemq.client.internal.mqtt.message.publish.mqtt3.Mqtt3PublishViewBuilder;
-import com.hivemq.client.internal.util.Checks;
-import com.hivemq.client.mqtt.mqtt3.message.auth.Mqtt3SimpleAuth;
-import com.hivemq.client.mqtt.mqtt3.message.connect.Mqtt3ConnectBuilder;
-import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3Publish;
+package com.hivemq.client2.internal.mqtt.message.connect.mqtt3;
+
+import com.hivemq.client2.internal.mqtt.message.auth.MqttSimpleAuth;
+import com.hivemq.client2.internal.mqtt.message.auth.mqtt3.Mqtt3SimpleAuthView;
+import com.hivemq.client2.internal.mqtt.message.auth.mqtt3.Mqtt3SimpleAuthViewBuilder;
+import com.hivemq.client2.internal.mqtt.message.connect.MqttConnect;
+import com.hivemq.client2.internal.mqtt.message.publish.MqttWillPublish;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PublishView;
+import com.hivemq.client2.internal.mqtt.message.publish.mqtt3.Mqtt3PublishViewBuilder;
+import com.hivemq.client2.internal.util.Checks;
+import com.hivemq.client2.internal.util.UnsignedDataTypes;
+import com.hivemq.client2.mqtt.mqtt3.message.auth.Mqtt3SimpleAuth;
+import com.hivemq.client2.mqtt.mqtt3.message.connect.Mqtt3ConnectBuilder;
+import com.hivemq.client2.mqtt.mqtt3.message.publish.Mqtt3Publish;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Range;
import java.util.function.Function;
@@ -37,7 +39,8 @@
*/
public abstract class Mqtt3ConnectViewBuilder