okay fine

This commit is contained in:
pacnpal
2024-11-03 17:47:26 +00:00
parent 01c6004a79
commit 27eb239e97
10020 changed files with 1935769 additions and 2364 deletions

View File

@@ -0,0 +1,81 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
from autobahn.wamp.types import \
ComponentConfig, \
SessionDetails, \
CloseDetails, \
RegisterOptions, \
CallOptions, \
CallDetails, \
CallResult, \
SubscribeOptions, \
PublishOptions, \
EventDetails
from autobahn.wamp.exception import \
Error, \
SessionNotReady, \
SerializationError, \
ProtocolError, \
TransportLost, \
ApplicationError, \
InvalidUri
from autobahn.wamp.interfaces import ISession
from autobahn.wamp.uri import \
error, \
register, \
subscribe
__all__ = (
'ComponentConfig',
'SessionDetails',
'CloseDetails',
'RegisterOptions',
'CallOptions',
'CallDetails',
'CallResult',
'SubscribeOptions',
'PublishOptions',
'EventDetails',
'Error',
'SessionNotReady',
'SerializationError',
'ProtocolError',
'TransportLost',
'ApplicationError',
'InvalidUri',
'ISession',
'error',
'register',
'subscribe',
)

View File

@@ -0,0 +1,694 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import os
import base64
import struct
import time
import binascii
import hmac
import hashlib
import random
from typing import Optional, Dict
from autobahn.util import public
from autobahn.util import xor as xor_array
from autobahn.wamp.interfaces import IAuthenticator
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
# if we don't have argon2/passlib (see "authentication" extra) then
# you don't get AuthScram and variants
try:
from argon2.low_level import hash_secret
from argon2 import Type
from passlib.utils import saslprep
HAS_ARGON = True
except ImportError:
HAS_ARGON = False
__all__ = (
'AuthAnonymous',
'AuthScram',
'AuthCryptoSign',
'AuthWampCra',
'AuthTicket',
'create_authenticator',
'pbkdf2',
'generate_totp_secret',
'compute_totp',
'check_totp',
'qrcode_from_totp',
'derive_key',
'generate_wcs',
'compute_wcs',
'derive_scram_credential',
)
def create_authenticator(name, **kwargs):
"""
Accepts various keys and values to configure an authenticator. The
valid keys depend on the kind of authenticator but all can
understand: `authextra`, `authid` and `authrole`
:return: an instance implementing IAuthenticator with the given
configuration.
"""
try:
klass = {
AuthScram.name: AuthScram,
AuthCryptoSign.name: AuthCryptoSign,
AuthCryptoSignProxy.name: AuthCryptoSignProxy,
AuthWampCra.name: AuthWampCra,
AuthAnonymous.name: AuthAnonymous,
AuthAnonymousProxy.name: AuthAnonymousProxy,
AuthTicket.name: AuthTicket,
}[name]
except KeyError:
raise ValueError(
"Unknown authenticator '{}'".format(name)
)
# this may raise further ValueErrors if the kwargs are wrong
authenticator = klass(**kwargs)
return authenticator
# experimental authentication API
class AuthAnonymous(object):
name = 'anonymous'
def __init__(self, **kw):
self._args = kw
@property
def authextra(self):
return self._args.get('authextra', dict())
def on_challenge(self, session, challenge):
raise RuntimeError(
"on_challenge called on anonymous authentication"
)
def on_welcome(self, msg, authextra):
return None
IAuthenticator.register(AuthAnonymous)
class AuthAnonymousProxy(AuthAnonymous):
name = 'anonymous-proxy'
IAuthenticator.register(AuthAnonymousProxy)
class AuthTicket(object):
name = 'ticket'
def __init__(self, **kw):
self._args = kw
try:
self._ticket = self._args.pop('ticket')
except KeyError:
raise ValueError(
"ticket authentication requires 'ticket=' kwarg"
)
@property
def authextra(self):
return self._args.get('authextra', dict())
def on_challenge(self, session, challenge):
assert challenge.method == "ticket"
return self._ticket
def on_welcome(self, msg, authextra):
return None
IAuthenticator.register(AuthTicket)
class AuthCryptoSign(object):
name = 'cryptosign'
def __init__(self, **kw):
# should put in checkconfig or similar
for key in kw.keys():
if key not in ['authextra', 'authid', 'authrole', 'privkey']:
raise ValueError(
"Unexpected key '{}' for {}".format(key, self.__class__.__name__)
)
for key in ['privkey']:
if key not in kw:
raise ValueError(
"Must provide '{}' for cryptosign".format(key)
)
from autobahn.wamp.cryptosign import CryptosignKey
self._privkey = CryptosignKey.from_bytes(
binascii.a2b_hex(kw['privkey'])
)
if 'pubkey' in kw.get('authextra', dict()):
pubkey = kw['authextra']['pubkey']
if pubkey != self._privkey.public_key():
raise ValueError(
"Public key doesn't correspond to private key"
)
else:
kw['authextra'] = kw.get('authextra', dict())
kw['authextra']['pubkey'] = self._privkey.public_key()
self._channel_binding = kw.get('authextra', dict()).get('channel_binding', None)
self._args = kw
@property
def authextra(self):
return self._args.get('authextra', dict())
def on_challenge(self, session, challenge):
channel_id = session._transport.transport_details.channel_id.get(self._channel_binding, None)
return self._privkey.sign_challenge(challenge,
channel_id=channel_id,
channel_id_type=self._channel_binding)
def on_welcome(self, msg, authextra):
return None
IAuthenticator.register(AuthCryptoSign)
class AuthCryptoSignProxy(AuthCryptoSign):
name = 'cryptosign-proxy'
IAuthenticator.register(AuthCryptoSignProxy)
def _hash_argon2id13_secret(password, salt, iterations, memory):
"""
Internal helper. Returns the salted/hashed password using the
argon2id-13 algorithm. The return value is base64-encoded.
"""
rawhash = hash_secret(
secret=password,
salt=base64.b64decode(salt),
time_cost=iterations,
memory_cost=memory,
parallelism=1, # hard-coded by WAMP-SCRAM spec
hash_len=32,
type=Type.ID,
version=0x13, # note this is decimal "19" which appears in places
)
# spits out stuff like:
# '$argon2i$v=19$m=512,t=2,p=2$5VtWOO3cGWYQHEMaYGbsfQ$AcmqasQgW/wI6wAHAMk4aQ'
_, tag, ver, options, salt_data, hash_data = rawhash.split(b'$')
return hash_data
def _hash_pbkdf2_secret(password, salt, iterations):
"""
Internal helper for SCRAM authentication
"""
return pbkdf2(password, salt, iterations, keylen=32)
class AuthScram(object):
"""
Implements "wamp-scram" authentication for components.
NOTE: This is a prototype of a draft spec; see
https://github.com/wamp-proto/wamp-proto/issues/135
"""
name = 'scram'
def __init__(self, **kw):
if not HAS_ARGON:
raise RuntimeError(
"Cannot support WAMP-SCRAM without argon2_cffi and "
"passlib libraries; install autobahn['scram']"
)
self._args = kw
self._client_nonce = None
@property
def authextra(self):
# is authextra() called exactly once per authentication?
if self._client_nonce is None:
self._client_nonce = base64.b64encode(os.urandom(16)).decode('ascii')
return {
"nonce": self._client_nonce,
}
def on_challenge(self, session, challenge):
assert challenge.method == "scram"
assert self._client_nonce is not None
required_args = ['nonce', 'kdf', 'salt', 'iterations']
optional_args = ['memory', 'channel_binding']
for k in required_args:
if k not in challenge.extra:
raise RuntimeError(
"WAMP-SCRAM challenge option '{}' is "
" required but not specified".format(k)
)
for k in challenge.extra:
if k not in optional_args + required_args:
raise RuntimeError(
"WAMP-SCRAM challenge has unknown attribute '{}'".format(k)
)
channel_binding = challenge.extra.get('channel_binding', '')
server_nonce = challenge.extra['nonce'] # base64
salt = challenge.extra['salt'] # base64
iterations = int(challenge.extra['iterations'])
memory = int(challenge.extra.get('memory', -1))
password = self._args['password'].encode('utf8') # supplied by user
authid = saslprep(self._args['authid'])
algorithm = challenge.extra['kdf']
client_nonce = self._client_nonce
self._auth_message = (
"{client_first_bare},{server_first},{client_final_no_proof}".format(
client_first_bare="n={},r={}".format(authid, client_nonce),
server_first="r={},s={},i={}".format(server_nonce, salt, iterations),
client_final_no_proof="c={},r={}".format(channel_binding, server_nonce),
)
).encode('ascii')
if algorithm == 'argon2id-13':
if memory == -1:
raise ValueError(
"WAMP-SCRAM 'argon2id-13' challenge requires 'memory' parameter"
)
self._salted_[PASSWORD-REMOVED](password, salt, iterations, memory)
elif algorithm == 'pbkdf2':
self._salted_[PASSWORD-REMOVED](password, salt, iterations)
else:
raise RuntimeError(
"WAMP-SCRAM specified unknown KDF '{}'".format(algorithm)
)
client_key = hmac.new(self._salted_password, b"Client Key", hashlib.sha256).digest()
stored_key = hashlib.new('sha256', client_key).digest()
client_signature = hmac.new(stored_key, self._auth_message, hashlib.sha256).digest()
client_proof = xor_array(client_key, client_signature)
return base64.b64encode(client_proof)
def on_welcome(self, session, authextra):
"""
When the server is satisfied, it sends a 'WELCOME' message.
This hook allows us an opportunity to deny the session right
before it gets set up -- we check the server-signature thus
authorizing the server and if it fails we drop the connection.
"""
alleged_server_sig = base64.b64decode(authextra['scram_server_signature'])
server_key = hmac.new(self._salted_password, b"Server Key", hashlib.sha256).digest()
server_signature = hmac.new(server_key, self._auth_message, hashlib.sha256).digest()
if not hmac.compare_digest(server_signature, alleged_server_sig):
session.log.error("Verification of server SCRAM signature failed")
return "Verification of server SCRAM signature failed"
session.log.info(
"Verification of server SCRAM signature successful"
)
return None
IAuthenticator.register(AuthScram)
class AuthWampCra(object):
name = 'wampcra'
def __init__(self, **kw):
# should put in checkconfig or similar
for key in kw.keys():
if key not in ['authextra', 'authid', 'authrole', 'secret']:
raise ValueError(
"Unexpected key '{}' for {}".format(key, self.__class__.__name__)
)
for key in ['secret', 'authid']:
if key not in kw:
raise ValueError(
"Must provide '{}' for wampcra".format(key)
)
self._args = kw
self._secret = kw.pop('secret')
if not isinstance(self._secret, str):
self._secret = self._secret.decode('utf8')
@property
def authextra(self):
return self._args.get('authextra', dict())
def on_challenge(self, session, challenge):
key = self._secret.encode('utf8')
if 'salt' in challenge.extra:
key = derive_key(
key,
challenge.extra['salt'],
challenge.extra['iterations'],
challenge.extra['keylen']
)
signature = compute_wcs(
key,
challenge.extra['challenge'].encode('utf8')
)
return signature.decode('ascii')
def on_welcome(self, msg, authextra):
return None
IAuthenticator.register(AuthWampCra)
@public
def generate_totp_secret(length=10):
"""
Generates a new Base32 encoded, random secret.
.. seealso:: http://en.wikipedia.org/wiki/Base32
:param length: The length of the entropy used to generate the secret.
:type length: int
:returns: The generated secret in Base32 (letters ``A-Z`` and digits ``2-7``).
The length of the generated secret is ``length * 8 / 5`` octets.
:rtype: unicode
"""
assert(type(length) == int)
return base64.b32encode(os.urandom(length)).decode('ascii')
@public
def compute_totp(secret, offset=0):
"""
Computes the current TOTP code.
:param secret: Base32 encoded secret.
:type secret: unicode
:param offset: Time offset (in steps, use eg -1, 0, +1 for compliance with RFC6238)
for which to compute TOTP.
:type offset: int
:returns: TOTP for current time (+/- offset).
:rtype: unicode
"""
assert(type(secret) == str)
assert(type(offset) == int)
try:
key = base64.b32decode(secret)
except TypeError:
raise Exception('invalid secret')
interval = offset + int(time.time()) // 30
msg = struct.pack('>Q', interval)
digest = hmac.new(key, msg, hashlib.sha1).digest()
o = 15 & (digest[19])
token = (struct.unpack('>I', digest[o:o + 4])[0] & 0x7fffffff) % 1000000
return '{0:06d}'.format(token)
@public
def check_totp(secret, ticket):
"""
Check a TOTP value received from a principal trying to authenticate against
the expected value computed from the secret shared between the principal and
the authenticating entity.
The Internet can be slow, and clocks might not match exactly, so some
leniency is allowed. RFC6238 recommends looking an extra time step in either
direction, which essentially opens the window from 30 seconds to 90 seconds.
:param secret: The secret shared between the principal (eg a client) that
is authenticating, and the authenticating entity (eg a server).
:type secret: unicode
:param ticket: The TOTP value to be checked.
:type ticket: unicode
:returns: ``True`` if the TOTP value is correct, else ``False``.
:rtype: bool
"""
for offset in [0, 1, -1]:
if ticket == compute_totp(secret, offset):
return True
return False
@public
def qrcode_from_totp(secret, label, issuer):
if type(secret) != str:
raise Exception('secret must be of type unicode, not {}'.format(type(secret)))
if type(label) != str:
raise Exception('label must be of type unicode, not {}'.format(type(label)))
try:
import qrcode
import qrcode.image.svg
except ImportError:
raise Exception('qrcode not installed')
return qrcode.make(
'otpauth://totp/{}?secret={}&issuer={}'.format(label, secret, issuer),
box_size=3,
image_factory=qrcode.image.svg.SvgImage).to_string()
@public
def pbkdf2(data, salt, iterations=1000, keylen=32, hashfunc=None):
"""
Returns a binary digest for the PBKDF2 hash algorithm of ``data``
with the given ``salt``. It iterates ``iterations`` time and produces a
key of ``keylen`` bytes. By default SHA-256 is used as hash function,
a different hashlib ``hashfunc`` can be provided.
:param data: The data for which to compute the PBKDF2 derived key.
:type data: bytes
:param salt: The salt to use for deriving the key.
:type salt: bytes
:param iterations: The number of iterations to perform in PBKDF2.
:type iterations: int
:param keylen: The length of the cryptographic key to derive.
:type keylen: int
:param hashfunc: Name of the hash algorithm to use
:type hashfunc: str
:returns: The derived cryptographic key.
:rtype: bytes
"""
if not (type(data) == bytes) or \
not (type(salt) == bytes) or \
not (type(iterations) == int) or \
not (type(keylen) == int):
raise ValueError("Invalid argument types")
# justification: WAMP-CRA uses SHA256 and users shouldn't have any
# other reason to call this particular pbkdf2 function (arguably,
# it should be private maybe?)
if hashfunc is None:
hashfunc = 'sha256'
if hashfunc is callable:
# used to take stuff from hashlib; translate?
raise ValueError(
"pbkdf2 now takes the name of a hash algorithm for 'hashfunc='"
)
backend = default_backend()
# https://cryptography.io/en/latest/hazmat/primitives/key-derivation-functions/#pbkdf2
kdf = PBKDF2HMAC(
algorithm=getattr(hashes, hashfunc.upper())(),
length=keylen,
salt=salt,
iterations=iterations,
backend=backend,
)
return kdf.derive(data)
@public
def derive_key(secret, salt, iterations=1000, keylen=32):
"""
Computes a derived cryptographic key from a password according to PBKDF2.
.. seealso:: http://en.wikipedia.org/wiki/PBKDF2
:param secret: The secret.
:type secret: bytes or unicode
:param salt: The salt to be used.
:type salt: bytes or unicode
:param iterations: Number of iterations of derivation algorithm to run.
:type iterations: int
:param keylen: Length of the key to derive in bytes.
:type keylen: int
:return: The derived key in Base64 encoding.
:rtype: bytes
"""
if not (type(secret) in [str, bytes]):
raise ValueError("'secret' must be bytes")
if not (type(salt) in [str, bytes]):
raise ValueError("'salt' must be bytes")
if not (type(iterations) == int):
raise ValueError("'iterations' must be an integer")
if not (type(keylen) == int):
raise ValueError("'keylen' must be an integer")
if type(secret) == str:
secret = secret.encode('utf8')
if type(salt) == str:
salt = salt.encode('utf8')
key = pbkdf2(secret, salt, iterations, keylen)
return binascii.b2a_base64(key).strip()
WCS_SECRET_CHARSET = "[AWS-SECRET-REMOVED]opqrstuvwxyz0123456789"
"""
The characters from which :func:`autobahn.wamp.auth.generate_wcs` generates secrets.
"""
@public
def generate_wcs(length=14):
"""
Generates a new random secret for use with WAMP-CRA.
The secret generated is a random character sequence drawn from
- upper and lower case latin letters
- digits
-
:param length: The length of the secret to generate.
:type length: int
:return: The generated secret. The length of the generated is ``length`` octets.
:rtype: bytes
"""
assert(type(length) == int)
return "".join(random.choice(WCS_SECRET_CHARSET) for _ in range(length)).encode('ascii')
@public
def compute_wcs(key, challenge):
"""
Compute an WAMP-CRA authentication signature from an authentication
challenge and a (derived) key.
:param key: The key derived (via PBKDF2) from the secret.
:type key: bytes
:param challenge: The authentication challenge to sign.
:type challenge: bytes
:return: The authentication signature.
:rtype: bytes
"""
assert(type(key) in [str, bytes])
assert(type(challenge) in [str, bytes])
if type(key) == str:
key = key.encode('utf8')
if type(challenge) == str:
challenge = challenge.encode('utf8')
sig = hmac.new(key, challenge, hashlib.sha256).digest()
return binascii.b2a_base64(sig).strip()
def derive_scram_credential(email: str, password: str, salt: Optional[bytes] = None) -> Dict:
"""
Derive WAMP-SCRAM credentials from user email and password. The SCRAM parameters used
are the following (these are also contained in the returned credentials):
* kdf ``argon2id-13``
* time cost ``4096``
* memory cost ``512``
* parallelism ``1``
See `draft-irtf-cfrg-argon2 <https://datatracker.ietf.org/doc/draft-irtf-cfrg-argon2/>`__ and
`argon2-cffi <https://argon2-cffi.readthedocs.io/en/stable/>`__.
:param email: User email.
:param password: User password.
:param salt: Optional salt to use (must be 16 bytes long). If none is given, compute salt
from email as ``salt = SHA256(email)[:16]``.
:return: WAMP-SCRAM credentials. When serialized, the returned credentials can be copy-pasted
into the ``***REMOVED***`` node configuration for a Crossbar.io node.
"""
assert HAS_ARGON, 'missing dependency argon2'
from argon2.low_level import hash_secret
from argon2.low_level import Type
# derive salt from email
if not salt:
m = hashlib.sha256()
m.update(email.encode('utf8'))
salt = m.digest()[:16]
assert len(salt) == 16
hash_data = hash_secret(
secret=password.encode('utf8'),
salt=salt,
time_cost=4096,
memory_cost=512,
parallelism=1,
hash_len=32,
type=Type.ID,
version=19,
)
_, tag, v, params, _, salted_[PASSWORD-REMOVED].decode('ascii').split('$')
assert tag == 'argon2id'
assert v == 'v=19' # argon's version 1.3 is represented as 0x13, which is 19 decimal...
params = {
k: v
for k, v in
[x.split('=') for x in params.split(',')]
}
salted_[PASSWORD-REMOVED].encode('ascii')
client_key = hmac.new(salted_password, b"Client Key", hashlib.sha256).digest()
stored_key = hashlib.new('sha256', client_key).digest()
server_key = hmac.new(salted_password, b"Server Key", hashlib.sha256).digest()
credential = {
"kdf": "argon2id-13",
"memory": int(params['m']),
"iterations": int(params['t']),
"salt": binascii.b2a_hex(salt).decode('ascii'),
"stored-key": binascii.b2a_hex(stored_key).decode('ascii'),
"server-key": binascii.b2a_hex(server_key).decode('ascii'),
}
return credential

View File

