Skip to content
Snippets Groups Projects
Commit 3c641a0d authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Implement extended features

parent 7b10813d
No related branches found
No related tags found
No related merge requests found
......@@ -3,13 +3,13 @@ package de.kuschku.libquassel.session
import de.kuschku.libquassel.protocol.*
import de.kuschku.libquassel.protocol.message.HandshakeMessage
import de.kuschku.libquassel.protocol.message.SignalProxyMessage
import de.kuschku.libquassel.quassel.QuasselFeature
import de.kuschku.libquassel.quassel.ExtendedFeature
import de.kuschku.libquassel.quassel.QuasselFeatures
import de.kuschku.libquassel.quassel.syncables.*
import de.kuschku.libquassel.util.compatibility.HandlerService
import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log
import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.DEBUG
import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.INFO
import de.kuschku.libquassel.util.hasFlag
import io.reactivex.subjects.BehaviorSubject
import org.threeten.bp.Instant
import javax.net.ssl.X509TrustManager
......@@ -23,7 +23,7 @@ class Session(
private var userData: Pair<String, String>,
val disconnectFromCore: () -> Unit
) : ProtocolHandler(), ISession {
override val features = Features(clientData.clientFeatures, Quassel_Features.of())
override val features = Features(clientData.clientFeatures, QuasselFeatures.empty())
override val sslSession
get() = coreConnection.sslSession
......@@ -59,7 +59,7 @@ class Session(
}
override fun handle(f: HandshakeMessage.ClientInitAck): Boolean {
features.core = f.coreFeatures ?: Quassel_Feature.NONE
features.core = QuasselFeatures(f.coreFeatures, f.featureList)
if (f.coreConfigured == true) {
login()
......@@ -132,7 +132,7 @@ class Session(
synchronize(bufferSyncer, true)
synchronize(bufferViewManager, true)
synchronize(coreInfo, true)
if (features.negotiated.hasFlag(QuasselFeature.DccFileTransfer))
if (features.negotiated.hasFeature(ExtendedFeature.DccFileTransfer))
synchronize(dccConfig, true)
synchronize(ignoreListManager, true)
synchronize(ircListHelper, true)
......
......@@ -49,16 +49,20 @@ data class Flags<E>(
inline fun <reified T> of(int: Int): Flags<T>
where T : Flag<T>, T : Enum<T> = Flags(int, enumValues())
inline fun <reified T> of(vararg flags: Flag<T>): Flags<T>
inline fun <reified T> of(vararg flags: T): Flags<T>
where T : Flag<T>, T : Enum<T> =
Flags(flags.map(Flag<T>::bit).distinct().sum(), enumValues()
)
Flags(flags.map(Flag<T>::bit).distinct().sum(), enumValues())
inline fun <reified T> of(flags: Iterable<T>): Flags<T>
where T : Flag<T>, T : Enum<T> =
Flags(flags.map(Flag<T>::bit).distinct().sum(), enumValues())
}
interface Factory<E> where E : Flag<E>, E : Enum<E> {
val NONE: Flags<E>
fun of(bit: Int): Flags<E>
fun of(vararg flags: E): Flags<E>
fun of(flags: Iterable<E>): Flags<E>
}
}
......
......@@ -51,13 +51,17 @@ data class LongFlags<E>(
inline fun <reified T> of(vararg flags: LongFlag<T>): LongFlags<T>
where T : LongFlag<T>, T : Enum<T> =
LongFlags(flags.map(LongFlag<T>::bit).distinct().sum(), enumValues()
)
LongFlags(flags.map(LongFlag<T>::bit).distinct().sum(), enumValues())
inline fun <reified T> of(flags: Iterable<T>): LongFlags<T>
where T : LongFlag<T>, T : Enum<T> =
LongFlags(flags.map(LongFlag<T>::bit).distinct().sum(), enumValues())
}
interface Factory<E> where E : LongFlag<E>, E : Enum<E> {
fun of(bit: Long): LongFlags<E>
fun of(vararg flags: E): LongFlags<E>
fun of(flags: Iterable<E>): LongFlags<E>
}
}
......
......@@ -57,11 +57,16 @@ data class ShortFlags<E>(
inline fun <reified T> of(vararg flags: ShortFlag<T>): ShortFlags<T>
where T : ShortFlag<T>, T : Enum<T> =
ShortFlags(flags.map(ShortFlag<T>::bit).distinct().sum().toShort(), enumValues())
inline fun <reified T> of(flags: Iterable<T>): ShortFlags<T>
where T : ShortFlag<T>, T : Enum<T> =
ShortFlags(flags.map(ShortFlag<T>::bit).distinct().sum().toShort(), enumValues())
}
interface Factory<E> where E : ShortFlag<E>, E : Enum<E> {
fun of(bit: Short): ShortFlags<E>
fun of(vararg flags: E): ShortFlags<E>
fun of(flags: Iterable<E>): ShortFlags<E>
}
}
......
package de.kuschku.libquassel
import de.kuschku.libquassel.protocol.*
import de.kuschku.libquassel.quassel.LegacyFeature
import de.kuschku.libquassel.quassel.ProtocolFeature
import de.kuschku.libquassel.quassel.QuasselFeature
import de.kuschku.libquassel.session.BacklogStorage
import de.kuschku.libquassel.session.Session
import de.kuschku.libquassel.session.SocketAddress
......@@ -34,7 +34,7 @@ class ConnectionUnitTest {
ClientData(
identifier = "libquassel test",
buildDate = Instant.EPOCH,
clientFeatures = Quassel_Feature.of(*QuasselFeature.validValues),
clientFeatures = Quassel_Feature.of(*LegacyFeature.validValues),
protocolFeatures = Protocol_Feature.of(ProtocolFeature.TLS, ProtocolFeature.Compression),
supportedProtocols = listOf(Protocol.Datastream),
), object : X509TrustManager {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment