summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlvaro Neira Ayuso <aneira@soleta.eu>2019-12-12 11:50:46 +0100
committerAlvaro Neira Ayuso <alvaroneay@gmail.com>2020-01-19 19:50:44 +0100
commit29fe301ec82a657ee889411ad032af9909ceb6a4 (patch)
tree2979c65a5a0fb4cfb9c8424f2e905b595977cbe2 /src
parente3d707cfb3dad78388663339af9412e0697b358c (diff)
Create new ogClient
This commit init the new ogClient. The new ogClient has support for configuring and for connecting with the ogAdminServer.
Diffstat (limited to 'src')
-rw-r--r--src/__init__.py0
-rw-r--r--src/ogClient.py95
-rw-r--r--src/ogConfig.py24
3 files changed, 119 insertions, 0 deletions
diff --git a/src/__init__.py b/src/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/__init__.py
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!"
diff --git a/src/ogConfig.py b/src/ogConfig.py
new file mode 100644
index 0000000..84d3346
--- /dev/null
+++ b/src/ogConfig.py
@@ -0,0 +1,24 @@
+import configparser
+
+class ogConfig:
+ def __init__(self):
+ self.parser = configparser.ConfigParser()
+
+ def parserFile(self, path):
+ self.parser.read(path)
+ if len(self.parser.sections()) == 0:
+ return False
+
+ return True
+
+ def getSections(self):
+ return self.parser.sections()
+
+ def getContainsSection(self, section):
+ return section in self.parser
+
+ def getValueSection(self, section, key):
+ if (not self.getContainsSection(section)):
+ return ''
+
+ return self.parser[section][key]