@@ -0,0 +1,983 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import itertools
import random
from functools import partial
import txaio
from autobahn.util import ObservableMixin
from autobahn.websocket.util import parse_url as parse_ws_url
from autobahn.rawsocket.util import parse_url as parse_rs_url
from autobahn.wamp.types import ComponentConfig, SubscribeOptions, RegisterOptions
from autobahn.wamp.exception import SessionNotReady, ApplicationError
from autobahn.wamp.auth import create_authenticator, IAuthenticator
from autobahn.wamp.serializer import SERID_TO_SER
__all__ = (
'Component'
)
def _validate_endpoint(endpoint, check_native_endpoint=None):
"""
Check a WAMP connecting endpoint configuration.
"""
if check_native_endpoint:
check_native_endpoint(endpoint)
elif not isinstance(endpoint, dict):
raise ValueError(
"'endpoint' must be a dict"
)
# note, we're falling through here -- check_native_endpoint can
# disallow or allow dict-based config as it likes, but if it
# *does* allow a dict through, we want to check "base options"
# here so that both Twisted and asyncio don't have to check these
# things as well.
if isinstance(endpoint, dict):
# XXX what about filling in anything missing from the URL? Or
# is that only for when *nothing* is provided for endpoint?
if 'type' not in endpoint:
# could maybe just make tcp the default?
raise ValueError("'type' required in endpoint configuration")
if endpoint['type'] not in ['tcp', 'unix']:
raise ValueError('invalid type "{}" in endpoint'.format(endpoint['type']))
for k in endpoint.keys():
if k not in ['type', 'host', 'port', 'path', 'tls', 'timeout', 'version']:
raise ValueError(
"Invalid key '{}' in endpoint configuration".format(k)
)
if endpoint['type'] == 'tcp':
for k in ['host', 'port']:
if k not in endpoint:
raise ValueError(
"'{}' required in 'tcp' endpoint config".format(k)
)
for k in ['path']:
if k in endpoint:
raise ValueError(
"'{}' not valid in 'tcp' endpoint config".format(k)
)
elif endpoint['type'] == 'unix':
for k in ['path']:
if k not in endpoint:
raise ValueError(
"'{}' required for 'unix' endpoint config".format(k)
)
for k in ['host', 'port', 'tls']:
if k in endpoint:
raise ValueError(
"'{}' not valid in 'unix' endpoint config".format(k)
)
else:
assert False, 'should not arrive here'
def _create_transport(index, transport, check_native_endpoint=None):
"""
Internal helper to insert defaults and create _Transport instances.
:param transport: a (possibly valid) transport configuration
:type transport: dict
:returns: a _Transport instance
:raises: ValueError on invalid configuration
"""
if type(transport) != dict:
raise ValueError('invalid type {} for transport configuration - must be a dict'.format(type(transport)))
valid_transport_keys = [
'type', 'url', 'endpoint', 'serializer', 'serializers', 'options',
'max_retries', 'max_retry_delay', 'initial_retry_delay',
'retry_delay_growth', 'retry_delay_jitter', 'proxy', 'headers'
]
for k in transport.keys():
if k not in valid_transport_keys:
raise ValueError(
"'{}' is not a valid configuration item".format(k)
)
kind = 'websocket'
if 'type' in transport:
if transport['type'] not in ['websocket', 'rawsocket']:
raise ValueError('Invalid transport type {}'.format(transport['type']))
kind = transport['type']
else:
transport['type'] = 'websocket'
if 'proxy' in transport and kind != 'websocket':
raise ValueError(
"proxy= only supported for type=websocket transports"
)
proxy = transport.get("proxy", None)
if proxy is not None:
for k in proxy.keys():
if k not in ['host', 'port']:
raise ValueError(
"Unknown key '{}' in proxy config".format(k)
)
for k in ['host', 'port']:
if k not in proxy:
raise ValueError(
"Proxy config requires '{}'".formaT(k)
)
options = dict()
if 'options' in transport:
options = transport['options']
if not isinstance(options, dict):
raise ValueError(
'options must be a dict, not {}'.format(type(options))
)
headers = transport.get("headers")
if kind == 'websocket':
for key in ['url']:
if key not in transport:
raise ValueError("Transport requires '{}' key".format(key))
# endpoint not required; we will deduce from URL if it's not provided
# XXX not in the branch I rebased; can this go away? (is it redundant??)
if 'endpoint' not in transport:
is_secure, host, port, resource, path, params = parse_ws_url(transport['url'])
endpoint_config = {
'type': 'tcp',
'host': host,
'port': port,
'tls': is_secure,
}
else:
# note: we're avoiding mutating the incoming "configuration"
# dict, so this should avoid that too...
endpoint_config = transport['endpoint']
_validate_endpoint(endpoint_config, check_native_endpoint)
if 'serializer' in transport:
raise ValueError("'serializer' is only for rawsocket; use 'serializers'")
if 'serializers' in transport:
if not isinstance(transport['serializers'], (list, tuple)):
raise ValueError("'serializers' must be a list of strings")
if not all([
isinstance(s, (str, str))
for s in transport['serializers']]):
raise ValueError("'serializers' must be a list of strings")
valid_serializers = SERID_TO_SER.keys()
for serial in transport['serializers']:
if serial not in valid_serializers:
raise ValueError(
"Invalid serializer '{}' (expected one of: {})".format(
serial,
', '.join([repr(s) for s in valid_serializers]),
)
)
serializer_config = transport.get('serializers', ['cbor', 'json'])
elif kind == 'rawsocket':
if 'endpoint' not in transport:
if transport['url'].startswith('rs'):
# # try to parse RawSocket URL ..
isSecure, host, port = parse_rs_url(transport['url'])
elif transport['url'].startswith('ws'):
# try to parse WebSocket URL ..
isSecure, host, port, resource, path, params = parse_ws_url(transport['url'])
else:
raise RuntimeError()
if host == 'unix':
# here, "port" is actually holding the path on the host, eg "/tmp/file.sock"
endpoint_config = {
'type': 'unix',
'path': port,
}
else:
endpoint_config = {
'type': 'tcp',
'host': host,
'port': port,
}
else:
endpoint_config = transport['endpoint']
if 'serializers' in transport:
raise ValueError("'serializers' is only for websocket; use 'serializer'")
if headers is not None:
raise ValueError("'headers' not supported for rawsocket transport")
# always a list; len == 1 for rawsocket
if 'serializer' in transport:
if not isinstance(transport['serializer'], (str, str)):
raise ValueError("'serializer' must be a string")
serializer_config = [transport['serializer']]
else:
serializer_config = ['cbor']
else:
assert False, 'should not arrive here'
kw = {}
for key in ['max_retries', 'max_retry_delay', 'initial_retry_delay',
'retry_delay_growth', 'retry_delay_jitter']:
if key in transport:
kw[key] = transport[key]
return _Transport(
index,
kind=kind,
url=transport.get('url', None),
endpoint=endpoint_config,
serializers=serializer_config,
proxy=proxy,
options=options,
headers=headers,
**kw
)
class _Transport(object):
"""
Thin-wrapper for WAMP transports used by a Connection.
"""
def __init__(self, idx, kind, url, endpoint, serializers,
max_retries=-1,
max_retry_delay=300,
initial_retry_delay=1.5,
retry_delay_growth=1.5,
retry_delay_jitter=0.1,
proxy=None,
options=None,
headers=None):
"""
"""
if options is None:
options = dict()
self.idx = idx
self.type = kind
self.url = url
self.endpoint = endpoint
self.options = options
self.headers = headers
self.serializers = serializers
if self.type == 'rawsocket' and len(serializers) != 1:
raise ValueError(
"'rawsocket' transport requires exactly one serializer"
)
self.max_retries = max_retries
self.max_retry_delay = max_retry_delay
self.initial_retry_delay = initial_retry_delay
self.retry_delay_growth = retry_delay_growth
self.retry_delay_jitter = retry_delay_jitter
self.proxy = proxy # this is a dict of proxy config
# used via can_reconnect() and failed() to record this
# transport is never going to work
self._permanent_failure = False
self.reset()
def reset(self):
"""
set connection failure rates and retry-delay to initial values
"""
self.connect_attempts = 0
self.connect_sucesses = 0
self.connect_failures = 0
self.retry_delay = self.initial_retry_delay
def failed(self):
"""
Mark this transport as failed, meaning we won't try to connect to
it any longer (that is: can_reconnect() will always return
False afer calling this).
"""
self._permanent_failure = True
def can_reconnect(self):
if self._permanent_failure:
return False
if self.max_retries == -1:
return True
return self.connect_attempts < self.max_retries + 1
def next_delay(self):
if self.connect_attempts == 0:
# if we never tried before, try immediately
return 0
elif self.max_retries != -1 and self.connect_attempts >= self.max_retries + 1:
raise RuntimeError('max reconnects reached')
else:
self.retry_delay = self.retry_delay * self.retry_delay_growth
self.retry_delay = random.normalvariate(self.retry_delay, self.retry_delay * self.retry_delay_jitter)
if self.retry_delay > self.max_retry_delay:
self.retry_delay = self.max_retry_delay
return self.retry_delay
def describe_endpoint(self):
"""
returns a human-readable description of the endpoint
"""
if isinstance(self.endpoint, dict):
return self.endpoint['type']
return repr(self.endpoint)
# this could probably implement twisted.application.service.IService
# if we wanted; or via an adapter...which just adds a startService()
# and stopService() [latter can be async]
class Component(ObservableMixin):
"""
A WAMP application component. A component holds configuration for
(and knows how to create) transports and sessions.
"""
session_factory = None
"""
The factory of the session we will instantiate.
"""
def subscribe(self, topic, options=None, check_types=False):
"""
A decorator as a shortcut for subscribing during on-join
For example::
@component.subscribe(
"some.topic",
options=SubscribeOptions(match='prefix'),
)
def topic(*args, **kw):
print("some.topic({}, {}): event received".format(args, kw))
"""
assert options is None or isinstance(options, SubscribeOptions)
def decorator(fn):
def do_subscription(session, details):
return session.subscribe(fn, topic=topic, options=options, check_types=check_types)
self.on('join', do_subscription)
return fn
return decorator
def register(self, uri, options=None, check_types=False):
"""
A decorator as a shortcut for registering during on-join
For example::
@component.register(
"com.example.add",
options=RegisterOptions(invoke='roundrobin'),
)
def add(*args, **kw):
print("add({}, {}): event received".format(args, kw))
"""
assert options is None or isinstance(options, RegisterOptions)
def decorator(fn):
def do_registration(session, details):
return session.register(fn, procedure=uri, options=options, check_types=check_types)
self.on('join', do_registration)
return fn
return decorator
def __init__(self, main=None, transports=None, config=None, realm='realm1', extra=None,
authentication=None, session_factory=None, is_fatal=None):
"""
:param main: After a transport has been connected and a session
has been established and joined to a realm, this (async)
procedure will be run until it finishes -- which signals that
the component has run to completion. In this case, it usually
doesn't make sense to use the ``on_*`` kwargs. If you do not
pass a main() procedure, the session will not be closed
(unless you arrange for .leave() to be called).
:type main: callable taking two args ``reactor`` and ``ISession``
:param transports: Transport configurations for creating
transports. Each transport can be a WAMP URL, or a dict
containing the following configuration keys:
- ``type`` (optional): ``websocket`` (default) or ``rawsocket``
- ``url``: the router URL
- ``endpoint`` (optional, derived from URL if not provided):
- ``type``: "tcp" or "unix"
- ``host``, ``port``: only for TCP
- ``path``: only for unix
- ``timeout``: in seconds
- ``tls``: ``True`` or (under Twisted) an
``twisted.internet.ssl.IOpenSSLClientComponentCreator``
instance (such as returned from
``twisted.internet.ssl.optionsForClientTLS``) or
``CertificateOptions`` instance.
- ``max_retries``: Maximum number of reconnection attempts. Unlimited if set to -1.
- ``initial_retry_delay``: Initial delay for reconnection attempt in seconds (Default: 1.0s).
- ``max_retry_delay``: Maximum delay for reconnection attempts in seconds (Default: 60s).
- ``retry_delay_growth``: The growth factor applied to the retry delay between reconnection attempts (Default 1.5).
- ``retry_delay_jitter``: A 0-argument callable that introduces nose into the delay. (Default random.random)
- ``serializer`` (only for raw socket): Specify an accepted serializer (e.g. 'json', 'msgpack', 'cbor', 'ubjson', 'flatbuffers')
- ``serializers``: Specify list of accepted serializers
- ``options``: tbd
- ``proxy``: tbd
:type transports: None or str or list
:param realm: the realm to join
:type realm: str
:param authentication: configuration of authenticators
:type authentication: dict
:param session_factory: if None, ``ApplicationSession`` is
used, otherwise a callable taking a single ``config`` argument
that is used to create a new `ApplicationSession` instance.
:param is_fatal: a callable taking a single argument, an
``Exception`` instance. The callable should return ``True`` if
this error is "fatal", meaning we should not try connecting to
the current transport again. The default behavior (on None) is
to always return ``False``
"""
self.set_valid_events(
[
'start', # fired by base class
'connect', # fired by ApplicationSession
'join', # fired by ApplicationSession
'ready', # fired by ApplicationSession
'leave', # fired by ApplicationSession
'disconnect', # fired by ApplicationSession
'connectfailure', # fired by base class
]
)
if is_fatal is not None and not callable(is_fatal):
raise ValueError('"is_fatal" must be a callable or None')
self._is_fatal = is_fatal
if main is not None and not callable(main):
raise ValueError('"main" must be a callable if given')
self._entry = main
# use WAMP-over-WebSocket to localhost when no transport is specified at all
if transports is None:
transports = 'ws://127.0.0.1:8080/ws'
# allows to provide a URL instead of a list of transports
if isinstance(transports, (str, str)):
url = transports
# 'endpoint' will get filled in by parsing the 'url'
transport = {
'type': 'websocket',
'url': url,
}
transports = [transport]
# allows single transport instead of a list (convenience)
elif isinstance(transports, dict):
transports = [transports]
# XXX do we want to be able to provide an infinite iterable of
# transports here? e.g. a generator that makes new transport
# to try?
# now check and save list of transports
self._transports = []
for idx, transport in enumerate(transports):
# allows to provide a URL instead of transport dict
if type(transport) == str:
_transport = {
'type': 'websocket',
'url': transport,
}
else:
_transport = transport
self._transports.append(
_create_transport(idx, _transport, self._check_native_endpoint)
)
# XXX should have some checkconfig support
self._authentication = authentication or {}
if session_factory:
self.session_factory = session_factory
self._realm = realm
self._extra = extra
self._delay_f = None
self._done_f = None
self._session = None
self._stopping = False
def _can_reconnect(self):
# check if any of our transport has any reconnect attempt left
for transport in self._transports:
if transport.can_reconnect():
return True
return False
def _start(self, loop=None):
"""
This starts the Component, which means it will start connecting
(and re-connecting) to its configured transports. A Component
runs until it is "done", which means one of:
- There was a "main" function defined, and it completed successfully;
- Something called ``.leave()`` on our session, and we left successfully;
- ``.stop()`` was called, and completed successfully;
- none of our transports were able to connect successfully (failure);
:returns: a Future/Deferred which will resolve (to ``None``) when we are
"done" or with an error if something went wrong.
"""
# we can only be "start()ed" once before we stop .. but that
# doesn't have to be an error we can give back another future
# that fires when our "real" _done_f is completed.
if self._done_f is not None:
d = txaio.create_future()
def _cb(arg):
txaio.resolve(d, arg)
txaio.add_callbacks(self._done_f, _cb, _cb)
return d
# this future will be returned, and thus has the semantics
# specified in the docstring.
self._done_f = txaio.create_future()
def _reset(arg):
"""
if the _done_f future is resolved (good or bad), we want to set it
to None in our class
"""
self._done_f = None
return arg
txaio.add_callbacks(self._done_f, _reset, _reset)
# Create a generator of transports that .can_reconnect()
transport_gen = itertools.cycle(self._transports)
# this is a 1-element list so we can set it from closures in
# this function
transport_candidate = [0]
def error(fail):
self._delay_f = None
if self._stopping:
# might be better to add framework-specific checks in
# subclasses to see if this is CancelledError (for
# Twisted) and whatever asyncio does .. but tracking
# if we're in the shutdown path is fine too
txaio.resolve(self._done_f, None)
else:
self.log.info("Internal error {msg}", msg=txaio.failure_message(fail))
self.log.debug("{tb}", tb=txaio.failure_format_traceback(fail))
txaio.reject(self._done_f, fail)
def attempt_connect(_):
self._delay_f = None
def handle_connect_error(fail):
# FIXME - make txaio friendly
# Can connect_f ever be in a cancelled state?
# if txaio.using_asyncio and isinstance(fail.value, asyncio.CancelledError):
# unrecoverable_error = True
self.log.debug('component failed: {error}', error=txaio.failure_message(fail))
self.log.debug('{tb}', tb=txaio.failure_format_traceback(fail))
# If this is a "fatal error" that will never work,
# we bail out now
if isinstance(fail.value, ApplicationError):
self.log.error("{msg}", msg=fail.value.error_message())
elif isinstance(fail.value, OSError):
# failed to connect entirely, like nobody
# listening etc.
self.log.info("Connection failed with OS error: {msg}", msg=txaio.failure_message(fail))
elif self._is_ssl_error(fail.value):
# Quoting pyOpenSSL docs: "Whenever
# [SSL.Error] is raised directly, it has a
# list of error messages from the OpenSSL
# error queue, where each item is a tuple
# (lib, function, reason). Here lib, function
# and reason are all strings, describing where
# and what the problem is. See err(3) for more
# information."
# (and 'args' is a 1-tuple containing the above
# 3-tuple...)
ssl_lib, ssl_func, ssl_reason = fail.value.args[0][0]
self.log.error("TLS failure: {reason}", reason=ssl_reason)
else:
self.log.error(
'Connection failed: {error}',
error=txaio.failure_message(fail),
)
if self._is_fatal is None:
is_fatal = False
else:
is_fatal = self._is_fatal(fail.value)
if is_fatal:
self.log.info("Error was fatal; failing transport")
transport_candidate[0].failed()
txaio.call_later(0, transport_check, None)
return
def notify_connect_error(fail):
chain_f = txaio.create_future()
# hmm, if connectfailure took a _Transport instead of
# (or in addition to?) self it could .failed() the
# transport and we could do away with the is_fatal
# listener?
handler_f = self.fire('connectfailure', self, fail.value)
txaio.add_callbacks(
handler_f,
lambda _: txaio.reject(chain_f, fail),
lambda _: txaio.reject(chain_f, fail)
)
return chain_f
def connect_error(fail):
notify_f = notify_connect_error(fail)
txaio.add_callbacks(notify_f, None, handle_connect_error)
def session_done(x):
txaio.resolve(self._done_f, None)
connect_f = txaio.as_future(
self._connect_once,
loop, transport_candidate[0],
)
txaio.add_callbacks(connect_f, session_done, connect_error)
def transport_check(_):
self.log.debug('Entering re-connect loop')
if not self._can_reconnect():
err_msg = "Component failed: Exhausted all transport connect attempts"
self.log.info(err_msg)
try:
raise RuntimeError(err_msg)
except RuntimeError as e:
txaio.reject(self._done_f, e)
return
while True:
transport = next(transport_gen)
if transport.can_reconnect():
transport_candidate[0] = transport
break
delay = transport.next_delay()
self.log.warn(
'trying transport {transport_idx} ("{transport_url}") using connect delay {transport_delay}',
transport_idx=transport.idx,
transport_url=transport.url,
transport_delay=delay,
)
self._delay_f = txaio.sleep(delay)
txaio.add_callbacks(self._delay_f, attempt_connect, error)
# issue our first event, then start reconnect loop
start_f = self.fire('start', loop, self)
txaio.add_callbacks(start_f, transport_check, error)
return self._done_f
def stop(self):
self._stopping = True
if self._session and self._session.is_attached():
return self._session.leave()
elif self._delay_f:
# This cancel request will actually call the "error" callback of
# the _delay_f future. Nothing to worry about.
return txaio.as_future(txaio.cancel, self._delay_f)
# if (for some reason -- should we log warning here to figure
# out if this can evern happen?) we've not fired _done_f, we
# do that now (causing our "main" to exit, and thus react() to
# quit)
if not txaio.is_called(self._done_f):
txaio.resolve(self._done_f, None)
return txaio.create_future_success(None)
def _connect_once(self, reactor, transport):
self.log.info(
'connecting once using transport type "{transport_type}" '
'over endpoint "{endpoint_desc}"',
transport_type=transport.type,
endpoint_desc=transport.describe_endpoint(),
)
done = txaio.create_future()
# factory for ISession objects
def create_session():
cfg = ComponentConfig(self._realm, self._extra)
try:
self._session = session = self.session_factory(cfg)
for auth_name, auth_config in self._authentication.items():
if isinstance(auth_config, IAuthenticator):
session.add_authenticator(auth_config)
else:
authenticator = create_authenticator(auth_name, **auth_config)
session.add_authenticator(authenticator)
except Exception as e:
# couldn't instantiate session calls, which is fatal.
# let the reconnection logic deal with that
f = txaio.create_failure(e)
txaio.reject(done, f)
raise
else:
# hook up the listener to the parent so we can bubble
# up events happning on the session onto the
# connection. This lets you do component.on('join',
# cb) which will work just as if you called
# session.on('join', cb) for every session created.
session._parent = self
# listen on leave events; if we get errors
# (e.g. no_such_realm), an on_leave can happen without
# an on_join before
def on_leave(session, details):
self.log.info(
"session leaving '{details.reason}'",
details=details,
)
if not txaio.is_called(done):
if details.reason in ["wamp.close.normal", "wamp.close.goodbye_and_out"]:
txaio.resolve(done, None)
else:
f = txaio.create_failure(
ApplicationError(details.reason, details.message)
)
txaio.reject(done, f)
session.on('leave', on_leave)
# if we were given a "main" procedure, we run through
# it completely (i.e. until its Deferred fires) and
# then disconnect this session
def on_join(session, details):
transport.reset()
transport.connect_sucesses += 1
self.log.debug("session on_join: {details}", details=details)
d = txaio.as_future(self._entry, reactor, session)
def main_success(_):
self.log.debug("main_success")
def leave():
try:
session.leave()
except SessionNotReady:
# someone may have already called
# leave()
pass
txaio.call_later(0, leave)
def main_error(err):
self.log.debug("main_error: {err}", err=err)
txaio.reject(done, err)
session.disconnect()
txaio.add_callbacks(d, main_success, main_error)
if self._entry is not None:
session.on('join', on_join)
# listen on disconnect events. Note that in case we
# had a "main" procedure, we could have already
# resolve()'d our "done" future
def on_disconnect(session, was_clean):
self.log.debug(
"session on_disconnect: was_clean={was_clean}",
was_clean=was_clean,
)
if not txaio.is_called(done):
if not was_clean:
self.log.warn(
"Session disconnected uncleanly"
)
else:
# eg the session has left the realm, and the transport was properly
# shut down. successfully finish the connection
txaio.resolve(done, None)
session.on('disconnect', on_disconnect)
# return the fresh session object
return session
transport.connect_attempts += 1
d = txaio.as_future(
self._connect_transport,
reactor, transport, create_session, done,
)
def on_error(err):
"""
this may seem redundant after looking at _connect_transport, but
it will handle a case where something goes wrong in
_connect_transport itself -- as the only connect our
caller has is the 'done' future
"""
transport.connect_failures += 1
# something bad has happened, and maybe didn't get caught
# upstream yet
if not txaio.is_called(done):
txaio.reject(done, err)
txaio.add_callbacks(d, None, on_error)
return done
def on_join(self, fn):
"""
A decorator as a shortcut for listening for 'join' events.
For example::
@component.on_join
def joined(session, details):
print("Session {} joined: {}".format(session, details))
"""
self.on('join', fn)
def on_leave(self, fn):
"""
A decorator as a shortcut for listening for 'leave' events.
"""
self.on('leave', fn)
def on_connect(self, fn):
"""
A decorator as a shortcut for listening for 'connect' events.
"""
self.on('connect', fn)
def on_disconnect(self, fn):
"""
A decorator as a shortcut for listening for 'disconnect' events.
"""
self.on('disconnect', fn)
def on_ready(self, fn):
"""
A decorator as a shortcut for listening for 'ready' events.
"""
self.on('ready', fn)
def on_connectfailure(self, fn):
"""
A decorator as a shortcut for listening for 'connectfailure' events.
"""
self.on('connectfailure', fn)
def _run(reactor, components, done_callback=None):
"""
Internal helper. Use "run" method from autobahn.twisted.wamp or
autobahn.asyncio.wamp
This is the generic parts of the run() method so that there's very
little code in the twisted/asyncio specific run() methods.
This is called by react() (or run_until_complete() so any errors
coming out of this should be handled properly. Logging will
already be started.
"""
# let user pass a single component to run, too
# XXX probably want IComponent? only demand it, here and below?
if isinstance(components, Component):
components = [components]
if type(components) != list:
raise ValueError(
'"components" must be a list of Component objects - encountered'
' {0}'.format(type(components))
)
for c in components:
if not isinstance(c, Component):
raise ValueError(
'"components" must be a list of Component objects - encountered'
'item of type {0}'.format(type(c))
)
# validation complete; proceed with startup
log = txaio.make_logger()
def component_success(comp, arg):
log.debug("Component '{c}' successfully completed: {arg}", c=comp, arg=arg)
return arg
def component_failure(comp, f):
log.error("Component '{c}' error: {msg}", c=comp, msg=txaio.failure_message(f))
log.debug("Component error: {tb}", tb=txaio.failure_format_traceback(f))
# double-check: is a component-failure still fatal to the
# startup process (because we passed consume_exception=False
# to gather() below?)
return None
def component_start(comp):
# the future from start() errbacks if we fail, or callbacks
# when the component is considered "done" (so maybe never)
d = txaio.as_future(comp.start, reactor)
txaio.add_callbacks(
d,
partial(component_success, comp),
partial(component_failure, comp),
)
return d
# note that these are started in parallel -- maybe we want to add
# a "connected" signal to components so we could start them in the
# order they're given to run() as "a" solution to dependencies.
dl = []
for comp in components:
d = component_start(comp)
dl.append(d)
done_d = txaio.gather(dl, consume_exceptions=False)
if done_callback:
def all_done(arg):
log.debug("All components ended; stopping reactor")
done_callback(reactor, arg)
txaio.add_callbacks(done_d, all_done, all_done)
return done_d

View File

@@ -0,0 +1,268 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
from autobahn.util import public
from autobahn.wamp.interfaces import IPayloadCodec
from autobahn.wamp.types import EncodedPayload
from autobahn.wamp.serializer import _dumps as _json_dumps
from autobahn.wamp.serializer import _loads as _json_loads
__all__ = [
'HAS_CRYPTOBOX',
'EncodedPayload'
]
try:
# try to import everything we need for WAMP-cryptobox
from nacl.encoding import Base64Encoder, RawEncoder, HexEncoder
from nacl.public import PrivateKey, PublicKey, Box
from nacl.utils import random
from pytrie import StringTrie
except ImportError:
HAS_CRYPTOBOX = False
else:
HAS_CRYPTOBOX = True
__all__.extend(['Key', 'KeyRing'])
if HAS_CRYPTOBOX:
@public
class Key(object):
"""
Holds originator and responder keys for an URI.
The originator is either a caller or a publisher. The responder is either a callee or subscriber.
"""
def __init__(self, originator_priv=None, originator_pub=None, responder_priv=None, responder_pub=None):
# the originator private and public keys, as available
if originator_priv:
self.originator_priv = PrivateKey(originator_priv, encoder=Base64Encoder)
else:
self.originator_priv = None
if self.originator_priv:
self.originator_pub = self.originator_priv.public_key
assert(originator_pub is None or originator_pub == self.originator_pub)
else:
self.originator_pub = PublicKey(originator_pub, encoder=Base64Encoder)
# the responder private and public keys, as available
if responder_priv:
self.responder_priv = PrivateKey(responder_priv, encoder=Base64Encoder)
else:
self.responder_priv = None
if self.responder_priv:
self.responder_pub = self.responder_priv.public_key
assert(responder_pub is None or responder_pub == self.responder_pub)
else:
self.responder_pub = PublicKey(responder_pub, encoder=Base64Encoder)
# this crypto box is for originators (callers, publishers):
#
# 1. _encrypting_ WAMP messages outgoing from originators: CALL*, PUBLISH*
# 2. _decrypting_ WAMP messages incoming to originators: RESULT*, ERROR
#
if self.originator_priv and self.responder_pub:
self.originator_box = Box(self.originator_priv, self.responder_pub)
else:
self.originator_box = None
# this crypto box is for responders (callees, subscribers):
#
# 1. _decrypting_ WAMP messages incoming to responders: INVOCATION*, EVENT*
# 2. _encrypting_ WAMP messages outgoing from responders: YIELD*, ERROR
#
if self.responder_priv and self.originator_pub:
self.responder_box = Box(self.responder_priv, self.originator_pub)
else:
self.responder_box = None
if not (self.originator_box or self.responder_box):
raise Exception("insufficient keys provided for at least originator or responder role")
@public
class SymKey(object):
"""
Holds a symmetric key for an URI.
"""
def __init__(self, raw=None):
pass
@public
class KeyRing(object):
"""
A keyring holds (cryptobox) public-private key pairs for use with WAMP-cryptobox payload
encryption. The keyring can be set on a WAMP session and then transparently will get used
for encrypting and decrypting WAMP message payloads.
"""
@public
def __init__(self, default_key=None):
"""
Create a new key ring to hold public and private keys mapped from an URI space.
"""
assert(default_key is None or isinstance(default_key, Key) or type(default_key == str))
self._uri_to_key = StringTrie()
if type(default_key) == str:
default_key = Key(originator_priv=default_key, responder_priv=default_key)
self._default_key = default_key
@public
def generate_key(self):
"""
Generate a new private key and return a pair with the base64 encodings
of (priv_key, pub_key).
"""
key = PrivateKey.generate()
priv_key = key.encode(encoder=Base64Encoder)
pub_key = key.public_key.encode(encoder=Base64Encoder)
return priv_key.decode('ascii'), pub_key.decode('ascii')
@public
def generate_key_hex(self):
"""
Generate a new private key and return a pair with the hex encodings
of (priv_key, pub_key).
"""
key = PrivateKey.generate()
priv_key = key.encode(encoder=HexEncoder)
pub_key = key.public_key.encode(encoder=HexEncoder)
return priv_key.decode('ascii'), pub_key.decode('ascii')
@public
def set_key(self, uri, key):
"""
Add a key set for a given URI.
"""
assert(type(uri) == str)
assert(key is None or isinstance(key, Key) or type(key) == str)
if type(key) == str:
key = Key(originator_priv=key, responder_priv=key)
if uri == '':
self._default_key = key
else:
if key is None:
if uri in self._uri_to_key:
del self._uri_to_key[uri]
else:
self._uri_to_key[uri] = key
@public
def rotate_key(self, uri):
assert(type(uri) == str)
if uri in self._uri_to_key:
self._uri_to_key[uri].rotate()
else:
self._uri_to_key[uri].rotate()
def _get_box(self, is_originating, uri, match_exact=False):
try:
if match_exact:
key = self._uri_to_key[uri]
else:
key = self._uri_to_key.longest_prefix_value(uri)
except KeyError:
if self._default_key:
key = self._default_key
else:
return None
if is_originating:
return key.originator_box
else:
return key.responder_box
@public
def encode(self, is_originating, uri, args=None, kwargs=None):
"""
Encrypt the given WAMP URI, args and kwargs into an EncodedPayload instance, or None
if the URI should not be encrypted.
"""
assert(type(is_originating) == bool)
assert(type(uri) == str)
assert(args is None or type(args) in (list, tuple))
assert(kwargs is None or type(kwargs) == dict)
box = self._get_box(is_originating, uri)
if not box:
# if we didn't find a crypto box, then return None, which
# signals that the payload travel unencrypted (normal)
return None
payload = {
'uri': uri,
'args': args,
'kwargs': kwargs
}
nonce = random(Box.NONCE_SIZE)
payload_ser = _json_dumps(payload).encode('utf8')
payload_encr = box.encrypt(payload_ser, nonce, encoder=RawEncoder)
# above returns an instance of http://pynacl.readthedocs.io/en/latest/utils/#nacl.utils.EncryptedMessage
# which is a bytes _subclass_! hence we apply bytes() to get at the underlying plain
# bytes "scalar", which is the concatenation of `payload_encr.nonce + payload_encr.ciphertext`
payload_bytes = bytes(payload_encr)
payload_key = None
return EncodedPayload(payload_bytes, 'cryptobox', 'json', enc_key=payload_key)
@public
def decode(self, is_originating, uri, encoded_payload):
"""
Decrypt the given WAMP URI and EncodedPayload into a tuple ``(uri, args, kwargs)``.
"""
assert(type(uri) == str)
assert(isinstance(encoded_payload, EncodedPayload))
assert(encoded_payload.enc_algo == 'cryptobox')
box = self._get_box(is_originating, uri)
if not box:
raise Exception("received encrypted payload, but can't find key!")
payload_ser = box.decrypt(encoded_payload.payload, encoder=RawEncoder)
if encoded_payload.enc_serializer != 'json':
raise Exception("received encrypted payload, but don't know how to process serializer '{}'".format(encoded_payload.enc_serializer))
payload = _json_loads(payload_ser.decode('utf8'))
uri = payload.get('uri', None)
args = payload.get('args', None)
kwargs = payload.get('kwargs', None)
return uri, args, kwargs
# A WAMP-cryptobox keyring can work as a codec for
# payload transparency
IPayloadCodec.register(KeyRing)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,326 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
from autobahn.util import public
from autobahn.wamp.uri import error
__all__ = (
'Error',
'SessionNotReady',
'SerializationError',
'InvalidUriError',
'ProtocolError',
'TransportLost',
'ApplicationError',
'NotAuthorized',
'InvalidUri',
'InvalidPayload',
'TypeCheckError',
)
@public
class Error(RuntimeError):
"""
Base class for all exceptions related to WAMP.
"""
@public
class SessionNotReady(Error):
"""
The application tried to perform a WAMP interaction, but the
session is not yet fully established.
"""
@public
class SerializationError(Error):
"""
Exception raised when the WAMP serializer could not serialize the
application payload (``args`` or ``kwargs`` for ``CALL``, ``PUBLISH``, etc).
"""
@public
class InvalidUriError(Error):
"""
Exception raised when an invalid WAMP URI was used.
"""
@public
class ProtocolError(Error):
"""
Exception raised when WAMP protocol was violated. Protocol errors
are fatal and are handled by the WAMP implementation. They are
not supposed to be handled at the application level.
"""
@public
class TransportLost(Error):
"""
Exception raised when the transport underlying the WAMP session
was lost or is not connected.
"""
@public
class ApplicationError(Error):
"""
Base class for all exceptions that can/may be handled
at the application level.
"""
INVALID_URI = "wamp.error.invalid_uri"
"""
Peer provided an incorrect URI for a URI-based attribute of a WAMP message
such as a realm, topic or procedure.
"""
INVALID_PAYLOAD = "wamp.error.invalid_payload"
"""
The application payload could not be serialized.
"""
PAYLOAD_SIZE_EXCEEDED = "wamp.error.payload_size_exceeded"
"""
The application payload could not be transported becuase the serialized/framed payload
exceeds the transport limits.
"""
NO_SUCH_PROCEDURE = "wamp.error.no_such_procedure"
"""
A Dealer could not perform a call, since not procedure is currently registered
under the given URI.
"""
PROCEDURE_ALREADY_EXISTS = "wamp.error.procedure_already_exists"
"""
A procedure could not be registered, since a procedure with the given URI is
already registered.
"""
PROCEDURE_EXISTS_INVOCATION_POLICY_CONFLICT = "wamp.error.procedure_exists_with_different_invocation_policy"
"""
A procedure could not be registered, since a procedure with the given URI is
already registered, and the registration has a conflicting invocation policy.
"""
NO_SUCH_REGISTRATION = "wamp.error.no_such_registration"
"""
A Dealer could not perform a unregister, since the given registration is not active.
"""
NO_SUCH_SUBSCRIPTION = "wamp.error.no_such_subscription"
"""
A Broker could not perform a unsubscribe, since the given subscription is not active.
"""
NO_SUCH_SESSION = "wamp.error.no_such_session"
"""
A router could not perform an operation, since a session ID specified was non-existant.
"""
INVALID_ARGUMENT = "wamp.error.invalid_argument"
"""
A call failed, since the given argument types or values are not acceptable to the
called procedure - in which case the *Callee* may throw this error. Or a Router
performing *payload validation* checked the payload (``args`` / ``kwargs``) of a call,
call result, call error or publish, and the payload did not conform.
"""
# FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check!
SYSTEM_SHUTDOWN = "wamp.error.system_shutdown"
"""
The *Peer* is shutting down completely - used as a ``GOODBYE`` (or ``ABORT``) reason.
"""
# FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check!
CLOSE_REALM = "wamp.error.close_realm"
"""
The *Peer* want to leave the realm - used as a ``GOODBYE`` reason.
"""
# FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check!
GOODBYE_AND_OUT = "wamp.error.goodbye_and_out"
"""
A *Peer* acknowledges ending of a session - used as a ``GOOBYE`` reply reason.
"""
NOT_AUTHORIZED = "wamp.error.not_authorized"
"""
A call, register, publish or subscribe failed, since the session is not authorized
to perform the operation.
"""
AUTHORIZATION_FAILED = "wamp.error.authorization_failed"
"""
A Dealer or Broker could not determine if the *Peer* is authorized to perform
a join, call, register, publish or subscribe, since the authorization operation
*itself* failed. E.g. a custom authorizer did run into an error.
"""
AUTHENTICATION_FAILED = "wamp.error.authentication_failed"
"""
Something failed with the authentication itself, that is, authentication could
not run to end.
"""
NO_AUTH_METHOD = "wamp.error.no_auth_method"
"""
No authentication method the peer offered is available or active.
"""
NO_SUCH_REALM = "wamp.error.no_such_realm"
"""
Peer wanted to join a non-existing realm (and the *Router* did not allow to auto-create
the realm).
"""
NO_SUCH_ROLE = "wamp.error.no_such_role"
"""
A *Peer* was to be authenticated under a Role that does not (or no longer) exists on the Router.
For example, the *Peer* was successfully authenticated, but the Role configured does not
exists - hence there is some misconfiguration in the Router.
"""
NO_SUCH_PRINCIPAL = "wamp.error.no_such_principal"
"""
A *Peer* was authenticated for an authid that does not or longer exists.
"""
CANCELED = "wamp.error.canceled"
"""
A Dealer or Callee canceled a call previously issued (WAMP AP).
"""
TIMEOUT = "wamp.error.timeout"
"""
A pending (in-flight) call was timed out.
"""
# FIXME: this currently isn't used neither in Autobahn nor Crossbar. Check!
NO_ELIGIBLE_CALLEE = "wamp.error.no_eligible_callee"
"""
A *Dealer* could not perform a call, since a procedure with the given URI is registered,
but *Callee Black- and Whitelisting* and/or *Caller Exclusion* lead to the
exclusion of (any) *Callee* providing the procedure (WAMP AP).
"""
ENC_NO_PAYLOAD_CODEC = "wamp.error.no_payload_codec"
"""
WAMP message in payload transparency mode received, but no codec set
or codec did not decode the payload.
"""
ENC_TRUSTED_URI_MISMATCH = "wamp.error.encryption.trusted_uri_mismatch"
"""
WAMP-cryptobox application payload end-to-end encryption error.
"""
ENC_DECRYPT_ERROR = "wamp.error.encryption.decrypt_error"
"""
WAMP-cryptobox application payload end-to-end encryption error.
"""
TYPE_CHECK_ERROR = "wamp.error.type_check_error"
"""
WAMP procedure called with wrong argument types or subscription published
with wrong argument types.
"""
def __init__(self, error, *args, **kwargs):
"""
:param error: The URI of the error that occurred, e.g. ``wamp.error.not_authorized``.
:type error: str
"""
Exception.__init__(self, *args)
self.kwargs = kwargs
self.error = error
self.enc_algo = kwargs.pop('enc_algo', None)
self.callee = kwargs.pop('callee', None)
self.callee_authid = kwargs.pop('callee_authid', None)
self.callee_authrole = kwargs.pop('callee_authrole', None)
self.forward_for = kwargs.pop('forward_for', None)
@public
def error_message(self):
"""
Get the error message of this exception.
:returns: The error message.
:rtype: str
"""
return '{0}: {1}'.format(
self.error,
' '.join([str(a) for a in self.args]),
)
def __unicode__(self):
if self.kwargs and 'traceback' in self.kwargs:
tb = ':\n' + self.kwargs.pop('traceback') + '\n'
self.kwargs['traceback'] = '...'
else:
tb = ''
return "ApplicationError(error=<{0}>, args={1}, kwargs={2}, enc_algo={3}, callee={4}, callee_authid={5}, callee_authrole={6}, forward_for={7}){8}".format(
self.error, list(self.args), self.kwargs, self.enc_algo, self.callee, self.callee_authid, self.callee_authrole, self.forward_for, tb)
def __str__(self):
return self.__unicode__()
@error(ApplicationError.NOT_AUTHORIZED)
class NotAuthorized(Exception):
"""
Not authorized to perform the respective action.
"""
@error(ApplicationError.INVALID_URI)
class InvalidUri(Exception):
"""
The URI for a topic, procedure or error is not a valid WAMP URI.
"""
@error(ApplicationError.INVALID_PAYLOAD)
class InvalidPayload(Exception):
"""
The URI for a topic, procedure or error is not a valid WAMP URI.
"""
class TypeCheckError(ApplicationError):
"""
The URI for a topic published with invalid argument types or a
procedure called with invalid arguments types.
"""
def __init__(self, *args, **kwargs):
super().__init__(ApplicationError.TYPE_CHECK_ERROR, *args, **kwargs)

