Skip to content

Commit

Permalink
DRILL-7054: timestamp in milliseconds
Browse files Browse the repository at this point in the history
closes #1665
  • Loading branch information
Giovanni Conte authored and karthik committed Mar 8, 2019
1 parent 624634d commit 75ca523
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 4 deletions.
Expand Up @@ -242,6 +242,9 @@ private boolean addDataToTable(final Packet packet, final int networkType, final
case "timestamp":
setTimestampColumnValue(packet.getTimestamp(), pci, count);
break;
case "timestamp_micro":
setLongColumnValue(packet.getTimestampMicro(), pci, count);
break;
case "network":
setIntegerColumnValue(networkType, pci, count);
break;
Expand Down
Expand Up @@ -40,6 +40,7 @@ public class Packet {
// guint32 orig_len; // actual length of packet */
// } pcaprec_hdr_t;
private long timestamp;
private long timestampMicro;
private int originalLength;

protected byte[] raw;
Expand Down Expand Up @@ -161,6 +162,10 @@ public long getTimestamp() {
return timestamp;
}

public long getTimestampMicro() {
return timestampMicro;
}

public int getPacketLength() {
return packetLength;
}
Expand Down Expand Up @@ -384,16 +389,17 @@ protected int ipVersion() {
}

private void decodePcapHeader(final byte[] header, final boolean byteOrder, final int maxLength, final int offset) {
timestamp = getTimestamp(header, byteOrder, offset);
timestampMicro = getTimestampMicro(header, byteOrder, offset);
timestamp = timestampMicro / 1000L;
originalLength = getIntFileOrder(byteOrder, header, offset + PacketConstants.ORIGINAL_LENGTH_OFFSET);
packetLength = getIntFileOrder(byteOrder, header, offset + PacketConstants.ACTUAL_LENGTH_OFFSET);
Preconditions.checkState(originalLength < maxLength,
"Packet too long (%d bytes)", originalLength);
}

private long getTimestamp(final byte[] header, final boolean byteOrder, final int offset) {
return getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_OFFSET) * 1000L +
getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_MICRO_OFFSET) / 1000L;
private long getTimestampMicro(final byte[] header, final boolean byteOrder, final int offset) {
return getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_OFFSET) * 1000000L +
getIntFileOrder(byteOrder, header, offset + PacketConstants.TIMESTAMP_MICRO_OFFSET);
}

private void decodeEtherPacket() {
Expand Down
Expand Up @@ -35,6 +35,7 @@ private void setupStructure() {
columns.add(new ColumnDto("type", PcapTypes.STRING));
columns.add(new ColumnDto("network", PcapTypes.INTEGER));
columns.add(new ColumnDto("timestamp", PcapTypes.TIMESTAMP));
columns.add(new ColumnDto("timestamp_micro", PcapTypes.LONG));
columns.add(new ColumnDto("src_ip", PcapTypes.STRING));
columns.add(new ColumnDto("dst_ip", PcapTypes.STRING));
columns.add(new ColumnDto("src_port", PcapTypes.INTEGER));
Expand Down
Expand Up @@ -75,6 +75,7 @@ public void testBasics() throws IOException {
assertEquals("/192.168.0.2", p.getDst_ip().toString());
assertEquals(161, p.getSrc_port());
assertEquals(0, p.getDst_port());
assertEquals(0, p.getTimestampMicro());
}

private static void writeHeader(DataOutputStream out) throws IOException {
Expand Down

0 comments on commit 75ca523

Please sign in to comment.