mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-13 12:51:16 +00:00
86 lines
2.5 KiB
Python
86 lines
2.5 KiB
Python
|
#!/usr/bin/env python3
|
||
|
#
|
||
|
# Test client for simple 1-1 call signalling server
|
||
|
#
|
||
|
# Copyright (C) 2017 Centricular Ltd.
|
||
|
#
|
||
|
# Author: Nirbheek Chauhan <nirbheek@centricular.com>
|
||
|
#
|
||
|
|
||
|
import sys
|
||
|
import ssl
|
||
|
import json
|
||
|
import uuid
|
||
|
import asyncio
|
||
|
import websockets
|
||
|
import argparse
|
||
|
|
||
|
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||
|
parser.add_argument('--url', default='wss://localhost:8443', help='URL to connect to')
|
||
|
parser.add_argument('--call', default=None, help='uid of peer to call')
|
||
|
|
||
|
options = parser.parse_args(sys.argv[1:])
|
||
|
|
||
|
SERVER_ADDR = options.url
|
||
|
CALLEE_ID = options.call
|
||
|
PEER_ID = 'ws-test-client-' + str(uuid.uuid4())[:6]
|
||
|
|
||
|
sslctx = False
|
||
|
if SERVER_ADDR.startswith(('wss://', 'https://')):
|
||
|
sslctx = ssl.create_default_context()
|
||
|
# FIXME
|
||
|
sslctx.check_hostname = False
|
||
|
sslctx.verify_mode = ssl.CERT_NONE
|
||
|
|
||
|
def reply_sdp_ice(msg):
|
||
|
# Here we'd parse the incoming JSON message for ICE and SDP candidates
|
||
|
print("Got: " + msg)
|
||
|
reply = json.dumps({'sdp': 'reply sdp'})
|
||
|
print("Sent: " + reply)
|
||
|
return reply
|
||
|
|
||
|
def send_sdp_ice():
|
||
|
reply = json.dumps({'sdp': 'initial sdp'})
|
||
|
print("Sent: " + reply)
|
||
|
return reply
|
||
|
|
||
|
async def hello():
|
||
|
async with websockets.connect(SERVER_ADDR, ssl=sslctx) as ws:
|
||
|
await ws.send('HELLO ' + PEER_ID)
|
||
|
assert(await ws.recv() == 'HELLO')
|
||
|
|
||
|
# Initiate call if requested
|
||
|
if CALLEE_ID:
|
||
|
await ws.send('CALL {}'.format(CALLEE_ID))
|
||
|
|
||
|
# Receive messages
|
||
|
while True:
|
||
|
msg = await ws.recv()
|
||
|
if msg.startswith('ERROR'):
|
||
|
# On error, we bring down the webrtc pipeline, etc
|
||
|
print('{!r}, exiting'.format(msg))
|
||
|
return
|
||
|
if CALLEE_ID:
|
||
|
if msg == 'CALL_OK':
|
||
|
await ws.send(send_sdp_ice())
|
||
|
# Return so we don't have an infinite loop
|
||
|
return
|
||
|
else:
|
||
|
print('Unknown reply: {!r}, exiting'.format(msg))
|
||
|
return
|
||
|
else:
|
||
|
await ws.send(reply_sdp_ice(msg))
|
||
|
# Return so we don't have an infinite loop
|
||
|
return
|
||
|
|
||
|
print('Our uid is {!r}'.format(PEER_ID))
|
||
|
|
||
|
try:
|
||
|
asyncio.get_event_loop().run_until_complete(hello())
|
||
|
except websockets.exceptions.InvalidHandshake:
|
||
|
print('Invalid handshake: are you sure this is a websockets server?\n')
|
||
|
raise
|
||
|
except ssl.SSLError:
|
||
|
print('SSL Error: are you sure the server is using TLS?\n')
|
||
|
raise
|