Module onionr.coredb.daemonqueue
Onionr - Private P2P Communication
Write and read the daemon queue, which is how messages are passed into the onionr daemon in a more direct way than the http api
Source code
'''
Onionr - Private P2P Communication
Write and read the daemon queue, which is how messages are passed into the onionr daemon in a more
direct way than the http api
'''
'''
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
'''
import sqlite3, os
from onionrplugins import onionrevents as events
from onionrutils import localcommand, epoch
from .. import dbfiles
from onionrsetup import dbcreator
def daemon_queue()->str:
'''
Gives commands to the communication proccess/daemon by reading an sqlite3 database
This function intended to be used by the client. Queue to exchange data between "client" and server.
'''
retData = False
if not os.path.exists(dbfiles.daemon_queue_db):
dbcreator.createDaemonDB()
else:
conn = sqlite3.connect(dbfiles.daemon_queue_db, timeout=30)
c = conn.cursor()
try:
for row in c.execute('SELECT command, data, date, min(ID), responseID FROM commands group by id'):
retData = row
break
except sqlite3.OperationalError:
dbcreator.createDaemonDB()
else:
if retData != False:
c.execute('DELETE FROM commands WHERE id=?;', (retData[3],))
conn.commit()
conn.close()
return retData
def daemon_queue_add(command: str, data='', responseID: str =''):
'''
Add a command to the daemon queue, used by the communication daemon (communicator.py)
'''
retData = True
date = epoch.get_epoch()
conn = sqlite3.connect(dbfiles.daemon_queue_db, timeout=30)
c = conn.cursor()
t = (command, data, date, responseID)
try:
c.execute('INSERT INTO commands (command, data, date, responseID) VALUES(?, ?, ?, ?)', t)
conn.commit()
except sqlite3.OperationalError:
retData = False
daemon_queue()
conn.close()
return retData
def daemon_queue_get_response(responseID=''):
'''
Get a response sent by communicator to the API, by requesting to the API
'''
if len(responseID) == 0: raise ValueError('ResponseID should not be empty')
resp = localcommand.local_command(dbfiles.daemon_queue_db, 'queueResponse/' + responseID)
return resp
def clear_daemon_queue():
'''
Clear the daemon queue (somewhat dangerous)
'''
conn = sqlite3.connect(dbfiles.daemon_queue_db, timeout=30)
c = conn.cursor()
c.execute('DELETE FROM commands;')
conn.commit()
conn.close()
Functions
def clear_daemon_queue()
-
Clear the daemon queue (somewhat dangerous)
Source code
def clear_daemon_queue(): ''' Clear the daemon queue (somewhat dangerous) ''' conn = sqlite3.connect(dbfiles.daemon_queue_db, timeout=30) c = conn.cursor() c.execute('DELETE FROM commands;') conn.commit() conn.close()
def daemon_queue()
-
Gives commands to the communication proccess/daemon by reading an sqlite3 database
This function intended to be used by the client. Queue to exchange data between "client" and server.
Source code
def daemon_queue()->str: ''' Gives commands to the communication proccess/daemon by reading an sqlite3 database This function intended to be used by the client. Queue to exchange data between "client" and server. ''' retData = False if not os.path.exists(dbfiles.daemon_queue_db): dbcreator.createDaemonDB() else: conn = sqlite3.connect(dbfiles.daemon_queue_db, timeout=30) c = conn.cursor() try: for row in c.execute('SELECT command, data, date, min(ID), responseID FROM commands group by id'): retData = row break except sqlite3.OperationalError: dbcreator.createDaemonDB() else: if retData != False: c.execute('DELETE FROM commands WHERE id=?;', (retData[3],)) conn.commit() conn.close() return retData
def daemon_queue_add(command, data='', responseID='')
-
Add a command to the daemon queue, used by the communication daemon (communicator.py)
Source code
def daemon_queue_add(command: str, data='', responseID: str =''): ''' Add a command to the daemon queue, used by the communication daemon (communicator.py) ''' retData = True date = epoch.get_epoch() conn = sqlite3.connect(dbfiles.daemon_queue_db, timeout=30) c = conn.cursor() t = (command, data, date, responseID) try: c.execute('INSERT INTO commands (command, data, date, responseID) VALUES(?, ?, ?, ?)', t) conn.commit() except sqlite3.OperationalError: retData = False daemon_queue() conn.close() return retData
def daemon_queue_get_response(responseID='')
-
Get a response sent by communicator to the API, by requesting to the API
Source code
def daemon_queue_get_response(responseID=''): ''' Get a response sent by communicator to the API, by requesting to the API ''' if len(responseID) == 0: raise ValueError('ResponseID should not be empty') resp = localcommand.local_command(dbfiles.daemon_queue_db, 'queueResponse/' + responseID) return resp