work on sockets
parent
557afb8d9a
commit
7baa7d5d5f
|
@ -469,9 +469,7 @@ 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])
|
||||||
rCallback = onionrsockets.getSocketCallbackRecieveHandler(self._core, startData['reason'], startData['create'])
|
self.onionrsockets.append(onionrsockets.OnionrSockets(self._core, startData))
|
||||||
sCallback = onionrsockets.getSocketCallbackSendHandler(self._core, startData['reason'], startData['create'])
|
|
||||||
self.onionrsockets.append(onionrsockets.OnionrSockets(self._core, startData, recieveCallback=rCallback, sendCallback=sCallback))
|
|
||||||
else:
|
else:
|
||||||
logger.info('Recieved daemonQueue command:' + cmd[0])
|
logger.info('Recieved daemonQueue command:' + cmd[0])
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ if sys.version_info[0] == 2 or sys.version_info[1] < 5:
|
||||||
print('Error, Onionr requires Python 3.4+')
|
print('Error, Onionr requires Python 3.4+')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
import os, base64, random, getpass, shutil, subprocess, requests, time, platform, datetime, re, json, getpass, sqlite3
|
import os, base64, random, getpass, shutil, subprocess, requests, time, platform, datetime, re, json, getpass, sqlite3
|
||||||
|
import webbrowser
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import api, core, config, logger, onionrplugins as plugins, onionrevents as events
|
import api, core, config, logger, onionrplugins as plugins, onionrevents as events
|
||||||
import onionrutils
|
import onionrutils
|
||||||
|
@ -217,6 +218,8 @@ class Onionr:
|
||||||
'getpasswd': self.printWebPassword,
|
'getpasswd': self.printWebPassword,
|
||||||
'get-passwd': self.printWebPassword,
|
'get-passwd': self.printWebPassword,
|
||||||
|
|
||||||
|
'chat': self.onionrCore.chatInst.connect()
|
||||||
|
|
||||||
'friend': self.friendCmd
|
'friend': self.friendCmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -826,7 +829,6 @@ class Onionr:
|
||||||
logger.error('%s add-file <filename>' % sys.argv[0], timestamp = False)
|
logger.error('%s add-file <filename>' % sys.argv[0], timestamp = False)
|
||||||
|
|
||||||
def openUI(self):
|
def openUI(self):
|
||||||
import webbrowser
|
|
||||||
url = 'http://127.0.0.1:%s/ui/index.html?timingToken=%s' % (config.get('client.port', 59496), self.onionrUtils.getTimeBypassToken())
|
url = 'http://127.0.0.1:%s/ui/index.html?timingToken=%s' % (config.get('client.port', 59496), self.onionrUtils.getTimeBypassToken())
|
||||||
|
|
||||||
print('Opening %s ...' % url)
|
print('Opening %s ...' % url)
|
||||||
|
|
|
@ -36,7 +36,7 @@ def getSocketCallbackSendHandler(coreInst, reason, create):
|
||||||
retData = coreInst.chatInst.sendMessage
|
retData = coreInst.chatInst.sendMessage
|
||||||
|
|
||||||
class OnionrSockets:
|
class OnionrSockets:
|
||||||
def __init__(self, coreInst, socketInfo, recieveCallback=None, sendCallback=None):
|
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
|
||||||
and does not actually forward network requests.
|
and does not actually forward network requests.
|
||||||
|
|
||||||
|
@ -48,12 +48,6 @@ class OnionrSockets:
|
||||||
self.socketID = secrets.token_hex(32) # Generate an ID for this socket
|
self.socketID = secrets.token_hex(32) # Generate an ID for this socket
|
||||||
self._core = coreInst
|
self._core = coreInst
|
||||||
self.socketInfo = socketInfo
|
self.socketInfo = socketInfo
|
||||||
|
|
||||||
if not callable(sendCallback) or not callable(recieveCallback)
|
|
||||||
raise ValueError("callback must be a function")
|
|
||||||
|
|
||||||
self.sendCallback = sendCallback
|
|
||||||
self.recieveCallback = recieveCallback
|
|
||||||
|
|
||||||
# Make sure socketInfo provides all necessary values
|
# Make sure socketInfo provides all necessary values
|
||||||
for i in ('peer', 'address', 'create', 'port'):
|
for i in ('peer', 'address', 'create', 'port'):
|
||||||
|
@ -69,6 +63,9 @@ class OnionrSockets:
|
||||||
self.serverAddress = socketInfo['address']
|
self.serverAddress = socketInfo['address']
|
||||||
self.connected = False
|
self.connected = False
|
||||||
|
|
||||||
|
self.readData = []
|
||||||
|
self.sendData = 0
|
||||||
|
|
||||||
if self.isServer:
|
if self.isServer:
|
||||||
self.createServer()
|
self.createServer()
|
||||||
else:
|
else:
|
||||||
|
@ -117,11 +114,25 @@ class OnionrSockets:
|
||||||
data = conn.recv(1024)
|
data = conn.recv(1024)
|
||||||
if data:
|
if data:
|
||||||
data = data.decode()
|
data = data.decode()
|
||||||
self.callback(self, data)
|
self.readData.append(data)
|
||||||
else:
|
else:
|
||||||
sel.unregister(conn)
|
sel.unregister(conn)
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
def sendData(self, data):
|
||||||
|
try:
|
||||||
|
data = data.encode()
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
self.sendData = data
|
||||||
|
|
||||||
|
def readData(self):
|
||||||
|
try:
|
||||||
|
data = self.readData.pop(0)
|
||||||
|
except IndexError:
|
||||||
|
data = ''
|
||||||
|
return data
|
||||||
|
|
||||||
def connectServer(self):
|
def connectServer(self):
|
||||||
# Set the Tor proxy
|
# Set the Tor proxy
|
||||||
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', config.get('tor.socksport'), rdns=True)
|
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', config.get('tor.socksport'), rdns=True)
|
||||||
|
@ -131,5 +142,7 @@ class OnionrSockets:
|
||||||
with remoteSocket as s:
|
with remoteSocket as s:
|
||||||
s.connect((self.serverAddress, self.port))
|
s.connect((self.serverAddress, self.port))
|
||||||
data = s.recv(1024)
|
data = s.recv(1024)
|
||||||
data.send(self.sendCallback(self, data.decode()))
|
if self.sendData != 0:
|
||||||
|
s.send(self.sendData)
|
||||||
|
self.sendData = 0
|
||||||
return
|
return
|
Loading…
Reference in New Issue