-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmessage_sender.py
More file actions
59 lines (40 loc) · 1.82 KB
/
message_sender.py
File metadata and controls
59 lines (40 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import settings
import cryptograph
import sender
class message_sender:
MESSAGE: str
def __init__(self, soc, arguments):
self.MESSAGE = arguments[0]
self.soc = soc
def send_message(self):
# check if fragmenting is needed
if (len(self.MESSAGE) + settings.MY_HEADER > settings.maxFragSize):
print("Fragmenting . . .")
self.sendFragmentedMsg(self.soc)
else:
self.sendNOTFragmentedMsg(self.soc)
def sendNOTFragmentedMsg(self, soc):
identifier = cryptograph.generateIdentifier()
paycheck = cryptograph.calculatePayCheck(self.MESSAGE)
completeMessage = sender.build_and_send(soc, identifier, 'MSG', 0, paycheck, self.MESSAGE)
self.waitForConfirmation(soc)
def sendFragmentedMsg(self, soc):
lastByte = 0
unsentMessageSize = len(self.MESSAGE)
identifier = cryptograph.generateIdentifier()
fragmentNumber = 0
while (unsentMessageSize > 0):
newLastByte = lastByte + settings.maxFragSize
paycheck = cryptograph.calculatePayCheck(self.MESSAGE[lastByte:newLastByte])
# completeMessage = sender.build_and_send(soc, identifier, 'FGM', fragmentNumber, paycheck, self.MESSAGE[lastByte:newLastByte])
new_flag = 'FGM'
if (unsentMessageSize - newLastByte - lastByte <= 0):
new_flag = 'FGE'
if (fragmentNumber % 2 == 0):
completeMessage = sender.build_and_send(soc, identifier, new_flag, fragmentNumber, paycheck, self.MESSAGE[lastByte:newLastByte])
self.waitForConfirmation(soc)
unsentMessageSize -= newLastByte - lastByte
lastByte = newLastByte
fragmentNumber += 1
def waitForConfirmation(self, soc):
data, addr = soc.recvfrom(1024)