You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.6 KiB

import sys
import os
import os.path
import traceback
import json
import socket
import struct
import pprint
import time
import datetime
import threading
import json
import re
import time
from threading import Thread, Lock
import binascii
import pylzma
import select
from subprocess import Popen, PIPE
import argparse
from socks.transmission import SocketOverlay
from socks.transmission import Command
def parsecmd(s):
if s=="get": return Command.CMD_GET
elif s=="stop": return Command.CMD_SHUTDOWN
elif s=="clear": return Command.CMD_CLEAR
elif s=="get-clear": return Command.CMD_GET_CLEAR
elif s=="info": return Command.CMD_INFO
elif s=="pause": return Command.CMD_PAUSE
elif s=="resume": return Command.CMD_RESUME
else: return None
parser = argparse.ArgumentParser(description="rtbwpy daemon control.")
parser.add_argument("sock", help="AF_UNIX socket")
parser.add_argument("command", help="Command")
parser.add_argument("--data", help="Additional data to send", default=None)
args = parser.parse_args()
cmd = parsecmd(args.command)
if cmd==None:
print("Invalid command.")
os._exit(1)
data = args.data
if cmd == Command.CMD_GET or cmd == Command.CMD_GET_CLEAR:
if data== None:
data = struct.pack("L", 0)
else:
data = struct.pack("L", int(data))
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(args.sock)
con = SocketOverlay(sock)
cmd = Command.build(cmd, data)
con.send(cmd.serialise())
if cmd.uCommand == Command.CMD_GET or cmd.uCommand == Command.CMD_GET_CLEAR:
json = con.recv().decode("utf-8")
print(json)
elif cmd.uCommand == Command.CMD_INFO:
print(con.recv().decode("ascii"))
sock.close()