f6a09053ac50b53ccebbdc70d7679932e5c073fd
[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 = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
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 if data == 'SYN':
35 seqnr = 100
36 print 'S: {}'.format(seqnr)
37 response = sender.sendInput('S', seqnr, seqnr)
38 elif data == 'ACK':
39 seqnr += 1
40 print 'A: {}'.format(seqnr)
41 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
42 elif data == 'RST':
43 seqnr += 1
44 print 'RP: {}'.format(seqnr)
45 response = sender.sendInput("RP", seqnr, 0)
46 sender.sendReset()
47 elif data == 'FIN':
48 seqnr += 1
49 print 'F: {}'.format(seqnr)
50 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
51 else:
52 print 'INVALID INPUT!'
53 break
54
55 if response == 'Timeout':
56 data = 'TO'
57 elif response[0] == 'A':
58 data = 'ACK'
59 elif response[0] == 'R':
60 data = 'RST'
61 elif response[0] == 'SA':
62 data = 'SYN-ACK'
63 else:
64 data = 'ERR'
65
66 print 'RESPONSE: '+data
67 conn.send('{} {}'.format(len(data), data));
68
69 data = ''
70 continue
71
72 if not data:
73 break
74 data = data.strip()
75 if data == 'Listen?':
76 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
77 response = ''
78 if data == 'SYN?':
79 seqnr = 100
80 print 'S: {}'.format(seqnr)
81 response = sender.sendInput('S', seqnr, seqnr)
82 if data == 'ACK?':
83 seqnr += 1
84 print 'A: {}'.format(seqnr)
85 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
86 if data == 'FINACK?':
87 seqnr += 1
88 print 'FA: {}'.format(seqnr)
89 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
90 if data == 'FIN?':
91 seqnr += 1
92 print 'F: {}'.format(seqnr)
93 response = sender.sendInput("F", seqnr, sender.lastSeqReceived + 1)
94 if data == 'RST?':
95 seqnr += 1
96 print 'RP: {}'.format(seqnr)
97 response = sender.sendInput("RP", seqnr, 0)
98 sender.sendReset()
99 if response:
100 if response == 'Timeout':
101 print 'data: {} - TIMEOUT!'.format(data)
102 conn.send('TIMEOUT!\n')
103 elif response[0] == 'A':
104 print 'data: {} - ACK!'.format(data)
105 conn.send('ACK!\n')
106 elif response[0] == 'R':
107 print 'data: {} - RST!'.format(data)
108 conn.send('RST!\n')
109 elif response[0] == 'SA':
110 print 'data: {} - SYNACK!'.format(data)
111 conn.send('SYNACK!\n')
112 else:
113 print 'data: {}'.format(data)
114
115 print 'closed'
116 conn.close()
117 exit()