diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/NetObserve.iml b/NetObserve.iml index 245d342..3d7162a 100644 --- a/NetObserve.iml +++ b/NetObserve.iml @@ -1,5 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> <module type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="kotlin-language" name="Kotlin"> + <configuration version="3" platform="JVM 1.8" allPlatforms="JVM [1.8]" useProjectSettings="false"> + <compilerSettings> + <option name="additionalArguments" value="-version -Xopt-in=kotlin.ExperimentalUnsignedTypes" /> + </compilerSettings> + <compilerArguments> + <option name="jvmTarget" value="1.8" /> + </compilerArguments> + </configuration> + </facet> + </component> <component name="NewModuleRootManager" inherit-compiler-output="true"> <exclude-output /> <content url="file://$MODULE_DIR$"> diff --git a/src/dev/w1zzrd/packets/link/EthernetPacket.kt b/src/dev/w1zzrd/packets/link/MACPacket.kt similarity index 95% rename from src/dev/w1zzrd/packets/link/EthernetPacket.kt rename to src/dev/w1zzrd/packets/link/MACPacket.kt index a86d572..ec27a2b 100644 --- a/src/dev/w1zzrd/packets/link/EthernetPacket.kt +++ b/src/dev/w1zzrd/packets/link/MACPacket.kt @@ -3,7 +3,7 @@ package dev.w1zzrd.packets.link import dev.w1zzrd.packets.Packet import java.nio.ByteOrder -class EthernetPacket: Packet { +class MACPacket: Packet { constructor( data: ByteArray, offset: UInt, diff --git a/src/dev/w1zzrd/packets/transport/DatagramProtocol.kt b/src/dev/w1zzrd/packets/network/DatagramProtocol.kt similarity index 98% rename from src/dev/w1zzrd/packets/transport/DatagramProtocol.kt rename to src/dev/w1zzrd/packets/network/DatagramProtocol.kt index acc124a..15c3cb0 100644 --- a/src/dev/w1zzrd/packets/transport/DatagramProtocol.kt +++ b/src/dev/w1zzrd/packets/network/DatagramProtocol.kt @@ -1,4 +1,4 @@ -package dev.w1zzrd.packets.transport +package dev.w1zzrd.packets.network enum class DatagramProtocol { HOPOPT, diff --git a/src/dev/w1zzrd/packets/transport/ExplicitCongestionNotification.kt b/src/dev/w1zzrd/packets/network/ExplicitCongestionNotification.kt similarity index 73% rename from src/dev/w1zzrd/packets/transport/ExplicitCongestionNotification.kt rename to src/dev/w1zzrd/packets/network/ExplicitCongestionNotification.kt index 69b8a1e..8491dfa 100644 --- a/src/dev/w1zzrd/packets/transport/ExplicitCongestionNotification.kt +++ b/src/dev/w1zzrd/packets/network/ExplicitCongestionNotification.kt @@ -1,4 +1,4 @@ -package dev.w1zzrd.packets.transport +package dev.w1zzrd.packets.network enum class ExplicitCongestionNotification { INCAPABLE, CAPABLE0, CAPABLE1, CONGESTION_ENCOUNTERED diff --git a/src/dev/w1zzrd/packets/transport/IP4Packet.kt b/src/dev/w1zzrd/packets/network/IP4Packet.kt similarity index 88% rename from src/dev/w1zzrd/packets/transport/IP4Packet.kt rename to src/dev/w1zzrd/packets/network/IP4Packet.kt index 49ff554..0b8b238 100644 --- a/src/dev/w1zzrd/packets/transport/IP4Packet.kt +++ b/src/dev/w1zzrd/packets/network/IP4Packet.kt @@ -1,17 +1,17 @@ -package dev.w1zzrd.packets.transport +package dev.w1zzrd.packets.network import dev.w1zzrd.packets.Packet -import dev.w1zzrd.packets.transport.DSCPType.Companion.getDSCPType -import dev.w1zzrd.packets.transport.DatagramProtocol.Companion.toDatagramProtocol -import dev.w1zzrd.packets.transport.IP4OptionType.Companion.toIP4OptionType +import dev.w1zzrd.packets.network.DSCPType.Companion.getDSCPType +import dev.w1zzrd.packets.network.DatagramProtocol.Companion.toDatagramProtocol +import dev.w1zzrd.packets.network.IP4OptionType.Companion.toIP4OptionType import java.nio.ByteOrder import kotlin.experimental.and import kotlin.reflect.full.functions inline fun <reified T> UInt.toEnum(): T where T: Enum<T> { - val values = (T::class.functions.first { it.name == "values" }.call() as Array<T>) + val values = (T::class.functions.first { it.name == "values" }.call() as Array<*>) - if (this < values.size.toUInt()) return values[this.toInt()] + if (this < values.size.toUInt()) return values[this.toInt()] as T else throw IllegalArgumentException("Index out of bounds") } @@ -95,7 +95,8 @@ class IP4Packet: Packet { } // IPv4 options field parser - inner class IP4Options(private var optionIndices: UIntArray = UIntArray(0)): Collection<UInt> by optionIndices { + inner class IP4Options: Collection<UInt> { + private val optionIndices: UIntArray init { if (headerLength == 20u) optionIndices = UIntArray(0) else { @@ -123,6 +124,13 @@ class IP4Packet: Packet { return IP4Option(optionIndices[index]) } + + // Stupid delegation stuff + override val size by optionIndices::size + override fun contains(element: UInt) = optionIndices.contains(element) + override fun containsAll(elements: Collection<UInt>) = optionIndices.containsAll(elements) + override fun isEmpty() = optionIndices.isEmpty() + override fun iterator() = optionIndices.iterator() } // IPv4 option field diff --git a/src/dev/w1zzrd/packets/transport/IPAddress.kt b/src/dev/w1zzrd/packets/network/IPAddress.kt similarity index 95% rename from src/dev/w1zzrd/packets/transport/IPAddress.kt rename to src/dev/w1zzrd/packets/network/IPAddress.kt index f08a991..9b182a1 100644 --- a/src/dev/w1zzrd/packets/transport/IPAddress.kt +++ b/src/dev/w1zzrd/packets/network/IPAddress.kt @@ -1,4 +1,4 @@ -package dev.w1zzrd.packets.transport +package dev.w1zzrd.packets.network import java.nio.ByteBuffer