From 29fe301ec82a657ee889411ad032af9909ceb6a4 Mon Sep 17 00:00:00 2001 From: Alvaro Neira Ayuso Date: Thu, 12 Dec 2019 11:50:46 +0100 Subject: Create new ogClient This commit init the new ogClient. The new ogClient has support for configuring and for connecting with the ogAdminServer. --- src/__init__.py | 0 src/ogClient.py | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ogConfig.py | 24 +++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 src/__init__.py create mode 100644 src/ogClient.py create mode 100644 src/ogConfig.py (limited to 'src') diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 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] -- cgit v1.2.3-18-g5258