Various fixes
This commit is contained in:
parent
2ad8f3c8f5
commit
2a420d4130
10
init.lua
10
init.lua
@ -146,8 +146,12 @@ function MatrixChat:send(msg)
|
|||||||
function(res)
|
function(res)
|
||||||
if res.code == 200 then
|
if res.code == 200 then
|
||||||
local data = minetest.parse_json(res.data)
|
local data = minetest.parse_json(res.data)
|
||||||
minetest.log("action", "got " .. data["event_id"])
|
if data then
|
||||||
self.eventid = data["event_id"]
|
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
|
elseif res.code == 401 then
|
||||||
minetest.log("error", "matrix_bridge - not authorized to send messages")
|
minetest.log("error", "matrix_bridge - not authorized to send messages")
|
||||||
elseif res.code == 404 then
|
elseif res.code == 404 then
|
||||||
@ -193,8 +197,8 @@ minetest.register_globalstep(function(dtime)
|
|||||||
local activity = minetest.parse_json(result.data)
|
local activity = minetest.parse_json(result.data)
|
||||||
if activity ~= nil then
|
if activity ~= nil then
|
||||||
MatrixChat:minechat(activity)
|
MatrixChat:minechat(activity)
|
||||||
|
MatrixChat.since = activity.next_batch
|
||||||
end
|
end
|
||||||
MatrixChat.since = activity.next_batch
|
|
||||||
elseif result.code == 0 then
|
elseif result.code == 0 then
|
||||||
elseif result.code == 404 then
|
elseif result.code == 404 then
|
||||||
end
|
end
|
||||||
|
193
proxy.py
193
proxy.py
@ -1,4 +1,4 @@
|
|||||||
import http.client, re, socket, sys, time
|
import http.client, re, socket, sys, time, _thread
|
||||||
|
|
||||||
RECBUF = 1024
|
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)
|
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 __name__ == "__main__":
|
||||||
if "--help" in sys.argv or "-h" in sys.argv:
|
if "--help" in sys.argv or "-h" in sys.argv:
|
||||||
print("""MineTest Matrix Bridge mod proxy
|
print("""MineTest Matrix Bridge mod proxy
|
||||||
@ -50,98 +148,7 @@ Options: (with defaults)
|
|||||||
except socket.timeout:
|
except socket.timeout:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Get request
|
_thread.start_new_thread(handle, (client,))
|
||||||
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()
|
|
||||||
sock.close()
|
sock.close()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
sock.shutdown(socket.SHUT_WR)
|
sock.shutdown(socket.SHUT_WR)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user