Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions pgpdump/packet.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@
class Packet(object):
'''The base packet object containing various fields pulled from the packet
header as well as a slice of the packet data.'''
def __init__(self, raw, name, new, data):
def __init__(self, raw, name, new, data, original_data):
self.raw = raw
self.name = name
self.new = new
self.length = len(data)
self.data = data
self.original_data = original_data

# now let subclasses work their magic
self.parse()
Expand Down Expand Up @@ -851,21 +852,24 @@ def construct_packet(data, header_start):
# data consumed to create new packet, consists of header and data
consumed = 0
packet_data = bytearray()
original_data = bytearray()
while (True):
consumed += data_offset

data_start = header_start + data_offset
header_start = data_start + data_length
packet_data += data[data_start:header_start]
next_header_start = data_start + data_length
original_data += data[header_start:next_header_start]
packet_data += data[data_start:next_header_start]
consumed += data_length

# The new format might encode data with Partial Body Length headers.
# Then a packet consists of alternating header and data regions. The
# last header of a packet is not a Partial Body Length header.
if partial:
data_offset, data_length, partial = new_tag_length(
data, header_start)
data, next_header_start)
header_start = next_header_start
else:
break
packet = PacketType(tag, name, new, packet_data)
packet = PacketType(tag, name, new, packet_data, original_data)
return (consumed, packet)