working setup for a4
[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 = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
38 data = ''
39 continue
40 elif data == 'SYN':
41 seqnr = 100
42 print 'S: {}'.format(seqnr)
43 response = sender.sendInput('S', seqnr, seqnr)
44 elif data == 'ACK':
45 response = 'Timeout'
46 if sender.lastSeqReceived != None:
47 seqnr += 1
48 print 'A: {}'.format(seqnr)
49 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
50 elif data == 'DAT':
51 response = 'Timeout'
52 if sender.lastSeqReceived != None:
53 seqnr += 1
54 print 'DAT: {} sending: a'.format(seqnr)
55 response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, 'a')
56 elif data == 'RST':
57 response = 'Timeout'
58 if sender.lastSeqReceived != None:
59 seqnr += 1
60 print 'RP: {}'.format(seqnr)
61 response = sender.sendInput("RP", seqnr, 0)
62 sender.sendReset()
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()