untested python adapter for gast program
[tt2015.git] / a3 / code / adapter / listener.py
1 #!/usr/bin/python
2 from sender import Sender
3 import sys
4 import socket
5
6 GASTPORT = 1203
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(('', GASTPORT))
14 s.listen(1)
15 print 'Listening on port {} for Gast'.format(GASTPORT)
16 conn, addr = s.accept()
17 print 'Connected by Gast at {}'.format(addr)
18 sender = None
19 seqnr = None
20 response = ''
21 data = ''
22 while True:
23 ch = conn.recv(1)
24 if not ch:
25 break
26
27 if ch != ' ':
28 data = data+ch
29 continue
30
31 data = conn.recv(int(data))
32 print "INPUT: "+data
33
34 data = ''
35 continue
36
37 if not data:
38 break
39 data = data.strip()
40 if data == 'Listen?':
41 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
42 response = ''
43 if data == 'SYN?':
44 seqnr = 100
45 print 'S: {}'.format(seqnr)
46 response = sender.sendInput('S', seqnr, seqnr)
47 if data == 'ACK?':
48 seqnr += 1
49 print 'A: {}'.format(seqnr)
50 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
51 if data == 'FINACK?':
52 seqnr += 1
53 print 'FA: {}'.format(seqnr)
54 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
55 if data == 'FIN?':
56 seqnr += 1
57 print 'F: {}'.format(seqnr)
58 response = sender.sendInput("F", seqnr, sender.lastSeqReceived + 1)
59 if data == 'RST?':
60 seqnr += 1
61 print 'RP: {}'.format(seqnr)
62 response = sender.sendInput("RP", seqnr, 0)
63 sender.sendReset()
64 if response:
65 if response == 'Timeout':
66 print 'data: {} - TIMEOUT!'.format(data)
67 conn.send('TIMEOUT!\n')
68 elif response[0] == 'A':
69 print 'data: {} - ACK!'.format(data)
70 conn.send('ACK!\n')
71 elif response[0] == 'R':
72 print 'data: {} - RST!'.format(data)
73 conn.send('RST!\n')
74 elif response[0] == 'SA':
75 print 'data: {} - SYNACK!'.format(data)
76 conn.send('SYNACK!\n')
77 else:
78 print 'data: {}'.format(data)
79
80 print 'closed'
81 conn.close()
82 exit()