diff options
Diffstat (limited to 'mpm/python/test_rpc.py')
| -rwxr-xr-x | mpm/python/test_rpc.py | 63 | 
1 files changed, 63 insertions, 0 deletions
diff --git a/mpm/python/test_rpc.py b/mpm/python/test_rpc.py new file mode 100755 index 000000000..1a97a103c --- /dev/null +++ b/mpm/python/test_rpc.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +import socket +from mprpc import RPCClient +import usrp_mpm as mpm +import argparse + + +def parse_args(): +    parser = argparse.ArgumentParser() +    parser.add_argument("-a", "--address", default="0.0.0.0", type=str, help="Destination address") +    parser.add_argument("-p", "--port", default=0, type=int, help="Destination port") +    sub_parsers = parser.add_subparsers(dest="command") + +    rpc_parser = sub_parsers.add_parser("rpc", help="Issue RPC") +    rpc_parser.add_argument("-c", "--call", required=True, help="command to issue") +    rpc_parser.add_argument("arguments", nargs="*") + +    disc_parser = sub_parsers.add_parser("disc", help="Issue discovery") +    return parser.parse_args() + + +def rpc(address, port, command, *args): +    if not port: +        port = mpm.types.MPM_RPC_PORT +    client = RPCClient(address, port) +    if args: +        result = client.call(command, *args) +    else: +        result = client.call(command) +    return result + + +def discovery(address, port): +    if not port: +        port = mpm.types.MPM_DISCOVERY_PORT +    sock = socket.socket( +        socket.AF_INET, +        socket.SOCK_DGRAM) +    sock.sendto(mpm.types.MPM_DISCOVERY_MESSAGE, (address, port)) +    sock.settimeout(1.0) # wait max 1 second +    while True: +        try: +            data, sender = sock.recvfrom(4096) +            print("Received respons from: {}".format(sender[0])) +            print("Dicovery data: {}".format(data)) +        except: +            break + + +def main(): +    args = parse_args() +    if args.command == "rpc": +        if args.arguments: +            result = rpc(args.address, args.port, args.call, *args.arguments) +        else: +            result = rpc(args.address, args.port, args.call) +        print(result) +    elif args.command == "disc": +        discovery(args.address, args.port) + + +if __name__ == "__main__": +    exit(not(main()))  | 
