Skip to content

Commit

Permalink
ii
Browse files Browse the repository at this point in the history
  • Loading branch information
haraldh committed Jul 20, 2018
1 parent 67701cf commit c5d242d
Showing 1 changed file with 26 additions and 13 deletions.
39 changes: 26 additions & 13 deletions varlink/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,34 +60,41 @@ def varlink_call(args):


def varlink_bridge(args):
message = b''
message = ''
last_interface = None
con = None
client = None

while not sys.stdin.closed:
c = sys.stdin.read(1)

if c == b'':
if c == '':
break

if c != b'\0':
if c != '\0':
message += c
continue

string = message.decode('utf-8')
req = json.loads(string)
req = json.loads(message)

if req['method'] == "org.varlink.service.GetInfo":
req['method'] = "org.varlink.resolver.GetInfo"


interface_name, _, method_name = req.get('method', '').rpartition('.')

if req['method'] == "org.varlink.service.GetInterfaceDescription":
resolving_interface = req['parameters']['interface']
else:
resolving_interface = interface_name

if not interface_name or not method_name:
sys.stderr.write("interface not found")
sys.stdout.write(json.dumps(varlink.InterfaceNotFound(interface_name), cls=varlink.VarlinkEncoder).encode(
'utf-8') + b'\0')
continue

if last_interface != interface_name:
if last_interface != resolving_interface:
if con:
if hasattr(con, 'shutdown'):
con.shutdown(socket.SHUT_RDWR)
Expand All @@ -97,16 +104,21 @@ def varlink_bridge(args):
if client:
client.cleanup()

client = varlink.Client.new_with_resolved_interface(interface_name)
sys.stderr.write("searching interface %s method %s\n" % (interface_name, method_name))
client = varlink.Client.new_with_resolved_interface(resolving_interface)
con = client.open_connection()
last_interface = interface_name
last_interface = resolving_interface

if hasattr(con, "send"):
con.send(message.encode('utf-8') + b'\0')
else:
con.write(message.encode('utf-8') + b'\0')

con.write(message)
message = b''
message = ''

ret_message = b''
while not con.closed:
c = sys.stdin.read(1)
while True:
c = con.recv(1)

if c == b'':
break
Expand All @@ -115,7 +127,8 @@ def varlink_bridge(args):
ret_message += c
continue

sys.stdout.write(ret_message + b'\0')
sys.stdout.buffer.write(ret_message + b'\0')
sys.stdout.flush()

ret = json.loads(ret_message.decode('utf-8'))
ret_message = b''
Expand Down

0 comments on commit c5d242d

Please sign in to comment.