%s'''
- def __init__(self, window):
- super(FreeswitchConfigServer, self).__init__(window)
+ def __init__(self, database, parent):
+ super(FreeswitchConfigServer, self).__init__(parent)
self.host = None
self.port = None
self.connection_id = None
self.is_running = False
self.generators = [
- GenClass(window, self) for GenClass in (
+ GenClass(database, self) for GenClass in (
SofiaConfGenerator,)]
- self.httpRequestParser = HttpRequestParser(self)
+ self.httpRequestParser = HttpRequestParser()
def setSocketData(self, host, port, connection_id):
"""
def receiveData(self):
# TODO: read in chunks.
for line in str(self.socket.readAll()).split('\r\n'):
- print self.httpRequestParser.i, line
self.httpRequestParser.handle(line)
+ for generator in self.generators:
+ if generator.canHandle(self.httpRequestParser.data):
+ self.state += 1
+ self.result = etree.tostring(generator.generateConfig(
+ self.httpRequestParser.headers))
+ break
+
response = self.httpRequestParser.result or self.configNotFound
http_response = self.responseTemplate % (len(response), response)
self.socket.write(http_response)
- print
- print http_response
- print
self.httpRequestParser.reset()
self.socket.close()
+
class HttpParseError(Exception):
"""
Error parsing HTTP request.
"""
A simple state machine for parsing HTTP requests.
"""
- HTTP_NONE, HTTP_REQUEST, HTTP_HEADERS, HTTP_EMPTY, HTTP_MESSAGE, \
- HTTP_DONE = range(6)
- HTTP_STATES = ['NONE', 'REQUEST', 'HEADERS', 'EMPTY', 'MESSAGE', 'DONE']
+ HTTP_NONE, HTTP_REQUEST, HTTP_HEADERS, HTTP_EMPTY, HTTP_BODY, HTTP_DONE = \
+ range(6)
+ HTTP_STATES = ['NONE', 'REQUEST', 'HEADERS', 'EMPTY', 'BODY', 'DONE']
- def __init__(self, parent):
- self.parent = parent
- self.i = 0
+ def __init__(self):
self.reset()
def reset(self):
"""
Reset parser to initial state.
"""
- self.i += 1
# Initial values for request data.
self.method = None
self.request_path = None
"""
self.state += 1
- def handleMessage(self, line):
+ def handleBody(self, line):
"""
Append to message body.
"""
+ if self.method != 'POST':
+ raise HttpParseError('Only POST request are supported')
+
self.data = dict(pair.split('=', 2) for pair in line.split('&'))
- #for k, v in self.data.items():
- # print k, '=>', v
- #print
-
- for generator in self.parent.generators:
- if generator.canHandle(self.data):
- self.state += 1
- self.result = etree.tostring(generator.generateConfig(
- self.headers))
- break
-
+ def handleDone(self, line):
+ raise HttpParseError("Can't read past request end")
+
class FreeswitchConfigGenerator(object):
"""
param_match = {}
- def __init__(self, model, parent):
- self.model = model
+ def __init__(self, database, parent):
+ self.database = database
self.parent = parent
- def database(self):
- """
- Return database instance.
- """
- return self.model.controllers['connection'].model.database()
- database = property(database)
+# def database(self):
+# """
+# Return database instance.
+# """
+# return self.model.controllers['connection'].model.database()
def canHandle(self, params):
"""
self.addParams(user_elt, params)
return root_elt
+
+
+class DialplanGenerator(FreeswitchConfigGenerator):
+ """
+ Generates XML dialplans.
+ """
+
+ param_match = {'section': 'dialplan'}
+
for query_string in sql_queries[:-1]:
query.exec_(query_string)
- return created
+ return db, created
else:
# Something went horribly wrong.
QtGui.QMessageBox.warning(
QtGui.QApplication.installTranslator(translator)
# Initialize main window.
- created = setupDb()
+ db, created = setupDb()
main = QtGui.QMainWindow()
views = ui.Ui_MainWindow()
views.setupUi(main)
QtCore.SIGNAL('currentRowChanged(QModelIndex, QModelIndex)'),
connection_index, connection_index)
+ # TODO: not needed anymore?
if created:
main.controllers['connection'].add()
sys.exit(app.exec_())