3578d3ec5a622768544435cc3716af6d7b39980f
[tt2015.git] / a3 / code / jtorx / client / helloworld.py
1 #!/usr/bin/python
2 from sender import Sender
3 import sys
4 import socket
5
6 JTORXPORT = 8888
7
8 if __name__ == "__main__":
9 serverPort = 10000
10 if len(sys.argv) > 1:
11 serverPort = int(sys.argv[1])
12 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
13 s.bind(('', JTORXPORT))
14 s.listen(1)
15 print 'Listening on port {} for JTorx'.format(JTORXPORT)
16 conn, addr = s.accept()
17 print 'Connected by JTorx at {}'.format(addr)
18 sender = None
19 seqnr = None
20 response = ''
21 while True:
22 data = conn.recv(1024)
23 if not data:
24 break
25 data = data.strip()
26 if data == 'Listen?':
27 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
28 response = ''
29 if data == 'SYN?':
30 seqnr = 100
31 print 'S: {}'.format(seqnr)
32 response = sender.sendInput('S', seqnr, seqnr)
33 if data == 'ACK?':
34 seqnr += 1
35 print 'A: {}'.format(seqnr)
36 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
37 if data == 'FINACK?':
38 seqnr += 1
39 print 'FA: {}'.format(seqnr)
40 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
41 if data == 'FIN?':
42 seqnr += 1
43 print 'F: {}'.format(seqnr)
44 response = sender.sendInput("F", seqnr, sender.lastSeqReceived + 1)
45 if data == 'RST?':
46 seqnr += 1
47 print 'RP: {}'.format(seqnr)
48 response = sender.sendInput("RP", seqnr, 0)
49 sender.sendReset()
50 if data == 'DAT?':
51 seqnr += 1
52 print 'DAT: {} sending: a'.format(seqnr)
53 response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, 'a')
54 if response:
55 if response == 'Timeout':
56 print 'data: {} - TIMEOUT!'.format(data)
57 conn.send('TIMEOUT!\n')
58 elif response[0] == 'A':
59 print 'data: {} - ACK!'.format(data)
60 conn.send('ACK!\n')
61 elif response[0] == 'R':
62 print 'data: {} - RST!'.format(data)
63 conn.send('RST!\n')
64 elif response[0] == 'SA':
65 print 'data: {} - SYNACK!'.format(data)
66 conn.send('SYNACK!\n')
67 else:
68 print 'data: {}'.format(data)
69
70 print 'closed'
71 conn.close()
72 exit()