summaryrefslogtreecommitdiffstats
path: root/src/ogClient.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/ogClient.py')
-rw-r--r--src/ogClient.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/ogClient.py b/src/ogClient.py
new file mode 100644
index 0000000..8c965fa
--- /dev/null
+++ b/src/ogClient.py
@@ -0,0 +1,95 @@
+import errno
+import select
+import socket
+import time
+import httplib
+from mimetools import Message
+from StringIO import StringIO
+
+CONNECTING = 0
+RECEIVING = 1
+
+class ogClient:
+ def __init__(self, ip, port):
+ self.ip = ip
+ self.port = port
+
+ def get_socket(self):
+ return self.sock
+
+ def get_state(self):
+ return self.state
+
+ def connect(self):
+ print "connecting"
+ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.sock.setblocking(0)
+ self.state = CONNECTING
+ self.data = ""
+ self.trailer = False
+ self.content_len = 0
+
+ try:
+ self.sock.connect((self.ip, self.port))
+ except socket.error, err:
+ if err.errno == errno.EINPROGRESS:
+ return
+ elif err.errno == errno.ECONNREFUSED:
+ return
+
+ print "Error connect " + str(err)
+
+ def connect2(self):
+ try:
+ self.sock.connect((self.ip, self.port))
+ except socket.error, err:
+ if err.errno == errno.EISCONN:
+ print "connected"
+ self.state = RECEIVING
+ else:
+ print "connection refused, retrying..."
+ self.state = CONNECTING
+ self.sock.close()
+ self.connect()
+
+ def receive(self):
+ print "receiving"
+ try:
+ data = self.sock.recv(1024)
+ except socket.err, err:
+ print "Error3 " + str(err)
+
+ if len(data) == 0:
+ self.state = CONNECTING
+ self.sock.close()
+ self.connect()
+
+ print "received " + data
+ self.data = self.data + data
+
+ if not self.trailer:
+ if self.data.find("\r\n") > 0:
+ # https://stackoverflow.com/questions/4685217/parse-raw-http-headers
+ request_line, headers_alone = self.data.split('\n', 1)
+ headers = Message(StringIO(headers_alone))
+
+ print "DEBUG: \r\n trailer received"
+ print "DEBUG: HTTP keys are " + str(headers.keys())
+
+ if 'content-length' in headers.keys():
+ self.content_len = int(headers['content-length'])
+
+ self.trailer = True
+
+ if self.trailer and len(self.data) >= self.content_len:
+ #
+ # TODO: handle request here
+ #
+
+ self.sock.send("HTTP/1.0 200 OK\r\n\r\n")
+
+ # Cleanup state information from request
+ self.data = ""
+ self.content_len = 0
+ self.trailer = False
+ print "DEBUG: request has been processed!"