reset a3, kut Charlie ;)
[tt2015.git] / a3 / code / jtorx / client / helloworld.py
diff --git a/a3/code/jtorx/client/helloworld.py b/a3/code/jtorx/client/helloworld.py
new file mode 100644 (file)
index 0000000..e729e4b
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+from sender import Sender
+import sys
+import socket
+
+JTORXPORT = 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(('', JTORXPORT))
+    s.listen(1)
+    print 'Listening on port {} for JTorx'.format(JTORXPORT)
+    conn, addr = s.accept()
+    print 'Connected by JTorx at {}'.format(addr)
+    sender = None
+    seqnr = None
+    response = ''
+    while True:
+        data = conn.recv(1024)
+        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 data == 'DAT?':
+            print 'DAT: {} sending: a'.format(seqnr)
+            response = sender.sendInput('A', seqnr, sender.lastSeqReceived + 1)
+            response = sender.sendInput('PA', seqnr, sender.lastSeqReceived + 1, data='a\n')
+            seqnr += 2
+        if response:
+            print 'response: {}'.format(response)
+            if response == 'Timeout':
+                print 'data: {} - TIMEOUT!'.format(data)
+                conn.send('TIMEOUT!\n')
+            elif response[0] == 'A' or response[0] == 'PA':
+                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()