Esempio n. 1
0
    def _handle_trickle(self, request):

        trickle_params_schema = Schema({
            Optional('candidate'): dict,
            Optional('candidates'): [dict],
            AutoDel(str): object  # for all other key we don't care
        })
        params = trickle_params_schema.validate(request.message)
        candidate = params.get('candidate')
        candidates = params.get('candidates')

        if candidate is None and candidates is None:
            raise JanusCloudError(
                'Missing mandatory element (candidate|candidates)',
                JANUS_ERROR_MISSING_MANDATORY_ELEMENT)

        if candidate and candidates:
            raise JanusCloudError('Can\'t have both candidate and candidates',
                                  JANUS_ERROR_INVALID_JSON)

        # dispatch to plugin handle
        handle = self._get_plugin_handle(request)
        handle.handle_trickle(candidate=candidate, candidates=candidates)

        return create_janus_msg('ack', request.session_id, request.transaction)
Esempio n. 2
0
 def _handle_attach(self, request):
     session = self._get_session(request)
     attach_params_schema = Schema({
         'plugin': StrVal(max_len=64),
         Optional('opaque_id'): StrVal(max_len=64),
         AutoDel(str): object  # for all other key we don't care
     })
     params = attach_params_schema.validate(request.message)
     handle = session.attach_handle(**params)
     return create_janus_msg('success',
                             request.session_id,
                             request.transaction,
                             data={'id': handle.handle_id})
Esempio n. 3
0
    def _handle_create(self, request):
        create_params_schema = Schema({
            Optional('id'):
            IntVal(min=1, max=9007199254740992),
            AutoDel(str):
            object  # for all other key we don't care
        })

        params = create_params_schema.validate(request.message)
        session_id = params.get('id', 0)
        session = self._frontend_session_mgr.create_new_session(
            session_id, request.transport)
        return create_janus_msg('success',
                                0,
                                request.transaction,
                                data={'id': session.session_id})
Esempio n. 4
0
    def read_config(config_file):

        p2pcall_config_schema = Schema({
            Optional("general"): Default({
                Optional("user_db"): Default(StrVal(), default='memory'),
                AutoDel(str): object  # for all other key we don't care
            }, default={}),
            DoNotCare(str): object  # for all other key we don't care

        })
        #print('config file:', config_file)
        if config_file is None or config_file == '':
            config = p2pcall_config_schema.validate({})
        else:
            log.info('P2Pcall plugin loads the config file: {}'.format(os.path.abspath(config_file)))
            config = parse_config(config_file, p2pcall_config_schema)

        # check other configure option is valid or not

        return config
Esempio n. 5
0
    def _handle_message(self, request):

        message_params_schema = Schema({
            'body': dict,
            Optional('jsep'): dict,
            AutoDel(str): object  # for all other key we don't care
        })
        params = message_params_schema.validate(request.message)

        # dispatch to plugin handle
        handle = self._get_plugin_handle(request)
        result, content = handle.handle_message(request.transaction, **params)
        if result == JANUS_PLUGIN_OK:
            if content is None or not isinstance(content, dict):
                raise JanusCloudError(
                    "Plugin didn't provide any content for this synchronous response"
                    if content is None else
                    "Plugin returned an invalid JSON response",
                    JANUS_ERROR_PLUGIN_MESSAGE)
            response = create_janus_msg('success',
                                        request.session_id,
                                        request.transaction,
                                        sender=request.handle_id)
            if handle.opaque_id:
                response['opaque_id'] = handle.opaque_id
            response['plugindata'] = {
                'plugin': handle.plugin_package_name,
                'data': content
            }
        elif result == JANUS_PLUGIN_OK_WAIT:
            response = create_janus_msg('ack', request.session_id,
                                        request.transaction)
            if content:
                response['hint'] = content
        else:
            raise JanusCloudError('Plugin returned a severe (unknown) error',
                                  JANUS_ERROR_PLUGIN_MESSAGE)

        return response
Esempio n. 6
0
from januscloud.common.schema import Schema, StrVal, Default, AutoDel, Optional, BoolVal, IntVal, \
    StrRe, EnumVal, Or
from januscloud.common.confparser import parse as parse_config
from pkg_resources import Requirement, resource_filename
import os

config_schema = Schema({
    Optional("general"): Default({
        Optional("daemonize"): Default(BoolVal(), default=False),
        Optional("configs_folder"): Default(StrVal(), default=''),
        Optional("server_name"): Default(StrRe(r'^\S*$'), default=''),
        Optional("session_timeout"): Default(IntVal(min=0, max=86400), default=60),
        Optional("server_db"): Default(StrVal(), default='memory'),
        Optional("server_select"): Default(StrVal(), default='rr'),
        Optional('api_secret'): Default(StrVal(), default=''),
        AutoDel(str): object  # for all other key we don't care
    }, default={}),
    Optional("log"): Default({
        Optional('log_to_stdout'): Default(BoolVal(), default=True),
        Optional('log_to_file'): Default(StrVal(), default=''),
        Optional('debug_level'): Default(EnumVal(['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL']), default='DEBUG'),
        Optional('log_file_size'): Default(IntVal(), default=104857600),
        Optional('log_file_rotate'): Default(IntVal(), default=10),
        AutoDel(str): object  # for all other key we don't care
    }, default={}),
    Optional("certificates"): Default({
        Optional("cert_pem"): StrVal(),
        Optional("cert_key"): StrVal(),
        Optional("cert_pwd"): StrVal(),
        AutoDel(str): object  # for all other key we don't care
    }, default={}),