2017-11-16 16:42:22 +11:00

82 lines
2.2 KiB
Python

import threading
import sys
import os
import socket
import json
from mimetools import Message
from StringIO import StringIO
class UDSHandler(threading.Thread):
serverAddress = "/var/run/dwall.sock"
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None):
threading.Thread.__init__(self, group=group, target=target, name=name,
verbose=verbose)
self.args = args
self.kwargs = kwargs
return
def run(self):
try:
os.unlink(self.serverAddress)
except:
pass
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind(self.serverAddress)
sock.listen(1)
while True:
connection, client_address = sock.accept()
self.handleConnection(connection)
def handleConnection(self, connection):
data = ""
try:
while True:
buff = connection.recv(1024)
if buff:
data += buff
else:
break
finally:
connection.close()
try:
parsedData = self.parseData(data)
if parsedData:
for websocket in self.args[0]:
try:
websocket.send_message(json.dumps(parsedData))
except Exception, e:
pass
except Exception, e:
pass
def parseData(self, data):
data = data.split("|", 2)
dataDict = {"from": data[0], "to": data[1]}
path, headers = data[2].split('\r\n', 1)
payload = Message(StringIO(headers))
url = "http://" + payload['host'] + path.split(" ")[1]
if url.lower().endswith(('.png', '.ico', '.jpeg', '.jpg', '.gif', '.svg')):
dataDict['image'] = url
else:
dataDict['url'] = url
if 'cookie' in payload:
dataDict['cookie'] = payload['cookie']
postData = data[2].split('\r\n\r\n')
if len(postData) == 2:
if postData[1].strip():
dataDict['post'] = postData[1]
return dataDict