View File

@@ -0,0 +1,52 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: wamp
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Map(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Map()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsMap(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Map
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Map
def Key(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Map
def Value(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def MapStart(builder): builder.StartObject(2)
def Start(builder):
return MapStart(builder)
def MapAddKey(builder, key): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(key), 0)
def AddKey(builder, key):
return MapAddKey(builder, key)
def MapAddValue(builder, value): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(value), 0)
def AddValue(builder, value):
return MapAddValue(builder, value)
def MapEnd(builder): return builder.EndObject()
def End(builder):
return MapEnd(builder)

View File

@@ -0,0 +1,32 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: wamp
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Void(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Void()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsVoid(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Void
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def VoidStart(builder): builder.StartObject(0)
def Start(builder):
return VoidStart(builder)
def VoidEnd(builder): return builder.EndObject()
def End(builder):
return VoidEnd(builder)

View File

@@ -0,0 +1,62 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Abort(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Abort()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAbort(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Abort
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Abort
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Abort
def Reason(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Abort
def Message(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def AbortStart(builder): builder.StartObject(3)
def Start(builder):
return AbortStart(builder)
def AbortAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return AbortAddSession(builder, session)
def AbortAddReason(builder, reason): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(reason), 0)
def AddReason(builder, reason):
return AbortAddReason(builder, reason)
def AbortAddMessage(builder, message): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(message), 0)
def AddMessage(builder, message):
return AbortAddMessage(builder, message)
def AbortEnd(builder): return builder.EndObject()
def End(builder):
return AbortEnd(builder)

View File

@@ -0,0 +1,31 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class AnyMessage(object):
NONE = 0
Hello = 1
Welcome = 2
Abort = 3
Challenge = 4
Authenticate = 5
Goodbye = 6
Error = 7
Publish = 8
Published = 9
Subscribe = 10
Subscribed = 11
Unsubscribe = 12
Unsubscribed = 13
Event = 14
EventReceived = 15
Call = 16
Cancel = 17
Result = 18
Register = 19
Registered = 20
Unregister = 21
Unregistered = 22
Invocation = 23
Interrupt = 24
Yield = 25

View File

@@ -0,0 +1,72 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthCraChallenge(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthCraChallenge()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthCraChallenge(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthCraChallenge
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# AuthCraChallenge
def Challenge(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# AuthCraChallenge
def Salt(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# AuthCraChallenge
def Iterations(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
return 1000
# AuthCraChallenge
def Keylen(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 32
def AuthCraChallengeStart(builder): builder.StartObject(4)
def Start(builder):
return AuthCraChallengeStart(builder)
def AuthCraChallengeAddChallenge(builder, challenge): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(challenge), 0)
def AddChallenge(builder, challenge):
return AuthCraChallengeAddChallenge(builder, challenge)
def AuthCraChallengeAddSalt(builder, salt): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(salt), 0)
def AddSalt(builder, salt):
return AuthCraChallengeAddSalt(builder, salt)
def AuthCraChallengeAddIterations(builder, iterations): builder.PrependUint32Slot(2, iterations, 1000)
def AddIterations(builder, iterations):
return AuthCraChallengeAddIterations(builder, iterations)
def AuthCraChallengeAddKeylen(builder, keylen): builder.PrependUint8Slot(3, keylen, 32)
def AddKeylen(builder, keylen):
return AuthCraChallengeAddKeylen(builder, keylen)
def AuthCraChallengeEnd(builder): return builder.EndObject()
def End(builder):
return AuthCraChallengeEnd(builder)

View File

@@ -0,0 +1,32 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthCraRequest(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthCraRequest()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthCraRequest(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthCraRequest
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def AuthCraRequestStart(builder): builder.StartObject(0)
def Start(builder):
return AuthCraRequestStart(builder)
def AuthCraRequestEnd(builder): return builder.EndObject()
def End(builder):
return AuthCraRequestEnd(builder)

View File

@@ -0,0 +1,32 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthCraWelcome(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthCraWelcome()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthCraWelcome(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthCraWelcome
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def AuthCraWelcomeStart(builder): builder.StartObject(0)
def Start(builder):
return AuthCraWelcomeStart(builder)
def AuthCraWelcomeEnd(builder): return builder.EndObject()
def End(builder):
return AuthCraWelcomeEnd(builder)

View File

@@ -0,0 +1,42 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthCryptosignChallenge(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthCryptosignChallenge()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthCryptosignChallenge(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthCryptosignChallenge
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# AuthCryptosignChallenge
def ChannelBinding(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
def AuthCryptosignChallengeStart(builder): builder.StartObject(1)
def Start(builder):
return AuthCryptosignChallengeStart(builder)
def [AWS-SECRET-REMOVED](builder, channelBinding): builder.PrependUint8Slot(0, channelBinding, 0)
def AddChannelBinding(builder, channelBinding):
return [AWS-SECRET-REMOVED](builder, channelBinding)
def AuthCryptosignChallengeEnd(builder): return builder.EndObject()
def End(builder):
return AuthCryptosignChallengeEnd(builder)

View File

@@ -0,0 +1,52 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthCryptosignRequest(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthCryptosignRequest()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthCryptosignRequest(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthCryptosignRequest
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# AuthCryptosignRequest
def Pubkey(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# AuthCryptosignRequest
def ChannelBinding(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
def AuthCryptosignRequestStart(builder): builder.StartObject(2)
def Start(builder):
return AuthCryptosignRequestStart(builder)
def AuthCryptosignRequestAddPubkey(builder, pubkey): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(pubkey), 0)
def AddPubkey(builder, pubkey):
return AuthCryptosignRequestAddPubkey(builder, pubkey)
def AuthCryptosignRequestAddChannelBinding(builder, channelBinding): builder.PrependUint8Slot(1, channelBinding, 0)
def AddChannelBinding(builder, channelBinding):
return AuthCryptosignRequestAddChannelBinding(builder, channelBinding)
def AuthCryptosignRequestEnd(builder): return builder.EndObject()
def End(builder):
return AuthCryptosignRequestEnd(builder)

View File

@@ -0,0 +1,32 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthCryptosignWelcome(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthCryptosignWelcome()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthCryptosignWelcome(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthCryptosignWelcome
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def AuthCryptosignWelcomeStart(builder): builder.StartObject(0)
def Start(builder):
return AuthCryptosignWelcomeStart(builder)
def AuthCryptosignWelcomeEnd(builder): return builder.EndObject()
def End(builder):
return AuthCryptosignWelcomeEnd(builder)

View File

@@ -0,0 +1,10 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class AuthFactor(object):
NONE = 0
AuthTicketRequest = 1
AuthCraRequest = 2
AuthScramRequest = 3
AuthCryptosignRequest = 4

View File

@@ -0,0 +1,12 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class AuthMethod(object):
ANONYMOUS = 0
COOKIE = 1
TLS = 2
TICKET = 3
CRA = 4
SCRAM = 5
CRYPTOSIGN = 6

View File

@@ -0,0 +1,7 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class AuthMode(object):
FIRST = 0
MULTIFACTOR = 1

View File

@@ -0,0 +1,92 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthScramChallenge(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthScramChallenge()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthScramChallenge(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthScramChallenge
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# AuthScramChallenge
def Nonce(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# AuthScramChallenge
def Salt(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# AuthScramChallenge
def Kdf(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 2
# AuthScramChallenge
def Iterations(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
return 0
# AuthScramChallenge
def Memory(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
return 0
# AuthScramChallenge
def ChannelBinding(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
def AuthScramChallengeStart(builder): builder.StartObject(6)
def Start(builder):
return AuthScramChallengeStart(builder)
def AuthScramChallengeAddNonce(builder, nonce): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(nonce), 0)
def AddNonce(builder, nonce):
return AuthScramChallengeAddNonce(builder, nonce)
def AuthScramChallengeAddSalt(builder, salt): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(salt), 0)
def AddSalt(builder, salt):
return AuthScramChallengeAddSalt(builder, salt)
def AuthScramChallengeAddKdf(builder, kdf): builder.PrependUint8Slot(2, kdf, 2)
def AddKdf(builder, kdf):
return AuthScramChallengeAddKdf(builder, kdf)
def AuthScramChallengeAddIterations(builder, iterations): builder.PrependUint32Slot(3, iterations, 0)
def AddIterations(builder, iterations):
return AuthScramChallengeAddIterations(builder, iterations)
def AuthScramChallengeAddMemory(builder, memory): builder.PrependUint32Slot(4, memory, 0)
def AddMemory(builder, memory):
return AuthScramChallengeAddMemory(builder, memory)
def AuthScramChallengeAddChannelBinding(builder, channelBinding): builder.PrependUint8Slot(5, channelBinding, 0)
def AddChannelBinding(builder, channelBinding):
return AuthScramChallengeAddChannelBinding(builder, channelBinding)
def AuthScramChallengeEnd(builder): return builder.EndObject()
def End(builder):
return AuthScramChallengeEnd(builder)

View File

@@ -0,0 +1,52 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthScramRequest(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthScramRequest()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthScramRequest(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthScramRequest
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# AuthScramRequest
def Nonce(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# AuthScramRequest
def ChannelBinding(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
def AuthScramRequestStart(builder): builder.StartObject(2)
def Start(builder):
return AuthScramRequestStart(builder)
def AuthScramRequestAddNonce(builder, nonce): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(nonce), 0)
def AddNonce(builder, nonce):
return AuthScramRequestAddNonce(builder, nonce)
def AuthScramRequestAddChannelBinding(builder, channelBinding): builder.PrependUint8Slot(1, channelBinding, 0)
def AddChannelBinding(builder, channelBinding):
return AuthScramRequestAddChannelBinding(builder, channelBinding)
def AuthScramRequestEnd(builder): return builder.EndObject()
def End(builder):
return AuthScramRequestEnd(builder)

View File

@@ -0,0 +1,42 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthScramWelcome(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthScramWelcome()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthScramWelcome(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthScramWelcome
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# AuthScramWelcome
def Verifier(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def AuthScramWelcomeStart(builder): builder.StartObject(1)
def Start(builder):
return AuthScramWelcomeStart(builder)
def AuthScramWelcomeAddVerifier(builder, verifier): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(verifier), 0)
def AddVerifier(builder, verifier):
return AuthScramWelcomeAddVerifier(builder, verifier)
def AuthScramWelcomeEnd(builder): return builder.EndObject()
def End(builder):
return AuthScramWelcomeEnd(builder)

View File

@@ -0,0 +1,32 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthTicketChallenge(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthTicketChallenge()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthTicketChallenge(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthTicketChallenge
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def AuthTicketChallengeStart(builder): builder.StartObject(0)
def Start(builder):
return AuthTicketChallengeStart(builder)
def AuthTicketChallengeEnd(builder): return builder.EndObject()
def End(builder):
return AuthTicketChallengeEnd(builder)

View File

@@ -0,0 +1,32 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthTicketRequest(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthTicketRequest()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthTicketRequest(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthTicketRequest
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def AuthTicketRequestStart(builder): builder.StartObject(0)
def Start(builder):
return AuthTicketRequestStart(builder)
def AuthTicketRequestEnd(builder): return builder.EndObject()
def End(builder):
return AuthTicketRequestEnd(builder)

View File

@@ -0,0 +1,32 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class AuthTicketWelcome(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = AuthTicketWelcome()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthTicketWelcome(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# AuthTicketWelcome
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def AuthTicketWelcomeStart(builder): builder.StartObject(0)
def Start(builder):
return AuthTicketWelcomeStart(builder)
def AuthTicketWelcomeEnd(builder): return builder.EndObject()
def End(builder):
return AuthTicketWelcomeEnd(builder)

View File

@@ -0,0 +1,66 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Authenticate(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Authenticate()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsAuthenticate(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Authenticate
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Authenticate
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Authenticate
def Signature(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Authenticate
def Extra(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.Map import Map
obj = Map()
obj.Init(self._tab.Bytes, x)
return obj
return None
def AuthenticateStart(builder): builder.StartObject(3)
def Start(builder):
return AuthenticateStart(builder)
def AuthenticateAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return AuthenticateAddSession(builder, session)
def AuthenticateAddSignature(builder, signature): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(signature), 0)
def AddSignature(builder, signature):
return AuthenticateAddSignature(builder, signature)
def AuthenticateAddExtra(builder, extra): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(extra), 0)
def AddExtra(builder, extra):
return AuthenticateAddExtra(builder, extra)
def AuthenticateEnd(builder): return builder.EndObject()
def End(builder):
return AuthenticateEnd(builder)

View File

@@ -0,0 +1,172 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class BrokerFeatures(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = BrokerFeatures()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsBrokerFeatures(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# BrokerFeatures
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# BrokerFeatures
def PublisherIdentification(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def PublisherExclusion(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def SubscriberBlackwhiteListing(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def PatternBasedSubscription(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def PublicationTrustlevels(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def SubscriptionRevocation(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def SessionMetaApi(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def SubscriptionMetaApi(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def EventRetention(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def EventHistory(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def AcknowledgeEventReceived(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def AcknowledgeSubscriberReceived(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def PayloadTransparency(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# BrokerFeatures
def PayloadEncryptionCryptobox(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def BrokerFeaturesStart(builder): builder.StartObject(14)
def Start(builder):
return BrokerFeaturesStart(builder)
def [AWS-SECRET-REMOVED](builder, publisherIdentification): builder.PrependBoolSlot(0, publisherIdentification, 0)
def AddPublisherIdentification(builder, publisherIdentification):
return [AWS-SECRET-REMOVED](builder, publisherIdentification)
def BrokerFeaturesAddPublisherExclusion(builder, publisherExclusion): builder.PrependBoolSlot(1, publisherExclusion, 0)
def AddPublisherExclusion(builder, publisherExclusion):
return BrokerFeaturesAddPublisherExclusion(builder, publisherExclusion)
def [AWS-SECRET-REMOVED]ting(builder, subscriberBlackwhiteListing): builder.PrependBoolSlot(2, subscriberBlackwhiteListing, 0)
def AddSubscriberBlackwhiteListing(builder, subscriberBlackwhiteListing):
return [AWS-SECRET-REMOVED]ting(builder, subscriberBlackwhiteListing)
def [AWS-SECRET-REMOVED]n(builder, patternBasedSubscription): builder.PrependBoolSlot(3, patternBasedSubscription, 0)
def AddPatternBasedSubscription(builder, patternBasedSubscription):
return [AWS-SECRET-REMOVED]n(builder, patternBasedSubscription)
def BrokerFeaturesAddPublicationTrustlevels(builder, publicationTrustlevels): builder.PrependBoolSlot(4, publicationTrustlevels, 0)
def AddPublicationTrustlevels(builder, publicationTrustlevels):
return BrokerFeaturesAddPublicationTrustlevels(builder, publicationTrustlevels)
def BrokerFeaturesAddSubscriptionRevocation(builder, subscriptionRevocation): builder.PrependBoolSlot(5, subscriptionRevocation, 0)
def AddSubscriptionRevocation(builder, subscriptionRevocation):
return BrokerFeaturesAddSubscriptionRevocation(builder, subscriptionRevocation)
def BrokerFeaturesAddSessionMetaApi(builder, sessionMetaApi): builder.PrependBoolSlot(6, sessionMetaApi, 0)
def AddSessionMetaApi(builder, sessionMetaApi):
return BrokerFeaturesAddSessionMetaApi(builder, sessionMetaApi)
def BrokerFeaturesAddSubscriptionMetaApi(builder, subscriptionMetaApi): builder.PrependBoolSlot(7, subscriptionMetaApi, 0)
def AddSubscriptionMetaApi(builder, subscriptionMetaApi):
return BrokerFeaturesAddSubscriptionMetaApi(builder, subscriptionMetaApi)
def BrokerFeaturesAddEventRetention(builder, eventRetention): builder.PrependBoolSlot(8, eventRetention, 0)
def AddEventRetention(builder, eventRetention):
return BrokerFeaturesAddEventRetention(builder, eventRetention)
def BrokerFeaturesAddEventHistory(builder, eventHistory): builder.PrependBoolSlot(9, eventHistory, 0)
def AddEventHistory(builder, eventHistory):
return BrokerFeaturesAddEventHistory(builder, eventHistory)
def [AWS-SECRET-REMOVED]d(builder, acknowledgeEventReceived): builder.PrependBoolSlot(10, acknowledgeEventReceived, 0)
def AddAcknowledgeEventReceived(builder, acknowledgeEventReceived):
return [AWS-SECRET-REMOVED]d(builder, acknowledgeEventReceived)
def [AWS-SECRET-REMOVED]ceived(builder, acknowledgeSubscriberReceived): builder.PrependBoolSlot(11, acknowledgeSubscriberReceived, 0)
def AddAcknowledgeSubscriberReceived(builder, acknowledgeSubscriberReceived):
return [AWS-SECRET-REMOVED]ceived(builder, acknowledgeSubscriberReceived)
def BrokerFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(12, payloadTransparency, 0)
def AddPayloadTransparency(builder, payloadTransparency):
return BrokerFeaturesAddPayloadTransparency(builder, payloadTransparency)
def [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(13, payloadEncryptionCryptobox, 0)
def AddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox):
return [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox)
def BrokerFeaturesEnd(builder): return builder.EndObject()
def End(builder):
return BrokerFeaturesEnd(builder)

View File

@@ -0,0 +1,238 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Call(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Call()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsCall(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Call
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Call
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Call
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Call
def Procedure(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Call
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Call
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Call
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Call
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
return o == 0
# Call
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Call
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Call
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Call
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Call
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Call
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
return o == 0
# Call
def Timeout(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
return 0
# Call
def ReceiveProgress(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Call
def TransactionHash(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Call
def Caller(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Call
def CallerAuthid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Call
def CallerAuthrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Call
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Call
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Call
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
return o == 0
def CallStart(builder): builder.StartObject(14)
def Start(builder):
return CallStart(builder)
def CallAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return CallAddSession(builder, session)
def CallAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return CallAddRequest(builder, request)
def CallAddProcedure(builder, procedure): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(procedure), 0)
def AddProcedure(builder, procedure):
return CallAddProcedure(builder, procedure)
def CallAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return CallAddPayload(builder, payload)
def CallStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return CallStartPayloadVector(builder, numElems)
def CallAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(4, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return CallAddEncAlgo(builder, encAlgo)
def CallAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(5, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return CallAddEncSerializer(builder, encSerializer)
def CallAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return CallAddEncKey(builder, encKey)
def CallStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return CallStartEncKeyVector(builder, numElems)
def CallAddTimeout(builder, timeout): builder.PrependUint32Slot(7, timeout, 0)
def AddTimeout(builder, timeout):
return CallAddTimeout(builder, timeout)
def CallAddReceiveProgress(builder, receiveProgress): builder.PrependBoolSlot(8, receiveProgress, 0)
def AddReceiveProgress(builder, receiveProgress):
return CallAddReceiveProgress(builder, receiveProgress)
def CallAddTransactionHash(builder, transactionHash): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(transactionHash), 0)
def AddTransactionHash(builder, transactionHash):
return CallAddTransactionHash(builder, transactionHash)
def CallAddCaller(builder, caller): builder.PrependUint64Slot(10, caller, 0)
def AddCaller(builder, caller):
return CallAddCaller(builder, caller)
def CallAddCallerAuthid(builder, callerAuthid): builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(callerAuthid), 0)
def AddCallerAuthid(builder, callerAuthid):
return CallAddCallerAuthid(builder, callerAuthid)
def CallAddCallerAuthrole(builder, callerAuthrole): builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(callerAuthrole), 0)
def AddCallerAuthrole(builder, callerAuthrole):
return CallAddCallerAuthrole(builder, callerAuthrole)
def CallAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return CallAddForwardFor(builder, forwardFor)
def CallStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return CallStartForwardForVector(builder, numElems)
def CallEnd(builder): return builder.EndObject()
def End(builder):
return CallEnd(builder)

View File

@@ -0,0 +1,132 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class CalleeFeatures(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = CalleeFeatures()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsCalleeFeatures(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# CalleeFeatures
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# CalleeFeatures
def CallerIdentification(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def CallTrustlevels(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def CallTimeout(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def CallCanceling(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def ProgressiveCallResults(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def RegistrationRevocation(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def PatternBasedRegistration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def SharedRegistration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def PayloadTransparency(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CalleeFeatures
def PayloadEncryptionCryptobox(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def CalleeFeaturesStart(builder): builder.StartObject(10)
def Start(builder):
return CalleeFeaturesStart(builder)
def CalleeFeaturesAddCallerIdentification(builder, callerIdentification): builder.PrependBoolSlot(0, callerIdentification, 0)
def AddCallerIdentification(builder, callerIdentification):
return CalleeFeaturesAddCallerIdentification(builder, callerIdentification)
def CalleeFeaturesAddCallTrustlevels(builder, callTrustlevels): builder.PrependBoolSlot(1, callTrustlevels, 0)
def AddCallTrustlevels(builder, callTrustlevels):
return CalleeFeaturesAddCallTrustlevels(builder, callTrustlevels)
def CalleeFeaturesAddCallTimeout(builder, callTimeout): builder.PrependBoolSlot(2, callTimeout, 0)
def AddCallTimeout(builder, callTimeout):
return CalleeFeaturesAddCallTimeout(builder, callTimeout)
def CalleeFeaturesAddCallCanceling(builder, callCanceling): builder.PrependBoolSlot(3, callCanceling, 0)
def AddCallCanceling(builder, callCanceling):
return CalleeFeaturesAddCallCanceling(builder, callCanceling)
def CalleeFeaturesAddProgressiveCallResults(builder, progressiveCallResults): builder.PrependBoolSlot(4, progressiveCallResults, 0)
def AddProgressiveCallResults(builder, progressiveCallResults):
return CalleeFeaturesAddProgressiveCallResults(builder, progressiveCallResults)
def CalleeFeaturesAddRegistrationRevocation(builder, registrationRevocation): builder.PrependBoolSlot(5, registrationRevocation, 0)
def AddRegistrationRevocation(builder, registrationRevocation):
return CalleeFeaturesAddRegistrationRevocation(builder, registrationRevocation)
def [AWS-SECRET-REMOVED]n(builder, patternBasedRegistration): builder.PrependBoolSlot(6, patternBasedRegistration, 0)
def AddPatternBasedRegistration(builder, patternBasedRegistration):
return [AWS-SECRET-REMOVED]n(builder, patternBasedRegistration)
def CalleeFeaturesAddSharedRegistration(builder, sharedRegistration): builder.PrependBoolSlot(7, sharedRegistration, 0)
def AddSharedRegistration(builder, sharedRegistration):
return CalleeFeaturesAddSharedRegistration(builder, sharedRegistration)
def CalleeFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(8, payloadTransparency, 0)
def AddPayloadTransparency(builder, payloadTransparency):
return CalleeFeaturesAddPayloadTransparency(builder, payloadTransparency)
def [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(9, payloadEncryptionCryptobox, 0)
def AddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox):
return [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox)
def CalleeFeaturesEnd(builder): return builder.EndObject()
def End(builder):
return CalleeFeaturesEnd(builder)

View File

@@ -0,0 +1,92 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class CallerFeatures(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = CallerFeatures()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsCallerFeatures(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# CallerFeatures
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# CallerFeatures
def CallerIdentification(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CallerFeatures
def CallTimeout(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CallerFeatures
def CallCanceling(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CallerFeatures
def ProgressiveCallResults(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CallerFeatures
def PayloadTransparency(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# CallerFeatures
def PayloadEncryptionCryptobox(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def CallerFeaturesStart(builder): builder.StartObject(6)
def Start(builder):
return CallerFeaturesStart(builder)
def CallerFeaturesAddCallerIdentification(builder, callerIdentification): builder.PrependBoolSlot(0, callerIdentification, 0)
def AddCallerIdentification(builder, callerIdentification):
return CallerFeaturesAddCallerIdentification(builder, callerIdentification)
def CallerFeaturesAddCallTimeout(builder, callTimeout): builder.PrependBoolSlot(1, callTimeout, 0)
def AddCallTimeout(builder, callTimeout):
return CallerFeaturesAddCallTimeout(builder, callTimeout)
def CallerFeaturesAddCallCanceling(builder, callCanceling): builder.PrependBoolSlot(2, callCanceling, 0)
def AddCallCanceling(builder, callCanceling):
return CallerFeaturesAddCallCanceling(builder, callCanceling)
def CallerFeaturesAddProgressiveCallResults(builder, progressiveCallResults): builder.PrependBoolSlot(3, progressiveCallResults, 0)
def AddProgressiveCallResults(builder, progressiveCallResults):
return CallerFeaturesAddProgressiveCallResults(builder, progressiveCallResults)
def CallerFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(4, payloadTransparency, 0)
def AddPayloadTransparency(builder, payloadTransparency):
return CallerFeaturesAddPayloadTransparency(builder, payloadTransparency)
def [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(5, payloadEncryptionCryptobox, 0)
def AddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox):
return [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox)
def CallerFeaturesEnd(builder): return builder.EndObject()
def End(builder):
return CallerFeaturesEnd(builder)

View File

@@ -0,0 +1,92 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Cancel(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Cancel()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsCancel(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Cancel
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Cancel
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Cancel
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Cancel
def Mode(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Cancel
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Cancel
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Cancel
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
return o == 0
def CancelStart(builder): builder.StartObject(4)
def Start(builder):
return CancelStart(builder)
def CancelAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return CancelAddSession(builder, session)
def CancelAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return CancelAddRequest(builder, request)
def CancelAddMode(builder, mode): builder.PrependUint8Slot(2, mode, 0)
def AddMode(builder, mode):
return CancelAddMode(builder, mode)
def CancelAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return CancelAddForwardFor(builder, forwardFor)
def CancelStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return CancelStartForwardForVector(builder, numElems)
def CancelEnd(builder): return builder.EndObject()
def End(builder):
return CancelEnd(builder)

View File

@@ -0,0 +1,8 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class CancelMode(object):
SKIP = 0
ABORT = 1
KILL = 2

View File

@@ -0,0 +1,66 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Challenge(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Challenge()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsChallenge(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Challenge
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Challenge
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Challenge
def Method(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Challenge
def Extra(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.Map import Map
obj = Map()
obj.Init(self._tab.Bytes, x)
return obj
return None
def ChallengeStart(builder): builder.StartObject(3)
def Start(builder):
return ChallengeStart(builder)
def ChallengeAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return ChallengeAddSession(builder, session)
def ChallengeAddMethod(builder, method): builder.PrependUint8Slot(1, method, 0)
def AddMethod(builder, method):
return ChallengeAddMethod(builder, method)
def ChallengeAddExtra(builder, extra): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(extra), 0)
def AddExtra(builder, extra):
return ChallengeAddExtra(builder, extra)
def ChallengeEnd(builder): return builder.EndObject()
def End(builder):
return ChallengeEnd(builder)

View File

@@ -0,0 +1,7 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class ChannelBinding(object):
NONE = 0
TLS_UNIQUE = 1

View File

@@ -0,0 +1,88 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class ClientRoles(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = ClientRoles()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsClientRoles(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# ClientRoles
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# ClientRoles
def Publisher(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.PublisherFeatures import PublisherFeatures
obj = PublisherFeatures()
obj.Init(self._tab.Bytes, x)
return obj
return None
# ClientRoles
def Subscriber(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.SubscriberFeatures import SubscriberFeatures
obj = SubscriberFeatures()
obj.Init(self._tab.Bytes, x)
return obj
return None
# ClientRoles
def Caller(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.CallerFeatures import CallerFeatures
obj = CallerFeatures()
obj.Init(self._tab.Bytes, x)
return obj
return None
# ClientRoles
def Callee(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.CalleeFeatures import CalleeFeatures
obj = CalleeFeatures()
obj.Init(self._tab.Bytes, x)
return obj
return None
def ClientRolesStart(builder): builder.StartObject(4)
def Start(builder):
return ClientRolesStart(builder)
def ClientRolesAddPublisher(builder, publisher): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(publisher), 0)
def AddPublisher(builder, publisher):
return ClientRolesAddPublisher(builder, publisher)
def ClientRolesAddSubscriber(builder, subscriber): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(subscriber), 0)
def AddSubscriber(builder, subscriber):
return ClientRolesAddSubscriber(builder, subscriber)
def ClientRolesAddCaller(builder, caller): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(caller), 0)
def AddCaller(builder, caller):
return ClientRolesAddCaller(builder, caller)
def ClientRolesAddCallee(builder, callee): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(callee), 0)
def AddCallee(builder, callee):
return ClientRolesAddCallee(builder, callee)
def ClientRolesEnd(builder): return builder.EndObject()
def End(builder):
return ClientRolesEnd(builder)

View File

@@ -0,0 +1,162 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class DealerFeatures(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = DealerFeatures()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsDealerFeatures(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# DealerFeatures
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# DealerFeatures
def CallerIdentification(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def CallTrustlevels(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def CallTimeout(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def CallCanceling(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def ProgressiveCallResults(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def RegistrationRevocation(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def PatternBasedRegistration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def SharedRegistration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def SessionMetaApi(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def RegistrationMetaApi(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def TestamentMetaApi(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def PayloadTransparency(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# DealerFeatures
def PayloadEncryptionCryptobox(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def DealerFeaturesStart(builder): builder.StartObject(13)
def Start(builder):
return DealerFeaturesStart(builder)
def DealerFeaturesAddCallerIdentification(builder, callerIdentification): builder.PrependBoolSlot(0, callerIdentification, 0)
def AddCallerIdentification(builder, callerIdentification):
return DealerFeaturesAddCallerIdentification(builder, callerIdentification)
def DealerFeaturesAddCallTrustlevels(builder, callTrustlevels): builder.PrependBoolSlot(1, callTrustlevels, 0)
def AddCallTrustlevels(builder, callTrustlevels):
return DealerFeaturesAddCallTrustlevels(builder, callTrustlevels)
def DealerFeaturesAddCallTimeout(builder, callTimeout): builder.PrependBoolSlot(2, callTimeout, 0)
def AddCallTimeout(builder, callTimeout):
return DealerFeaturesAddCallTimeout(builder, callTimeout)
def DealerFeaturesAddCallCanceling(builder, callCanceling): builder.PrependBoolSlot(3, callCanceling, 0)
def AddCallCanceling(builder, callCanceling):
return DealerFeaturesAddCallCanceling(builder, callCanceling)
def DealerFeaturesAddProgressiveCallResults(builder, progressiveCallResults): builder.PrependBoolSlot(4, progressiveCallResults, 0)
def AddProgressiveCallResults(builder, progressiveCallResults):
return DealerFeaturesAddProgressiveCallResults(builder, progressiveCallResults)
def DealerFeaturesAddRegistrationRevocation(builder, registrationRevocation): builder.PrependBoolSlot(5, registrationRevocation, 0)
def AddRegistrationRevocation(builder, registrationRevocation):
return DealerFeaturesAddRegistrationRevocation(builder, registrationRevocation)
def [AWS-SECRET-REMOVED]n(builder, patternBasedRegistration): builder.PrependBoolSlot(6, patternBasedRegistration, 0)
def AddPatternBasedRegistration(builder, patternBasedRegistration):
return [AWS-SECRET-REMOVED]n(builder, patternBasedRegistration)
def DealerFeaturesAddSharedRegistration(builder, sharedRegistration): builder.PrependBoolSlot(7, sharedRegistration, 0)
def AddSharedRegistration(builder, sharedRegistration):
return DealerFeaturesAddSharedRegistration(builder, sharedRegistration)
def DealerFeaturesAddSessionMetaApi(builder, sessionMetaApi): builder.PrependBoolSlot(8, sessionMetaApi, 0)
def AddSessionMetaApi(builder, sessionMetaApi):
return DealerFeaturesAddSessionMetaApi(builder, sessionMetaApi)
def DealerFeaturesAddRegistrationMetaApi(builder, registrationMetaApi): builder.PrependBoolSlot(9, registrationMetaApi, 0)
def AddRegistrationMetaApi(builder, registrationMetaApi):
return DealerFeaturesAddRegistrationMetaApi(builder, registrationMetaApi)
def DealerFeaturesAddTestamentMetaApi(builder, testamentMetaApi): builder.PrependBoolSlot(10, testamentMetaApi, 0)
def AddTestamentMetaApi(builder, testamentMetaApi):
return DealerFeaturesAddTestamentMetaApi(builder, testamentMetaApi)
def DealerFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(11, payloadTransparency, 0)
def AddPayloadTransparency(builder, payloadTransparency):
return DealerFeaturesAddPayloadTransparency(builder, payloadTransparency)
def [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(12, payloadEncryptionCryptobox, 0)
def AddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox):
return [AWS-SECRET-REMOVED]box(builder, payloadEncryptionCryptobox)
def DealerFeaturesEnd(builder): return builder.EndObject()
def End(builder):
return DealerFeaturesEnd(builder)

View File

@@ -0,0 +1,158 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Error(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Error()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsError(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Error
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Error
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Error
def RequestType(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint16Flags, o + self._tab.Pos)
return 0
# Error
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Error
def Error(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Error
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Error
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Error
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Error
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
return o == 0
# Error
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Error
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Error
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Error
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Error
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Error
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
return o == 0
def ErrorStart(builder): builder.StartObject(8)
def Start(builder):
return ErrorStart(builder)
def ErrorAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return ErrorAddSession(builder, session)
def ErrorAddRequestType(builder, requestType): builder.PrependUint16Slot(1, requestType, 0)
def AddRequestType(builder, requestType):
return ErrorAddRequestType(builder, requestType)
def ErrorAddRequest(builder, request): builder.PrependUint64Slot(2, request, 0)
def AddRequest(builder, request):
return ErrorAddRequest(builder, request)
def ErrorAddError(builder, error): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(error), 0)
def AddError(builder, error):
return ErrorAddError(builder, error)
def ErrorAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return ErrorAddPayload(builder, payload)
def ErrorStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return ErrorStartPayloadVector(builder, numElems)
def ErrorAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(5, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return ErrorAddEncAlgo(builder, encAlgo)
def ErrorAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(6, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return ErrorAddEncSerializer(builder, encSerializer)
def ErrorAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return ErrorAddEncKey(builder, encKey)
def ErrorStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return ErrorStartEncKeyVector(builder, numElems)
def ErrorEnd(builder): return builder.EndObject()
def End(builder):
return ErrorEnd(builder)

View File

@@ -0,0 +1,317 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Event(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Event()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsEvent(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Event
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Event
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Event
def Subscription(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Event
def Publication(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Positional values for application-defined event payload.
# Event
def Args(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Event
def ArgsAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Event
def ArgsLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Event
def ArgsIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
return o == 0
# Keyword values for application-defined event payload.
# Event
def Kwargs(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Event
def KwargsAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Event
def KwargsLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Event
def KwargsIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
return o == 0
# Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset.
# Event
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Event
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Event
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Event
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
return o == 0
# Event
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Event
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Event
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Event
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Event
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Event
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
return o == 0
# Event
def Publisher(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Event
def PublisherAuthid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Event
def PublisherAuthrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Event
def Topic(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Event
def Retained(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Event
def TransactionHash(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Event
def Acknowledge(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Event
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Event
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Event
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36))
return o == 0
def EventStart(builder): builder.StartObject(17)
def Start(builder):
return EventStart(builder)
def EventAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return EventAddSession(builder, session)
def EventAddSubscription(builder, subscription): builder.PrependUint64Slot(1, subscription, 0)
def AddSubscription(builder, subscription):
return EventAddSubscription(builder, subscription)
def EventAddPublication(builder, publication): builder.PrependUint64Slot(2, publication, 0)
def AddPublication(builder, publication):
return EventAddPublication(builder, publication)
def EventAddArgs(builder, args): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(args), 0)
def AddArgs(builder, args):
return EventAddArgs(builder, args)
def EventStartArgsVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartArgsVector(builder, numElems):
return EventStartArgsVector(builder, numElems)
def EventAddKwargs(builder, kwargs): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(kwargs), 0)
def AddKwargs(builder, kwargs):
return EventAddKwargs(builder, kwargs)
def EventStartKwargsVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartKwargsVector(builder, numElems):
return EventStartKwargsVector(builder, numElems)
def EventAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return EventAddPayload(builder, payload)
def EventStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return EventStartPayloadVector(builder, numElems)
def EventAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(6, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return EventAddEncAlgo(builder, encAlgo)
def EventAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(7, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return EventAddEncSerializer(builder, encSerializer)
def EventAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return EventAddEncKey(builder, encKey)
def EventStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return EventStartEncKeyVector(builder, numElems)
def EventAddPublisher(builder, publisher): builder.PrependUint64Slot(9, publisher, 0)
def AddPublisher(builder, publisher):
return EventAddPublisher(builder, publisher)
def EventAddPublisherAuthid(builder, publisherAuthid): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(publisherAuthid), 0)
def AddPublisherAuthid(builder, publisherAuthid):
return EventAddPublisherAuthid(builder, publisherAuthid)
def EventAddPublisherAuthrole(builder, publisherAuthrole): builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(publisherAuthrole), 0)
def AddPublisherAuthrole(builder, publisherAuthrole):
return EventAddPublisherAuthrole(builder, publisherAuthrole)
def EventAddTopic(builder, topic): builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(topic), 0)
def AddTopic(builder, topic):
return EventAddTopic(builder, topic)
def EventAddRetained(builder, retained): builder.PrependBoolSlot(13, retained, 0)
def AddRetained(builder, retained):
return EventAddRetained(builder, retained)
def EventAddTransactionHash(builder, transactionHash): builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(transactionHash), 0)
def AddTransactionHash(builder, transactionHash):
return EventAddTransactionHash(builder, transactionHash)
def EventAddAcknowledge(builder, acknowledge): builder.PrependBoolSlot(15, acknowledge, 0)
def AddAcknowledge(builder, acknowledge):
return EventAddAcknowledge(builder, acknowledge)
def EventAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(16, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return EventAddForwardFor(builder, forwardFor)
def EventStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return EventStartForwardForVector(builder, numElems)
def EventEnd(builder): return builder.EndObject()
def End(builder):
return EventEnd(builder)

View File

@@ -0,0 +1,138 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class EventReceived(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = EventReceived()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsEventReceived(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# EventReceived
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# EventReceived
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# EventReceived
def Publication(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# EventReceived
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# EventReceived
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# EventReceived
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.VectorLen(o)
return 0
# EventReceived
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
return o == 0
# EventReceived
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# EventReceived
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# EventReceived
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# EventReceived
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# EventReceived
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.VectorLen(o)
return 0
# EventReceived
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
return o == 0
def EventReceivedStart(builder): builder.StartObject(6)
def Start(builder):
return EventReceivedStart(builder)
def EventReceivedAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return EventReceivedAddSession(builder, session)
def EventReceivedAddPublication(builder, publication): builder.PrependUint64Slot(1, publication, 0)
def AddPublication(builder, publication):
return EventReceivedAddPublication(builder, publication)
def EventReceivedAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return EventReceivedAddPayload(builder, payload)
def EventReceivedStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return EventReceivedStartPayloadVector(builder, numElems)
def EventReceivedAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(3, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return EventReceivedAddEncAlgo(builder, encAlgo)
def EventReceivedAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(4, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return EventReceivedAddEncSerializer(builder, encSerializer)
def EventReceivedAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return EventReceivedAddEncKey(builder, encKey)
def EventReceivedStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return EventReceivedStartEncKeyVector(builder, numElems)
def EventReceivedEnd(builder): return builder.EndObject()
def End(builder):
return EventReceivedEnd(builder)

View File

@@ -0,0 +1,72 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Goodbye(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Goodbye()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsGoodbye(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Goodbye
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Goodbye
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Goodbye
def Reason(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Goodbye
def Message(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Goodbye
def Resumable(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def GoodbyeStart(builder): builder.StartObject(4)
def Start(builder):
return GoodbyeStart(builder)
def GoodbyeAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return GoodbyeAddSession(builder, session)
def GoodbyeAddReason(builder, reason): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(reason), 0)
def AddReason(builder, reason):
return GoodbyeAddReason(builder, reason)
def GoodbyeAddMessage(builder, message): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(message), 0)
def AddMessage(builder, message):
return GoodbyeAddMessage(builder, message)
def GoodbyeAddResumable(builder, resumable): builder.PrependBoolSlot(3, resumable, 0)
def AddResumable(builder, resumable):
return GoodbyeAddResumable(builder, resumable)
def GoodbyeEnd(builder): return builder.EndObject()
def End(builder):
return GoodbyeEnd(builder)

View File

@@ -0,0 +1,163 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Hello(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Hello()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsHello(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Hello
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Hello
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Hello
def Roles(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.ClientRoles import ClientRoles
obj = ClientRoles()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Hello
def Realm(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Hello
def Authmethods(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Hello
def AuthmethodsAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Hello
def AuthmethodsLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Hello
def AuthmethodsIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
return o == 0
# Hello
def Authid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Hello
def Authrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Hello
def Authextra(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.Map import Map
obj = Map()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Hello
def Resumable(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Hello
def ResumeSession(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Hello
def ResumeToken(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def HelloStart(builder): builder.StartObject(10)
def Start(builder):
return HelloStart(builder)
def HelloAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return HelloAddSession(builder, session)
def HelloAddRoles(builder, roles): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(roles), 0)
def AddRoles(builder, roles):
return HelloAddRoles(builder, roles)
def HelloAddRealm(builder, realm): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(realm), 0)
def AddRealm(builder, realm):
return HelloAddRealm(builder, realm)
def HelloAddAuthmethods(builder, authmethods): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(authmethods), 0)
def AddAuthmethods(builder, authmethods):
return HelloAddAuthmethods(builder, authmethods)
def HelloStartAuthmethodsVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartAuthmethodsVector(builder, numElems):
return HelloStartAuthmethodsVector(builder, numElems)
def HelloAddAuthid(builder, authid): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(authid), 0)
def AddAuthid(builder, authid):
return HelloAddAuthid(builder, authid)
def HelloAddAuthrole(builder, authrole): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(authrole), 0)
def AddAuthrole(builder, authrole):
return HelloAddAuthrole(builder, authrole)
def HelloAddAuthextra(builder, authextra): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(authextra), 0)
def AddAuthextra(builder, authextra):
return HelloAddAuthextra(builder, authextra)
def HelloAddResumable(builder, resumable): builder.PrependBoolSlot(7, resumable, 0)
def AddResumable(builder, resumable):
return HelloAddResumable(builder, resumable)
def HelloAddResumeSession(builder, resumeSession): builder.PrependUint64Slot(8, resumeSession, 0)
def AddResumeSession(builder, resumeSession):
return HelloAddResumeSession(builder, resumeSession)
def HelloAddResumeToken(builder, resumeToken): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(resumeToken), 0)
def AddResumeToken(builder, resumeToken):
return HelloAddResumeToken(builder, resumeToken)
def HelloEnd(builder): return builder.EndObject()
def End(builder):
return HelloEnd(builder)

View File

@@ -0,0 +1,185 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class HelloNew(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = HelloNew()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsHelloNew(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# HelloNew
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# HelloNew
def Roles(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.ClientRoles import ClientRoles
obj = ClientRoles()
obj.Init(self._tab.Bytes, x)
return obj
return None
# HelloNew
def Realm(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# HelloNew
def Authid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# HelloNew
def Authrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# HelloNew
def Authmode(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# HelloNew
def Authfactor1Type(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# HelloNew
def Authfactor1(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
from flatbuffers.table import Table
obj = Table(bytearray(), 0)
self._tab.Union(obj, o)
return obj
return None
# HelloNew
def Authfactor2Type(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# HelloNew
def Authfactor2(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
from flatbuffers.table import Table
obj = Table(bytearray(), 0)
self._tab.Union(obj, o)
return obj
return None
# HelloNew
def Authfactor3Type(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# HelloNew
def Authfactor3(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
from flatbuffers.table import Table
obj = Table(bytearray(), 0)
self._tab.Union(obj, o)
return obj
return None
# HelloNew
def Resumable(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# HelloNew
def ResumeSession(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# HelloNew
def ResumeToken(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def HelloNewStart(builder): builder.StartObject(14)
def Start(builder):
return HelloNewStart(builder)
def HelloNewAddRoles(builder, roles): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(roles), 0)
def AddRoles(builder, roles):
return HelloNewAddRoles(builder, roles)
def HelloNewAddRealm(builder, realm): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(realm), 0)
def AddRealm(builder, realm):
return HelloNewAddRealm(builder, realm)
def HelloNewAddAuthid(builder, authid): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(authid), 0)
def AddAuthid(builder, authid):
return HelloNewAddAuthid(builder, authid)
def HelloNewAddAuthrole(builder, authrole): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(authrole), 0)
def AddAuthrole(builder, authrole):
return HelloNewAddAuthrole(builder, authrole)
def HelloNewAddAuthmode(builder, authmode): builder.PrependUint8Slot(4, authmode, 0)
def AddAuthmode(builder, authmode):
return HelloNewAddAuthmode(builder, authmode)
def HelloNewAddAuthfactor1Type(builder, authfactor1Type): builder.PrependUint8Slot(5, authfactor1Type, 0)
def AddAuthfactor1Type(builder, authfactor1Type):
return HelloNewAddAuthfactor1Type(builder, authfactor1Type)
def HelloNewAddAuthfactor1(builder, authfactor1): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(authfactor1), 0)
def AddAuthfactor1(builder, authfactor1):
return HelloNewAddAuthfactor1(builder, authfactor1)
def HelloNewAddAuthfactor2Type(builder, authfactor2Type): builder.PrependUint8Slot(7, authfactor2Type, 0)
def AddAuthfactor2Type(builder, authfactor2Type):
return HelloNewAddAuthfactor2Type(builder, authfactor2Type)
def HelloNewAddAuthfactor2(builder, authfactor2): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(authfactor2), 0)
def AddAuthfactor2(builder, authfactor2):
return HelloNewAddAuthfactor2(builder, authfactor2)
def HelloNewAddAuthfactor3Type(builder, authfactor3Type): builder.PrependUint8Slot(9, authfactor3Type, 0)
def AddAuthfactor3Type(builder, authfactor3Type):
return HelloNewAddAuthfactor3Type(builder, authfactor3Type)
def HelloNewAddAuthfactor3(builder, authfactor3): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(authfactor3), 0)
def AddAuthfactor3(builder, authfactor3):
return HelloNewAddAuthfactor3(builder, authfactor3)
def HelloNewAddResumable(builder, resumable): builder.PrependBoolSlot(11, resumable, 0)
def AddResumable(builder, resumable):
return HelloNewAddResumable(builder, resumable)
def HelloNewAddResumeSession(builder, resumeSession): builder.PrependUint64Slot(12, resumeSession, 0)
def AddResumeSession(builder, resumeSession):
return HelloNewAddResumeSession(builder, resumeSession)
def HelloNewAddResumeToken(builder, resumeToken): builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(resumeToken), 0)
def AddResumeToken(builder, resumeToken):
return HelloNewAddResumeToken(builder, resumeToken)
def HelloNewEnd(builder): return builder.EndObject()
def End(builder):
return HelloNewEnd(builder)

View File

@@ -0,0 +1,102 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Interrupt(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Interrupt()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsInterrupt(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Interrupt
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Interrupt
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Interrupt
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Interrupt
def Mode(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 1
# Interrupt
def Reason(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Interrupt
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Interrupt
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Interrupt
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
return o == 0
def InterruptStart(builder): builder.StartObject(5)
def Start(builder):
return InterruptStart(builder)
def InterruptAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return InterruptAddSession(builder, session)
def InterruptAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return InterruptAddRequest(builder, request)
def InterruptAddMode(builder, mode): builder.PrependUint8Slot(2, mode, 1)
def AddMode(builder, mode):
return InterruptAddMode(builder, mode)
def InterruptAddReason(builder, reason): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(reason), 0)
def AddReason(builder, reason):
return InterruptAddReason(builder, reason)
def InterruptAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return InterruptAddForwardFor(builder, forwardFor)
def InterruptStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return InterruptStartForwardForVector(builder, numElems)
def InterruptEnd(builder): return builder.EndObject()
def End(builder):
return InterruptEnd(builder)

View File

@@ -0,0 +1,248 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Invocation(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Invocation()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsInvocation(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Invocation
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Invocation
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Invocation
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Invocation
def Registration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Invocation
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Invocation
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Invocation
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Invocation
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
return o == 0
# Invocation
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Invocation
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Invocation
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Invocation
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Invocation
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Invocation
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
return o == 0
# Invocation
def Procedure(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Invocation
def Timeout(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint32Flags, o + self._tab.Pos)
return 0
# Invocation
def ReceiveProgress(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Invocation
def TransactionHash(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Invocation
def Caller(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Invocation
def CallerAuthid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Invocation
def CallerAuthrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Invocation
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Invocation
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Invocation
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
return o == 0
def InvocationStart(builder): builder.StartObject(15)
def Start(builder):
return InvocationStart(builder)
def InvocationAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return InvocationAddSession(builder, session)
def InvocationAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return InvocationAddRequest(builder, request)
def InvocationAddRegistration(builder, registration): builder.PrependUint64Slot(2, registration, 0)
def AddRegistration(builder, registration):
return InvocationAddRegistration(builder, registration)
def InvocationAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return InvocationAddPayload(builder, payload)
def InvocationStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return InvocationStartPayloadVector(builder, numElems)
def InvocationAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(4, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return InvocationAddEncAlgo(builder, encAlgo)
def InvocationAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(5, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return InvocationAddEncSerializer(builder, encSerializer)
def InvocationAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return InvocationAddEncKey(builder, encKey)
def InvocationStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return InvocationStartEncKeyVector(builder, numElems)
def InvocationAddProcedure(builder, procedure): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(procedure), 0)
def AddProcedure(builder, procedure):
return InvocationAddProcedure(builder, procedure)
def InvocationAddTimeout(builder, timeout): builder.PrependUint32Slot(8, timeout, 0)
def AddTimeout(builder, timeout):
return InvocationAddTimeout(builder, timeout)
def InvocationAddReceiveProgress(builder, receiveProgress): builder.PrependBoolSlot(9, receiveProgress, 0)
def AddReceiveProgress(builder, receiveProgress):
return InvocationAddReceiveProgress(builder, receiveProgress)
def InvocationAddTransactionHash(builder, transactionHash): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(transactionHash), 0)
def AddTransactionHash(builder, transactionHash):
return InvocationAddTransactionHash(builder, transactionHash)
def InvocationAddCaller(builder, caller): builder.PrependUint64Slot(11, caller, 0)
def AddCaller(builder, caller):
return InvocationAddCaller(builder, caller)
def InvocationAddCallerAuthid(builder, callerAuthid): builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(callerAuthid), 0)
def AddCallerAuthid(builder, callerAuthid):
return InvocationAddCallerAuthid(builder, callerAuthid)
def InvocationAddCallerAuthrole(builder, callerAuthrole): builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(callerAuthrole), 0)
def AddCallerAuthrole(builder, callerAuthrole):
return InvocationAddCallerAuthrole(builder, callerAuthrole)
def InvocationAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return InvocationAddForwardFor(builder, forwardFor)
def InvocationStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return InvocationStartForwardForVector(builder, numElems)
def InvocationEnd(builder): return builder.EndObject()
def End(builder):
return InvocationEnd(builder)

View File

@@ -0,0 +1,10 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class InvocationPolicy(object):
SINGLE = 0
FIRST = 1
LAST = 2
ROUNDROBIN = 3
RANDOM = 4

View File

@@ -0,0 +1,8 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class Kdf(object):
NONE = 0
PBKDF2 = 1
ARGON2 = 2

View File

@@ -0,0 +1,8 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class Match(object):
EXACT = 0
PREFIX = 1
WILDCARD = 2

View File

@@ -0,0 +1,55 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Message(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Message()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsMessage(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Message
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Message
def MsgType(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Message
def Msg(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
from flatbuffers.table import Table
obj = Table(bytearray(), 0)
self._tab.Union(obj, o)
return obj
return None
def MessageStart(builder): builder.StartObject(2)
def Start(builder):
return MessageStart(builder)
def MessageAddMsgType(builder, msgType): builder.PrependUint8Slot(0, msgType, 0)
def AddMsgType(builder, msgType):
return MessageAddMsgType(builder, msgType)
def MessageAddMsg(builder, msg): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(msg), 0)
def AddMsg(builder, msg):
return MessageAddMsg(builder, msg)
def MessageEnd(builder): return builder.EndObject()
def End(builder):
return MessageEnd(builder)

View File

@@ -0,0 +1,31 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class MessageType(object):
NULL = 0
HELLO = 1
WELCOME = 2
ABORT = 3
CHALLENGE = 4
AUTHENTICATE = 5
GOODBYE = 6
ERROR = 8
PUBLISH = 16
PUBLISHED = 17
SUBSCRIBE = 32
SUBSCRIBED = 33
UNSUBSCRIBE = 34
UNSUBSCRIBED = 35
EVENT = 36
EVENT_RECEIVED = 37
CALL = 48
CANCEL = 49
RESULT = 50
REGISTER = 64
REGISTERED = 65
UNREGISTER = 66
UNREGISTERED = 67
INVOCATION = 68
INTERRUPT = 69
YIELD = 70

View File

@@ -0,0 +1,8 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class Payload(object):
PLAIN = 0
CRYPTOBOX = 1
OPAQUE = 2

View File

@@ -0,0 +1,26 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Principal(object):
__slots__ = ['_tab']
@classmethod
def SizeOf(cls):
return 8
# Principal
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Principal
def Session(self): return self._tab.Get(flatbuffers.number_types.Uint64Flags, self._tab.Pos + flatbuffers.number_types.UOffsetTFlags.py_type(0))
def CreatePrincipal(builder, session):
builder.Prep(8, 8)
builder.PrependUint64(session)
return builder.Offset()

View File

@@ -0,0 +1,457 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Publish(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Publish()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsPublish(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Publish
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Publish
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Publish
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Publish
def Topic(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Positional values for application-defined event payload.
# Publish
def Args(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Publish
def ArgsAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Publish
def ArgsLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def ArgsIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
return o == 0
# Keyword values for application-defined event payload.
# Publish
def Kwargs(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Publish
def KwargsAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Publish
def KwargsLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def KwargsIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
return o == 0
# Alternative, transparent payload. If given, ``args`` and ``kwargs`` must be left unset.
# Publish
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Publish
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Publish
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
return o == 0
# Publish
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Publish
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Publish
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Publish
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Publish
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
return o == 0
# Publish
def Acknowledge(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Publish
def ExcludeMe(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return True
# Publish
def Exclude(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint64Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 8))
return 0
# Publish
def ExcludeAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint64Flags, o)
return 0
# Publish
def ExcludeLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def ExcludeIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(26))
return o == 0
# Publish
def ExcludeAuthid(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
a = self._tab.Vector(o)
return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4))
return ""
# Publish
def ExcludeAuthidLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def ExcludeAuthidIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(28))
return o == 0
# Publish
def ExcludeAuthrole(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
a = self._tab.Vector(o)
return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4))
return ""
# Publish
def ExcludeAuthroleLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def ExcludeAuthroleIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(30))
return o == 0
# Publish
def Eligible(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint64Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 8))
return 0
# Publish
def EligibleAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint64Flags, o)
return 0
# Publish
def EligibleLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def EligibleIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(32))
return o == 0
# Publish
def EligibleAuthid(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34))
if o != 0:
a = self._tab.Vector(o)
return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4))
return ""
# Publish
def EligibleAuthidLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def EligibleAuthidIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(34))
return o == 0
# Publish
def EligibleAuthrole(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36))
if o != 0:
a = self._tab.Vector(o)
return self._tab.String(a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 4))
return ""
# Publish
def EligibleAuthroleLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def EligibleAuthroleIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(36))
return o == 0
# Publish
def Retain(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(38))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Publish
def TransactionHash(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(40))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Publish
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(42))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Publish
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(42))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Publish
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(42))
return o == 0
def PublishStart(builder): builder.StartObject(20)
def Start(builder):
return PublishStart(builder)
def PublishAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return PublishAddSession(builder, session)
def PublishAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return PublishAddRequest(builder, request)
def PublishAddTopic(builder, topic): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(topic), 0)
def AddTopic(builder, topic):
return PublishAddTopic(builder, topic)
def PublishAddArgs(builder, args): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(args), 0)
def AddArgs(builder, args):
return PublishAddArgs(builder, args)
def PublishStartArgsVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartArgsVector(builder, numElems):
return PublishStartArgsVector(builder, numElems)
def PublishAddKwargs(builder, kwargs): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(kwargs), 0)
def AddKwargs(builder, kwargs):
return PublishAddKwargs(builder, kwargs)
def PublishStartKwargsVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartKwargsVector(builder, numElems):
return PublishStartKwargsVector(builder, numElems)
def PublishAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return PublishAddPayload(builder, payload)
def PublishStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return PublishStartPayloadVector(builder, numElems)
def PublishAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(6, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return PublishAddEncAlgo(builder, encAlgo)
def PublishAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(7, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return PublishAddEncSerializer(builder, encSerializer)
def PublishAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return PublishAddEncKey(builder, encKey)
def PublishStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return PublishStartEncKeyVector(builder, numElems)
def PublishAddAcknowledge(builder, acknowledge): builder.PrependBoolSlot(9, acknowledge, 0)
def AddAcknowledge(builder, acknowledge):
return PublishAddAcknowledge(builder, acknowledge)
def PublishAddExcludeMe(builder, excludeMe): builder.PrependBoolSlot(10, excludeMe, 1)
def AddExcludeMe(builder, excludeMe):
return PublishAddExcludeMe(builder, excludeMe)
def PublishAddExclude(builder, exclude): builder.PrependUOffsetTRelativeSlot(11, flatbuffers.number_types.UOffsetTFlags.py_type(exclude), 0)
def AddExclude(builder, exclude):
return PublishAddExclude(builder, exclude)
def PublishStartExcludeVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartExcludeVector(builder, numElems):
return PublishStartExcludeVector(builder, numElems)
def PublishAddExcludeAuthid(builder, excludeAuthid): builder.PrependUOffsetTRelativeSlot(12, flatbuffers.number_types.UOffsetTFlags.py_type(excludeAuthid), 0)
def AddExcludeAuthid(builder, excludeAuthid):
return PublishAddExcludeAuthid(builder, excludeAuthid)
def PublishStartExcludeAuthidVector(builder, numElems): return builder.StartVector(4, numElems, 4)
def StartExcludeAuthidVector(builder, numElems):
return PublishStartExcludeAuthidVector(builder, numElems)
def PublishAddExcludeAuthrole(builder, excludeAuthrole): builder.PrependUOffsetTRelativeSlot(13, flatbuffers.number_types.UOffsetTFlags.py_type(excludeAuthrole), 0)
def AddExcludeAuthrole(builder, excludeAuthrole):
return PublishAddExcludeAuthrole(builder, excludeAuthrole)
def PublishStartExcludeAuthroleVector(builder, numElems): return builder.StartVector(4, numElems, 4)
def StartExcludeAuthroleVector(builder, numElems):
return PublishStartExcludeAuthroleVector(builder, numElems)
def PublishAddEligible(builder, eligible): builder.PrependUOffsetTRelativeSlot(14, flatbuffers.number_types.UOffsetTFlags.py_type(eligible), 0)
def AddEligible(builder, eligible):
return PublishAddEligible(builder, eligible)
def PublishStartEligibleVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartEligibleVector(builder, numElems):
return PublishStartEligibleVector(builder, numElems)
def PublishAddEligibleAuthid(builder, eligibleAuthid): builder.PrependUOffsetTRelativeSlot(15, flatbuffers.number_types.UOffsetTFlags.py_type(eligibleAuthid), 0)
def AddEligibleAuthid(builder, eligibleAuthid):
return PublishAddEligibleAuthid(builder, eligibleAuthid)
def PublishStartEligibleAuthidVector(builder, numElems): return builder.StartVector(4, numElems, 4)
def StartEligibleAuthidVector(builder, numElems):
return PublishStartEligibleAuthidVector(builder, numElems)
def PublishAddEligibleAuthrole(builder, eligibleAuthrole): builder.PrependUOffsetTRelativeSlot(16, flatbuffers.number_types.UOffsetTFlags.py_type(eligibleAuthrole), 0)
def AddEligibleAuthrole(builder, eligibleAuthrole):
return PublishAddEligibleAuthrole(builder, eligibleAuthrole)
def PublishStartEligibleAuthroleVector(builder, numElems): return builder.StartVector(4, numElems, 4)
def StartEligibleAuthroleVector(builder, numElems):
return PublishStartEligibleAuthroleVector(builder, numElems)
def PublishAddRetain(builder, retain): builder.PrependBoolSlot(17, retain, 0)
def AddRetain(builder, retain):
return PublishAddRetain(builder, retain)
def PublishAddTransactionHash(builder, transactionHash): builder.PrependUOffsetTRelativeSlot(18, flatbuffers.number_types.UOffsetTFlags.py_type(transactionHash), 0)
def AddTransactionHash(builder, transactionHash):
return PublishAddTransactionHash(builder, transactionHash)
def PublishAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(19, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return PublishAddForwardFor(builder, forwardFor)
def PublishStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return PublishStartForwardForVector(builder, numElems)
def PublishEnd(builder): return builder.EndObject()
def End(builder):
return PublishEnd(builder)

View File

@@ -0,0 +1,62 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Published(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Published()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsPublished(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Published
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Published
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Published
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Published
def Publication(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
def PublishedStart(builder): builder.StartObject(3)
def Start(builder):
return PublishedStart(builder)
def PublishedAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return PublishedAddSession(builder, session)
def PublishedAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return PublishedAddRequest(builder, request)
def PublishedAddPublication(builder, publication): builder.PrependUint64Slot(2, publication, 0)
def AddPublication(builder, publication):
return PublishedAddPublication(builder, publication)
def PublishedEnd(builder): return builder.EndObject()
def End(builder):
return PublishedEnd(builder)

View File

@@ -0,0 +1,92 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class PublisherFeatures(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = PublisherFeatures()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsPublisherFeatures(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# PublisherFeatures
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# PublisherFeatures
def PublisherIdentification(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# PublisherFeatures
def PublisherExclusion(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# PublisherFeatures
def SubscriberBlackwhiteListing(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# PublisherFeatures
def AcknowledgeEventReceived(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# PublisherFeatures
def PayloadTransparency(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# PublisherFeatures
def PayloadEncryptionCryptobox(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def PublisherFeaturesStart(builder): builder.StartObject(6)
def Start(builder):
return PublisherFeaturesStart(builder)
def [AWS-SECRET-REMOVED]ion(builder, publisherIdentification): builder.PrependBoolSlot(0, publisherIdentification, 0)
def AddPublisherIdentification(builder, publisherIdentification):
return [AWS-SECRET-REMOVED]ion(builder, publisherIdentification)
def PublisherFeaturesAddPublisherExclusion(builder, publisherExclusion): builder.PrependBoolSlot(1, publisherExclusion, 0)
def AddPublisherExclusion(builder, publisherExclusion):
return PublisherFeaturesAddPublisherExclusion(builder, publisherExclusion)
def [AWS-SECRET-REMOVED]Listing(builder, subscriberBlackwhiteListing): builder.PrependBoolSlot(2, subscriberBlackwhiteListing, 0)
def AddSubscriberBlackwhiteListing(builder, subscriberBlackwhiteListing):
return [AWS-SECRET-REMOVED]Listing(builder, subscriberBlackwhiteListing)
def [AWS-SECRET-REMOVED]ived(builder, acknowledgeEventReceived): builder.PrependBoolSlot(3, acknowledgeEventReceived, 0)
def AddAcknowledgeEventReceived(builder, acknowledgeEventReceived):
return [AWS-SECRET-REMOVED]ived(builder, acknowledgeEventReceived)
def PublisherFeaturesAddPayloadTransparency(builder, payloadTransparency): builder.PrependBoolSlot(4, payloadTransparency, 0)
def AddPayloadTransparency(builder, payloadTransparency):
return PublisherFeaturesAddPayloadTransparency(builder, payloadTransparency)
def [AWS-SECRET-REMOVED]ptobox(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(5, payloadEncryptionCryptobox, 0)
def AddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox):
return [AWS-SECRET-REMOVED]ptobox(builder, payloadEncryptionCryptobox)
def PublisherFeaturesEnd(builder): return builder.EndObject()
def End(builder):
return PublisherFeaturesEnd(builder)

View File

@@ -0,0 +1,102 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Register(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Register()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsRegister(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Register
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Register
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Register
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Register
def Procedure(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Register
def Match(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Register
def Invoke(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Register
def Concurrency(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint16Flags, o + self._tab.Pos)
return 0
# Register
def ForceReregister(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def RegisterStart(builder): builder.StartObject(7)
def Start(builder):
return RegisterStart(builder)
def RegisterAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return RegisterAddSession(builder, session)
def RegisterAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return RegisterAddRequest(builder, request)
def RegisterAddProcedure(builder, procedure): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(procedure), 0)
def AddProcedure(builder, procedure):
return RegisterAddProcedure(builder, procedure)
def RegisterAddMatch(builder, match): builder.PrependUint8Slot(3, match, 0)
def AddMatch(builder, match):
return RegisterAddMatch(builder, match)
def RegisterAddInvoke(builder, invoke): builder.PrependUint8Slot(4, invoke, 0)
def AddInvoke(builder, invoke):
return RegisterAddInvoke(builder, invoke)
def RegisterAddConcurrency(builder, concurrency): builder.PrependUint16Slot(5, concurrency, 0)
def AddConcurrency(builder, concurrency):
return RegisterAddConcurrency(builder, concurrency)
def RegisterAddForceReregister(builder, forceReregister): builder.PrependBoolSlot(6, forceReregister, 0)
def AddForceReregister(builder, forceReregister):
return RegisterAddForceReregister(builder, forceReregister)
def RegisterEnd(builder): return builder.EndObject()
def End(builder):
return RegisterEnd(builder)

View File

@@ -0,0 +1,62 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Registered(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Registered()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsRegistered(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Registered
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Registered
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Registered
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Registered
def Registration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
def RegisteredStart(builder): builder.StartObject(3)
def Start(builder):
return RegisteredStart(builder)
def RegisteredAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return RegisteredAddSession(builder, session)
def RegisteredAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return RegisteredAddRequest(builder, request)
def RegisteredAddRegistration(builder, registration): builder.PrependUint64Slot(2, registration, 0)
def AddRegistration(builder, registration):
return RegisteredAddRegistration(builder, registration)
def RegisteredEnd(builder): return builder.EndObject()
def End(builder):
return RegisteredEnd(builder)

View File

@@ -0,0 +1,208 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Result(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Result()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsResult(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Result
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Result
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Result
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Result
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Result
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Result
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Result
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
return o == 0
# Result
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Result
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Result
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Result
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Result
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Result
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
return o == 0
# Result
def Progress(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Result
def Callee(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Result
def CalleeAuthid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Result
def CalleeAuthrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Result
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Result
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Result
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
return o == 0
def ResultStart(builder): builder.StartObject(11)
def Start(builder):
return ResultStart(builder)
def ResultAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return ResultAddSession(builder, session)
def ResultAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return ResultAddRequest(builder, request)
def ResultAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return ResultAddPayload(builder, payload)
def ResultStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return ResultStartPayloadVector(builder, numElems)
def ResultAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(3, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return ResultAddEncAlgo(builder, encAlgo)
def ResultAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(4, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return ResultAddEncSerializer(builder, encSerializer)
def ResultAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return ResultAddEncKey(builder, encKey)
def ResultStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return ResultStartEncKeyVector(builder, numElems)
def ResultAddProgress(builder, progress): builder.PrependBoolSlot(6, progress, 0)
def AddProgress(builder, progress):
return ResultAddProgress(builder, progress)
def ResultAddCallee(builder, callee): builder.PrependUint64Slot(7, callee, 0)
def AddCallee(builder, callee):
return ResultAddCallee(builder, callee)
def ResultAddCalleeAuthid(builder, calleeAuthid): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(calleeAuthid), 0)
def AddCalleeAuthid(builder, calleeAuthid):
return ResultAddCalleeAuthid(builder, calleeAuthid)
def ResultAddCalleeAuthrole(builder, calleeAuthrole): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(calleeAuthrole), 0)
def AddCalleeAuthrole(builder, calleeAuthrole):
return ResultAddCalleeAuthrole(builder, calleeAuthrole)
def ResultAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return ResultAddForwardFor(builder, forwardFor)
def ResultStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return ResultStartForwardForVector(builder, numElems)
def ResultEnd(builder): return builder.EndObject()
def End(builder):
return ResultEnd(builder)

View File

@@ -0,0 +1,60 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class RouterRoles(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = RouterRoles()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsRouterRoles(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# RouterRoles
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# RouterRoles
def Broker(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.BrokerFeatures import BrokerFeatures
obj = BrokerFeatures()
obj.Init(self._tab.Bytes, x)
return obj
return None
# RouterRoles
def Dealer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.DealerFeatures import DealerFeatures
obj = DealerFeatures()
obj.Init(self._tab.Bytes, x)
return obj
return None
def RouterRolesStart(builder): builder.StartObject(2)
def Start(builder):
return RouterRolesStart(builder)
def RouterRolesAddBroker(builder, broker): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(broker), 0)
def AddBroker(builder, broker):
return RouterRolesAddBroker(builder, broker)
def RouterRolesAddDealer(builder, dealer): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(dealer), 0)
def AddDealer(builder, dealer):
return RouterRolesAddDealer(builder, dealer)
def RouterRolesEnd(builder): return builder.EndObject()
def End(builder):
return RouterRolesEnd(builder)

View File

@@ -0,0 +1,13 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
class Serializer(object):
TRANSPORT = 0
JSON = 1
MSGPACK = 2
CBOR = 3
UBJSON = 4
OPAQUE = 5
FLATBUFFERS = 6
FLEXBUFFERS = 7

View File

@@ -0,0 +1,82 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Subscribe(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Subscribe()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsSubscribe(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Subscribe
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Subscribe
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Subscribe
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Subscribe
def Topic(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Subscribe
def Match(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Subscribe
def GetRetained(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def SubscribeStart(builder): builder.StartObject(5)
def Start(builder):
return SubscribeStart(builder)
def SubscribeAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return SubscribeAddSession(builder, session)
def SubscribeAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return SubscribeAddRequest(builder, request)
def SubscribeAddTopic(builder, topic): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(topic), 0)
def AddTopic(builder, topic):
return SubscribeAddTopic(builder, topic)
def SubscribeAddMatch(builder, match): builder.PrependUint8Slot(3, match, 0)
def AddMatch(builder, match):
return SubscribeAddMatch(builder, match)
def SubscribeAddGetRetained(builder, getRetained): builder.PrependBoolSlot(4, getRetained, 0)
def AddGetRetained(builder, getRetained):
return SubscribeAddGetRetained(builder, getRetained)
def SubscribeEnd(builder): return builder.EndObject()
def End(builder):
return SubscribeEnd(builder)

View File

@@ -0,0 +1,62 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Subscribed(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Subscribed()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsSubscribed(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Subscribed
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Subscribed
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Subscribed
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Subscribed
def Subscription(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
def SubscribedStart(builder): builder.StartObject(3)
def Start(builder):
return SubscribedStart(builder)
def SubscribedAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return SubscribedAddSession(builder, session)
def SubscribedAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return SubscribedAddRequest(builder, request)
def SubscribedAddSubscription(builder, subscription): builder.PrependUint64Slot(2, subscription, 0)
def AddSubscription(builder, subscription):
return SubscribedAddSubscription(builder, subscription)
def SubscribedEnd(builder): return builder.EndObject()
def End(builder):
return SubscribedEnd(builder)

View File

@@ -0,0 +1,112 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class SubscriberFeatures(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = SubscriberFeatures()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsSubscriberFeatures(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# SubscriberFeatures
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# SubscriberFeatures
def PublisherIdentification(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# SubscriberFeatures
def PatternBasedSubscription(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# SubscriberFeatures
def PublicationTrustlevels(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# SubscriberFeatures
def SubscriptionRevocation(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# SubscriberFeatures
def EventHistory(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# SubscriberFeatures
def AcknowledgeSubscriberReceived(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# SubscriberFeatures
def PayloadTransparency(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# SubscriberFeatures
def PayloadEncryptionCryptobox(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
def SubscriberFeaturesStart(builder): builder.StartObject(8)
def Start(builder):
return SubscriberFeaturesStart(builder)
def [AWS-SECRET-REMOVED]tion(builder, publisherIdentification): builder.PrependBoolSlot(0, publisherIdentification, 0)
def AddPublisherIdentification(builder, publisherIdentification):
return [AWS-SECRET-REMOVED]tion(builder, publisherIdentification)
def [AWS-SECRET-REMOVED]ption(builder, patternBasedSubscription): builder.PrependBoolSlot(1, patternBasedSubscription, 0)
def AddPatternBasedSubscription(builder, patternBasedSubscription):
return [AWS-SECRET-REMOVED]ption(builder, patternBasedSubscription)
def [AWS-SECRET-REMOVED]els(builder, publicationTrustlevels): builder.PrependBoolSlot(2, publicationTrustlevels, 0)
def AddPublicationTrustlevels(builder, publicationTrustlevels):
return [AWS-SECRET-REMOVED]els(builder, publicationTrustlevels)
def [AWS-SECRET-REMOVED]ion(builder, subscriptionRevocation): builder.PrependBoolSlot(3, subscriptionRevocation, 0)
def AddSubscriptionRevocation(builder, subscriptionRevocation):
return [AWS-SECRET-REMOVED]ion(builder, subscriptionRevocation)
def SubscriberFeaturesAddEventHistory(builder, eventHistory): builder.PrependBoolSlot(4, eventHistory, 0)
def AddEventHistory(builder, eventHistory):
return SubscriberFeaturesAddEventHistory(builder, eventHistory)
def [AWS-SECRET-REMOVED]erReceived(builder, acknowledgeSubscriberReceived): builder.PrependBoolSlot(5, acknowledgeSubscriberReceived, 0)
def AddAcknowledgeSubscriberReceived(builder, acknowledgeSubscriberReceived):
return [AWS-SECRET-REMOVED]erReceived(builder, acknowledgeSubscriberReceived)
def [AWS-SECRET-REMOVED](builder, payloadTransparency): builder.PrependBoolSlot(6, payloadTransparency, 0)
def AddPayloadTransparency(builder, payloadTransparency):
return [AWS-SECRET-REMOVED](builder, payloadTransparency)
def [AWS-SECRET-REMOVED]yptobox(builder, payloadEncryptionCryptobox): builder.PrependBoolSlot(7, payloadEncryptionCryptobox, 0)
def AddPayloadEncryptionCryptobox(builder, payloadEncryptionCryptobox):
return [AWS-SECRET-REMOVED]yptobox(builder, payloadEncryptionCryptobox)
def SubscriberFeaturesEnd(builder): return builder.EndObject()
def End(builder):
return SubscriberFeaturesEnd(builder)

View File

@@ -0,0 +1,158 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class SubscriberReceived(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = SubscriberReceived()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsSubscriberReceived(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# SubscriberReceived
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# SubscriberReceived
def Publication(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# SubscriberReceived
def Subscriber(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# SubscriberReceived
def SubscriberAuthid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# SubscriberReceived
def SubscriberAuthrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# SubscriberReceived
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# SubscriberReceived
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# SubscriberReceived
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.VectorLen(o)
return 0
# SubscriberReceived
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
return o == 0
# SubscriberReceived
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# SubscriberReceived
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# SubscriberReceived
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# SubscriberReceived
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# SubscriberReceived
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.VectorLen(o)
return 0
# SubscriberReceived
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
return o == 0
def SubscriberReceivedStart(builder): builder.StartObject(8)
def Start(builder):
return SubscriberReceivedStart(builder)
def SubscriberReceivedAddPublication(builder, publication): builder.PrependUint64Slot(0, publication, 0)
def AddPublication(builder, publication):
return SubscriberReceivedAddPublication(builder, publication)
def SubscriberReceivedAddSubscriber(builder, subscriber): builder.PrependUint64Slot(1, subscriber, 0)
def AddSubscriber(builder, subscriber):
return SubscriberReceivedAddSubscriber(builder, subscriber)
def SubscriberReceivedAddSubscriberAuthid(builder, subscriberAuthid): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(subscriberAuthid), 0)
def AddSubscriberAuthid(builder, subscriberAuthid):
return SubscriberReceivedAddSubscriberAuthid(builder, subscriberAuthid)
def SubscriberReceivedAddSubscriberAuthrole(builder, subscriberAuthrole): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(subscriberAuthrole), 0)
def AddSubscriberAuthrole(builder, subscriberAuthrole):
return SubscriberReceivedAddSubscriberAuthrole(builder, subscriberAuthrole)
def SubscriberReceivedAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return SubscriberReceivedAddPayload(builder, payload)
def SubscriberReceivedStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return SubscriberReceivedStartPayloadVector(builder, numElems)
def SubscriberReceivedAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(5, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return SubscriberReceivedAddEncAlgo(builder, encAlgo)
def SubscriberReceivedAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(6, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return SubscriberReceivedAddEncSerializer(builder, encSerializer)
def SubscriberReceivedAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return SubscriberReceivedAddEncKey(builder, encKey)
def SubscriberReceivedStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return SubscriberReceivedStartEncKeyVector(builder, numElems)
def SubscriberReceivedEnd(builder): return builder.EndObject()
def End(builder):
return SubscriberReceivedEnd(builder)

View File

@@ -0,0 +1,62 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Unregister(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Unregister()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsUnregister(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Unregister
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Unregister
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unregister
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unregister
def Registration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
def UnregisterStart(builder): builder.StartObject(3)
def Start(builder):
return UnregisterStart(builder)
def UnregisterAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return UnregisterAddSession(builder, session)
def UnregisterAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return UnregisterAddRequest(builder, request)
def UnregisterAddRegistration(builder, registration): builder.PrependUint64Slot(2, registration, 0)
def AddRegistration(builder, registration):
return UnregisterAddRegistration(builder, registration)
def UnregisterEnd(builder): return builder.EndObject()
def End(builder):
return UnregisterEnd(builder)

View File

@@ -0,0 +1,72 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Unregistered(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Unregistered()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsUnregistered(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Unregistered
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Unregistered
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unregistered
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unregistered
def Registration(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unregistered
def Reason(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def UnregisteredStart(builder): builder.StartObject(4)
def Start(builder):
return UnregisteredStart(builder)
def UnregisteredAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return UnregisteredAddSession(builder, session)
def UnregisteredAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return UnregisteredAddRequest(builder, request)
def UnregisteredAddRegistration(builder, registration): builder.PrependUint64Slot(2, registration, 0)
def AddRegistration(builder, registration):
return UnregisteredAddRegistration(builder, registration)
def UnregisteredAddReason(builder, reason): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(reason), 0)
def AddReason(builder, reason):
return UnregisteredAddReason(builder, reason)
def UnregisteredEnd(builder): return builder.EndObject()
def End(builder):
return UnregisteredEnd(builder)

View File

@@ -0,0 +1,62 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Unsubscribe(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Unsubscribe()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsUnsubscribe(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Unsubscribe
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Unsubscribe
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unsubscribe
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unsubscribe
def Subscription(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
def UnsubscribeStart(builder): builder.StartObject(3)
def Start(builder):
return UnsubscribeStart(builder)
def UnsubscribeAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return UnsubscribeAddSession(builder, session)
def UnsubscribeAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return UnsubscribeAddRequest(builder, request)
def UnsubscribeAddSubscription(builder, subscription): builder.PrependUint64Slot(2, subscription, 0)
def AddSubscription(builder, subscription):
return UnsubscribeAddSubscription(builder, subscription)
def UnsubscribeEnd(builder): return builder.EndObject()
def End(builder):
return UnsubscribeEnd(builder)

View File

@@ -0,0 +1,72 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Unsubscribed(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Unsubscribed()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsUnsubscribed(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Unsubscribed
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Unsubscribed
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unsubscribed
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unsubscribed
def Subscription(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Unsubscribed
def Reason(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def UnsubscribedStart(builder): builder.StartObject(4)
def Start(builder):
return UnsubscribedStart(builder)
def UnsubscribedAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return UnsubscribedAddSession(builder, session)
def UnsubscribedAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return UnsubscribedAddRequest(builder, request)
def UnsubscribedAddSubscription(builder, subscription): builder.PrependUint64Slot(2, subscription, 0)
def AddSubscription(builder, subscription):
return UnsubscribedAddSubscription(builder, subscription)
def UnsubscribedAddReason(builder, reason): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(reason), 0)
def AddReason(builder, reason):
return UnsubscribedAddReason(builder, reason)
def UnsubscribedEnd(builder): return builder.EndObject()
def End(builder):
return UnsubscribedEnd(builder)

View File

@@ -0,0 +1,150 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Welcome(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Welcome()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsWelcome(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Welcome
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Welcome
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Welcome
def Roles(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.proto.RouterRoles import RouterRoles
obj = RouterRoles()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Welcome
def Realm(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Welcome
def Authid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Welcome
def Authrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Welcome
def Authmethod(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Welcome
def Authprovider(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Welcome
def Authextra(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
x = self._tab.Indirect(o + self._tab.Pos)
from wamp.Map import Map
obj = Map()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Welcome
def Resumed(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Welcome
def Resumable(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Welcome
def ResumeToken(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
def WelcomeStart(builder): builder.StartObject(11)
def Start(builder):
return WelcomeStart(builder)
def WelcomeAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return WelcomeAddSession(builder, session)
def WelcomeAddRoles(builder, roles): builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(roles), 0)
def AddRoles(builder, roles):
return WelcomeAddRoles(builder, roles)
def WelcomeAddRealm(builder, realm): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(realm), 0)
def AddRealm(builder, realm):
return WelcomeAddRealm(builder, realm)
def WelcomeAddAuthid(builder, authid): builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(authid), 0)
def AddAuthid(builder, authid):
return WelcomeAddAuthid(builder, authid)
def WelcomeAddAuthrole(builder, authrole): builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(authrole), 0)
def AddAuthrole(builder, authrole):
return WelcomeAddAuthrole(builder, authrole)
def WelcomeAddAuthmethod(builder, authmethod): builder.PrependUint8Slot(5, authmethod, 0)
def AddAuthmethod(builder, authmethod):
return WelcomeAddAuthmethod(builder, authmethod)
def WelcomeAddAuthprovider(builder, authprovider): builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(authprovider), 0)
def AddAuthprovider(builder, authprovider):
return WelcomeAddAuthprovider(builder, authprovider)
def WelcomeAddAuthextra(builder, authextra): builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(authextra), 0)
def AddAuthextra(builder, authextra):
return WelcomeAddAuthextra(builder, authextra)
def WelcomeAddResumed(builder, resumed): builder.PrependBoolSlot(8, resumed, 0)
def AddResumed(builder, resumed):
return WelcomeAddResumed(builder, resumed)
def WelcomeAddResumable(builder, resumable): builder.PrependBoolSlot(9, resumable, 0)
def AddResumable(builder, resumable):
return WelcomeAddResumable(builder, resumable)
def WelcomeAddResumeToken(builder, resumeToken): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(resumeToken), 0)
def AddResumeToken(builder, resumeToken):
return WelcomeAddResumeToken(builder, resumeToken)
def WelcomeEnd(builder): return builder.EndObject()
def End(builder):
return WelcomeEnd(builder)

View File

@@ -0,0 +1,208 @@
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: proto
import flatbuffers
from flatbuffers.compat import import_numpy
np = import_numpy()
class Yield(object):
__slots__ = ['_tab']
@classmethod
def GetRootAs(cls, buf, offset=0):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Yield()
x.Init(buf, n + offset)
return x
@classmethod
def GetRootAsYield(cls, buf, offset=0):
"""This method is deprecated. Please switch to GetRootAs."""
return cls.GetRootAs(buf, offset)
# Yield
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
# Yield
def Session(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Yield
def Request(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Yield
def Payload(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Yield
def PayloadAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Yield
def PayloadLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Yield
def PayloadIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
return o == 0
# Yield
def EncAlgo(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Yield
def EncSerializer(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Yield
def EncKey(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
a = self._tab.Vector(o)
return self._tab.Get(flatbuffers.number_types.Uint8Flags, a + flatbuffers.number_types.UOffsetTFlags.py_type(j * 1))
return 0
# Yield
def EncKeyAsNumpy(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.GetVectorAsNumpy(flatbuffers.number_types.Uint8Flags, o)
return 0
# Yield
def EncKeyLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Yield
def EncKeyIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
return o == 0
# Yield
def Progress(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(16))
if o != 0:
return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
return False
# Yield
def Callee(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(18))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
return 0
# Yield
def CalleeAuthid(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Yield
def CalleeAuthrole(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
if o != 0:
return self._tab.String(o + self._tab.Pos)
return None
# Yield
def ForwardFor(self, j):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
x = self._tab.Vector(o)
x += flatbuffers.number_types.UOffsetTFlags.py_type(j) * 8
from wamp.proto.Principal import Principal
obj = Principal()
obj.Init(self._tab.Bytes, x)
return obj
return None
# Yield
def ForwardForLength(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
if o != 0:
return self._tab.VectorLen(o)
return 0
# Yield
def ForwardForIsNone(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
return o == 0
def YieldStart(builder): builder.StartObject(11)
def Start(builder):
return YieldStart(builder)
def YieldAddSession(builder, session): builder.PrependUint64Slot(0, session, 0)
def AddSession(builder, session):
return YieldAddSession(builder, session)
def YieldAddRequest(builder, request): builder.PrependUint64Slot(1, request, 0)
def AddRequest(builder, request):
return YieldAddRequest(builder, request)
def YieldAddPayload(builder, payload): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(payload), 0)
def AddPayload(builder, payload):
return YieldAddPayload(builder, payload)
def YieldStartPayloadVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartPayloadVector(builder, numElems):
return YieldStartPayloadVector(builder, numElems)
def YieldAddEncAlgo(builder, encAlgo): builder.PrependUint8Slot(3, encAlgo, 0)
def AddEncAlgo(builder, encAlgo):
return YieldAddEncAlgo(builder, encAlgo)
def YieldAddEncSerializer(builder, encSerializer): builder.PrependUint8Slot(4, encSerializer, 0)
def AddEncSerializer(builder, encSerializer):
return YieldAddEncSerializer(builder, encSerializer)
def YieldAddEncKey(builder, encKey): builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(encKey), 0)
def AddEncKey(builder, encKey):
return YieldAddEncKey(builder, encKey)
def YieldStartEncKeyVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartEncKeyVector(builder, numElems):
return YieldStartEncKeyVector(builder, numElems)
def YieldAddProgress(builder, progress): builder.PrependBoolSlot(6, progress, 0)
def AddProgress(builder, progress):
return YieldAddProgress(builder, progress)
def YieldAddCallee(builder, callee): builder.PrependUint64Slot(7, callee, 0)
def AddCallee(builder, callee):
return YieldAddCallee(builder, callee)
def YieldAddCalleeAuthid(builder, calleeAuthid): builder.PrependUOffsetTRelativeSlot(8, flatbuffers.number_types.UOffsetTFlags.py_type(calleeAuthid), 0)
def AddCalleeAuthid(builder, calleeAuthid):
return YieldAddCalleeAuthid(builder, calleeAuthid)
def YieldAddCalleeAuthrole(builder, calleeAuthrole): builder.PrependUOffsetTRelativeSlot(9, flatbuffers.number_types.UOffsetTFlags.py_type(calleeAuthrole), 0)
def AddCalleeAuthrole(builder, calleeAuthrole):
return YieldAddCalleeAuthrole(builder, calleeAuthrole)
def YieldAddForwardFor(builder, forwardFor): builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(forwardFor), 0)
def AddForwardFor(builder, forwardFor):
return YieldAddForwardFor(builder, forwardFor)
def YieldStartForwardForVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def StartForwardForVector(builder, numElems):
return YieldStartForwardForVector(builder, numElems)
def YieldEnd(builder): return builder.EndObject()
def End(builder):
return YieldEnd(builder)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,129 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import flatbuffers
from autobahn.wamp.gen.wamp.proto import Event as EventGen
from autobahn.wamp.gen.wamp.proto import Publish as PublishGen
from autobahn.wamp.gen.wamp.proto import Message
from autobahn.wamp.gen.wamp.proto.MessageType import MessageType
__all__ = (
'Event',
'Message',
'MessageType',
)
class Event(EventGen.Event):
@classmethod
def GetRootAsEvent(cls, buf, offset):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Event()
x.Init(buf, n + offset)
return x
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def ArgsAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None
def KwargsAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None
def PayloadAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None
def EncKeyAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None
class Publish(PublishGen.Publish):
@classmethod
def GetRootAsEvent(cls, buf, offset):
n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
x = Event()
x.Init(buf, n + offset)
return x
def Init(self, buf, pos):
self._tab = flatbuffers.table.Table(buf, pos)
def ArgsAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(10))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None
def KwargsAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(12))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None
def PayloadAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None
def EncKeyAsBytes(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
if o != 0:
_off = self._tab.Vector(o)
_len = self._tab.VectorLen(o)
return memoryview(self._tab.Bytes)[_off:_off+_len]
return None

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,338 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
__all__ = (
'Publication',
'Subscription',
'Handler',
'Registration',
'Endpoint',
'PublishRequest',
'SubscribeRequest',
'UnsubscribeRequest',
'CallRequest',
'InvocationRequest',
'RegisterRequest',
'UnregisterRequest',
)
class Publication(object):
"""
Object representing a publication (feedback from publishing an event when doing
an acknowledged publish).
"""
__slots__ = ('id', 'was_encrypted')
def __init__(self, publication_id, was_encrypted):
"""
:param publication_id: The publication ID of the published event.
:type publication_id: int
:param was_encrypted: Flag indicating whether the app payload was encrypted.
:type was_encrypted: bool
"""
self.id = publication_id
self.was_encrypted = was_encrypted
def __str__(self):
return "Publication(id={0}, was_encrypted={1})".format(self.id, self.was_encrypted)
class Subscription(object):
"""
Object representing a handler subscription.
"""
__slots__ = ('id', 'topic', 'active', 'session', 'handler')
def __init__(self, subscription_id, topic, session, handler):
"""
:param subscription_id: The subscription ID.
:type subscription_id: int
:param topic: The subscription URI or URI pattern.
:type topic: str
:param session: The ApplicationSession this subscription is living on.
:type session: instance of ApplicationSession
:param handler: The user event callback.
:type handler: callable
"""
self.id = subscription_id
self.topic = topic
self.active = True
self.session = session
self.handler = handler
def unsubscribe(self):
"""
Unsubscribe this subscription.
"""
if self.active:
return self.session._unsubscribe(self)
else:
raise Exception("subscription no longer active")
def __str__(self):
return "Subscription(id={0}, is_active={1})".format(self.id, self.active)
class Handler(object):
"""
Object representing an event handler attached to a subscription.
"""
__slots__ = ('fn', 'obj', 'details_arg')
def __init__(self, fn, obj=None, details_arg=None):
"""
:param fn: The event handler function to be called.
:type fn: callable
:param obj: The (optional) object upon which to call the function.
:type obj: obj or None
:param details_arg: The keyword argument under which event details should be provided.
:type details_arg: str or None
"""
self.fn = fn
self.obj = obj
self.details_arg = details_arg
class Registration(object):
"""
Object representing a registration.
"""
__slots__ = ('id', 'active', 'session', 'procedure', 'endpoint')
def __init__(self, session, registration_id, procedure, endpoint):
"""
:param id: The registration ID.
:type id: int
:param active: Flag indicating whether this registration is active.
:type active: bool
:param procedure: The procedure URI or URI pattern.
:type procedure: callable
:param endpoint: The user callback.
:type endpoint: callable
"""
self.id = registration_id
self.active = True
self.session = session
self.procedure = procedure
self.endpoint = endpoint
def unregister(self):
"""
"""
if self.active:
return self.session._unregister(self)
else:
raise Exception("registration no longer active")
def __str__(self):
return 'Registration(id={0}, is_active={1}, procedure="{2}")'.format(self.id, self.active, self.procedure)
class Endpoint(object):
"""
Object representing an procedure endpoint attached to a registration.
"""
__slots__ = ('fn', 'obj', 'details_arg')
def __init__(self, fn, obj=None, details_arg=None):
"""
:param fn: The endpoint procedure to be called.
:type fn: callable
:param obj: The (optional) object upon which to call the function.
:type obj: obj or None
:param details_arg: The keyword argument under which call details should be provided.
:type details_arg: str or None
"""
self.fn = fn
self.obj = obj
self.details_arg = details_arg
class Request(object):
"""
Object representing an outstanding request, such as for subscribe/unsubscribe,
register/unregister or call/publish.
"""
__slots__ = ('request_id', 'on_reply')
def __init__(self, request_id, on_reply):
"""
:param request_id: The WAMP request ID.
:type request_id: int
:param on_reply: The Deferred/Future to be fired when the request returns.
:type on_reply: Deferred/Future
"""
self.request_id = request_id
self.on_reply = on_reply
class PublishRequest(Request):
"""
Object representing an outstanding request to publish (acknowledged) an event.
"""
__slots__ = ('was_encrypted')
def __init__(self, request_id, on_reply, was_encrypted):
"""
:param request_id: The WAMP request ID.
:type request_id: int
:param on_reply: The Deferred/Future to be fired when the request returns.
:type on_reply: Deferred/Future
:param was_encrypted: Flag indicating whether the app payload was encrypted.
:type was_encrypted: bool
"""
Request.__init__(self, request_id, on_reply)
self.was_encrypted = was_encrypted
class SubscribeRequest(Request):
"""
Object representing an outstanding request to subscribe to a topic.
"""
__slots__ = ('handler', 'topic')
def __init__(self, request_id, topic, on_reply, handler):
"""
:param request_id: The WAMP request ID.
:type request_id: int
:param topic: The topic URI being subscribed to.
:type topic: unicode
:param on_reply: The Deferred/Future to be fired when the request returns.
:type on_reply: Deferred/Future
:param handler: WAMP call options that are in use for this call.
:type handler: callable
"""
Request.__init__(self, request_id, on_reply)
self.topic = topic
self.handler = handler
class UnsubscribeRequest(Request):
"""
Object representing an outstanding request to unsubscribe a subscription.
"""
__slots__ = ('subscription_id',)
def __init__(self, request_id, on_reply, subscription_id):
"""
"""
Request.__init__(self, request_id, on_reply)
self.subscription_id = subscription_id
class CallRequest(Request):
"""
Object representing an outstanding request to call a procedure.
"""
__slots__ = ('procedure', 'options',)
def __init__(self, request_id, procedure, on_reply, options):
"""
:param request_id: The WAMP request ID.
:type request_id: int
:param on_reply: The Deferred/Future to be fired when the request returns.
:type on_reply: Deferred/Future
:param options: WAMP call options that are in use for this call.
:type options: dict
"""
Request.__init__(self, request_id, on_reply)
self.procedure = procedure
self.options = options
class InvocationRequest(Request):
"""
Object representing an outstanding request to invoke an endpoint.
"""
class RegisterRequest(Request):
"""
Object representing an outstanding request to register a procedure.
"""
__slots__ = ('procedure', 'endpoint',)
def __init__(self, request_id, on_reply, procedure, endpoint):
"""
"""
Request.__init__(self, request_id, on_reply)
self.procedure = procedure
self.endpoint = endpoint
class UnregisterRequest(Request):
"""
Object representing an outstanding request to unregister a registration.
"""
__slots__ = ('registration_id',)
def __init__(self, request_id, on_reply, registration_id):
"""
"""
Request.__init__(self, request_id, on_reply)
self.registration_id = registration_id

View File

@@ -0,0 +1,305 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import json
from autobahn import util
from autobahn.wamp.exception import ProtocolError
__all__ = (
'RoleFeatures',
'RoleBrokerFeatures',
'RoleSubscriberFeatures',
'RolePublisherFeatures',
'RoleDealerFeatures',
'RoleCallerFeatures',
'RoleCalleeFeatures',
'ROLE_NAME_TO_CLASS',
'DEFAULT_CLIENT_ROLES',
)
class RoleFeatures(util.EqualityMixin):
"""
Base class for WAMP role features.
"""
ROLE = None
def __str__(self):
return json.dumps(self.__dict__)
def __repr__(self):
configured_options = {}
for k, v in self.__dict__.items():
if v is not None:
configured_options[k] = v
return "{0}({1})".format(self.ROLE, ", ".join([k + '=' + str(v)
for k, v in configured_options.items()]))
def _check_all_bool(self):
# check feature attributes
for k in self.__dict__:
if not k.startswith('_') and k != 'ROLE':
if getattr(self, k) is not None and type(getattr(self, k)) != bool:
raise ProtocolError("invalid type {0} for feature '{1}' for role '{2}'".format(getattr(self, k), k, self.ROLE))
class RoleBrokerFeatures(RoleFeatures):
"""
WAMP broker role features.
"""
ROLE = 'broker'
def __init__(self,
publisher_identification=None,
publication_trustlevels=None,
pattern_based_subscription=None,
session_meta_api=None,
subscription_meta_api=None,
subscriber_blackwhite_listing=None,
publisher_exclusion=None,
subscription_revocation=None,
event_history=None,
payload_transparency=None,
x_acknowledged_event_delivery=None,
payload_encryption_cryptobox=None,
event_retention=None,
**kwargs):
self.publisher_identification = publisher_identification
self.publication_trustlevels = publication_trustlevels
self.pattern_based_subscription = pattern_based_subscription
self.session_meta_api = session_meta_api
self.subscription_meta_api = subscription_meta_api
self.subscriber_blackwhite_listing = subscriber_blackwhite_listing
self.publisher_exclusion = publisher_exclusion
self.subscription_revocation = subscription_revocation
self.event_history = event_history
self.payload_transparency = payload_transparency
self.x_acknowledged_event_delivery = x_acknowledged_event_delivery
self.payload_encryption_cryptobox = payload_encryption_cryptobox
self.event_retention = event_retention
self._check_all_bool()
class RoleSubscriberFeatures(RoleFeatures):
"""
WAMP subscriber role features.
"""
ROLE = 'subscriber'
def __init__(self,
publisher_identification=None,
publication_trustlevels=None,
pattern_based_subscription=None,
subscription_revocation=None,
event_history=None,
payload_transparency=None,
payload_encryption_cryptobox=None,
**kwargs):
self.publisher_identification = publisher_identification
self.publication_trustlevels = publication_trustlevels
self.pattern_based_subscription = pattern_based_subscription
self.subscription_revocation = subscription_revocation
self.event_history = event_history
self.payload_transparency = payload_transparency
self.payload_encryption_cryptobox = payload_encryption_cryptobox
self._check_all_bool()
class RolePublisherFeatures(RoleFeatures):
"""
WAMP publisher role features.
"""
ROLE = 'publisher'
def __init__(self,
publisher_identification=None,
subscriber_blackwhite_listing=None,
publisher_exclusion=None,
payload_transparency=None,
x_acknowledged_event_delivery=None,
payload_encryption_cryptobox=None,
**kwargs):
self.publisher_identification = publisher_identification
self.subscriber_blackwhite_listing = subscriber_blackwhite_listing
self.publisher_exclusion = publisher_exclusion
self.payload_transparency = payload_transparency
self.x_acknowledged_event_delivery = x_acknowledged_event_delivery
self.payload_encryption_cryptobox = payload_encryption_cryptobox
self._check_all_bool()
class RoleDealerFeatures(RoleFeatures):
"""
WAMP dealer role features.
"""
ROLE = 'dealer'
def __init__(self,
caller_identification=None,
call_trustlevels=None,
pattern_based_registration=None,
session_meta_api=None,
registration_meta_api=None,
shared_registration=None,
call_timeout=None,
call_canceling=None,
progressive_call_results=None,
registration_revocation=None,
payload_transparency=None,
testament_meta_api=None,
payload_encryption_cryptobox=None,
**kwargs):
self.caller_identification = caller_identification
self.call_trustlevels = call_trustlevels
self.pattern_based_registration = pattern_based_registration
self.session_meta_api = session_meta_api
self.registration_meta_api = registration_meta_api
self.shared_registration = shared_registration
self.call_timeout = call_timeout
self.call_canceling = call_canceling
self.progressive_call_results = progressive_call_results
self.registration_revocation = registration_revocation
self.payload_transparency = payload_transparency
self.testament_meta_api = testament_meta_api
self.payload_encryption_cryptobox = payload_encryption_cryptobox
self._check_all_bool()
class RoleCallerFeatures(RoleFeatures):
"""
WAMP caller role features.
"""
ROLE = 'caller'
def __init__(self,
caller_identification=None,
call_timeout=None,
call_canceling=None,
progressive_call_results=None,
payload_transparency=None,
payload_encryption_cryptobox=None,
**kwargs):
self.caller_identification = caller_identification
self.call_timeout = call_timeout
self.call_canceling = call_canceling
self.progressive_call_results = progressive_call_results
self.payload_transparency = payload_transparency
self.payload_encryption_cryptobox = payload_encryption_cryptobox
self._check_all_bool()
class RoleCalleeFeatures(RoleFeatures):
"""
WAMP callee role features.
"""
ROLE = 'callee'
def __init__(self,
caller_identification=None,
call_trustlevels=None,
pattern_based_registration=None,
shared_registration=None,
call_timeout=None,
call_canceling=None,
progressive_call_results=None,
registration_revocation=None,
payload_transparency=None,
payload_encryption_cryptobox=None,
**kwargs):
self.caller_identification = caller_identification
self.call_trustlevels = call_trustlevels
self.pattern_based_registration = pattern_based_registration
self.shared_registration = shared_registration
self.call_timeout = call_timeout
self.call_canceling = call_canceling
self.progressive_call_results = progressive_call_results
self.registration_revocation = registration_revocation
self.payload_transparency = payload_transparency
self.payload_encryption_cryptobox = payload_encryption_cryptobox
self._check_all_bool()
# map of role names to role class
ROLE_NAME_TO_CLASS = {
'broker': RoleBrokerFeatures,
'subscriber': RoleSubscriberFeatures,
'publisher': RolePublisherFeatures,
'dealer': RoleDealerFeatures,
'caller': RoleCallerFeatures,
'callee': RoleCalleeFeatures,
}
# default role features for client roles supported
DEFAULT_CLIENT_ROLES = {
'subscriber': RoleSubscriberFeatures(
publisher_identification=True,
pattern_based_subscription=True,
subscription_revocation=True,
payload_transparency=True,
payload_encryption_cryptobox=True,
),
'publisher': RolePublisherFeatures(
publisher_identification=True,
subscriber_blackwhite_listing=True,
publisher_exclusion=True,
payload_transparency=True,
x_acknowledged_event_delivery=True,
payload_encryption_cryptobox=True,
),
'caller': RoleCallerFeatures(
caller_identification=True,
progressive_call_results=True,
payload_transparency=True,
payload_encryption_cryptobox=True,
call_canceling=True,
),
'callee': RoleCalleeFeatures(
caller_identification=True,
pattern_based_registration=True,
shared_registration=True,
progressive_call_results=True,
registration_revocation=True,
payload_transparency=True,
payload_encryption_cryptobox=True,
call_canceling=True,
),
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,238 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import unittest
from unittest.mock import Mock
import platform
import re
import json
import binascii
from autobahn.wamp import auth
from autobahn.wamp import types
# these test vectors are all for HMAC-SHA1
PBKDF2_TEST_VECTORS = [
# From RFC 6070
(b'password', b'salt', 1, 20, '[AWS-SECRET-REMOVED]'),
(b'password', b'salt', 2, 20, '[AWS-SECRET-REMOVED]'),
# From Crypt-PBKDF2
(b'password', b'ATHENA.MIT.EDUraeburn', 1, 16, 'cdedb5281bb2f801565a1122b2563515'),
(b'password', b'ATHENA.MIT.EDUraeburn', 1, 32, '[AWS-SECRET-REMOVED]4bb9f3a333ecc0e2e1f70837'),
(b'password', b'ATHENA.MIT.EDUraeburn', 2, 16, '01dbee7f4a9e243e988b62c73cda935d'),
(b'password', b'ATHENA.MIT.EDUraeburn', 2, 32, '[AWS-SECRET-REMOVED]3244ec8f48a99e61ad799d86'),
(b'password', b'ATHENA.MIT.EDUraeburn', 1200, 32, '[AWS-SECRET-REMOVED]c5e5142f708a31e2e62b1e13'),
(b'X' * 64, b'pass phrase equals block size', 1200, 32, '[AWS-SECRET-REMOVED]a452f5cc9ad940fea0598ed1'),
(b'X' * 65, b'pass phrase exceeds block size', 1200, 32, '[AWS-SECRET-REMOVED]2601db3b36be9246915ec82a'),
]
if platform.python_implementation() != 'PyPy':
# the following fails on PyPy: "RuntimeError: maximum recursion depth exceeded"
PBKDF2_TEST_VECTORS.extend(
[
# From RFC 6070
(b'password', b'salt', 4096, 20, '[AWS-SECRET-REMOVED]'),
(b'passwordPASSWORDpassword', b'saltSALTsaltSALTsaltSALTsaltSALTsalt', 4096, 25, '[AWS-SECRET-REMOVED]4cf2f07038'),
(b'pass\x00word', b'sa\x00lt', 4096, 16, '56fa6aa75548099dcc37d7f03425e0c3'),
# This one is from the RFC but it just takes for ages
# (b'password', b'salt', 16777216, 20, '[AWS-SECRET-REMOVED]'),
]
)
class TestWampAuthHelpers(unittest.TestCase):
def test_pbkdf2(self):
for tv in PBKDF2_TEST_VECTORS:
result = auth.pbkdf2(tv[0], tv[1], tv[2], tv[3], 'sha1')
self.assertEqual(type(result), bytes)
self.assertEqual(binascii.hexlify(result).decode('ascii'), tv[4])
def test_generate_totp_secret_default(self):
secret = auth.generate_totp_secret()
self.assertEqual(type(secret), str)
self.assertEqual(len(secret), 10 * 8 / 5)
def test_generate_totp_secret_length(self):
for length in [5, 10, 20, 30, 40, 50]:
secret = auth.generate_totp_secret(length)
self.assertEqual(type(secret), str)
self.assertEqual(len(secret), length * 8 / 5)
def test_compute_totp(self):
pat = re.compile(r"\d\d\d\d\d\d")
secret = "MFRGGZDFMZTWQ2LK"
signature = auth.compute_totp(secret)
self.assertEqual(type(signature), str)
self.assertTrue(pat.match(signature) is not None)
def test_compute_totp_offset(self):
pat = re.compile(r"\d\d\d\d\d\d")
secret = "MFRGGZDFMZTWQ2LK"
for offset in range(-10, 10):
signature = auth.compute_totp(secret, offset)
self.assertEqual(type(signature), str)
self.assertTrue(pat.match(signature) is not None)
def test_derive_key(self):
secret = 'L3L1YUE8Txlw'
salt = 'salt123'
key = auth.derive_key(secret.encode('utf8'), salt.encode('utf8'))
self.assertEqual(type(key), bytes)
self.assertEqual(key, b"[AWS-SECRET-REMOVED]J5Y=")
def test_generate_wcs_default(self):
secret = auth.generate_wcs()
self.assertEqual(type(secret), bytes)
self.assertEqual(len(secret), 14)
def test_generate_wcs_length(self):
for length in [5, 10, 20, 30, 40, 50]:
secret = auth.generate_wcs(length)
self.assertEqual(type(secret), bytes)
self.assertEqual(len(secret), length)
def test_compute_wcs(self):
secret = 'L3L1YUE8Txlw'
challenge = json.dumps([1, 2, 3], ensure_ascii=False).encode('utf8')
signature = auth.compute_wcs(secret.encode('utf8'), challenge)
self.assertEqual(type(signature), bytes)
self.assertEqual(signature, b"[AWS-SECRET-REMOVED]zR0=")
@unittest.skipIf(not auth.HAS_ARGON, 'no Argon2 library')
class TestScram(unittest.TestCase):
def test_argon2id_static(self):
# re-generate from the official argon2 tools:
# echo -n "p4ssw0rd" | argon2 '1234567890abcdef' -id -t 32 -m 9 -p 1 -l 32
expected = binascii.unhexlify('[AWS-SECRET-REMOVED]ba49fae85eb6700e8b0ed293')
raw_hash = auth._hash_argon2id13_secret(
b'p4ssw0rd',
binascii.b2a_base64(b'1234567890abcdef'), # ours takes base64-encoded salt
32, # this is WAY TOO SMALL; for production, use 4096 or higher
512, # note that the argon2 utility takes a "power of 2", so "-m 9" above == 512
)
decoded_hash = binascii.a2b_base64(raw_hash + b'==\n')
self.assertEqual(expected, decoded_hash)
def test_pbkdf2_static(self):
expected = binascii.unhexlify('[AWS-SECRET-REMOVED]ddc1d61cee5883af547d15f5')
# 8 iterations is WAY TOO FEW for production; this is a test
raw_hash = auth._hash_pbkdf2_secret(b'p4ssw0rd', b'1234567890abcdef', 8)
self.assertEqual(raw_hash, expected)
def test_basic(self):
scram = auth.AuthScram(
nonce='1234567890abcdef',
kdf='argon2id13',
salt=binascii.b2a_hex(b'1234567890abcdef').decode('ascii'),
iterations=32, # far too few; use 4096 or more for production
memory=512,
password='p4ssw0rd',
authid='username',
)
# thought: if we could import crossbar code here, we could
# test the "other side" of this with fewer mocks
# (i.e. hard-coding the client nonce)
scram._client_nonce = binascii.b2a_hex(b'1234567890abcdef').decode('ascii')
self.assertEqual(
{'nonce': '31323334353637383930616263646566'},
scram.authextra,
)
challenge = types.Challenge('scram', {
'nonce': '1234567890abcdeffedcba0987654321',
'kdf': 'argon2id-13',
'salt': binascii.b2a_hex(b'1234567890abcdef').decode('ascii'),
'iterations': 32,
'memory': 512,
})
reply = scram.on_challenge(Mock(), challenge)
self.assertEqual(
b'[AWS-SECRET-REMOVED]y38=',
reply,
)
authextra = dict(
scram_server_signature=b'[AWS-SECRET-REMOVED]y38=',
)
scram.on_welcome(Mock(), authextra)
def test_no_memory_arg(self):
scram = auth.AuthScram(
nonce='1234567890abcdef',
kdf='argon2id13',
salt=binascii.b2a_hex(b'1234567890abcdef').decode('ascii'),
iterations=4096,
memory=512,
password='p4ssw0rd',
authid='username',
)
scram.authextra
with self.assertRaises(ValueError) as ctx:
challenge = types.Challenge('scram', {
'nonce': '1234567890abcdeffedcba0987654321',
'kdf': 'argon2id-13',
'salt': binascii.b2a_hex(b'1234567890abcdef'),
'iterations': 4096,
# no 'memory' key
})
scram.on_challenge(Mock(), challenge)
self.assertIn(
"requires 'memory' parameter",
str(ctx.exception)
)
def test_unknown_arg(self):
scram = auth.AuthScram(
nonce='1234567890abcdef',
kdf='argon2id13',
salt=binascii.b2a_hex(b'1234567890abcdef'),
iterations=4096,
memory=512,
password='p4ssw0rd',
authid='username',
)
scram.authextra
with self.assertRaises(RuntimeError) as ctx:
challenge = types.Challenge('scram', {
'nonce': '1234567890abcdeffedcba0987654321',
'kdf': 'argon2id-13',
'salt': binascii.b2a_hex(b'1234567890abcdef'),
'iterations': 4096,
'memory': 512,
'an_invalid_key': None
})
scram.on_challenge(Mock(), challenge)
self.assertIn("an_invalid_key", str(ctx.exception))

View File

@@ -0,0 +1,219 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import os
if os***REMOVED***iron.get('USE_TWISTED', False):
from autobahn.twisted.util import sleep
from autobahn.twisted import wamp
from twisted.trial import unittest
from twisted.internet import defer
from twisted.application import service
class CaseComponent(wamp.ApplicationSession):
"""
Application code goes here. This is an example component that calls
a remote procedure on a WAMP peer, subscribes to a topic to receive
events, and then stops the world after some events.
"""
def __init__(self, config):
wamp.ApplicationSession.__init__(self, config)
self.test = config.extra['test']
self.stop = False
self._logline = 1
self.finished = False
def log(self, *args):
if len(args) > 1:
sargs = ", ".join(str(s) for s in args)
elif len(args) == 1:
sargs = args[0]
else:
sargs = "-"
msg = '= : {0:>3} : {1:<20} : {2}'.format(self._logline, self.__class__.__name__, sargs)
self._logline += 1
print(msg)
def finish(self):
if not self.finished:
self.test.deferred.callback(None)
self.finished = True
else:
print("already finished")
class Case1_Backend(CaseComponent):
@defer.inlineCallbacks
def onJoin(self, details):
self.log("joined")
def add2(x, y):
self.log("add2 invoked: {0}, {1}".format(x, y))
return x + y
yield self.register(add2, 'com.mathservice.add2')
self.log("add2 registered")
self.finish()
class Case1_Frontend(CaseComponent):
@defer.inlineCallbacks
def onJoin(self, details):
self.log("joined")
try:
res = yield self.call('com.mathservice.add2', 2, 3)
except Exception as e:
self.log("call error: {0}".format(e))
else:
self.log("call result: {0}".format(res))
self.finish()
class Case2_Backend(CaseComponent):
@defer.inlineCallbacks
def onJoin(self, details):
self.log("joined")
def ping():
self.log("ping() is invoked")
return
def add2(a, b):
self.log("add2() is invoked", a, b)
return a + b
def stars(nick="somebody", stars=0):
self.log("stars() is invoked", nick, stars)
return "{0} starred {1}x".format(nick, stars)
def orders(product, limit=5):
self.log("orders() is invoked", product, limit)
return ["Product {0}".format(i) for i in range(50)][:limit]
def arglen(*args, **kwargs):
self.log("arglen() is invoked", args, kwargs)
return [len(args), len(kwargs)]
yield self.register(ping, 'com.arguments.ping')
yield self.register(add2, 'com.arguments.add2')
yield self.register(stars, 'com.arguments.stars')
yield self.register(orders, 'com.arguments.orders')
yield self.register(arglen, 'com.arguments.arglen')
self.log("procedures registered")
class Case2_Frontend(CaseComponent):
@defer.inlineCallbacks
def onJoin(self, details):
self.log("joined")
yield sleep(1)
yield self.call('com.arguments.ping')
self.log("Pinged!")
res = yield self.call('com.arguments.add2', 2, 3)
self.log("Add2: {0}".format(res))
starred = yield self.call('com.arguments.stars')
self.log("Starred 1: {0}".format(starred))
starred = yield self.call('com.arguments.stars', nick='Homer')
self.log("Starred 2: {0}".format(starred))
starred = yield self.call('com.arguments.stars', stars=5)
self.log("Starred 3: {0}".format(starred))
starred = yield self.call('com.arguments.stars', nick='Homer', stars=5)
self.log("Starred 4: {0}".format(starred))
orders = yield self.call('com.arguments.orders', 'coffee')
self.log("Orders 1: {0}".format(orders))
orders = yield self.call('com.arguments.orders', 'coffee', limit=10)
self.log("Orders 2: {0}".format(orders))
arglengths = yield self.call('com.arguments.arglen')
self.log("Arglen 1: {0}".format(arglengths))
arglengths = yield self.call('com.arguments.arglen', 1, 2, 3)
self.log("Arglen 1: {0}".format(arglengths))
arglengths = yield self.call('com.arguments.arglen', a=1, b=2, c=3)
self.log("Arglen 2: {0}".format(arglengths))
arglengths = yield self.call('com.arguments.arglen', 1, 2, 3, a=1, b=2, c=3)
self.log("Arglen 3: {0}".format(arglengths))
self.log("finishing")
self.finish()
class TestRpc(unittest.TestCase):
if os***REMOVED***iron.get("WAMP_ROUTER_URL") is None:
skip = ("Please provide WAMP_ROUTER_URL environment with url to "
"WAMP router to run WAMP integration tests")
def setUp(self):
self.url = os***REMOVED***iron.get("WAMP_ROUTER_URL")
self.realm = "realm1"
@defer.inlineCallbacks
def runOneTest(self, components):
self.deferred = defer.Deferred()
app = service.MultiService()
for component in components:
c = wamp.Service(
url=self.url,
extra=dict(test=self),
realm=self.realm,
make=component,
)
c.setServiceParent(app)
app.startService()
yield self.deferred
app.stopService()
@defer.inlineCallbacks
def test_case1(self):
yield self.runOneTest([Case1_Backend, Case1_Frontend])
@defer.inlineCallbacks
def test_case2(self):
yield self.runOneTest([Case2_Backend, Case2_Frontend])

View File

@@ -0,0 +1,154 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import os
import sys
import unittest.mock as mock
import pytest
import txaio
if os***REMOVED***iron.get('USE_ASYNCIO', False):
from autobahn.asyncio.component import Component
@pytest.mark.skipif(sys.version_info < (3, 5), reason="requires Python 3.5+")
@pytest.mark.asyncio(forbid_global_loop=True)
async def test_asyncio_component(event_loop):
orig_loop = txaio.config.loop
txaio.config.loop = event_loop
comp = Component(
transports=[
{
"url": "ws://localhost:12/bogus",
"max_retries": 1,
"max_retry_delay": 0.1,
}
]
)
# if having trouble, try starting some logging (and use
# "py.test -s" to get real-time output)
# txaio.start_logging(level="debug")
f = comp.start(loop=event_loop)
txaio.config.loop = event_loop
finished = txaio.create_future()
def fail():
finished.set_exception(AssertionError("timed out"))
txaio.config.loop = orig_loop
txaio.call_later(4.0, fail)
def done(f):
try:
f.result()
finished.set_exception(AssertionError("should get an error"))
except RuntimeError as e:
if 'Exhausted all transport connect attempts' not in str(e):
finished.set_exception(AssertionError("wrong exception caught"))
finished.set_result(None)
txaio.config.loop = orig_loop
assert comp._done_f is None
f.add_done_callback(done)
await finished
@pytest.mark.skipif(sys.version_info < (3, 5), reason="requires Python 3.5+")
@pytest.mark.asyncio(forbid_global_loop=True)
async def test_asyncio_component_404(event_loop):
"""
If something connects but then gets aborted, it should still try
to re-connect (in real cases this could be e.g. wrong path,
TLS failure, WebSocket handshake failure, etc)
"""
orig_loop = txaio.config.loop
txaio.config.loop = event_loop
class FakeTransport(object):
def close(self):
pass
def write(self, data):
pass
fake_transport = FakeTransport()
actual_protocol = [None] # set in a closure below
def create_connection(protocol_factory=None, server_hostname=None, host=None, port=None, ssl=False):
if actual_protocol[0] is None:
protocol = protocol_factory()
actual_protocol[0] = protocol
protocol.connection_made(fake_transport)
return txaio.create_future_success((fake_transport, protocol))
else:
return txaio.create_future_error(RuntimeError("second connection fails completely"))
with mock.patch.object(event_loop, 'create_connection', create_connection):
event_loop.create_connection = create_connection
comp = Component(
transports=[
{
"url": "ws://localhost:12/bogus",
"max_retries": 1,
"max_retry_delay": 0.1,
}
]
)
# if having trouble, try starting some logging (and use
# "py.test -s" to get real-time output)
# txaio.start_logging(level="debug")
f = comp.start(loop=event_loop)
txaio.config.loop = event_loop
# now that we've started connecting, we *should* be able
# to connetion_lost our transport .. but we do a
# call-later to ensure we're after the setup stuff in the
# event-loop (because asyncio doesn't synchronously
# process already-completed Futures like Twisted does)
def nuke_transport():
if actual_protocol[0] is not None:
actual_protocol[0].connection_lost(None) # asyncio can call this with None
txaio.call_later(0.1, nuke_transport)
finished = txaio.create_future()
def fail():
finished.set_exception(AssertionError("timed out"))
txaio.config.loop = orig_loop
txaio.call_later(1.0, fail)
def done(f):
try:
f.result()
finished.set_exception(AssertionError("should get an error"))
except RuntimeError as e:
if 'Exhausted all transport connect attempts' not in str(e):
finished.set_exception(AssertionError("wrong exception caught"))
finished.set_result(None)
txaio.config.loop = orig_loop
f.add_done_callback(done)
await finished

View File

@@ -0,0 +1,37 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
from autobahn.wamp import cryptobox
import unittest
@unittest.skipIf(not cryptobox.HAS_CRYPTOBOX, 'no cryptobox support present')
class TestCryptoBox(unittest.TestCase):
def test_create_keyring(self):
kr = cryptobox.KeyRing()
assert kr

View File

@@ -0,0 +1,295 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import os
import hashlib
import binascii
import unittest
from unittest.mock import Mock
import txaio
if os***REMOVED***iron.get('USE_TWISTED', None):
txaio.use_twisted()
elif os***REMOVED***iron.get('USE_ASYNCIO', None):
txaio.use_asyncio()
else:
raise RuntimeError('need either USE_TWISTED=1 or USE_ASYNCIO=1')
from autobahn.wamp import types
from autobahn.wamp.auth import create_authenticator
from autobahn.wamp.cryptosign import _makepad, HAS_CRYPTOSIGN, CryptosignAuthextra
if HAS_CRYPTOSIGN:
from autobahn.wamp.cryptosign import CryptosignKey
from nacl.encoding import HexEncoder
import tempfile
keybody = '''[OPENSSH-PRIVATE-KEY-REMOVED]
[AWS-SECRET-REMOVED]ZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
[AWS-SECRET-REMOVED]yML/u2b2B1uW4RbQAAAJj4FLyB+BS8
[AWS-SECRET-REMOVED]/72QAJbyOwZvkUyML/u2b2B1uW4RbQ
[AWS-SECRET-REMOVED]Mt4oBFEBrfyL/h01YW5k3/vZAAlvI7
[AWS-SECRET-REMOVED]bmt0aGF0LmNvbQ==
-----END OPENSSH PRIVATE KEY-----'''
pubkey = '''ssh-ed25519 [AWS-SECRET-REMOVED]zd8mFcf0YSXcmyKS3qMLB7VqTQKm someuser@example.com
'''
# valid test vectors for WAMP-cryptosign signature testing
test_vectors_1 = [
# _WITHOUT_ channel_id
{
'channel_id': None,
'private_key': '[AWS-SECRET-REMOVED]729eb753dc7c732de2804510',
'challenge': '[AWS-SECRET-REMOVED]ffffffffffffffffffffffff',
'signature': '[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]ffffffffffffffffffffffffffffffff'
},
{
'channel_id': None,
'private_key': '[AWS-SECRET-REMOVED]cc7c5cf404e46cc0a8a2f5cd',
'challenge': '[AWS-SECRET-REMOVED]62fae8473c7bdbd05bfb607d',
'signature': '[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]ff8fbe0a62fae8473c7bdbd05bfb607d'
},
{
'channel_id': None,
'private_key': '[AWS-SECRET-REMOVED]45196ba2475990d8a0c3a25b',
'challenge': '[AWS-SECRET-REMOVED]95b9ab09285a2f1192d562d2',
'signature': '[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]07d66e1895b9ab09285a2f1192d562d2'
},
# _WITH_ channel_id
{
'channel_id': '[AWS-SECRET-REMOVED]67e859cc0caa8b539027f2ff',
'private_key': '[AWS-SECRET-REMOVED]729eb753dc7c732de2804510',
'challenge': '[AWS-SECRET-REMOVED]ffffffffffffffffffffffff',
'signature': '[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]3bca8dd59817a633f35574ac6fd80d00'
},
{
'channel_id': '[AWS-SECRET-REMOVED]67e859cc0caa8b539027f2ff',
'private_key': '[AWS-SECRET-REMOVED]cc7c5cf404e46cc0a8a2f5cd',
'challenge': '[AWS-SECRET-REMOVED]62fae8473c7bdbd05bfb607d',
'signature': '[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]3bbacc200512b18b30d15083cbdc9282'
},
{
'channel_id': '[AWS-SECRET-REMOVED]67e859cc0caa8b539027f2ff',
'private_key': '[AWS-SECRET-REMOVED]45196ba2475990d8a0c3a25b',
'challenge': '[AWS-SECRET-REMOVED]95b9ab09285a2f1192d562d2',
'signature': '[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]c3e31c32f251f2c524f0a44202f2902d'
},
]
class TestSigVectors(unittest.TestCase):
def test_vectors(self):
session = Mock()
for testvec in test_vectors_1:
# setup fake transport details including fake channel_id
if testvec['channel_id']:
channel_id = binascii.a2b_hex(testvec['channel_id'])
channel_id_type = 'tls-unique'
session._transport.transport_details = types.TransportDetails(channel_id={'tls-unique': channel_id})
else:
channel_id = None
channel_id_type = None
session._transport.transport_details = types.TransportDetails(channel_id=None)
# private signing key (the seed for it)
private_key = CryptosignKey.from_bytes(binascii.a2b_hex(testvec['private_key']))
# the fake challenge we've received
challenge = types.Challenge("cryptosign", dict(challenge=testvec['challenge']))
# ok, now sign the challenge
f_signed = private_key.sign_challenge(challenge,
channel_id=channel_id,
channel_id_type=channel_id_type)
def success(signed):
# the signature returned is a Hex encoded string
self.assertTrue(type(signed) == str)
# we return the concatenation of the signature and the message signed (96 bytes)
self.assertEqual(
192,
len(signed),
)
# must match the expected value in our test vector
self.assertEqual(
testvec['signature'],
signed,
)
def failed(err):
self.fail(str(err))
txaio.add_callbacks(f_signed, success, failed)
class TestAuth(unittest.TestCase):
def setUp(self):
self.key = CryptosignKey.from_ssh_bytes(keybody)
self.privkey_hex = self.key._key.encode(encoder=HexEncoder)
# all tests here fake the use of channel_id_type='tls-unique' with the following channel_id
m = hashlib.sha256()
m.update("some TLS message".encode())
# [AWS-SECRET-REMOVED]67e859cc0caa8b539027f2ff
channel_id = m.digest()
self.transport_details = types.TransportDetails(channel_id={'tls-unique': channel_id})
def test_public_key(self):
self.assertEqual(self.key.public_key(binary=False), '[AWS-SECRET-REMOVED]4c8c2ffbb66f6075b96e116d')
def test_valid(self):
session = Mock()
session._transport.transport_details = self.transport_details
challenge = types.Challenge("cryptosign", dict(challenge="ff" * 32))
f_signed = self.key.sign_challenge(challenge,
channel_id=self.transport_details.channel_id['tls-unique'],
channel_id_type='tls-unique')
def success(signed):
self.assertEqual(
192,
len(signed),
)
self.assertEqual(
'[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]3bca8dd59817a633f35574ac6fd80d00',
signed,
)
def failed(err):
self.fail(str(err))
txaio.add_callbacks(f_signed, success, failed)
def test_authenticator(self):
authenticator = create_authenticator(
"cryptosign",
authid="someone",
authextra={'channel_binding': 'tls-unique'},
privkey=self.privkey_hex,
)
session = Mock()
session._transport.transport_details = self.transport_details
challenge = types.Challenge("cryptosign", dict(challenge="ff" * 32))
f_reply = authenticator.on_challenge(session, challenge)
def success(reply):
self.assertEqual(
reply,
'[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]3bca8dd59817a633f35574ac6fd80d00',
)
def failed(err):
self.fail(str(err))
txaio.add_callbacks(f_reply, success, failed)
class TestKey(unittest.TestCase):
def test_pad(self):
self.assertEqual(_makepad(0), b'')
self.assertEqual(_makepad(2), b'\x01\x02')
self.assertEqual(_makepad(3), b'\x01\x02\x03')
self.assertEqual(_makepad(30), b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e')
self.assertEqual(binascii.b2a_hex(_makepad(30)).decode(), '[AWS-SECRET-REMOVED]15161718191a1b1c1d1e')
def test_key(self):
with tempfile.NamedTemporaryFile('w+t') as fp:
fp.write(keybody)
fp.seek(0)
key = CryptosignKey.from_ssh_file(fp.name)
self.assertEqual(key.public_key(), '[AWS-SECRET-REMOVED]4c8c2ffbb66f6075b96e116d')
def test_pubkey(self):
with tempfile.NamedTemporaryFile('w+t') as fp:
fp.write(pubkey)
fp.seek(0)
key = CryptosignKey.from_ssh_file(fp.name)
self.assertEqual(key.public_key(binary=False), '[AWS-SECRET-REMOVED]9b2292dea30b07b56a4d02a6')
self.assertEqual(key.comment, 'someuser@example.com')
class TestAuthExtra(unittest.TestCase):
def test_default_ctor(self):
ae = CryptosignAuthextra()
self.assertEqual(ae.marshal(), {})
def test_ctor(self):
ae1 = CryptosignAuthextra(pubkey=b'\xff' * 32)
self.assertEqual(ae1.marshal(), {
'pubkey': 'ff' * 32
})
ae1 = CryptosignAuthextra(pubkey=b'\xff' * 32, bandwidth=200)
self.assertEqual(ae1.marshal(), {
'pubkey': 'ff' * 32,
'reservation': {
'bandwidth': 200
}
})
def test_parse(self):
data_original = {
'pubkey': '[AWS-SECRET-REMOVED]86d7b5db56c306e9bdb2fe7e',
'challenge': '[AWS-SECRET-REMOVED]7dff181bb61b2f91a0f4ac88',
'channel_binding': 'tls-unique',
'channel_id': '[AWS-SECRET-REMOVED]febfbc941571d4b2960540bc',
'trustroot': '[AWS-SECRET-REMOVED]d8',
'reservation': {
'chain_id': 999,
'block_no': 123456789,
'realm': '[AWS-SECRET-REMOVED]C4',
'delegate': '[AWS-SECRET-REMOVED]15',
'seeder': '[AWS-SECRET-REMOVED]Ff',
'bandwidth': 200
},
'signature': '[AWS-SECRET-REMOVED][AWS-SECRET-REMOVED][AWS-SECRET-REMOVED]fbb0f6452e',
}
ae1 = CryptosignAuthextra.parse(data_original)
data_marshalled = ae1.marshal()
# FIXME: marshal check-summed eth addresses
data_original['trustroot'] = data_original['trustroot'].lower()
for k in ['realm', 'delegate', 'seeder']:
data_original['reservation'][k] = data_original['reservation'][k].lower()
self.assertEqual(data_marshalled, data_original)

View File

@@ -0,0 +1,50 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
from unittest import TestCase
from autobahn.wamp.exception import ApplicationError
class ApplicationErrorTestCase(TestCase):
def test_unicode_str(self):
"""
Unicode arguments in ApplicationError will not raise an exception when
str()'d.
"""
error = ApplicationError("some.url", "\u2603")
self.assertIn("\u2603", str(error))
def test_unicode_errormessage(self):
"""
Unicode arguments in ApplicationError will not raise an exception when
the error_message method is called.
"""
error = ApplicationError("some.url", "\u2603")
# on py27-tw189: exceptions.UnicodeEncodeError: 'ascii' codec can't encode character '\u2603' in position 10: ordinal not in
print(error.error_message())
self.assertIn("\u2603", error.error_message())

View File

@@ -0,0 +1,98 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
from autobahn.wamp.message import check_or_raise_realm_name, identify_realm_name_category
from autobahn.wamp.exception import InvalidUriError
import unittest
class TestWampIdentifiers(unittest.TestCase):
def test_valid_realm_names(self):
for name in [
'realm1',
'com.example.myapp1',
'myapp1.example.com',
'eth.wamp-proto',
'wamp-proto.eth',
'eth.wamp-proto.myapp1',
'myapp1.wamp-proto.eth',
'aaa',
'Abc',
'a00',
'A00',
'[AWS-SECRET-REMOVED]00',
'[AWS-SECRET-REMOVED]9c',
]:
self.assertEqual(name, check_or_raise_realm_name(name))
def test_invalid_realm_names(self):
for name in [
None,
23,
{},
'',
'.realm1',
'123realm',
'0x' + '00' * 64,
'0x' + '00' * 32,
'0x' + 'zz' * 40,
'rlm$test',
'a' * 256,
]:
self.assertRaises(InvalidUriError, check_or_raise_realm_name, name)
def test_realm_name_categories(self):
for name, category in [
# valid
('realm1', 'standalone'),
('com.example.myapp1', 'standalone'),
('myapp1.example.com', 'standalone'),
('eth.wamp-proto', 'reverse_ens'),
('wamp-proto.eth', 'ens'),
('eth.wamp-proto.myapp1', 'reverse_ens'),
('myapp1.wamp-proto.eth', 'ens'),
('aaa', 'standalone'),
('Abc', 'standalone'),
('a00', 'standalone'),
('A00', 'standalone'),
('[AWS-SECRET-REMOVED]00', 'eth'),
('[AWS-SECRET-REMOVED]9c', 'eth'),
# invalid
(None, None),
(23, None),
({}, None),
('', None),
('.realm1', None),
('123realm', None),
('0x' + '00' * 64, None),
('0x' + '00' * 32, None),
('0x' + 'zz' * 40, None),
('rlm$test', None),
('a' * 256, None),
]:
self.assertEqual(category, identify_realm_name_category(name))

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,104 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
# we need to select a txaio subsystem because we're importing the base
# protocol classes here for testing purposes. "normally" yo'd import
# from autobahn.twisted.wamp or autobahn.asyncio.wamp explicitly.
from autobahn import wamp
from autobahn.wamp import message
from autobahn.wamp import exception
from autobahn.wamp import protocol
import unittest
class TestPeerExceptions(unittest.TestCase):
def test_exception_from_message(self):
session = protocol.BaseSession()
@wamp.error("com.myapp.error1")
class AppError1(Exception):
pass
@wamp.error("com.myapp.error2")
class AppError2(Exception):
pass
session.define(AppError1)
session.define(AppError2)
# map defined errors to user exceptions
emsg = message.Error(message.Call.MESSAGE_TYPE, 123456, 'com.myapp.error1')
exc = session._exception_from_message(emsg)
self.assertIsInstance(exc, AppError1)
self.assertEqual(exc.args, ())
emsg = message.Error(message.Call.MESSAGE_TYPE, 123456, 'com.myapp.error2')
exc = session._exception_from_message(emsg)
self.assertIsInstance(exc, AppError2)
self.assertEqual(exc.args, ())
# map undefined error to (generic) exception
emsg = message.Error(message.Call.MESSAGE_TYPE, 123456, 'com.myapp.error3')
exc = session._exception_from_message(emsg)
self.assertIsInstance(exc, exception.ApplicationError)
self.assertEqual(exc.error, 'com.myapp.error3')
self.assertEqual(exc.args, ())
self.assertEqual(exc.kwargs, {})
emsg = message.Error(message.Call.MESSAGE_TYPE, 123456, 'com.myapp.error3', args=[1, 2, 'hello'])
exc = session._exception_from_message(emsg)
self.assertIsInstance(exc, exception.ApplicationError)
self.assertEqual(exc.error, 'com.myapp.error3')
self.assertEqual(exc.args, (1, 2, 'hello'))
self.assertEqual(exc.kwargs, {})
emsg = message.Error(message.Call.MESSAGE_TYPE, 123456, 'com.myapp.error3', args=[1, 2, 'hello'], kwargs={'foo': 23, 'bar': 'baz'})
exc = session._exception_from_message(emsg)
self.assertIsInstance(exc, exception.ApplicationError)
self.assertEqual(exc.error, 'com.myapp.error3')
self.assertEqual(exc.args, (1, 2, 'hello'))
self.assertEqual(exc.kwargs, {'foo': 23, 'bar': 'baz'})
def test_message_from_exception(self):
session = protocol.BaseSession()
@wamp.error("com.myapp.error1")
class AppError1(Exception):
pass
@wamp.error("com.myapp.error2")
class AppError2(Exception):
pass
session.define(AppError1)
session.define(AppError2)
exc = AppError1()
msg = session._message_from_exception(message.Call.MESSAGE_TYPE, 123456, exc)
self.assertEqual(msg.marshal(), [message.Error.MESSAGE_TYPE, message.Call.MESSAGE_TYPE, 123456, {}, "com.myapp.error1"])

View File

@@ -0,0 +1,72 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import unittest
from binascii import a2b_hex
from autobahn.wamp.auth import derive_scram_credential
TEST_VECTORS = [
{
'email': 'foobar@example.com',
'password': 'secret123',
'salt': None,
'expected': {
'iterations': 4096,
'kdf': 'argon2id-13',
'memory': 512,
'salt': '3bc3ca01dd1d501ca1c22e1c5d7d16fe',
'server-key': '[AWS-SECRET-REMOVED]80fe5180e2f731e2345acca2',
'stored-key': '[AWS-SECRET-REMOVED]003154aff2a54ec7c4ac0e38'
}
},
{
'email': 'foobar@example.com',
'password': 'secret123',
'salt': a2b_hex('ae1f0d2f422757809077785e660b62c6'),
'expected': {
'iterations': 4096,
'kdf': 'argon2id-13',
'memory': 512,
'salt': 'ae1f0d2f422757809077785e660b62c6',
'server-key': '[AWS-SECRET-REMOVED]c45dc379b5ee241338a5861d',
'stored-key': '[AWS-SECRET-REMOVED]a84682259fd3894be09febb5'
}
},
]
class TestKey(unittest.TestCase):
def test_derive_scram_credential(self):
for tv in TEST_VECTORS:
email = tv['email']
password = tv['password']
salt = tv['salt']
expected = tv['expected']
credential = derive_scram_credential(email, password, salt)
self.assertEqual(credential, expected)

View File

@@ -0,0 +1,546 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
import os
import unittest
import random
import decimal
from decimal import Decimal
from autobahn.wamp import message
from autobahn.wamp import role
from autobahn.wamp import serializer
def generate_test_messages():
"""
List of WAMP test message used for serializers. Expand this if you add more
options or messages.
This list of WAMP message does not contain any binary app payloads!
"""
some_bytes = os.urandom(32)
some_unicode = '\u3053\u3093\u306b\u3061\u306f\u4e16\u754c'
some_uri = 'com.myapp.foobar'
some_unicode_uri = 'com.myapp.\u4f60\u597d\u4e16\u754c.baz'
some_args = [1, 2, 3, 'hello', some_bytes, some_unicode, {'foo': 23, 'bar': 'hello', 'baz': some_bytes, 'moo': some_unicode}]
some_kwargs = {'foo': 23, 'bar': 'hello', 'baz': some_bytes, 'moo': some_unicode, 'arr': some_args}
msgs = [
message.Hello("realm1", {'subscriber': role.RoleSubscriberFeatures()}),
message.Hello("realm1", {'publisher': role.RolePublisherFeatures()}),
message.Hello("realm1", {'caller': role.RoleCallerFeatures()}),
message.Hello("realm1", {'callee': role.RoleCalleeFeatures()}),
message.Hello("realm1", {
'subscriber': role.RoleSubscriberFeatures(),
'publisher': role.RolePublisherFeatures(),
'caller': role.RoleCallerFeatures(),
'callee': role.RoleCalleeFeatures(),
}),
message.Goodbye(),
message.Yield(123456),
message.Yield(123456, args=some_args),
message.Yield(123456, args=[], kwargs=some_kwargs),
message.Yield(123456, args=some_args, kwargs=some_kwargs),
message.Yield(123456, progress=True),
message.Interrupt(123456),
message.Interrupt(123456, mode=message.Interrupt.KILL),
message.Invocation(123456, 789123),
message.Invocation(123456, 789123, args=some_args),
message.Invocation(123456, 789123, args=[], kwargs=some_kwargs),
message.Invocation(123456, 789123, args=some_args, kwargs=some_kwargs),
message.Invocation(123456, 789123, timeout=10000),
message.Result(123456),
message.Result(123456, args=some_args),
message.Result(123456, args=[], kwargs=some_kwargs),
message.Result(123456, args=some_args, kwargs=some_kwargs),
message.Result(123456, progress=True),
message.Cancel(123456),
message.Cancel(123456, mode=message.Cancel.KILL),
message.Call(123456, some_uri),
message.Call(123456, some_uri, args=some_args),
message.Call(123456, some_uri, args=[], kwargs=some_kwargs),
message.Call(123456, some_uri, args=some_args, kwargs=some_kwargs),
message.Call(123456, some_uri, timeout=10000),
message.Call(123456, some_unicode_uri),
message.Call(123456, some_unicode_uri, args=some_args),
message.Call(123456, some_unicode_uri, args=[], kwargs=some_kwargs),
message.Call(123456, some_unicode_uri, args=some_args, kwargs=some_kwargs),
message.Call(123456, some_unicode_uri, timeout=10000),
message.Unregistered(123456),
message.Unregister(123456, 789123),
message.Registered(123456, 789123),
message.Register(123456, some_uri),
message.Register(123456, some_uri, match='prefix'),
message.Register(123456, some_uri, invoke='roundrobin'),
message.Register(123456, some_unicode_uri),
message.Register(123456, some_unicode_uri, match='prefix'),
message.Register(123456, some_unicode_uri, invoke='roundrobin'),
message.Event(123456, 789123),
message.Event(123456, 789123, args=some_args),
message.Event(123456, 789123, args=[], kwargs=some_kwargs),
message.Event(123456, 789123, args=some_args, kwargs=some_kwargs),
message.Event(123456, 789123, publisher=300),
message.Published(123456, 789123),
message.Publish(123456, some_uri),
message.Publish(123456, some_uri, args=some_args),
message.Publish(123456, some_uri, args=[], kwargs=some_kwargs),
message.Publish(123456, some_uri, args=some_args, kwargs=some_kwargs),
message.Publish(123456, some_uri, exclude_me=False, exclude=[300], eligible=[100, 200, 300]),
message.Publish(123456, some_unicode_uri),
message.Publish(123456, some_unicode_uri, args=some_args),
message.Publish(123456, some_unicode_uri, args=[], kwargs=some_kwargs),
message.Publish(123456, some_unicode_uri, args=some_args, kwargs=some_kwargs),
message.Publish(123456, some_unicode_uri, exclude_me=False, exclude=[300], eligible=[100, 200, 300]),
message.Unsubscribed(123456),
message.Unsubscribe(123456, 789123),
message.Subscribed(123456, 789123),
message.Subscribe(123456, some_uri),
message.Subscribe(123456, some_uri, match=message.Subscribe.MATCH_PREFIX),
message.Subscribe(123456, some_unicode_uri),
message.Subscribe(123456, some_unicode_uri, match=message.Subscribe.MATCH_PREFIX),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri, args=some_args),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri, args=[], kwargs=some_kwargs),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_uri, args=some_args, kwargs=some_kwargs),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri, args=some_args),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri, args=[], kwargs=some_kwargs),
message.Error(message.Call.MESSAGE_TYPE, 123456, some_unicode_uri, args=some_args, kwargs=some_kwargs),
message.Result(123456),
message.Result(123456, args=some_args),
message.Result(123456, args=some_args, kwargs=some_kwargs),
]
return [(False, msg) for msg in msgs]
def generate_test_messages_binary():
"""
Generate WAMP test messages which contain binary app payloads.
With the JSON serializer, this currently only works on Python 3 (both CPython3 and PyPy3),
because even on Python 3, we need to patch the stdlib JSON, and on Python 2, the patching
would be even hackier.
"""
msgs = []
for binary in [b'',
b'\x00',
b'\30',
os.urandom(4),
os.urandom(16),
os.urandom(128),
os.urandom(256),
os.urandom(512),
os.urandom(1024)]:
msgs.append(message.Event(123456, 789123, args=[binary]))
msgs.append(message.Event(123456, 789123, args=[binary], kwargs={'foo': binary}))
return [(True, msg) for msg in msgs]
def create_serializers(decimal_support=False):
_serializers = []
_serializers.append(serializer.JsonSerializer(use_decimal_from_str=decimal_support))
_serializers.append(serializer.JsonSerializer(batched=True, use_decimal_from_str=decimal_support))
_serializers.append(serializer.CBORSerializer())
_serializers.append(serializer.CBORSerializer(batched=True))
if not decimal_support:
# builtins.OverflowError: Integer value out of range
_serializers.append(serializer.MsgPackSerializer())
_serializers.append(serializer.MsgPackSerializer(batched=True))
# roundtrip error
_serializers.append(serializer.UBJSONSerializer())
_serializers.append(serializer.UBJSONSerializer(batched=True))
# FIXME: implement full FlatBuffers serializer for WAMP
# WAMP-FlatBuffers currently only supports Python 3
# _serializers.append(serializer.FlatBuffersSerializer())
# _serializers.append(serializer.FlatBuffersSerializer(batched=True))
return _serializers
class TestFlatBuffersSerializer(unittest.TestCase):
def test_basic(self):
messages = [
message.Event(123456,
789123,
args=[1, 2, 3],
kwargs={'foo': 23, 'bar': 'hello'},
publisher=666,
retained=True),
message.Publish(123456,
'com.example.topic1',
args=[1, 2, 3],
kwargs={'foo': 23, 'bar': 'hello'},
retain=True)
]
ser = serializer.FlatBuffersSerializer()
# from pprint import pprint
for msg in messages:
# serialize message
payload, binary = ser.serialize(msg)
# unserialize message again
msg2 = ser.unserialize(payload, binary)[0]
# pprint(msg.marshal())
# pprint(msg2.marshal())
# must be equal: message roundtrips via the serializer
self.assertEqual(msg, msg2)
# self.assertEqual(msg.subscription, msg2.subscription)
# self.assertEqual(msg.publication, msg2.publication)
class TestDecimalSerializer(unittest.TestCase):
"""
binary fixed-point
binary floating-point: float (float32), double (float64)
decimal floating-point: decimal128, decimal256
decimal fixed-point: NUMERIC(precision, scale)
decimal arbitrary precision: NUMERIC, decimal.Decimal
https://developer.nvidia.com/blog/implementing-high-precision-decimal-arithmetic-with-cuda-int128/
https://github.com/johnmcfarlane/cnl
"""
def setUp(self) -> None:
self._test_serializers = create_serializers(decimal_support=True)
# enough for decimal256 precision arithmetic (76 significand decimal digits)
decimal.getcontext().prec = 76
self._test_messages_no_dec = [
(True,
{
'a': random.random(),
'b': random.randint(0, 2 ** 53),
'c': random.randint(0, 2 ** 64),
'd': random.randint(0, 2 ** 128),
'e': random.randint(0, 2 ** 256),
# float64: 52 binary digits, precision of 15-17 significant decimal digits
'f': 0.12345678901234567,
'g': 0.8765432109876545,
'y': os.urandom(8),
'z': [
-1,
0,
1,
True,
None,
0.12345678901234567,
0.8765432109876545,
os.urandom(8)
]
})
]
self._test_messages_dec = [
(True,
{
'a': random.random(),
'b': random.randint(0, 2 ** 53),
'c': random.randint(0, 2 ** 64),
'd': random.randint(0, 2 ** 128),
'e': random.randint(0, 2 ** 256),
# float64: 52 binary digits, precision of 15-17 significant decimal digits
'f': 0.12345678901234567,
'g': 0.8765432109876545,
# decimal128: precision of 38 significant decimal digits
'h': Decimal('0.1234567890123456789012345678901234567'),
'i': Decimal('0.8765432109876543210987654321098765434'),
# decimal256: precision of 76 significant decimal digits
'j': Decimal('0.[AWS-SECRET-REMOVED]34567890123456789012345678901234567'),
'k': Decimal('0.[AWS-SECRET-REMOVED]65432109876543210987654321098765434'),
'y': os.urandom(8),
'z': [
-1,
0,
1,
True,
None,
0.12345678901234567,
0.8765432109876545,
Decimal('0.1234567890123456789012345678901234567'),
Decimal('0.8765432109876543210987654321098765434'),
Decimal('0.[AWS-SECRET-REMOVED]34567890123456789012345678901234567'),
Decimal('0.[AWS-SECRET-REMOVED]65432109876543210987654321098765434'),
os.urandom(8)
]
})
]
def test_json_no_decimal(self):
"""
Test without ``use_decimal_from_str`` feature of JSON object serializer.
"""
ser = serializer.JsonObjectSerializer(use_decimal_from_str=False)
for contains_binary, obj in self._test_messages_no_dec:
_obj = ser.unserialize(ser.serialize(obj))[0]
self.assertEqual(obj, _obj)
self.assertEqual(1.0000000000000002, _obj['f'] + _obj['g'])
def test_json_decimal(self):
"""
Test ``use_decimal_from_str`` feature of JSON object serializer.
"""
ser = serializer.JsonObjectSerializer(use_decimal_from_str=True)
for contains_binary, obj in self._test_messages_dec:
_obj = ser.unserialize(ser.serialize(obj))[0]
self.assertEqual(obj, _obj)
self.assertEqual(1.0000000000000002, _obj['f'] + _obj['g'])
self.assertEqual(Decimal('1.0000000000000000000000000000000000001'), _obj['h'] + _obj['i'])
self.assertEqual(Decimal('1.[AWS-SECRET-REMOVED]00000000000000000000000000000000001'), _obj['j'] + _obj['k'])
def test_roundtrip_msg(self):
for wamp_ser in self._test_serializers:
ser = wamp_ser._serializer
for contains_binary, msg in self._test_messages_no_dec + self._test_messages_dec:
payload = ser.serialize(msg)
msg2 = ser.unserialize(payload)
self.assertEqual(msg, msg2[0])
def test_crosstrip_msg(self):
for wamp_ser1 in self._test_serializers:
ser1 = wamp_ser1._serializer
for contains_binary, msg in self._test_messages_no_dec + self._test_messages_dec:
payload1 = ser1.serialize(msg)
msg1 = ser1.unserialize(payload1)
msg1 = msg1[0]
for wamp_ser2 in self._test_serializers:
ser2 = wamp_ser2._serializer
payload2 = ser2.serialize(msg1)
msg2 = ser2.unserialize(payload2)
msg2 = msg2[0]
self.assertEqual(msg, msg2)
# print(ser1, len(payload1), ser2, len(payload2))
class TestSerializer(unittest.TestCase):
def setUp(self):
self._test_messages = generate_test_messages() + generate_test_messages_binary()
self._test_serializers = create_serializers()
# print('Testing WAMP serializers {} with {} WAMP test messages'.format([ser.SERIALIZER_ID for ser in self._test_serializers], len(self._test_messages)))
def test_deep_equal_msg(self):
"""
Test deep object equality assert (because I am paranoid).
"""
v = os.urandom(10)
o1 = [1, 2, {'foo': 'bar', 'bar': v, 'baz': [9, 3, 2], 'goo': {'moo': [1, 2, 3]}}, v]
o2 = [1, 2, {'goo': {'moo': [1, 2, 3]}, 'bar': v, 'baz': [9, 3, 2], 'foo': 'bar'}, v]
self.assertEqual(o1, o2)
def test_roundtrip_msg(self):
"""
Test round-tripping over each serializer.
"""
for ser in self._test_serializers:
for contains_binary, msg in self._test_messages:
# serialize message
payload, binary = ser.serialize(msg)
# unserialize message again
msg2 = ser.unserialize(payload, binary)
# must be equal: message roundtrips via the serializer
self.assertEqual([msg], msg2)
def test_crosstrip_msg(self):
"""
Test cross-tripping over 2 serializers (as is done by WAMP routers).
"""
for ser1 in self._test_serializers:
for contains_binary, msg in self._test_messages:
# serialize message
payload, binary = ser1.serialize(msg)
# unserialize message again
msg1 = ser1.unserialize(payload, binary)
msg1 = msg1[0]
for ser2 in self._test_serializers:
# serialize message
payload, binary = ser2.serialize(msg1)
# unserialize message again
msg2 = ser2.unserialize(payload, binary)
# must be equal: message crosstrips via
# the serializers ser1 -> ser2
self.assertEqual([msg], msg2)
def test_cache_msg(self):
"""
Test message serialization caching.
"""
for contains_binary, msg in self._test_messages:
# message serialization cache is initially empty
self.assertEqual(msg._serialized, {})
for ser in self._test_serializers:
# verify message serialization is not yet cached
self.assertFalse(ser._serializer in msg._serialized)
payload, binary = ser.serialize(msg)
# now the message serialization must be cached
self.assertTrue(ser._serializer in msg._serialized)
self.assertEqual(msg._serialized[ser._serializer], payload)
# and after resetting the serialization cache, message
# serialization is gone
msg.uncache()
self.assertFalse(ser._serializer in msg._serialized)
def test_initial_stats(self):
"""
Test initial serializer stats are indeed empty.
"""
for ser in self._test_serializers:
stats = ser.stats(details=True)
self.assertEqual(stats['serialized']['bytes'], 0)
self.assertEqual(stats['serialized']['messages'], 0)
self.assertEqual(stats['serialized']['rated_messages'], 0)
self.assertEqual(stats['unserialized']['bytes'], 0)
self.assertEqual(stats['unserialized']['messages'], 0)
self.assertEqual(stats['unserialized']['rated_messages'], 0)
def test_serialize_stats(self):
"""
Test serializer stats are non-empty after serializing/unserializing messages.
"""
for ser in self._test_serializers:
for contains_binary, msg in self._test_messages:
# serialize message
payload, binary = ser.serialize(msg)
# unserialize message again
ser.unserialize(payload, binary)
stats = ser.stats(details=False)
self.assertTrue(stats['bytes'] > 0)
self.assertTrue(stats['messages'] > 0)
self.assertTrue(stats['rated_messages'] > 0)
def test_serialize_stats_with_details(self):
"""
Test serializer stats - with details - are non-empty after serializing/unserializing messages.
"""
for ser in self._test_serializers:
for contains_binary, msg in self._test_messages:
# serialize message
payload, binary = ser.serialize(msg)
# unserialize message again
ser.unserialize(payload, binary)
stats = ser.stats(details=True)
# {'serialized': {'bytes': 7923, 'messages': 59, 'rated_messages': 69}, 'unserialized': {'bytes': 7923, 'messages': 59, 'rated_messages': 69}}
# print(stats)
self.assertTrue(stats['serialized']['bytes'] > 0)
self.assertTrue(stats['serialized']['messages'] > 0)
self.assertTrue(stats['serialized']['rated_messages'] > 0)
self.assertTrue(stats['unserialized']['bytes'] > 0)
self.assertTrue(stats['unserialized']['messages'] > 0)
self.assertTrue(stats['unserialized']['rated_messages'] > 0)
self.assertEqual(stats['serialized']['bytes'], stats['unserialized']['bytes'])
self.assertEqual(stats['serialized']['messages'], stats['unserialized']['messages'])
self.assertEqual(stats['serialized']['rated_messages'], stats['unserialized']['rated_messages'])
def test_reset_stats(self):
"""
Test serializer stats are reset after fetching stats - depending on option.
"""
for ser in self._test_serializers:
for contains_binary, msg in self._test_messages:
# serialize message
payload, binary = ser.serialize(msg)
# unserialize message again
ser.unserialize(payload, binary)
ser.stats()
stats = ser.stats(details=True)
self.assertEqual(stats['serialized']['bytes'], 0)
self.assertEqual(stats['serialized']['messages'], 0)
self.assertEqual(stats['serialized']['rated_messages'], 0)
self.assertEqual(stats['unserialized']['bytes'], 0)
self.assertEqual(stats['unserialized']['messages'], 0)
self.assertEqual(stats['unserialized']['rated_messages'], 0)
def test_auto_stats(self):
"""
Test serializer stats are non-empty after serializing/unserializing messages.
"""
for ser in self._test_serializers:
def on_stats(stats):
self.assertTrue(stats['bytes'] > 0)
self.assertTrue(stats['messages'] > 0)
self.assertTrue(stats['rated_messages'] > 0)
ser.set_stats_autoreset(10, 0, on_stats)
for contains_binary, msg in self._test_messages:
# serialize message
payload, binary = ser.serialize(msg)
# unserialize message again
ser.unserialize(payload, binary)

View File

@@ -0,0 +1,88 @@
###############################################################################
#
# The MIT License (MIT)
#
# Copyright (c) typedef int GmbH
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###############################################################################
from autobahn.wamp.types import TransportDetails, SessionDetails
import unittest
# from .test_wamp_transport_details import TRANSPORT_DETAILS_1
from autobahn.wamp.test.test_wamp_transport_details import TRANSPORT_DETAILS_1
class TestSessionDetails(unittest.TestCase):
def test_empty(self):
sd1 = SessionDetails()
data = sd1.marshal()
self.assertEqual(data, {
'realm': None,
'session': None,
'authid': None,
'authrole': None,
'authmethod': None,
'authprovider': None,
'authextra': None,
'serializer': None,
'transport': None,
'resumed': None,
'resumable': None,
'resume_token': None,
})
sd2 = SessionDetails.parse(data)
self.assertEqual(sd2, sd1)
def test_attributes(self):
sd1 = SessionDetails()
td1 = TransportDetails.parse(TRANSPORT_DETAILS_1)
sd1.realm = 'realm1'
sd1.session = 666
sd1.authid = 'homer'
sd1.authrole = 'user'
sd1.authmethod = 'wampcra'
sd1.authprovider = 'static'
sd1.authextra = {'foo': 'bar', 'baz': [1, 2, 3]}
sd1.serializer = 'json'
sd1.transport = td1
sd1.resumed = False
sd1.resumable = True
sd1.resume_token = '[HEROKU-API-KEY-REMOVED]'
data = sd1.marshal()
self.assertEqual(data, {
'realm': sd1.realm,
'session': sd1.session,
'authid': sd1.authid,
'authrole': sd1.authrole,
'authmethod': sd1.authmethod,
'authprovider': sd1.authprovider,
'authextra': sd1.authextra,
'serializer': sd1.serializer,
'transport': sd1.transport.marshal(),
'resumed': sd1.resumed,
'resumable': sd1.resumable,
'resume_token': sd1.resume_token,
})
sd2 = SessionDetails.parse(data)
self.assertEqual(sd2, sd1)

Some files were not shown because too many files have changed in this diff Show More