17d6f217ea3948135dc37bf9ec1ad084ffd4a4e7
[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 while True:
24 print 'waiting for data'
25 done = False
26 while not done:
27 d = conn.recv(1)
28 if not d:
29 break
30 if d != '\n':
31 data += d
32 if d == '\n':
33 done = True
34 print 'received: {}'.format(data)
35 if data == 'RES':
36 print 'resetting the SUT...'
37 sender.sendReset()
38 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
39 data = ''
40 continue
41 elif data == 'SYN':
42 seqnr = 100
43 print 'S: {}'.format(seqnr)
44 response = sender.sendInput('S', seqnr, seqnr)
45 elif data == 'ACK':
46 response = 'Timeout'
47 if sender.lastSeqReceived != None:
48 seqnr += 1
49 print 'A: {}'.format(seqnr)
50 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
51 elif data == 'DAT':
52 response = 'Timeout'
53 if sender.lastSeqReceived != None:
54 seqnr += 1
55 print 'DAT: {} sending: a'.format(seqnr)
56 response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, 'a')
57 elif data == 'RST':
58 response = 'Timeout'
59 if sender.lastSeqReceived != None:
60 seqnr += 1
61 print 'RP: {}'.format(seqnr)
62 response = sender.sendInput("RP", seqnr, 0)
63 elif data == 'FIN':
64 response = 'Timeout'
65 if sender.lastSeqReceived != None:
66 seqnr += 1
67 print 'F: {}'.format(seqnr)
68 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
69 else:
70 print 'INVALID INPUT!: {}'.format(repr(data))
71 break
72
73 if response == 'Timeout':
74 data = 'TO'
75 elif response[0] == 'A':
76 data = 'ACK'
77 elif response[0] == 'PA':
78 data = 'DATA'
79 elif response[0] == 'R':
80 data = 'RST'
81 elif response[0] == 'SA':
82 data = 'SYN-ACK'
83 else:
84 data = 'ERR'
85
86 print 'RESPONSE: '+data
87 conn.send('{}\n'.format(data))
88 print 'sent...'
89 data = ''
90 print 'closed'
91 conn.close()
92 exit()