897ec4be15c0420d744c13944e42f4338257236e
[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 == 'SYN':
36 seqnr = 100
37 print 'S: {}'.format(seqnr)
38 response = sender.sendInput('S', seqnr, seqnr)
39 elif data == 'ACK':
40 seqnr += 1
41 print 'A: {}'.format(seqnr)
42 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
43 elif data == 'DATA':
44 seqnr += 1
45 print 'DAT: {} sending: a'.format(seqnr)
46 response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, 'a')
47 elif data == 'RST':
48 seqnr += 1
49 print 'RP: {}'.format(seqnr)
50 response = sender.sendInput("RP", seqnr, 0)
51 sender.sendReset()
52 elif data == 'FIN':
53 seqnr += 1
54 print 'F: {}'.format(seqnr)
55 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
56 else:
57 print 'INVALID INPUT!'
58 break
59
60 if response == 'Timeout':
61 data = 'TO'
62 elif response[0] == 'A':
63 data = 'ACK'
64 elif response[0] == 'R':
65 data = 'RST'
66 elif response[0] == 'SA':
67 data = 'SYN-ACK'
68 else:
69 data = 'ERR'
70
71 print 'RESPONSE: '+data
72 conn.send('{} {}'.format(len(data), data));
73
74 data = ''
75 continue
76
77 if not data:
78 break
79 data = data.strip()
80 if data == 'Listen?':
81 sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
82 response = ''
83 if data == 'SYN?':
84 seqnr = 100
85 print 'S: {}'.format(seqnr)
86 response = sender.sendInput('S', seqnr, seqnr)
87 if data == 'ACK?':
88 seqnr += 1
89 print 'A: {}'.format(seqnr)
90 response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
91 if data == 'FINACK?':
92 seqnr += 1
93 print 'FA: {}'.format(seqnr)
94 response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
95 if data == 'FIN?':
96 seqnr += 1
97 print 'F: {}'.format(seqnr)
98 response = sender.sendInput("F", seqnr, sender.lastSeqReceived + 1)
99 if data == 'RST?':
100 seqnr += 1
101 print 'RP: {}'.format(seqnr)
102 response = sender.sendInput("RP", seqnr, 0)
103 sender.sendReset()
104 if response:
105 if response == 'Timeout':
106 print 'data: {} - TIMEOUT!'.format(data)
107 conn.send('TIMEOUT!\n')
108 elif response[0] == 'A':
109 print 'data: {} - ACK!'.format(data)
110 conn.send('ACK!\n')
111 elif response[0] == 'R':
112 print 'data: {} - RST!'.format(data)
113 conn.send('RST!\n')
114 elif response[0] == 'SA':
115 print 'data: {} - SYNACK!'.format(data)
116 conn.send('SYNACK!\n')
117 else:
118 print 'data: {}'.format(data)
119
120 print 'closed'
121 conn.close()
122 exit()