121442e552282eb6cf7d618fbb470df50d8b2ac5
[tt2015.git] / a4 / tcp / adapter / listener.py
1 #!/usr/bin/python
2 from sender import Sender
3 import sys
4 import socket
5
6 PORT = 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(('', PORT))
14 s.listen(1)
15 print 'Listening on port {}'.format(PORT)
16 conn, addr = s.accept()
17 print 'Connected by {}'.format(addr)
18 print 'Initiating connection to EchoServer at port {}...'.format(serverPort)
19 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
20 seqnr = 0
21 response = ''
22 data = ''
23 has_error=False
24 did_syn=False
25 while True:
26 print 'waiting for data'
27 done = False
28 while not done:
29 d = conn.recv(1)
30 if not d:
31 break
32 if d != '\n':
33 data += d
34 if d == '\n':
35 done = True
36 print 'received: {}'.format(data)
37 if data == 'RES':
38 print 'resetting the SUT...'
39 sender.sendReset()
40 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
41 data = ''
42 has_error = False
43 did_syn = False
44 continue
45 elif has_error:
46 response = 'ERR'
47 elif data == 'SYN' and not did_syn:
48 seqnr = 100
49 print 'S: {}'.format(seqnr)
50 response = sender.sendInput('S', seqnr, seqnr)
51 did_syn = True
52 elif not did_syn:
53 response = 'ERR'
54 has_error = True
55 elif data == 'SYN':
56 response = 'ERR'
57 has_error = True
58 elif data == 'ACK':
59 response = 'Timeout'
60 if sender.lastSeqReceived != None:
61 seqnr += 1
62 print 'A: {}'.format(seqnr)
63 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
64 elif data == 'DAT':
65 response = 'Timeout'
66 if sender.lastSeqReceived != None:
67 seqnr += 1
68 print 'DAT: {} sending: a'.format(seqnr)
69 response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, 'a')
70 elif data == 'RST':
71 response = 'Timeout'
72 if sender.lastSeqReceived != None:
73 seqnr += 1
74 print 'RP: {}'.format(seqnr)
75 response = sender.sendInput("RP", seqnr, 0)
76 elif data == 'FIN':
77 response = 'Timeout'
78 if sender.lastSeqReceived != None:
79 seqnr += 1
80 print 'F: {}'.format(seqnr)
81 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
82 else:
83 print 'INVALID INPUT!: {}'.format(repr(data))
84 break
85
86 if response == 'Timeout':
87 data = 'ERR'
88 has_error = True
89 elif response[0] == 'A':
90 data = 'ACK'
91 elif response[0] == 'PA':
92 data = 'DATA'
93 elif response[0] == 'R':
94 data = 'RST'
95 elif response[0] == 'SA':
96 data = 'SYN-ACK'
97 else:
98 data = 'ERR'
99
100 print 'RESPONSE: '+data
101 conn.send('{}\n'.format(data))
102 print 'sent...'
103 data = ''
104 print 'closed'
105 conn.close()
106 exit()