Skip to content
Snippets Groups Projects
Commit 0fd2dfdc authored by Faris Hasim Syauqi's avatar Faris Hasim Syauqi
Browse files

add segment from/to file

parent af3f020d
No related merge requests found
ABU ABU CAKUE
\ No newline at end of file
import struct
import os
# constant
SEG_SIZE = 32782
......@@ -6,8 +7,14 @@ DATA_SIZE = SEG_SIZE - 12
class Segment():
def __init__(self):
def __init__(self, seq_no=0, ack_no=0, data=bytes(), checksum=0):
self.DATA_PTR = 12
self.bytes = [0 for _ in range(SEG_SIZE)]
self.set_seq_no(seq_no)
self.set_ack_no(ack_no)
self.set_data(data)
self.set_checksum(checksum)
def set_seq_no(self, val):
self.bytes[0] = val >> 24 & 0xff
......@@ -33,6 +40,20 @@ class Segment():
(self.bytes[6] << 8) + \
self.bytes[7]
def set_data(self, data):
ptr = self.DATA_PTR
for byte in data:
self.bytes[ptr] = byte
ptr += 1
def get_data(self):
data=[]
ptr = self.DATA_PTR # pointer to data in segment
while self.bytes[ptr] != 0:
data.append(self.bytes[ptr])
ptr += 1
return bytes(data)
def setSYN(self):
# raise SYN flag
self.bytes[8] = self.bytes[8] | 0b01000000
......@@ -73,6 +94,7 @@ class Segment():
len_data += 1
data += struct.pack('!B', 0)
checksum=0
for i in range (0, len_data, 2):
w = (data[i] << 8) + (data[i + 1])
checksum += w
......@@ -91,16 +113,31 @@ class Segment():
self.bytes = list(byte)
return self
if __name__=="__main__":
seg = Segment()
def from_file(self, filepath):
filename = os.path.basename(filepath)
with open(filename, 'rb') as f:
self.set_data(f.read())
seg.setFIN()
seg.set_seq_no()
seg.set_ack_no()
checksum = seg.count_checksum()
seg.set_checksum(checksum)
def to_file(self, filename):
with open(filename, 'wb') as f:
data = self.get_data()
f.write(data)
seg = Segment(seqno, ackno, flag, data)
def log(self):
print(self.bytes[:50])
print(seg.bytes[:100])
\ No newline at end of file
if __name__=="__main__":
# seg = Segment()
# seg.setFIN()
# seg.set_seq_no()
# seg.set_ack_no()
# checksum = seg.count_checksum()
# seg.set_checksum(checksum)
# seg = Segment(seqno, ackno, flag, data)
seg = Segment(200, 199)
seg.from_file("halo.txt")
seg.set_checksum(seg.count_checksum())
seg.log()
seg.to_file("out.txt")
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment