diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt index 3d6f407e232ba2a82e3ca452d16ff4216ae03608..a0b0451e0bb8297562f5d5a6ad00e091a35b9954 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt @@ -64,12 +64,6 @@ object DateTimeSerializer : Serializer<Temporal> { .with(JulianFields.JULIAN_DAY, julianDay) .with(ChronoField.MILLI_OF_DAY, milliOfDay) .toInstant() - TimeSpec.OffsetFromUTC -> - Instant.EPOCH.atOffset( - ZoneOffset.ofTotalSeconds(IntSerializer.deserialize(buffer, features))) - .with(JulianFields.JULIAN_DAY, julianDay) - .with(ChronoField.MILLI_OF_DAY, milliOfDay) - .toInstant() else -> Instant.EPOCH.atOffset(ZoneOffset.UTC) .with(JulianFields.JULIAN_DAY, julianDay) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt index d893b2d44e4cc665728864f6f76c3b86d5c4f0ed..86a270e1cac506ff74f8d8ec80cb18a13c1acdf6 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt @@ -89,7 +89,7 @@ abstract class StringSerializer( null } else { val limit = buffer.limit() - buffer.limit(buffer.position() + len - trailingNullBytes) + buffer.limit(buffer.position() + Math.max(0, len - trailingNullBytes)) val charBuffer = charBuffer(len) decoder.reset() decoder.decode(buffer, charBuffer, true) diff --git a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt index 73ca50adbb5e600f5c54e07aabd8dece15a2eb05..398a9f30f63994e129b1cdf502d43728e8f088b7 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt @@ -14,6 +14,7 @@ import de.kuschku.libquassel.util.compatibility.HandlerService import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.* import de.kuschku.libquassel.util.compatibility.log import de.kuschku.libquassel.util.hasFlag +import de.kuschku.libquassel.util.helpers.hexDump import de.kuschku.libquassel.util.helpers.write import de.kuschku.libquassel.util.nio.ChainedByteBuffer import de.kuschku.libquassel.util.nio.WrappedChannel @@ -191,10 +192,12 @@ class CoreConnection( session.handle(msg) } catch (e: Throwable) { log(WARN, TAG, "Error encountered while handling sigproxy message", e) + log(WARN, TAG, msg.toString()) } } } catch (e: Throwable) { log(WARN, TAG, "Error encountered while parsing sigproxy message", e) + dataBuffer.hexDump() } } @@ -207,9 +210,11 @@ class CoreConnection( session.handle(msg) } catch (e: Throwable) { log(WARN, TAG, "Error encountered while handling handshake message", e) + log(WARN, TAG, msg.toString()) } } catch (e: Throwable) { log(WARN, TAG, "Error encountered while parsing handshake message", e) + dataBuffer.hexDump() } } } diff --git a/lib/src/main/java/de/kuschku/libquassel/util/helpers/ArrayHelper.kt b/lib/src/main/java/de/kuschku/libquassel/util/helpers/ArrayHelper.kt new file mode 100644 index 0000000000000000000000000000000000000000..0acd30bec89225b35892adfff98b5087161782b6 --- /dev/null +++ b/lib/src/main/java/de/kuschku/libquassel/util/helpers/ArrayHelper.kt @@ -0,0 +1,14 @@ +package de.kuschku.libquassel.util.helpers + +import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.WARN +import de.kuschku.libquassel.util.compatibility.log + +fun ByteArray.hexDump() { + for (i in 0 until this.size step 33) { + log(WARN, "HexDump", + (0 until 33).map { it + i }.filter { it < this.size }.joinToString(" ") { + String.format("%02x", this[it]) + } + ) + } +} diff --git a/lib/src/main/java/de/kuschku/libquassel/util/helpers/ByteBufferHelper.kt b/lib/src/main/java/de/kuschku/libquassel/util/helpers/ByteBufferHelper.kt index 0401092c787417e54da64f19e8b19c477104bbd1..209c4343efecbf697485deab2ae5ea98bface9d4 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/helpers/ByteBufferHelper.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/helpers/ByteBufferHelper.kt @@ -15,3 +15,10 @@ fun ByteBuffer?.deserializeString(serializer: StringSerializer) = if (this == nu } else { serializer.deserializeAll(this) } + +fun ByteBuffer.hexDump() { + val target = ByteBuffer.allocate(this.capacity()) + this.clear() + this.copyTo(target) + target.array().hexDump() +}