projects
/
ipypbx
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
bd5981b
)
Minor changes required for running tests
author
Stas Shtin
<antisvin@gmail.com>
Tue, 20 Apr 2010 14:43:55 +0000
(18:43 +0400)
committer
Stas Shtin
<antisvin@gmail.com>
Tue, 20 Apr 2010 14:43:55 +0000
(18:43 +0400)
.gitignore
patch
|
blob
|
history
bin/ipypbx
patch
|
blob
|
history
src/ipypbx/controllers.py
patch
|
blob
|
history
src/ipypbx/http.py
patch
|
blob
|
history
src/ipypbx/main.py
patch
|
blob
|
history
diff --git
a/.gitignore
b/.gitignore
index
8d70b4c
..
6335d60
100644
(file)
--- a/
.gitignore
+++ b/
.gitignore
@@
-4,3
+4,5
@@
local_settings.py
.#*
*#
_build
.#*
*#
_build
+.coverage
+
diff --git
a/bin/ipypbx
b/bin/ipypbx
index
01da890
..
ac286c8
100755
(executable)
--- a/
bin/ipypbx
+++ b/
bin/ipypbx
@@
-1,2
+1,6
@@
-/usr/bin/python -m ipypbx.main
+#!/usr/bin/env python
+
+if __name__ == '__main__':
+ import ipypbx
+ ipypbx.main()
diff --git
a/src/ipypbx/controllers.py
b/src/ipypbx/controllers.py
index
316e329
..
4f40fab
100644
(file)
--- a/
src/ipypbx/controllers.py
+++ b/
src/ipypbx/controllers.py
@@
-257,8
+257,9
@@
class ConnectionController(BaseController):
index.sibling(current_row, 0)).toInt()
# Apply new socket location.
index.sibling(current_row, 0)).toInt()
# Apply new socket location.
- self.servers[current_row].setSocketData(
- *self.getSocketData(current_row))
+ if current_row < len(self.servers):
+ self.servers[current_row].setSocketData(
+ *self.getSocketData(current_row))
def objectAdded(self, row, record):
"""
def objectAdded(self, row, record):
"""
@@
-270,7
+271,7
@@
class ConnectionController(BaseController):
"""
Add a new config server.
"""
"""
Add a new config server.
"""
- server = http.FreeswitchConfigServer(self.model)
+ server = http.FreeswitchConfigServer(self.model.database(), self)
server.setSocketData(host, port, connection_id)
server.startServer()
self.servers.append(server)
server.setSocketData(host, port, connection_id)
server.startServer()
self.servers.append(server)
diff --git
a/src/ipypbx/http.py
b/src/ipypbx/http.py
index
285c4ec
..
3e76ed9
100644
(file)
--- a/
src/ipypbx/http.py
+++ b/
src/ipypbx/http.py
@@
-37,18
+37,18
@@
Content-Length: %i
%s'''
%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 = [
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,)]
SofiaConfGenerator,)]
- self.httpRequestParser = HttpRequestParser(self)
+ self.httpRequestParser = HttpRequestParser()
def setSocketData(self, host, port, connection_id):
"""
def setSocketData(self, host, port, connection_id):
"""
@@
-106,18
+106,22
@@
Content-Length: %i
def receiveData(self):
# TODO: read in chunks.
for line in str(self.socket.readAll()).split('\r\n'):
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)
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)
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()
self.httpRequestParser.reset()
self.socket.close()
+
class HttpParseError(Exception):
"""
Error parsing HTTP request.
class HttpParseError(Exception):
"""
Error parsing HTTP request.
@@
-128,20
+132,17
@@
class HttpRequestParser(object):
"""
A simple state machine for parsing HTTP requests.
"""
"""
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.reset()
def reset(self):
"""
Reset parser to initial state.
"""
- self.i += 1
# Initial values for request data.
self.method = None
self.request_path = None
# Initial values for request data.
self.method = None
self.request_path = None
@@
-198,23
+199,18
@@
class HttpRequestParser(object):
"""
self.state += 1
"""
self.state += 1
- def handleMessage(self, line):
+ def handleBody(self, line):
"""
Append to message body.
"""
"""
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('&'))
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):
"""
class FreeswitchConfigGenerator(object):
"""
@@
-223,16
+219,15
@@
class FreeswitchConfigGenerator(object):
param_match = {}
param_match = {}
- def __init__(self, model, parent):
- self.model = model
+ def __init__(self, database, parent):
+ self.database = database
self.parent = parent
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):
"""
def canHandle(self, params):
"""
@@
-433,3
+428,12
@@
class DirectoryGenerator(FreeswitchConfigGenerator):
self.addParams(user_elt, params)
return root_elt
self.addParams(user_elt, params)
return root_elt
+
+
+class DialplanGenerator(FreeswitchConfigGenerator):
+ """
+ Generates XML dialplans.
+ """
+
+ param_match = {'section': 'dialplan'}
+
diff --git
a/src/ipypbx/main.py
b/src/ipypbx/main.py
index
9c8ebfe
..
f0422d6
100644
(file)
--- a/
src/ipypbx/main.py
+++ b/
src/ipypbx/main.py
@@
-58,7
+58,7
@@
def setupDb(prefix=PREFIX, dbname=DB_NAME):
for query_string in sql_queries[:-1]:
query.exec_(query_string)
for query_string in sql_queries[:-1]:
query.exec_(query_string)
- return created
+ return db, created
else:
# Something went horribly wrong.
QtGui.QMessageBox.warning(
else:
# Something went horribly wrong.
QtGui.QMessageBox.warning(
@@
-77,7
+77,7
@@
if __name__ == '__main__':
QtGui.QApplication.installTranslator(translator)
# Initialize main window.
QtGui.QApplication.installTranslator(translator)
# Initialize main window.
- created = setupDb()
+ db, created = setupDb()
main = QtGui.QMainWindow()
views = ui.Ui_MainWindow()
views.setupUi(main)
main = QtGui.QMainWindow()
views = ui.Ui_MainWindow()
views.setupUi(main)
@@
-107,6
+107,7
@@
if __name__ == '__main__':
QtCore.SIGNAL('currentRowChanged(QModelIndex, QModelIndex)'),
connection_index, connection_index)
QtCore.SIGNAL('currentRowChanged(QModelIndex, QModelIndex)'),
connection_index, connection_index)
+ # TODO: not needed anymore?
if created:
main.controllers['connection'].add()
sys.exit(app.exec_())
if created:
main.controllers['connection'].add()
sys.exit(app.exec_())