work on sockets
parent
7baa7d5d5f
commit
e826bca19e
|
@ -21,7 +21,8 @@
|
||||||
'''
|
'''
|
||||||
import sys, os, core, config, json, requests, time, logger, threading, base64, onionr
|
import sys, os, core, config, json, requests, time, logger, threading, base64, onionr
|
||||||
import onionrexceptions, onionrpeers, onionrevents as events, onionrplugins as plugins, onionrblockapi as block
|
import onionrexceptions, onionrpeers, onionrevents as events, onionrplugins as plugins, onionrblockapi as block
|
||||||
import onionrdaemontools, onionrsockets
|
import onionrdaemontools, onionrsockets, onionrchat
|
||||||
|
from dependencies import secrets
|
||||||
from defusedxml import minidom
|
from defusedxml import minidom
|
||||||
|
|
||||||
class OnionrCommunicatorDaemon:
|
class OnionrCommunicatorDaemon:
|
||||||
|
@ -80,7 +81,8 @@ class OnionrCommunicatorDaemon:
|
||||||
self.daemonTools = onionrdaemontools.DaemonTools(self)
|
self.daemonTools = onionrdaemontools.DaemonTools(self)
|
||||||
|
|
||||||
# Active sockets for direct connections
|
# Active sockets for direct connections
|
||||||
self.sockets = []
|
self.sockets = {}
|
||||||
|
self.socketExchange = {} # Socket ID exchange
|
||||||
|
|
||||||
if debug or developmentMode:
|
if debug or developmentMode:
|
||||||
OnionrCommunicatorTimers(self, self.heartbeat, 10)
|
OnionrCommunicatorTimers(self, self.heartbeat, 10)
|
||||||
|
@ -469,12 +471,27 @@ class OnionrCommunicatorDaemon:
|
||||||
# Create a socket or connect to one.
|
# Create a socket or connect to one.
|
||||||
# The socket handler (such as the plugin or app using it) is specified in startData['reason]
|
# The socket handler (such as the plugin or app using it) is specified in startData['reason]
|
||||||
startData = json.loads(cmd[1])
|
startData = json.loads(cmd[1])
|
||||||
self.onionrsockets.append(onionrsockets.OnionrSockets(self._core, startData))
|
threading.Thread(target=self.startSocket, args=(startData,)).start()
|
||||||
else:
|
else:
|
||||||
logger.info('Recieved daemonQueue command:' + cmd[0])
|
logger.info('Recieved daemonQueue command:' + cmd[0])
|
||||||
|
|
||||||
self.decrementThreadCount('daemonCommands')
|
self.decrementThreadCount('daemonCommands')
|
||||||
|
|
||||||
|
def startSocket(self, startData):
|
||||||
|
# Start a socket client
|
||||||
|
mySocket = onionrsockets.OnionrSockets(self._core, startData))
|
||||||
|
self.sockets[mySocket.socketID] = mySocket
|
||||||
|
|
||||||
|
sockProgram = '' # Function for socket handler (application)
|
||||||
|
|
||||||
|
if startData['reason'] == 'chat':
|
||||||
|
sockProgram = onionrchat.OnionrChat
|
||||||
|
else:
|
||||||
|
del self.sockets[mySocket.socketID] # Delete socket if we have no handler for it
|
||||||
|
|
||||||
|
threading.Thread(target=sockProgram, args=(self, mySocket)).start()
|
||||||
|
mySocket.startConn()
|
||||||
|
|
||||||
def uploadBlock(self):
|
def uploadBlock(self):
|
||||||
'''Upload our block to a few peers'''
|
'''Upload our block to a few peers'''
|
||||||
# when inserting a block, we try to upload it to a few peers to add some deniability
|
# when inserting a block, we try to upload it to a few peers to add some deniability
|
||||||
|
|
|
@ -79,7 +79,6 @@ class Core:
|
||||||
# Initialize the crypto object
|
# Initialize the crypto object
|
||||||
self._crypto = onionrcrypto.OnionrCrypto(self)
|
self._crypto = onionrcrypto.OnionrCrypto(self)
|
||||||
self._blacklist = onionrblacklist.OnionrBlackList(self)
|
self._blacklist = onionrblacklist.OnionrBlackList(self)
|
||||||
self.chatInst = onionrchat.OnionrChat(self)
|
|
||||||
|
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
logger.error('Failed to initialize core Onionr library.', error=error)
|
logger.error('Failed to initialize core Onionr library.', error=error)
|
||||||
|
|
|
@ -218,7 +218,7 @@ class Onionr:
|
||||||
'getpasswd': self.printWebPassword,
|
'getpasswd': self.printWebPassword,
|
||||||
'get-passwd': self.printWebPassword,
|
'get-passwd': self.printWebPassword,
|
||||||
|
|
||||||
'chat': self.onionrCore.chatInst.connect()
|
'chat': self.startChat(),
|
||||||
|
|
||||||
'friend': self.friendCmd
|
'friend': self.friendCmd
|
||||||
}
|
}
|
||||||
|
@ -270,6 +270,11 @@ class Onionr:
|
||||||
THIS SECTION HANDLES THE COMMANDS
|
THIS SECTION HANDLES THE COMMANDS
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
def startChat(self):
|
||||||
|
self.onionrCore.daemonQueueAdd()
|
||||||
|
socketInfo = json.dumps({'peer': api.data['signer'], 'address': address, 'port': port, 'create': True, 'reason': reason})
|
||||||
|
self.onionrCore.daemonQueueAdd('startSocket', socketInfo)
|
||||||
|
|
||||||
def getCommands(self):
|
def getCommands(self):
|
||||||
return self.cmds
|
return self.cmds
|
||||||
|
|
||||||
|
|
|
@ -17,14 +17,14 @@
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
'''
|
'''
|
||||||
import logger
|
import logger, time
|
||||||
class OnionrChat:
|
class OnionrChat:
|
||||||
def __init__(self, coreInst):
|
def __init__(self, communicatorInst, socketInst):
|
||||||
|
self.communicator = communicatorInst
|
||||||
|
self.socket = socketInst
|
||||||
|
|
||||||
|
while True:
|
||||||
|
time.sleep(2)
|
||||||
|
logger.info(self.socket.readData())
|
||||||
|
self.socket.sendData('rekt')
|
||||||
return
|
return
|
||||||
|
|
||||||
def recieveMessage(self, socketInst, data):
|
|
||||||
logger.info('Got %s' % (data,))
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def sendMessage(self, socketInst, data):
|
|
||||||
return "Hello"
|
|
|
@ -23,18 +23,6 @@ import onionrexceptions, time, onionrchat
|
||||||
from dependencies import secrets
|
from dependencies import secrets
|
||||||
sel = selectors.DefaultSelector()
|
sel = selectors.DefaultSelector()
|
||||||
|
|
||||||
def getSocketCallbackRecieveHandler(coreInst, reason, create):
|
|
||||||
'''Return the recieve handler function for a given socket reason'''
|
|
||||||
retData = ''
|
|
||||||
if startData == 'chat':
|
|
||||||
retData = coreInst.chatInst.recieveMessage
|
|
||||||
|
|
||||||
def getSocketCallbackSendHandler(coreInst, reason, create):
|
|
||||||
'''Return the send handler function for a given socket reason'''
|
|
||||||
retData = ''
|
|
||||||
if startData == 'chat':
|
|
||||||
retData = coreInst.chatInst.sendMessage
|
|
||||||
|
|
||||||
class OnionrSockets:
|
class OnionrSockets:
|
||||||
def __init__(self, coreInst, socketInfo):
|
def __init__(self, coreInst, socketInfo):
|
||||||
'''Create a new Socket object. This interface is named a bit misleadingly
|
'''Create a new Socket object. This interface is named a bit misleadingly
|
||||||
|
@ -66,6 +54,7 @@ class OnionrSockets:
|
||||||
self.readData = []
|
self.readData = []
|
||||||
self.sendData = 0
|
self.sendData = 0
|
||||||
|
|
||||||
|
def startConn():
|
||||||
if self.isServer:
|
if self.isServer:
|
||||||
self.createServer()
|
self.createServer()
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue