diff options
author | Alvaro Neira Ayuso <aneira@soleta.eu> | 2019-12-12 11:50:46 +0100 |
---|---|---|
committer | Alvaro Neira Ayuso <alvaroneay@gmail.com> | 2020-01-19 19:50:44 +0100 |
commit | 29fe301ec82a657ee889411ad032af9909ceb6a4 (patch) | |
tree | 2979c65a5a0fb4cfb9c8424f2e905b595977cbe2 /src | |
parent | e3d707cfb3dad78388663339af9412e0697b358c (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__.py | 0 | ||||
-rw-r--r-- | src/ogClient.py | 95 | ||||
-rw-r--r-- | src/ogConfig.py | 24 |
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] |