+#!/usr/bin/python
+from sender import Sender
+import sys
+import socket
+
+PORT = 8888
+
+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(('', PORT))
+ s.listen(1)
+ print 'Listening on port {}'.format(PORT)
+ conn, addr = s.accept()
+ print 'Connected by {}'.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 = ''
+ has_error=False
+ did_syn=False
+ con_closed=False
+ while True:
+ print 'waiting for data'
+ done = False
+ while not done:
+ d = conn.recv(1)
+ if not d:
+ break
+ if d != '\n':
+ data += d
+ if d == '\n':
+ done = True
+ if data == '':
+ print 'invalid data received!'
+ break
+ print 'received: {}'.format(data)
+ if data == 'RES':
+ print 'resetting the SUT...'
+ #sender.sendReset()
+ sender = Sender(serverIP="127.0.0.1", networkInterface="lo", isLocal=True, serverPort=serverPort, waitTime=1, isVerbose=0)
+ data = ''
+ has_error = False
+ did_syn = False
+ con_closed = False
+ continue
+ elif has_error:
+ response = 'ERR'
+ elif con_closed:
+ response = 'Closed'
+ elif data == 'SYN' and not did_syn:
+ seqnr = 100
+ print 'S: {}'.format(seqnr)
+ response = sender.sendInput('S', seqnr, seqnr)
+ did_syn = True
+ elif not did_syn:
+ response = 'ERR'
+ has_error = True
+ elif data == 'SYN':
+ response = 'ERR'
+ has_error = True
+ 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 == 'DAT':
+ 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)
+ if response[0] == 'T':
+ response = 'Reset'
+ elif data == 'FIN':
+ response = 'Timeout'
+ if sender.lastSeqReceived != None:
+ seqnr += 1
+ print 'F: {}'.format(seqnr)
+ response = sender.sendInput("FA", seqnr, sender.lastSeqReceived + 1)
+ if response[0] == 'A':
+ con_closed = True
+ else
+ response = 'Timeout'
+ else:
+ print 'INVALID INPUT!: {}'.format(repr(data))
+ break
+
+ if response == 'Timeout':
+ data = 'ERR'
+ has_error = True
+ elif response == 'Reset':
+ data = 'Reset'
+ did_syn = False
+ elif response == 'Closed':
+ data = 'Closed'
+ 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'
+ has_error = True
+
+ print 'RESPONSE: '+data
+ conn.send('{}\n'.format(data))
+ print 'sent...'
+ data = ''
+ print 'closed'
+ conn.close()
+ exit()