Skip to content

Commit fa1cdb3

Browse files
committed
Rename interfaces to conform to official naming
1 parent e08c598 commit fa1cdb3

42 files changed

Lines changed: 751 additions & 668 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
**The Java IP Codec Suite**
22

3-
The `jipcs` contains the following codecs:
4-
* IPv4 header [(Internet Protocol version 4)](https://en.wikipedia.org/wiki/Internet_Protocol_version_4) [(RFC 791)](https://datatracker.ietf.org/doc/html/rfc791#page-11)
5-
* [IP Options](https://www.iana.org/assignments/ip-parameters/ip-parameters.xhtml#ip-parameters-1)
6-
* IPv6 header [(Internet Protocol version 6)](https://en.wikipedia.org/wiki/Internet_Protocol_version_6) [(RFC 8200)](https://datatracker.ietf.org/doc/html/rfc8200#page-6)
7-
* [Extension headers](https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#extension-header) and [options](https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-2)
8-
* TCP header [(Transmission Control Protocol)](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) [(RFC 9293)](https://datatracker.ietf.org/doc/html/rfc9293#name-header-format)
9-
* UDP header [(User Datagram Protocol)](https://en.wikipedia.org/wiki/User_Datagram_Protocol) [(RFC 768)](https://datatracker.ietf.org/doc/html/rfc768)
3+
The `jipcs` contains the following codecs.
4+
5+
On [link layer](https://en.wikipedia.org/wiki/Link_layer):
106
* ARP [(Address Resolution Protocol)](https://en.wikipedia.org/wiki/Address_Resolution_Protocol) [(RFC 826)](https://datatracker.ietf.org/doc/html/rfc826)
117
* ETHERNET [(Ethernet frame)](https://en.wikipedia.org/wiki/Ethernet_frame) [(IEEE 802.3)](https://ieeexplore.ieee.org/document/9844436)
8+
9+
On [network layer](https://en.wikipedia.org/wiki/Network_layer):
10+
* IPv4 packet [(Internet Protocol version 4)](https://en.wikipedia.org/wiki/Internet_Protocol_version_4) [(RFC 791)](https://datatracker.ietf.org/doc/html/rfc791#page-11)
11+
* [IP Options](https://www.iana.org/assignments/ip-parameters/ip-parameters.xhtml#ip-parameters-1)
12+
* IPv6 packet [(Internet Protocol version 6)](https://en.wikipedia.org/wiki/Internet_Protocol_version_6) [(RFC 8200)](https://datatracker.ietf.org/doc/html/rfc8200#page-6)
13+
* [Extension headers](https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#extension-header) and [options](https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml#ipv6-parameters-2)
1214
* ICMP [(Internet Control Message Protocol)](https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol) [(RFC 792)](https://datatracker.ietf.org/doc/html/rfc792)
1315
* IRDP [(ICMP Router Discovery Protocol)](https://en.wikipedia.org/wiki/ICMP_Router_Discovery_Protocol) [(RFC 1256)](https://datatracker.ietf.org/doc/html/rfc1256)
1416
* PROBE [(RFC 8335)](https://datatracker.ietf.org/doc/html/rfc8335)
@@ -30,6 +32,11 @@ The `jipcs` contains the following codecs:
3032
* MPL (Multicast Protocol for Low-Power and Lossy Networks) [(RFC 7731)](https://datatracker.ietf.org/doc/html/rfc7731)
3133
* PROBE [(RFC 8335)](https://datatracker.ietf.org/doc/html/rfc8335)
3234

35+
On [transport layer](https://en.wikipedia.org/wiki/Transport_layer):
36+
* TCP segment [(Transmission Control Protocol)](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) [(RFC 9293)](https://datatracker.ietf.org/doc/html/rfc9293#name-header-format)
37+
* [TCP options](https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-1)
38+
* UDP datagram [(User Datagram Protocol)](https://en.wikipedia.org/wiki/User_Datagram_Protocol) [(RFC 768)](https://datatracker.ietf.org/doc/html/rfc768)
39+
3340
Requirements:
3441
* Java 8 or newer for 1.0.x
3542
* Java 21 or newer for 1.1.x
@@ -39,7 +46,7 @@ Requirements:
3946
Basic usage:
4047
* Gradle `implementation 'io.github.hirsivaja:jipcs:1.0.0'`
4148
* Java module-info `requires com.github.hirsivaja.jipcs;`
42-
* To decode an IPv4 or IPv6 message with headers call IpPayload.fromBytes(byte[] ipPayload) -method
43-
* To encode your IPv4 or IPv6 payload call IpPayload.toBytes() -method
49+
* To decode an IPv4 or IPv6 packet with headers call IpPacket.fromBytes(byte[] ipPacket) -method
50+
* To encode your IPv4 or IPv6 object call IpPacket.toBytes() -method
4451

4552
This project is licensed under the terms of the MIT license.

src/main/java/com/github/hirsivaja/ip/IpPayload.java renamed to src/main/java/com/github/hirsivaja/ip/IpPacket.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
import com.github.hirsivaja.ip.ethernet.EthernetPayload;
44
import com.github.hirsivaja.ip.ipv4.Ipv4Header;
5-
import com.github.hirsivaja.ip.ipv4.Ipv4Payload;
5+
import com.github.hirsivaja.ip.ipv4.Ipv4Packet;
66
import com.github.hirsivaja.ip.ipv6.Ipv6Header;
7-
import com.github.hirsivaja.ip.ipv6.Ipv6Payload;
7+
import com.github.hirsivaja.ip.ipv6.Ipv6Packet;
88

99
import java.nio.ByteBuffer;
1010
import java.util.Arrays;
1111
import java.util.logging.Level;
1212
import java.util.logging.Logger;
1313

14-
public sealed interface IpPayload extends EthernetPayload permits Ipv4Payload, Ipv6Payload {
15-
Logger logger = Logger.getLogger("IpPayload");
14+
public sealed interface IpPacket extends EthernetPayload permits Ipv4Packet, Ipv6Packet {
15+
Logger logger = Logger.getLogger("IpPacket");
1616
IpHeader header();
1717

1818
@Override
@@ -21,7 +21,7 @@ default byte[] toBytes() {
2121
encode(out);
2222
byte[] outBytes = Arrays.copyOfRange(out.array(), 0, out.rewind().remaining());
2323
if(logger.isLoggable(Level.FINE)) {
24-
logger.log(Level.FINE, "IP Payload as byte array:\n\t{0}", IpUtils.printHexBinary(outBytes));
24+
logger.log(Level.FINE, "IP packet as byte array:\n\t{0}", IpUtils.printHexBinary(outBytes));
2525
}
2626
return outBytes;
2727
}
@@ -30,29 +30,29 @@ default String toByteString() {
3030
return IpUtils.printHexBinary(toBytes());
3131
}
3232

33-
static IpPayload fromBytes(byte[] ipPayload) {
33+
static IpPacket fromBytes(byte[] ipPayload) {
3434
if(logger.isLoggable(Level.FINE)) {
35-
logger.log(Level.FINE, "Creating an IP Payload from:\n\t{0}", IpUtils.printHexBinary(ipPayload));
35+
logger.log(Level.FINE, "Creating an IP packet from:\n\t{0}", IpUtils.printHexBinary(ipPayload));
3636
}
3737
return decode(ByteBuffer.wrap(ipPayload));
3838
}
3939

40-
static IpPayload fromByteString(String ipPayload) {
40+
static IpPacket fromByteString(String ipPayload) {
4141
return fromBytes(IpUtils.parseHexBinary(ipPayload));
4242
}
4343

44-
static IpPayload decode(ByteBuffer in) {
44+
static IpPacket decode(ByteBuffer in) {
4545
return decode(in, true);
4646
}
4747

48-
static IpPayload decode(ByteBuffer in, boolean ensureChecksum) {
48+
static IpPacket decode(ByteBuffer in, boolean ensureChecksum) {
4949
in.mark();
5050
byte version = (byte) (in.get() >>> Ipv4Header.VERSION_SHIFT);
5151
in.reset();
5252
return switch (version) {
53-
case Ipv4Header.VERSION -> Ipv4Payload.decode(in, ensureChecksum);
54-
case Ipv6Header.VERSION -> Ipv6Payload.decode(in, ensureChecksum);
55-
default -> throw new IllegalArgumentException("Not an IP payload");
53+
case Ipv4Header.VERSION -> Ipv4Packet.decode(in, ensureChecksum);
54+
case Ipv6Header.VERSION -> Ipv6Packet.decode(in, ensureChecksum);
55+
default -> throw new IllegalArgumentException("Not an IP data");
5656
};
5757
}
5858
}

src/main/java/com/github/hirsivaja/ip/ethernet/EthernetBytePayload.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/main/java/com/github/hirsivaja/ip/ethernet/EthernetFrame.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ public static EthernetFrame decode(ByteBuffer in) {
8787
}
8888
EthernetPayload payload = EthernetPayload.decode(in, len);
8989
int paddingLen = MINIMUM_FRAME_SIZE - payload.length() - (hasDot1qTag ? 4 : 0) - FRAME_BASE_SIZE;
90-
byte[] padding = new byte[Math.max(paddingLen, 0)];
91-
in.get(padding);
90+
if(in.remaining() >= paddingLen) {
91+
byte[] padding = new byte[Math.max(paddingLen, 0)];
92+
in.get(padding);
93+
}
9294
int crc = 0;
9395
if(in.remaining() >= 4) {
9496
crc = in.getInt();

src/main/java/com/github/hirsivaja/ip/ethernet/EthernetPayload.java

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.github.hirsivaja.ip.ethernet;
22

3-
import com.github.hirsivaja.ip.IpPayload;
3+
import com.github.hirsivaja.ip.ByteArray;
4+
import com.github.hirsivaja.ip.IpPacket;
45

56
import java.nio.ByteBuffer;
67
import java.util.Arrays;
78

8-
public sealed interface EthernetPayload permits ArpPacket, EthernetBytePayload, IpPayload {
9+
public sealed interface EthernetPayload permits ArpPacket, IpPacket, EthernetPayload.GenericEthernetPayload {
910
int MAX_PAYLOAD_SIZE = 1500;
1011
int ARP = 0x0806;
1112
int IPV4 = 0x0800;
@@ -21,12 +22,39 @@ default byte[] toBytes() {
2122

2223
static EthernetPayload decode(ByteBuffer in, int len) {
2324
if(len <= MAX_PAYLOAD_SIZE) {
24-
return EthernetBytePayload.decode(in, len);
25+
return GenericEthernetPayload.decode(in, len);
2526
}
2627
return switch (len) {
2728
case ARP -> ArpPacket.decode(in);
28-
case IPV4, IPV6 -> IpPayload.decode(in);
29-
default -> throw new IllegalArgumentException("Ethernet payload type " + len + " is not supported.");
29+
case IPV4, IPV6 -> IpPacket.decode(in);
30+
default -> GenericEthernetPayload.decode(in);
3031
};
3132
}
33+
34+
record GenericEthernetPayload(ByteArray payload) implements EthernetPayload {
35+
36+
public GenericEthernetPayload(byte[] payload) {
37+
this(new ByteArray(payload));
38+
}
39+
40+
@Override
41+
public void encode(ByteBuffer out) {
42+
out.put(payload.array());
43+
}
44+
45+
@Override
46+
public int length() {
47+
return payload.array().length;
48+
}
49+
50+
public static GenericEthernetPayload decode(ByteBuffer in) {
51+
return decode(in, in.remaining());
52+
}
53+
54+
public static GenericEthernetPayload decode(ByteBuffer in, int len) {
55+
byte[] payload = new byte[len];
56+
in.get(payload);
57+
return new GenericEthernetPayload(payload);
58+
}
59+
}
3260
}

src/main/java/com/github/hirsivaja/ip/icmp/IcmpPayload.java renamed to src/main/java/com/github/hirsivaja/ip/icmp/IcmpPacket.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import com.github.hirsivaja.ip.IpUtils;
44
import com.github.hirsivaja.ip.ipv4.Ipv4Header;
5-
import com.github.hirsivaja.ip.ipv4.Ipv4Payload;
5+
import com.github.hirsivaja.ip.ipv4.Ipv4Packet;
66

77
import java.nio.ByteBuffer;
88

9-
public record IcmpPayload(Ipv4Header header, IcmpMessage message) implements Ipv4Payload {
9+
public record IcmpPacket(Ipv4Header header, IcmpMessage message) implements Ipv4Packet {
1010

1111
@Override
1212
public void encode(ByteBuffer out) {
@@ -33,11 +33,11 @@ public int length() {
3333
return header.length() + message.length();
3434
}
3535

36-
public static Ipv4Payload decode(ByteBuffer in, Ipv4Header header) {
36+
public static Ipv4Packet decode(ByteBuffer in, Ipv4Header header) {
3737
return decode(in, header, true);
3838
}
3939

40-
public static Ipv4Payload decode(ByteBuffer in, Ipv4Header header, boolean ensureChecksum) {
40+
public static Ipv4Packet decode(ByteBuffer in, Ipv4Header header, boolean ensureChecksum) {
4141
IcmpType type = IcmpType.fromType(in.get());
4242
IcmpCode code = IcmpCode.fromType(type, in.get());
4343
short checksum = in.getShort();
@@ -47,7 +47,7 @@ public static Ipv4Payload decode(ByteBuffer in, Ipv4Header header, boolean ensur
4747
} else {
4848
IpUtils.verifyInternetChecksum(generateChecksumData(message, checksum));
4949
}
50-
return new IcmpPayload(header, message);
50+
return new IcmpPacket(header, message);
5151
}
5252

5353
public Ipv4Header ipv4Header() {

src/main/java/com/github/hirsivaja/ip/icmpv6/Icmpv6Payload.java renamed to src/main/java/com/github/hirsivaja/ip/icmpv6/Icmpv6Packet.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import com.github.hirsivaja.ip.IpUtils;
44
import com.github.hirsivaja.ip.ipv6.Ipv6Header;
5-
import com.github.hirsivaja.ip.ipv6.Ipv6Payload;
5+
import com.github.hirsivaja.ip.ipv6.Ipv6Packet;
66

77
import java.nio.ByteBuffer;
88

9-
public record Icmpv6Payload(Ipv6Header header, Icmpv6Message message) implements Ipv6Payload {
9+
public record Icmpv6Packet(Ipv6Header header, Icmpv6Message message) implements Ipv6Packet {
1010

1111
@Override
1212
public void encode(ByteBuffer out) {
@@ -34,11 +34,11 @@ public int length() {
3434
return header.length() + message.length();
3535
}
3636

37-
public static Ipv6Payload decode(ByteBuffer in, Ipv6Header header) {
37+
public static Ipv6Packet decode(ByteBuffer in, Ipv6Header header) {
3838
return decode(in, header, true);
3939
}
4040

41-
public static Ipv6Payload decode(ByteBuffer in, Ipv6Header header, boolean ensureChecksum) {
41+
public static Ipv6Packet decode(ByteBuffer in, Ipv6Header header, boolean ensureChecksum) {
4242
Icmpv6Type type = Icmpv6Type.fromType(in.get());
4343
Icmpv6Code code = Icmpv6Code.fromType(type, in.get());
4444
short checksum = in.getShort();
@@ -48,7 +48,7 @@ public static Ipv6Payload decode(ByteBuffer in, Ipv6Header header, boolean ensur
4848
} else {
4949
IpUtils.verifyInternetChecksum(generateChecksumData(header, message, checksum));
5050
}
51-
return new Icmpv6Payload(header, message);
51+
return new Icmpv6Packet(header, message);
5252
}
5353

5454
public Ipv6Header ipv6Header() {

src/main/java/com/github/hirsivaja/ip/igmp/IgmpPayload.java renamed to src/main/java/com/github/hirsivaja/ip/igmp/IgmpPacket.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import com.github.hirsivaja.ip.IpUtils;
44
import com.github.hirsivaja.ip.ipv4.Ipv4Header;
5-
import com.github.hirsivaja.ip.ipv4.Ipv4Payload;
5+
import com.github.hirsivaja.ip.ipv4.Ipv4Packet;
66

77
import java.nio.ByteBuffer;
88

9-
public record IgmpPayload(Ipv4Header header, IgmpMessage message) implements Ipv4Payload {
9+
public record IgmpPacket(Ipv4Header header, IgmpMessage message) implements Ipv4Packet {
1010

1111
@Override
1212
public void encode(ByteBuffer out) {
@@ -33,11 +33,11 @@ public int length() {
3333
return header.length() + message.length();
3434
}
3535

36-
public static Ipv4Payload decode(ByteBuffer in, Ipv4Header header) {
36+
public static Ipv4Packet decode(ByteBuffer in, Ipv4Header header) {
3737
return decode(in, header, true);
3838
}
3939

40-
public static Ipv4Payload decode(ByteBuffer in, Ipv4Header header, boolean ensureChecksum) {
40+
public static Ipv4Packet decode(ByteBuffer in, Ipv4Header header, boolean ensureChecksum) {
4141
IgmpType type = IgmpType.fromType(in.get());
4242
byte code = in.get();
4343
short checksum = in.getShort();
@@ -47,6 +47,6 @@ public static Ipv4Payload decode(ByteBuffer in, Ipv4Header header, boolean ensur
4747
} else {
4848
IpUtils.verifyInternetChecksum(generateChecksumData(message, checksum));
4949
}
50-
return new IgmpPayload(header, message);
50+
return new IgmpPacket(header, message);
5151
}
5252
}

src/main/java/com/github/hirsivaja/ip/ipv4/AuthenticationPayload.java renamed to src/main/java/com/github/hirsivaja/ip/ipv4/AuthenticationPacket.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
package com.github.hirsivaja.ip.ipv4;
22

3-
import com.github.hirsivaja.ip.IpPayload;
3+
import com.github.hirsivaja.ip.IpPacket;
44
import com.github.hirsivaja.ip.ipsec.AuthenticationHeader;
55

66
import java.nio.ByteBuffer;
77

8-
public record AuthenticationPayload(
8+
public record AuthenticationPacket(
99
Ipv4Header header,
1010
AuthenticationHeader authenticationHeader,
11-
IpPayload authenticatedPayload) implements Ipv4Payload {
11+
IpPacket authenticatedPacket) implements Ipv4Packet {
1212

1313
@Override
1414
public void encode(ByteBuffer out) {
1515
header.encode(out);
1616
authenticationHeader.encode(out);
17-
authenticatedPayload.encode(out);
17+
authenticatedPacket.encode(out);
1818
}
1919

2020
@Override
2121
public int length() {
22-
return header.length() + authenticationHeader.length() + authenticatedPayload.length();
22+
return header.length() + authenticationHeader.length() + authenticatedPacket.length();
2323
}
2424

25-
public static Ipv4Payload decode(ByteBuffer in, Ipv4Header header) {
25+
public static Ipv4Packet decode(ByteBuffer in, Ipv4Header header) {
2626
AuthenticationHeader authenticationHeader = AuthenticationHeader.decode(in);
27-
IpPayload authenticatedPayload = Ipv4Payload.decode(in);
28-
return new AuthenticationPayload(header, authenticationHeader, authenticatedPayload);
27+
IpPacket authenticatedPacket = Ipv4Packet.decode(in);
28+
return new AuthenticationPacket(header, authenticationHeader, authenticatedPacket);
2929
}
3030
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.github.hirsivaja.ip.ipv4;
2+
3+
import com.github.hirsivaja.ip.IpPacket;
4+
import com.github.hirsivaja.ip.ipv6.Ipv6Packet;
5+
6+
import java.nio.ByteBuffer;
7+
8+
public record EncapsulationPacket(Ipv4Header header, IpPacket encapsulatedPacket) implements Ipv4Packet {
9+
10+
@Override
11+
public void encode(ByteBuffer out) {
12+
header.encode(out);
13+
encapsulatedPacket.encode(out);
14+
}
15+
16+
@Override
17+
public int length() {
18+
return header.length() + encapsulatedPacket.length();
19+
}
20+
21+
public static Ipv4Packet decode(ByteBuffer in, Ipv4Header header) {
22+
IpPacket encapsulatedPacket = Ipv6Packet.decode(in);
23+
return new EncapsulationPacket(header, encapsulatedPacket);
24+
}
25+
}

0 commit comments

Comments
 (0)