reset a3, kut Charlie ;)
[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 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 ch = conn.recv(1)
25 if not ch:
26 break
27
28 if ch != ' ':
29 data = data+ch
30 continue
31
32 data = conn.recv(int(data))
33 print "INPUT: "+data
34
35 if data == 'SUT-RESET':
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 == 'DATA':
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!'
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('{} {}'.format(len(data), data));
88
89 data = ''
90 continue
91
92 if not data:
93 break
94 data = data.strip()
95 if data == 'Listen?':
96 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
97 response = ''
98 if data == 'SYN?':
99 seqnr = 100
100 print 'S: {}'.format(seqnr)
101 response = sender.sendInput('S', seqnr, seqnr)
102 if data == 'ACK?':
103 seqnr += 1
104 print 'A: {}'.format(seqnr)
105 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
106 if data == 'FINACK?':
107 seqnr += 1
108 print 'FA: {}'.format(seqnr)
109 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
110 if data == 'FIN?':
111 seqnr += 1
112 print 'F: {}'.format(seqnr)
113 response = sender.sendInput("F", seqnr, sender.lastSeqReceived + 1)
114 if data == 'RST?':
115 seqnr += 1
116 print 'RP: {}'.format(seqnr)
117 response = sender.sendInput("RP", seqnr, 0)
118 sender.sendReset()
119 if response:
120 if response == 'Timeout':
121 print 'data: {} - TIMEOUT!'.format(data)
122 conn.send('TIMEOUT!\n')
123 elif response[0] == 'A':
124 print 'data: {} - ACK!'.format(data)
125 conn.send('ACK!\n')
126 elif response[0] == 'R':
127 print 'data: {} - RST!'.format(data)
128 conn.send('RST!\n')
129 elif response[0] == 'SA':
130 print 'data: {} - SYNACK!'.format(data)
131 conn.send('SYNACK!\n')
132 else:
133 print 'data: {}'.format(data)
134
135 print 'closed'
136 conn.close()
137 exit()