Various fixes

This commit is contained in:
Pascal Engélibert 2022-06-12 18:36:25 +02:00
parent 2ad8f3c8f5
commit 2a420d4130
Signed by: tuxmain
GPG Key ID: 3504BC6D362F7DCA
2 changed files with 107 additions and 96 deletions

View File

@ -146,8 +146,12 @@ function MatrixChat:send(msg)
function(res)
if res.code == 200 then
local data = minetest.parse_json(res.data)
minetest.log("action", "got " .. data["event_id"])
self.eventid = data["event_id"]
if data then
minetest.log("action", "got " .. data["event_id"])
self.eventid = data["event_id"]
else
minetest.log("error", "matrix_bridge - cannot parse json")
end
elseif res.code == 401 then
minetest.log("error", "matrix_bridge - not authorized to send messages")
elseif res.code == 404 then
@ -193,8 +197,8 @@ minetest.register_globalstep(function(dtime)
local activity = minetest.parse_json(result.data)
if activity ~= nil then
MatrixChat:minechat(activity)
MatrixChat.since = activity.next_batch
end
MatrixChat.since = activity.next_batch
elseif result.code == 0 then
elseif result.code == 404 then
end

193
proxy.py
View File

@ -1,4 +1,4 @@
import http.client, re, socket, sys, time
import http.client, re, socket, sys, time, _thread
RECBUF = 1024
@ -10,6 +10,104 @@ def getargv(arg, default="", n=1, args=sys.argv):
p_clen = re.compile("\r?\ncontent-length: *(\d+)\r?\n?", re.IGNORECASE)
def handle(client):
# Get request
paquet = b""
header = b""
content = b""
content_len = 0
resp = {}
lf = 0
while True:
raw = client.recv(RECBUF)
if raw:
paquet += raw
if lf >= 0:
for c in raw:
if c == 10:# LF
lf += 1
elif c != 13:# CR
lf = 0
if lf > 1:
parts = paquet.split(b"\r\n\r\n")
header = parts[0]
content = parts[1]
try:
content_len = int(p_clen.search(header.decode()).group(1))
except (AttributeError, ValueError):
content_len = 0
break
if lf > 1:
break
else:
break
while len(content) < content_len:
raw = client.recv(RECBUF)
paquet += raw
content += raw
httpreq = paquet.split(b" ", 2)
if len(httpreq) != 3:
client.close()
return
method = httpreq[0]
url = httpreq[1]
rest = httpreq[2]
if b"/send/m.room.message/" in url:
method = b"PUT"
matrix_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if matrix_https:
matrix_sock = ssl_ctx.wrap_socket(matrix_sock, server_hostname=matrix_addr)
matrix_sock.settimeout(60)
try:
matrix_sock.connect((matrix_addr, matrix_port))
except socket.timeout:
sys.stderr.write("timeout connecting to matrix")
return
matrix_sock.settimeout(None)
matrix_sock.sendall(b" ".join([method, url, rest]))
paquet = b""
header = b""
content = b""
content_len = 0
resp = {}
lf = 0
while True:
raw = matrix_sock.recv(RECBUF)
if raw:
paquet += raw
if lf >= 0:
for c in raw:
if c == 10:# LF
lf += 1
elif c != 13:# CR
lf = 0
if lf > 1:
parts = paquet.split(b"\r\n\r\n")
header = parts[0]
content = parts[1]
try:
content_len = int(p_clen.search(header.decode()).group(1))
except AttributeError:
content_len = 0
break
if lf > 1:
break
else:
break
while len(content) < content_len:
raw = matrix_sock.recv(RECBUF)
paquet += raw
content += raw
client.sendall(paquet)
client.close()
if __name__ == "__main__":
if "--help" in sys.argv or "-h" in sys.argv:
print("""MineTest Matrix Bridge mod proxy
@ -50,98 +148,7 @@ Options: (with defaults)
except socket.timeout:
continue
# Get request
paquet = b""
header = b""
content = b""
content_len = 0
resp = {}
lf = 0
while True:
raw = client.recv(RECBUF)
if raw:
paquet += raw
if lf >= 0:
for c in raw:
if c == 10:# LF
lf += 1
elif c != 13:# CR
lf = 0
if lf > 1:
parts = paquet.split(b"\r\n\r\n")
header = parts[0]
content = parts[1]
try:
content_len = int(p_clen.search(header.decode()).group(1))
except (AttributeError, ValueError):
content_len = 0
break
if lf > 1:
break
else:
break
while len(content) < content_len:
raw = client.recv(RECBUF)
paquet += raw
content += raw
httpreq = paquet.split(b" ", 2)
if len(httpreq) != 3:
client.close()
continue
method = httpreq[0]
url = httpreq[1]
rest = httpreq[2]
if b"/send/m.room.message/" in url:
method = b"PUT"
matrix_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if matrix_https:
matrix_sock = ssl_ctx.wrap_socket(matrix_sock, server_hostname=matrix_addr)
matrix_sock.settimeout(60)
matrix_sock.connect((matrix_addr, matrix_port))
matrix_sock.settimeout(None)
matrix_sock.sendall(b" ".join([method, url, rest]))
paquet = b""
header = b""
content = b""
content_len = 0
resp = {}
lf = 0
while True:
raw = matrix_sock.recv(RECBUF)
if raw:
paquet += raw
if lf >= 0:
for c in raw:
if c == 10:# LF
lf += 1
elif c != 13:# CR
lf = 0
if lf > 1:
parts = paquet.split(b"\r\n\r\n")
header = parts[0]
content = parts[1]
try:
content_len = int(p_clen.search(header.decode()).group(1))
except AttributeError:
content_len = 0
break
if lf > 1:
break
else:
break
while len(content) < content_len:
raw = matrix_sock.recv(RECBUF)
paquet += raw
content += raw
client.sendall(paquet)
client.close()
_thread.start_new_thread(handle, (client,))
sock.close()
except KeyboardInterrupt:
sock.shutdown(socket.SHUT_WR)