last model added
[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 con_closed=False
26 while True:
27 print 'waiting for data'
28 done = False
29 while not done:
30 d = conn.recv(1)
31 if not d:
32 break
33 if d != '\n':
34 data += d
35 if d == '\n':
36 done = True
37 if data == '':
38 print 'invalid data received!'
39 break
40 print 'received: {}'.format(data)
41 if data == 'RES':
42 print 'resetting the SUT...'
43 #sender.sendReset()
44 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
45 data = ''
46 has_error = False
47 did_syn = False
48 con_closed = False
49 continue
50 elif has_error:
51 response = 'ERR'
52 elif con_closed:
53 response = 'Closed'
54 elif data == 'SYN' and not did_syn:
55 seqnr = 100
56 print 'S: {}'.format(seqnr)
57 response = sender.sendInput('S', seqnr, seqnr)
58 did_syn = True
59 elif not did_syn:
60 response = 'ERR'
61 has_error = True
62 elif data == 'SYN':
63 response = 'ERR'
64 has_error = True
65 elif data == 'ACK':
66 response = 'Timeout'
67 if sender.lastSeqReceived != None:
68 seqnr += 1
69 print 'A: {}'.format(seqnr)
70 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
71 elif data == 'DAT':
72 response = 'Timeout'
73 if sender.lastSeqReceived != None:
74 seqnr += 1
75 print 'DAT: {} sending: a'.format(seqnr)
76 response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, 'a')
77 elif data == 'RST':
78 response = 'Timeout'
79 if sender.lastSeqReceived != None:
80 seqnr += 1
81 print 'RP: {}'.format(seqnr)
82 response = sender.sendInput("RP", seqnr, 0)
83 if response[0] == 'T':
84 response = 'Reset'
85 elif data == 'FIN':
86 response = 'Timeout'
87 if sender.lastSeqReceived != None:
88 seqnr += 1
89 print 'F: {}'.format(seqnr)
90 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
91 if response[0] == 'A':
92 con_closed = True
93 else
94 response = 'Timeout'
95 else:
96 print 'INVALID INPUT!: {}'.format(repr(data))
97 break
98
99 if response == 'Timeout':
100 data = 'ERR'
101 has_error = True
102 elif response == 'Reset':
103 data = 'Reset'
104 did_syn = False
105 elif response == 'Closed':
106 data = 'Closed'
107 elif response[0] == 'A':
108 data = 'ACK'
109 elif response[0] == 'PA':
110 data = 'DATA'
111 elif response[0] == 'R':
112 data = 'RST'
113 elif response[0] == 'SA':
114 data = 'SYN-ACK'
115 else:
116 data = 'ERR'
117 has_error = True
118
119 print 'RESPONSE: '+data
120 conn.send('{}\n'.format(data))
121 print 'sent...'
122 data = ''
123 print 'closed'
124 conn.close()
125 exit()