--- /dev/null
+#!/usr/bin/python
+from sender import Sender
+import sys
+import socket
+
+GASTPORT = 1203
+
+if __name__ == "__main__":
+ serverPort = 10000
+ if len(sys.argv) > 1:
+ serverPort = int(sys.argv[1])
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.bind(('', GASTPORT))
+ s.listen(1)
+ print 'Listening on port {} for Gast'.format(GASTPORT)
+ conn, addr = s.accept()
+ print 'Connected by Gast at {}'.format(addr)
+ print 'Initiating connection to EchoServer at port {}...'.format(serverPort)
+ sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
+ seqnr = 0
+ response = ''
+ data = ''
+ while True:
+ ch = conn.recv(1)
+ if not ch:
+ break
+
+ if ch != ' ':
+ data = data+ch
+ continue
+
+ data = conn.recv(int(data))
+ print "INPUT: "+data
+
+ if data == 'SUT-RESET':
+ print 'resetting the SUT...'
+ sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
+ data = ''
+ continue
+ elif data == 'SYN':
+ seqnr = 100
+ print 'S: {}'.format(seqnr)
+ response = sender.sendInput('S', seqnr, seqnr)
+ elif data == 'ACK':
+ response = 'Timeout'
+ if sender.lastSeqReceived != None:
+ seqnr += 1
+ print 'A: {}'.format(seqnr)
+ response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
+ elif data == 'DATA':
+ response = 'Timeout'
+ if sender.lastSeqReceived != None:
+ seqnr += 1
+ print 'DAT: {} sending: a'.format(seqnr)
+ response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, 'a')
+ elif data == 'RST':
+ response = 'Timeout'
+ if sender.lastSeqReceived != None:
+ seqnr += 1
+ print 'RP: {}'.format(seqnr)
+ response = sender.sendInput("RP", seqnr, 0)
+ sender.sendReset()
+ elif data == 'FIN':
+ response = 'Timeout'
+ if sender.lastSeqReceived != None:
+ seqnr += 1
+ print 'F: {}'.format(seqnr)
+ response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
+ else:
+ print 'INVALID INPUT!'
+ break
+
+ if response == 'Timeout':
+ data = 'TO'
+ elif response[0] == 'A':
+ data = 'ACK'
+ elif response[0] == 'PA':
+ data = 'DATA'
+ elif response[0] == 'R':
+ data = 'RST'
+ elif response[0] == 'SA':
+ data = 'SYN-ACK'
+ else:
+ data = 'ERR'
+
+ print 'RESPONSE: '+data
+ conn.send('{} {}'.format(len(data), data));
+
+ data = ''
+ continue
+
+ if not data:
+ break
+ data = data.strip()
+ if data == 'Listen?':
+ sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
+ response = ''
+ if data == 'SYN?':
+ seqnr = 100
+ print 'S: {}'.format(seqnr)
+ response = sender.sendInput('S', seqnr, seqnr)
+ if data == 'ACK?':
+ seqnr += 1
+ print 'A: {}'.format(seqnr)
+ response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
+ if data == 'FINACK?':
+ seqnr += 1
+ print 'FA: {}'.format(seqnr)
+ response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
+ if data == 'FIN?':
+ seqnr += 1
+ print 'F: {}'.format(seqnr)
+ response = sender.sendInput("F", seqnr, sender.lastSeqReceived + 1)
+ if data == 'RST?':
+ seqnr += 1
+ print 'RP: {}'.format(seqnr)
+ response = sender.sendInput("RP", seqnr, 0)
+ sender.sendReset()
+ if response:
+ if response == 'Timeout':
+ print 'data: {} - TIMEOUT!'.format(data)
+ conn.send('TIMEOUT!\n')
+ elif response[0] == 'A':
+ print 'data: {} - ACK!'.format(data)
+ conn.send('ACK!\n')
+ elif response[0] == 'R':
+ print 'data: {} - RST!'.format(data)
+ conn.send('RST!\n')
+ elif response[0] == 'SA':
+ print 'data: {} - SYNACK!'.format(data)
+ conn.send('SYNACK!\n')
+ else:
+ print 'data: {}'.format(data)
+
+ print 'closed'
+ conn.close()
+ exit()