├── .coveragerc ├── .editorconfig ├── .github └── workflows │ ├── deploy-docs.yml │ ├── deploy-wheels.yml │ ├── main.yml │ └── test-management.yml ├── .gitignore ├── .pylintrc ├── CONTRIBUTING.md ├── DEVELOPERS.md ├── LICENSE ├── LICENSES-OSS ├── MANIFEST.in ├── Makefile ├── README.rst ├── cloc.def ├── crossbar.ico ├── crossbar.json ├── crossbar ├── LICENSE ├── LICENSES-OSS ├── __init__.py ├── _compat.py ├── _log_categories.py ├── _logging.py ├── _util.py ├── _version.py ├── bridge │ ├── __init__.py │ ├── mqtt │ │ ├── __init__.py │ │ ├── _events.py │ │ ├── _utils.py │ │ ├── protocol.py │ │ ├── test │ │ │ ├── __init__.py │ │ │ ├── certs │ │ │ │ ├── ca.cert.pem │ │ │ │ ├── client.crt │ │ │ │ ├── client.key │ │ │ │ ├── client_1.crt │ │ │ │ ├── client_1.key │ │ │ │ ├── dhparam │ │ │ │ ├── intermediate.cert.pem │ │ │ │ ├── server.crt │ │ │ │ └── server.key │ │ │ ├── interop.py │ │ │ ├── interop_tests.py │ │ │ ├── test_events.py │ │ │ ├── test_protocol.py │ │ │ ├── test_topic.py │ │ │ ├── test_tx.py │ │ │ └── test_wamp.py │ │ ├── tx.py │ │ └── wamp.py │ └── rest │ │ ├── __init__.py │ │ ├── callee.py │ │ ├── caller.py │ │ ├── common.py │ │ ├── publisher.py │ │ ├── subscriber.py │ │ ├── test │ │ ├── __init__.py │ │ ├── _request.py │ │ ├── test_callee.py │ │ ├── test_caller.py │ │ ├── test_common.py │ │ ├── test_publisher.py │ │ ├── test_signature.py │ │ ├── test_subscriber.py │ │ └── test_webhook.py │ │ └── webhook.py ├── common │ ├── __init__.py │ ├── checkconfig.py │ ├── fswatcher.py │ ├── key.py │ ├── keys │ │ ├── crossbar-16-10.pub │ │ ├── crossbar-17-1.pub │ │ ├── crossbar-17-10.pub │ │ ├── crossbar-17-11.pub │ │ ├── crossbar-17-12.pub │ │ ├── crossbar-17-2.pub │ │ ├── crossbar-17-3.pub │ │ ├── crossbar-17-4.pub │ │ ├── crossbar-17-5.pub │ │ ├── crossbar-17-6.pub │ │ ├── crossbar-17-8.pub │ │ ├── crossbar-17-9.pub │ │ ├── crossbar-18-10.pub │ │ ├── crossbar-18-11.pub │ │ ├── crossbar-18-12.pub │ │ ├── crossbar-18-3.pub │ │ ├── crossbar-18-4.pub │ │ ├── crossbar-18-5.pub │ │ ├── crossbar-18-6.pub │ │ ├── crossbar-18-7.pub │ │ ├── crossbar-18-8.pub │ │ ├── crossbar-18-9.pub │ │ ├── crossbar-19-1.pub │ │ ├── crossbar-19-10.pub │ │ ├── crossbar-19-11.pub │ │ ├── crossbar-19-2.pub │ │ ├── crossbar-19-3.pub │ │ ├── crossbar-19-4.pub │ │ ├── crossbar-19-5.pub │ │ ├── crossbar-19-6.pub │ │ ├── crossbar-19-7.pub │ │ ├── crossbar-19-9.pub │ │ ├── crossbar-20-1.pub │ │ ├── crossbar-20-12.pub │ │ ├── crossbar-20-2.pub │ │ ├── crossbar-20-4.pub │ │ ├── crossbar-20-5.pub │ │ ├── crossbar-20-6.pub │ │ ├── crossbar-20-7.pub │ │ ├── crossbar-20-8.pub │ │ ├── crossbar-21-1.pub │ │ ├── crossbar-21-11.pub │ │ ├── crossbar-21-2.pub │ │ ├── crossbar-21-3.pub │ │ ├── crossbar-21-4.pub │ │ ├── crossbar-21-6.pub │ │ ├── crossbar-22-1.pub │ │ ├── crossbar-22-2.pub │ │ ├── crossbar-22-3.pub │ │ ├── crossbar-22-4.pub │ │ ├── crossbar-22-5.pub │ │ ├── crossbar-22-6.pub │ │ ├── crossbar-22-7.pub │ │ └── crossbar-23-1.pub │ ├── monitor.py │ ├── process.py │ ├── processinfo.py │ ├── profiler.py │ ├── reloader.py │ └── twisted │ │ ├── __init__.py │ │ ├── endpoint.py │ │ ├── processutil.py │ │ ├── sharedport.py │ │ ├── test │ │ ├── __init__.py │ │ ├── multipart.py │ │ ├── test_endpoint.py │ │ └── test_resource.py │ │ ├── tlsctx.py │ │ └── web.py ├── edge │ ├── __init__.py │ ├── node │ │ ├── __init__.py │ │ ├── config │ │ │ ├── bare.json │ │ │ ├── default.json │ │ │ └── pairme.json │ │ ├── docker.py │ │ ├── management.py │ │ ├── node.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── dockerinspect.py │ │ │ └── test_docker.py │ ├── personality.py │ ├── webservice │ │ ├── __init__.py │ │ ├── pairme.py │ │ └── templates │ │ │ ├── base.html │ │ │ └── pairme.html │ └── worker │ │ ├── __init__.py │ │ ├── auth.py │ │ ├── hostmonitor.py │ │ ├── monitor │ │ ├── __init__.py │ │ ├── _base.py │ │ ├── _cpu.py │ │ ├── _disk.py │ │ ├── _hardware.py │ │ ├── _memory.py │ │ ├── _network.py │ │ ├── _process.py │ │ ├── _self.py │ │ ├── _storage.py │ │ └── _system.py │ │ ├── postgresql.py │ │ ├── realmstore.py │ │ ├── router.py │ │ ├── tracing.py │ │ ├── xbr │ │ ├── __init__.py │ │ ├── _authenticator.py │ │ ├── _marketmaker.py │ │ └── _util.py │ │ └── xbrmm.py ├── functest_helpers │ ├── __init__.py │ ├── auth.py │ └── shutdown_test.py ├── interfaces.py ├── master │ ├── __init__.py │ ├── api │ │ ├── __init__.py │ │ ├── container.py │ │ ├── docker.py │ │ ├── nativeprocess.py │ │ ├── node.py │ │ ├── proxy.py │ │ ├── remote.py │ │ ├── router.py │ │ ├── tracing.py │ │ ├── wamp.py │ │ └── worker.py │ ├── arealm │ │ ├── __init__.py │ │ └── arealm.py │ ├── cluster │ │ ├── __init__.py │ │ ├── routercluster.py │ │ └── webcluster.py │ ├── mrealm │ │ ├── __init__.py │ │ ├── controller.py │ │ ├── liveview.py │ │ ├── metadata.py │ │ └── mrealm.py │ ├── node │ │ ├── __init__.py │ │ ├── authenticator.py │ │ ├── config.json │ │ ├── controller.py │ │ ├── messenger.py │ │ ├── node.ini │ │ ├── node.py │ │ ├── roles.py │ │ └── user.py │ ├── personality.py │ ├── webservice │ │ ├── __init__.py │ │ ├── registerme.py │ │ └── templates │ │ │ ├── cfc_debug_resource.html │ │ │ ├── registerme.html │ │ │ ├── xbr-api-hub-logo.png │ │ │ └── xbr-idl-logo.png │ └── xbr │ │ ├── __init__.py │ │ └── _marketplace.py ├── network │ ├── __init__.py │ ├── _api.py │ ├── _authenticator.py │ ├── _backend.py │ ├── _error.py │ ├── _mailgw.py │ ├── _util.py │ ├── _web.py │ ├── node │ │ ├── __init__.py │ │ ├── config.json │ │ └── node.py │ ├── personality.py │ └── test │ │ ├── config1.py │ │ ├── init_blockchain.py │ │ ├── test_api01_echo.py │ │ ├── test_api02_onboard.py │ │ ├── test_api03_login.py │ │ ├── test_api03_logout.py │ │ ├── test_api04_member.py │ │ ├── test_api05_market.py │ │ ├── test_api06_market.py │ │ ├── test_api07_market.py │ │ ├── test_api08_catalog.py │ │ ├── test_api09_catalog.py │ │ ├── test_api10_api.py │ │ └── test_connect.py ├── newsfragments │ ├── .gitignore │ ├── 1531.enhancement │ ├── 1607.feature │ └── 208.bugfix ├── node │ ├── __init__.py │ ├── controller.py │ ├── guest.py │ ├── main.py │ ├── native.py │ ├── node.py │ ├── template.py │ ├── templates │ │ ├── README.md │ │ └── default │ │ │ ├── .crossbar │ │ │ └── config.json │ │ │ ├── README.md │ │ │ └── web │ │ │ └── README.md │ ├── test │ │ ├── __init__.py │ │ ├── test_cleanup.py │ │ ├── test_cli.py │ │ └── test_run.py │ └── worker.py ├── personality.py ├── quickstart │ ├── __init__.py │ ├── main.py │ └── quickstartvenv.py ├── router │ ├── __init__.py │ ├── auth │ │ ├── __init__.py │ │ ├── anonymous.py │ │ ├── cryptosign.py │ │ ├── pending.py │ │ ├── scram.py │ │ ├── ticket.py │ │ ├── tls.py │ │ └── wampcra.py │ ├── broker.py │ ├── cookiestore.py │ ├── dealer.py │ ├── inventory.py │ ├── longpoll.py │ ├── observation.py │ ├── protocol.py │ ├── realmstore.py │ ├── role.py │ ├── router.py │ ├── service.py │ ├── session.py │ ├── test │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── test_authorize.py │ │ ├── test_broker.py │ │ ├── test_cookiestore.py │ │ ├── test_dealer.py │ │ ├── test_metering.py │ │ ├── test_observation.py │ │ ├── test_pytrie.py │ │ ├── test_router.py │ │ ├── test_testament.py │ │ ├── test_unisocket.py │ │ └── test_wildcard.py │ ├── unisocket.py │ └── wildcard.py ├── shell │ ├── __init__.py │ ├── app.py │ ├── client.py │ ├── command.py │ ├── config.py │ ├── idl │ │ ├── __init__.py │ │ ├── generator.py │ │ ├── loader.py │ │ ├── reflection.bfbs │ │ ├── reflection.fbs │ │ └── reflection.json │ ├── main.py │ ├── monitor.py │ ├── reflection │ │ ├── BaseType.py │ │ ├── Enum.py │ │ ├── EnumVal.py │ │ ├── Field.py │ │ ├── KeyValue.py │ │ ├── Object.py │ │ ├── RPCCall.py │ │ ├── Schema.py │ │ ├── Service.py │ │ ├── Type.py │ │ └── __init__.py │ ├── repl.py │ ├── tests │ │ └── test_shell_util.py │ └── util.py ├── test │ ├── __init__.py │ ├── test_checkconfig.py │ ├── test_compat.py │ ├── test_config.json │ ├── test_config1.json │ ├── test_config1_merged.json │ ├── test_config2.json │ ├── test_config2_merged.json │ ├── test_config3.json │ ├── test_config3_merged.json │ ├── test_logger.py │ └── test_util.py ├── webservice │ ├── __init__.py │ ├── archive.py │ ├── base.py │ ├── catalog.py │ ├── flashpolicy.py │ ├── longpoll.py │ ├── misc.py │ ├── rest.py │ ├── static.py │ ├── templates │ │ ├── cb_base.html │ │ ├── cb_lp_notice.html │ │ ├── cb_node_info.html │ │ ├── cb_schema_overview.html │ │ ├── cb_web_404.html │ │ ├── cb_ws_status.html │ │ ├── cb_ws_testee_status.html │ │ ├── wamp_catalog_base.html │ │ ├── wamp_catalog_enum.html │ │ ├── wamp_catalog_home.html │ │ ├── wamp_catalog_service.html │ │ ├── wamp_catalog_struct.html │ │ └── wamp_catalog_table.html │ ├── test │ │ ├── __init__.py │ │ ├── templates │ │ │ ├── greeting.html │ │ │ └── product_report.html │ │ └── test_wap.py │ ├── wap.py │ ├── websocket.py │ └── wsgi.py └── worker │ ├── __init__.py │ ├── container.py │ ├── controller.py │ ├── main.py │ ├── proxy.py │ ├── rlink.py │ ├── router.py │ ├── sample │ ├── __init__.py │ └── _logging.py │ ├── test │ ├── __init__.py │ ├── examples │ │ ├── __init__.py │ │ ├── badclass.py │ │ ├── goodclass.py │ │ ├── importerror.py │ │ └── syntaxerror.py │ ├── test_loader.py │ └── test_router.py │ ├── testee.py │ ├── transport.py │ └── types.py ├── deploy-docs.sh ├── deploy-wheels.sh ├── docker-compose.yml ├── docs-cfx ├── DEVELOPERS.md ├── Documentation-License.rst ├── Makefile ├── _static │ ├── autobahn_logo_blue.svg │ ├── cb-internal-architecture.odg │ ├── cb-internal-architecture.pdf │ ├── cf-scaleout-arch-diagram.pdf │ ├── cf-scaleout-arch-diagram.png │ ├── cf-scaleout-arch-diagram.svg │ ├── cf-scaleout-arch.odg │ ├── cf-scaleout-arch.pdf │ ├── cfc-oem-overview.odg │ ├── cfc-oem-overview.pdf │ ├── cfc-system-architecture.odg │ ├── cfc-system-architecture.pdf │ ├── cfc_database.png │ ├── cfx-clustering-elements.odg │ ├── cfx-clustering-elements.pdf │ ├── cfx-clustering-elements.svg │ ├── cfx_environment_variables.ods │ ├── cfxdb_database_schema.ods │ ├── cfxdb_database_schema.pdf │ ├── crossbar-api-namespaces.ods │ ├── crossbar-api-namespaces.pdf │ ├── crossbar-rlinks.odg │ ├── crossbar-rlinks.pdf │ ├── crossbar.png │ ├── crossbar.svg │ ├── crossbarfx-aggregator.odg │ ├── crossbarfx-aggregator.pdf │ ├── crossbarfx-central-control-plane.odg │ ├── crossbarfx-central-control-plane.pdf │ ├── crossbarfx-central-control-plane.svg │ ├── crossbarfx-install-from-wheels.sh │ ├── crossbarfx-network-architecture-2.odg │ ├── crossbarfx-network-architecture-2.pdf │ ├── crossbarfx-network-architecture.odg │ ├── crossbarfx-network-architecture.pdf │ ├── crossbarfx-network-architecture.svg │ ├── crossbarfx-xbr-layers.odg │ ├── crossbarfx-xbr-layers.pdf │ ├── crossbarfx.png │ ├── crossbarfx.svg │ ├── crossbarfx_black.png │ ├── crossbarfx_black.svg │ ├── custom.css │ ├── onboarding │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ └── 7.png │ ├── router-worker-vmprof1.odg │ ├── router-worker-vmprof1.pdf │ ├── screenshots │ │ ├── accessing_crossbar_wamp_event_history_from_jupyter.png │ │ ├── aggregating_crossbar_wamp_event_history_in_jupyter_on_cpython.png │ │ ├── aggregating_crossbar_wamp_event_history_in_jupyter_on_pypy.png │ │ ├── aggregating_crossbar_wamp_event_history_in_jupyter_on_pypy_2.png │ │ ├── benchmark_rpc_roundtrip_analyze_clients.png │ │ ├── benchmark_rpc_roundtrip_analyze_transports.png │ │ ├── benchmark_rpc_roundtrip_brummer1_load.png │ │ ├── benchmark_rpc_roundtrip_router_vmprof.png │ │ ├── benchmark_rpc_roundtrip_run.png │ │ ├── cfx-process-structure-1.png │ │ ├── cfx-process-structure-2.png │ │ ├── cfx-shell-monitor-1.png │ │ ├── cfx-webcluster-haproxy.png │ │ ├── crossbar_on_snapcraft.png │ │ ├── crossbar_pypy_on_snapcraft.png │ │ ├── crossbar_wamp_calls_between_jupyter_notebooks.png │ │ ├── crossbarfx_on_dockerhub.png │ │ ├── crossbarfx_on_dockerhub_tags.png │ │ ├── crossbarfx_workbench_on_dockerhub.png │ │ ├── jupyter_setup1.png │ │ ├── jupyter_setup2.png │ │ ├── tree-routing-from-node1.png │ │ ├── tree-routing-from-node2.png │ │ ├── tree-routing-from-node3.png │ │ ├── tree-routing-from-node4.png │ │ └── tree-routing-from-node5.png │ ├── webscaling_bigbox_results.png │ ├── xbr-hardware-identity.odg │ └── xbr-hardware-identity.pdf ├── benchmarks.rst ├── conf.py ├── contents.rst ├── dataplane │ ├── analytics-architectures.rst │ ├── eventsdb │ │ ├── analysis.rst │ │ ├── index.rst │ │ └── overview.rst │ ├── index.rst │ └── zlmdb │ │ ├── backup.rst │ │ ├── export.rst │ │ ├── fileformat.rst │ │ ├── index.rst │ │ └── storage.rst ├── docker-compose.yml ├── gettingstarted │ ├── envvars.rst │ ├── index.rst │ ├── intro.rst │ ├── using_aws.rst │ ├── using_docker.rst │ ├── using_exe.rst │ └── using_snaps.rst ├── index.rst ├── legal │ ├── api_licenses.rst │ ├── index.rst │ ├── oss_licenses.rst │ └── oss_licenses_table.rst ├── management │ ├── domain │ │ ├── domain-api.rst │ │ └── domain-config.rst │ ├── index.rst │ ├── introduction.rst │ ├── mrealm-api │ │ ├── arealms.rst │ │ ├── index.rst │ │ ├── routerclusters.rst │ │ └── webclusters.rst │ ├── remote-node-api.rst │ └── zlmdb.rst ├── readthedocs-environment.yml ├── scaling │ ├── arealms.rst │ ├── examples.rst │ ├── index.rst │ ├── introduction.rst │ ├── routerclusters.rst │ └── webclusters.rst ├── security_hardening.rst ├── spelling_wordlist.txt ├── work │ ├── architecture.rst │ ├── building_from_sources.rst │ ├── kubernetes.rst │ ├── kubernetes │ │ ├── Makefile │ │ ├── docker-edge │ │ │ ├── .crossbar │ │ │ │ └── config.json │ │ │ ├── Dockerfile │ │ │ └── web │ │ │ │ ├── README.md │ │ │ │ ├── index.html │ │ │ │ └── js │ │ │ │ ├── autobahn.js │ │ │ │ ├── keystore.js │ │ │ │ └── main.js │ │ ├── docker-master │ │ │ └── Dockerfile │ │ ├── edge │ │ │ ├── Chart.yaml │ │ │ ├── templates │ │ │ │ ├── NOTES.txt │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── deployment.yaml │ │ │ │ ├── ingress.yaml │ │ │ │ └── service.yaml │ │ │ └── values.yaml │ │ ├── index.rst │ │ ├── index.yaml │ │ ├── master │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── scripts │ │ │ │ └── etcd.yaml │ │ │ ├── templates │ │ │ │ ├── NOTES.txt │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── deployment.yaml │ │ │ │ ├── ingress.yaml │ │ │ │ └── service.yaml │ │ │ └── values.yaml │ │ └── yaml │ │ │ └── etcd.yaml │ ├── mesh_links.rst │ ├── message_tracing.rst │ ├── numpy.rst │ ├── quickstart.rst │ └── xbr │ │ ├── business.rst │ │ ├── index.rst │ │ ├── interfaces.rst │ │ ├── interfaces2.rst │ │ ├── introduction.rst │ │ ├── metadata.rst │ │ ├── roles.rst │ │ ├── services.rst │ │ ├── xbr_data_token_flow.asciio │ │ ├── xbr_data_token_flow.txt │ │ ├── xbr_on_chain_transactions.asciio │ │ └── xbr_on_chain_transactions.txt └── xbr │ ├── admin-guide.rst │ ├── api-reference.rst │ ├── index.rst │ ├── network-onboarding.rst │ ├── network-reference.rst │ └── programming-guide.rst ├── docs-old ├── README.md ├── _archive │ ├── Installation-on-CentOS-RedHat.md │ ├── Installation-on-Docker.md │ ├── Installation-on-FreeBSD.md │ ├── Installation-on-RaspberryPi.md │ ├── Installation-on-Ubuntu-Debian.md │ ├── Installation-on-Ubuntu-Snappy.md │ ├── Quick-Reference.md │ ├── Setup-on-Microsoft-Azure.md │ └── Using-Docker.md ├── markdown.py ├── pages │ ├── ChangeLog.md │ ├── Documentation.md │ ├── Features.md │ ├── Table-of-Contents.md │ ├── about │ │ ├── Basic-Concepts.md │ │ ├── Compatibility-Policy.md │ │ ├── Contributing-FAQ.md │ │ ├── Crossbar-License.md │ │ ├── Documentation-License.md │ │ └── FAQ.md │ ├── administration │ │ ├── Administration.md │ │ ├── Command-Line.md │ │ ├── Logging.md │ │ ├── Node-Configuration.md │ │ ├── auth │ │ │ ├── Anonymous-Authentication.md │ │ │ ├── Authentication.md │ │ │ ├── Authorization.md │ │ │ ├── Challenge-Response-Authentication.md │ │ │ ├── Cookie-Authentication.md │ │ │ ├── Cryptosign-Authentication.md │ │ │ ├── Dynamic-Authenticators.md │ │ │ ├── SCRAM-Authentication.md │ │ │ ├── TLS-Client-Certificate-Authentication.md │ │ │ └── Ticket-Authentication.md │ │ ├── http-bridge │ │ │ ├── HTTP-Bridge-Callee.md │ │ │ ├── HTTP-Bridge-Caller.md │ │ │ ├── HTTP-Bridge-Publisher.md │ │ │ ├── HTTP-Bridge-Subscriber.md │ │ │ ├── HTTP-Bridge-Webhook.md │ │ │ └── HTTP-Bridge.md │ │ ├── mqtt-broker │ │ │ └── MQTT-Broker.md │ │ ├── production │ │ │ ├── Automatic-Startup-and-Restart.md │ │ │ ├── Browser-Support.md │ │ │ ├── Cryptobox-Payload-Encryption.md │ │ │ ├── Going-to-Production.md │ │ │ ├── Network-Tuning.md │ │ │ ├── Reverse-Proxies.md │ │ │ ├── Running-on-privileged-ports.md │ │ │ ├── SSL-TLS-Interception-Proxies.md │ │ │ ├── Scaling-Crossbar.io.md │ │ │ ├── Secure-WebSocket-and-HTTPS.md │ │ │ ├── Security.md │ │ │ ├── Stream-Testee.md │ │ │ ├── TLS-Certificates.md │ │ │ └── WebSocket-Compliance-Testing.md │ │ ├── router │ │ │ ├── Router-Components.md │ │ │ ├── Router-Realms.md │ │ │ ├── Router-Transports.md │ │ │ └── transport │ │ │ │ ├── Cookie-Tracking.md │ │ │ │ ├── Flash-Policy-Transport.md │ │ │ │ ├── RawSocket-Transport.md │ │ │ │ ├── Transport-Endpoints.md │ │ │ │ ├── Web-Transport-and-Services.md │ │ │ │ ├── WebSocket-Compression.md │ │ │ │ ├── WebSocket-Options.md │ │ │ │ └── WebSocket-Transport.md │ │ ├── web-service │ │ │ ├── CGI-Script-Service.md │ │ │ ├── File-Upload-Service.md │ │ │ ├── JSON-Value-Service.md │ │ │ ├── Long-Poll-Service.md │ │ │ ├── Node-Info-Service.md │ │ │ ├── Path-Service.md │ │ │ ├── Resource-Service.md │ │ │ ├── Reverse-Proxy-Service.md │ │ │ ├── Reverse-WebSocket-Proxy-Service.md │ │ │ ├── Static-Web-Service.md │ │ │ ├── WSGI-Host-Service.md │ │ │ ├── Web-Redirection-Service.md │ │ │ ├── Web-Services.md │ │ │ └── WebSocket-Service.md │ │ └── worker │ │ │ ├── Container-Configuration.md │ │ │ ├── Controller-Configuration.md │ │ │ ├── Guest-Configuration.md │ │ │ ├── Native-Worker-Options.md │ │ │ ├── Process-Environments.md │ │ │ ├── Processes.md │ │ │ └── Router-Configuration.md │ ├── getting-started │ │ ├── Getting-started-with-Browser.md │ │ ├── Getting-started-with-CSharp.md │ │ ├── Getting-started-with-Cplusplus.md │ │ ├── Getting-started-with-Erlang.md │ │ ├── Getting-started-with-Java.md │ │ ├── Getting-started-with-NodeJS.md │ │ ├── Getting-started-with-PHP.md │ │ ├── Getting-started-with-Python.md │ │ └── Getting-started.md │ ├── installation │ │ ├── Demo-Instance.md │ │ ├── Installation-FAQ.md │ │ ├── Installation-on-Linux.md │ │ ├── Installation-on-Mac-OS-X.md │ │ ├── Installation-on-Windows.md │ │ ├── Installation.md │ │ ├── Setup-on-Amazon-EC2.md │ │ ├── Setup-on-Heroku.md │ │ ├── Setup-on-OpenShift.md │ │ └── Try-out-without-Installation.md │ └── programming-guide │ │ ├── Application-Scenarios.md │ │ ├── Configuring-Crossbario-Logging.md │ │ ├── Creating-Docker-Images.md │ │ ├── Development-with-External-Devices.md │ │ ├── End-to-End-Encryption.md │ │ ├── Error-Handling.md │ │ ├── Examples.md │ │ ├── JavaScript-Frameworks-and-Libraries.md │ │ ├── Logging-in-Crossbar.io.md │ │ ├── Programming-Guide.md │ │ ├── Programming.md │ │ ├── Starting-and-Stopping-Crossbar.io.md │ │ ├── WAMP-Features.md │ │ ├── framework │ │ ├── Adding-Real-Time-to-Django-Applications.md │ │ ├── AngularJS-Application-Components.md │ │ └── Database-Programming-with-PostgreSQL.md │ │ ├── general │ │ ├── Sample-Authentication-Flow.md │ │ ├── Session-Metaevents-and-Procedures.md │ │ └── URI-Format.md │ │ ├── pubsub │ │ ├── Basic-Subscriptions.md │ │ ├── Event-History.md │ │ ├── How-Subscriptions-Work.md │ │ ├── Pattern-Based-Subscriptions.md │ │ ├── PubSub.md │ │ ├── Publisher-Exclusion.md │ │ ├── Publisher-Identification.md │ │ ├── Retained-Events.md │ │ ├── Subscriber-Black-and-Whitelisting.md │ │ └── Subscription-Meta-Events-and-Procedures.md │ │ └── rpc │ │ ├── Basic-Registrations.md │ │ ├── Caller-Identification.md │ │ ├── How-Registrations-Work.md │ │ ├── Pattern-Based-Registrations.md │ │ ├── Progressive-Call-Results.md │ │ ├── RPC.md │ │ ├── Registration-Meta-Events-and-Procedures.md │ │ ├── Registration-Options.md │ │ └── Shared-Registrations.md ├── static │ ├── pygments.css │ └── site.css ├── templates │ ├── changelog_preamble.md │ ├── index.html │ ├── layout.html │ └── page.html └── test_server.py ├── docs ├── Adding-Real-Time-to-Django-Applications.rst ├── Administration.rst ├── AngularJS-Application-Components.rst ├── Anonymous-Authentication.rst ├── Application-Scenarios.rst ├── Authentication.rst ├── Authorization.rst ├── Automatic-Startup-and-Restart.rst ├── Basic-Concepts.rst ├── Basic-Registrations.rst ├── Basic-Subscriptions.rst ├── Browser-Support.rst ├── CGI-Script-Service.rst ├── Caller-Identification.rst ├── Challenge-Response-Authentication.rst ├── Command-Line.rst ├── Compatibility-Policy.rst ├── Configuring-Crossbario-Logging.rst ├── Container-Configuration.rst ├── Contributing-FAQ.rst ├── Controller-Configuration.rst ├── Cookie-Authentication.rst ├── Cookie-Tracking.rst ├── Creating-Docker-Images.rst ├── Crossbar-License.rst ├── Cryptobox-Payload-Encryption.rst ├── Cryptosign-Authentication.rst ├── Database-Programming-with-PostgreSQL.rst ├── Demo-Instance.rst ├── Development-with-External-Devices.rst ├── Documentation-License.rst ├── Dynamic-Authenticators.rst ├── End-to-End-Encryption.rst ├── Error-Handling.rst ├── Event-History.rst ├── Examples.rst ├── FAQ.rst ├── File-Upload-Service.rst ├── Flash-Policy-Transport.rst ├── Getting-Started.rst ├── Going-to-Production.rst ├── Guest-Configuration.rst ├── HTTP-Bridge-Callee.rst ├── HTTP-Bridge-Caller.rst ├── HTTP-Bridge-Publisher.rst ├── HTTP-Bridge-Subscriber.rst ├── HTTP-Bridge-Webhook.rst ├── HTTP-Bridge.rst ├── How-Registrations-Work.rst ├── How-Subscriptions-Work.rst ├── Installation-FAQ.rst ├── Installation-on-Linux.rst ├── Installation-on-Mac-OS-X.rst ├── Installation-on-Windows.rst ├── Installation.rst ├── JSON-Value-Service.rst ├── JavaScript-Frameworks-and-Libraries.rst ├── Logging-in-Crossbar.io.rst ├── Logging.rst ├── Long-Poll-Service.rst ├── MQTT-Broker.rst ├── Makefile ├── Native-Worker-Options.rst ├── Network-Tuning.rst ├── Node-Configuration-Example.rst ├── Node-Configuration.rst ├── Node-Info-Service.rst ├── Path-Service.rst ├── Pattern-Based-Registrations.rst ├── Pattern-Based-Subscriptions.rst ├── Process-Environments.rst ├── Processes.rst ├── Programming-Guide.rst ├── Programming.rst ├── Progressive-Call-Results.rst ├── Proxy-Workers.rst ├── PubSub.rst ├── Publisher-Exclusion.rst ├── Publisher-Identification.rst ├── RPC.rst ├── RawSocket-Transport.rst ├── Registration-Meta-Events-and-Procedures.rst ├── Registration-Options.rst ├── Resource-Service.rst ├── Retained-Events.rst ├── Reverse-Proxies.rst ├── Reverse-Proxy-Service.rst ├── Reverse-WebSocket-Proxy-Service.rst ├── Router-Components.rst ├── Router-Configuration.rst ├── Router-Realms.rst ├── Router-Transports.rst ├── Running-on-privileged-ports.rst ├── SCRAM-Authentication.rst ├── SSL-TLS-Interception-Proxies.rst ├── Sample-Authentication-Flow.rst ├── Scaling-Crossbar.io.rst ├── Secure-WebSocket-and-HTTPS.rst ├── Security.rst ├── Session-Metaevents-and-Procedures.rst ├── Session-Statistics.rst ├── Setup-on-Amazon-EC2.rst ├── Setup-on-Heroku.rst ├── Setup-on-OpenShift.rst ├── Shared-Registrations.rst ├── Starting-and-Stopping-Crossbar.io.rst ├── Starting-and-Stopping-Crossbar.rst ├── Static-Web-Service.rst ├── Stream-Testee.rst ├── Subscriber-Black-and-Whitelisting.rst ├── Subscription-Meta-Events-and-Procedures.rst ├── TLS-Certificates.rst ├── TLS-Client-Certificate-Authentication.rst ├── Table-of-Contents.rst ├── Ticket-Authentication.rst ├── Transport-Endpoints.rst ├── URI-Format.rst ├── WAMP-Features.rst ├── WSGI-Host-Service.rst ├── Web-Archive-Service.rst ├── Web-Redirection-Service.rst ├── Web-Services.rst ├── Web-Transport-and-Services.rst ├── WebSocket-Compliance-Testing.rst ├── WebSocket-Compression.rst ├── WebSocket-Options.rst ├── WebSocket-Service.rst ├── WebSocket-Transport.rst ├── _static │ ├── .keep │ ├── css │ │ └── custom.css │ ├── favicon.ico │ └── img │ │ └── crossbar.svg ├── administration-guide.rst ├── assets │ ├── carousel_polyglot.svg │ ├── crossbar-architecture.svg │ ├── crossbar-works.png │ ├── crossbar_icon_and_text_vectorized_yellow_icon.svg │ ├── helloworld-browser.svg │ ├── helloworld.svg │ ├── helloworldmix.svg │ ├── helloworldrpc.svg │ ├── pubsub-backend-browser.png │ ├── pubsub-frontend-browser.png │ ├── pubsubmix.svg │ └── router-internal.svg ├── basic-concept.rst ├── changelog.rst ├── code │ ├── autobahn.min.js │ ├── backend.html │ ├── backend.js │ ├── client_appsession_publish.py │ ├── client_appsession_rpc_callee.py │ ├── client_appsession_rpc_caller.py │ ├── client_appsession_subscribe.py │ ├── client_component_publish.py │ ├── client_component_rpc_callee.py │ ├── client_component_rpc_caller.py │ ├── client_component_subscribe.py │ ├── config.json │ ├── frontend.html │ ├── frontend.js │ ├── output.txt │ ├── rpc_callee.html │ └── rpc_callee.js ├── concept-features.rst ├── conf.py ├── contents.rst.inc ├── crossbar-features.rst ├── developer-guide.rst ├── index.rst ├── integration-guide.rst ├── oss_licenses_table.rst ├── policy-licence-faq.rst ├── soss_licenses_table.rst ├── spelling_wordlist.txt ├── tutorials-recipe.rst ├── web_app_page.rst └── web_archive.rst ├── find-uris.py ├── inject-build-id.py ├── legal ├── README.md ├── agplv3.png ├── contributors_cb_tech.md ├── contributors_tavendo.md ├── crossbar_icon.png ├── crossbar_icon_and_text_vectorized.png ├── crossbar_text_vectorized.png ├── entity_caa.pdf ├── individual_caa.pdf ├── management_api.md └── wamp.png ├── mypy.ini ├── pyproject.toml ├── pytest.ini ├── requirements-dev.txt ├── requirements-latest.txt ├── requirements-min.txt ├── requirements-pinned.txt ├── requirements.txt ├── setup.cfg ├── setup.py ├── sitecustomize.py ├── test ├── Makefile ├── app1 │ ├── README.md │ └── client.py ├── app2 │ ├── README.md │ └── client.py ├── cf1 │ ├── .crossbar │ │ ├── config-empty.json │ │ ├── config.json │ │ ├── key.priv │ │ └── key.pub │ └── client.py ├── cf2 │ ├── .crossbar │ │ ├── config-empty.json │ │ ├── config.json │ │ ├── key.priv │ │ └── key.pub │ └── client.py ├── cf3 │ ├── .crossbar │ │ ├── config-empty.json │ │ ├── config.json │ │ ├── key.priv │ │ └── key.pub │ └── client.py ├── cf4 │ ├── .crossbar │ │ ├── config-empty.json │ │ └── config.json │ └── client.py ├── cfc │ ├── .crossbar │ │ ├── README.md │ │ ├── ca.cert.pem │ │ ├── config-tls.json │ │ ├── config.ini │ │ ├── config.json │ │ ├── default.priv │ │ ├── default.pub │ │ ├── dhparam.pem │ │ ├── intermediate.cert.pem │ │ ├── key.priv │ │ ├── key.pub │ │ ├── server.crt │ │ └── server.key │ ├── README.md │ ├── analyze_usage.ipynb │ └── web │ │ ├── index.html │ │ └── js │ │ ├── autobahn.js │ │ ├── keystore.js │ │ └── main.js ├── docker-compose.yml ├── docker-integration.md ├── full │ ├── .crossbar │ │ ├── ca.cert.pem │ │ ├── client.crt │ │ ├── client.key │ │ ├── config-manhole.json │ │ ├── config.json │ │ ├── dhparam.pem │ │ ├── intermediate.cert.pem │ │ ├── key.priv │ │ ├── key.pub │ │ ├── server.crt │ │ ├── server.key │ │ ├── ssh_host_rsa_key │ │ └── ssh_host_rsa_key.pub │ ├── README.md │ ├── backend.py │ ├── myapp.py │ ├── tick.sh │ └── web │ │ └── README.md ├── functests │ ├── README.md │ ├── __init__.py │ ├── _work │ │ ├── _test_cb_authentication.py │ │ ├── _test_cb_component.py │ │ ├── _test_cfc_master.py │ │ └── test_cb_rest_caller.py │ ├── cbtests │ │ ├── __init__.py │ │ ├── test_cb_apperrors.py │ │ ├── test_cb_authenticator.py │ │ ├── test_cb_connection.py │ │ ├── test_cb_dynamic_auth.py │ │ ├── test_cb_guest.py │ │ ├── test_cb_management_container.py │ │ ├── test_cb_management_transports.py │ │ ├── test_cb_meta_api.py │ │ ├── test_cb_proxy.py │ │ ├── test_cb_pubsub.py │ │ ├── test_cb_rlink.py │ │ ├── test_cb_rlink_three.py │ │ ├── test_cb_rpc.py │ │ ├── test_cb_sessions.py │ │ ├── test_cb_shutdown.py │ │ ├── test_cb_sigint.py │ │ ├── test_cb_ssl.py │ │ ├── test_cb_zip_bomb.py │ │ └── test_rlink_proxy_mesh.py │ ├── cfctests │ │ ├── __init__.py │ │ ├── test_cfc_remote.py │ │ ├── test_cfc_rlink_mesh.py │ │ ├── test_cfc_rlinks.py │ │ ├── test_cfc_shared.py │ │ ├── test_cfc_users.py │ │ └── test_cfc_webcluster.py │ ├── components.py │ ├── conftest.py │ ├── helpers.py │ ├── launcher.py │ └── util.py ├── jupyter │ ├── .jupyter │ │ ├── jupyter_notebook_config.py │ │ └── migrated │ └── notebooks │ │ ├── usage-logs.ipynb │ │ └── usage-logs.py ├── management │ ├── ex_cpu_affinity.py │ ├── ex_docker.py │ ├── ex_global_api.py │ ├── ex_global_status.py │ ├── ex_list_nodes.py │ ├── ex_list_sessions.py │ ├── ex_list_subs_regs.py │ ├── ex_list_workers.py │ ├── ex_monitor_sessions.py │ ├── ex_process_stats.py │ ├── ex_start_container.py │ ├── ex_start_guest.py │ ├── ex_start_proxy.py │ ├── ex_start_router.py │ ├── ex_start_web_services.py │ ├── ex_status.py │ ├── ex_tracing.py │ ├── ex_tracing_actions.py │ ├── ex_tracing_monitor.py │ ├── ex_tracing_monitor_actions.py │ ├── ex_tracing_monitor_by_action.py │ ├── ex_webcluster.py │ ├── ex_worker_log.py │ ├── run.sh │ └── tracing │ │ ├── ex_manage_trace.py │ │ └── ex_monitor_trace.py ├── run_crossbar.py ├── test_ab_examples.sh ├── test_automated │ ├── .crossbar │ │ └── config.ini │ ├── .gitignore │ ├── .test │ │ ├── master │ │ │ ├── key.priv │ │ │ └── key.pub │ │ └── nodes │ │ │ ├── node1 │ │ │ ├── key.priv │ │ │ └── key.pub │ │ │ ├── node2 │ │ │ ├── key.priv │ │ │ └── key.pub │ │ │ ├── node3 │ │ │ ├── key.priv │ │ │ └── key.pub │ │ │ └── node4 │ │ │ ├── key.priv │ │ │ └── key.pub │ ├── Makefile │ ├── README.md │ ├── client.py │ ├── docker-compose.yml │ ├── haproxy.cfg │ ├── test_ci.py │ ├── test_docker.sh │ ├── test_host1.sh │ ├── test_host2.sh │ ├── test_host3.sh │ ├── test_prepare_host.sh │ ├── test_setup1.sh │ ├── test_setup2.sh │ ├── test_setup3.sh │ ├── test_status.sh │ └── test_stop_host.sh ├── test_backend │ ├── app1 │ │ └── client.py │ ├── cf1 │ │ ├── .crossbar │ │ │ └── config.json │ │ └── backend.py │ └── cf2 │ │ ├── .crossbar │ │ └── config.json │ │ └── backend.py ├── test_cli_0.sh ├── test_cli_1.sh ├── test_cli_2.sh ├── test_cli_3.sh ├── test_hostmon │ └── .crossbar │ │ └── config.json ├── test_imports.py ├── test_jupyter │ ├── Dockerfile │ └── Makefile ├── test_nodelog │ ├── README.md │ ├── test_nodelog.py │ └── test_usage.py ├── test_pevents │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── analyze.py │ ├── crossbar │ │ ├── .crossbar │ │ │ └── config.json │ │ ├── publisher.py │ │ ├── subscriber.py │ │ └── web │ │ │ ├── README.md │ │ │ └── index.html │ ├── docker-compose.yml │ └── jupyter │ │ ├── .jupyter │ │ └── jupyter_notebook_config.py │ │ ├── Dockerfile.cpy │ │ ├── Dockerfile.pypy │ │ ├── notebooks │ │ ├── .gitignore │ │ ├── Untitled.ipynb │ │ ├── Untitled1.py │ │ ├── Untitled1.txt │ │ ├── analyze_event_history.ipynb │ │ ├── analyze_event_history.py │ │ ├── analyze_event_history_2.ipynb │ │ ├── analyze_event_history_2.py │ │ ├── analyze_event_history_2.txt │ │ ├── analyze_event_history_3.ipynb │ │ ├── analyze_event_history_3.py │ │ └── basic.ipynb │ │ └── red-data-tools.list ├── test_setup.sh ├── test_xbr_market │ └── .crossbar │ │ └── config.json ├── test_xbr_marketmaker │ ├── Makefile │ ├── consumer │ │ └── consumer.py │ ├── crossbar │ │ ├── .crossbar │ │ │ └── config.json │ │ └── web │ │ │ ├── README.md │ │ │ └── index.html │ ├── docker-compose.yml │ ├── ganache │ │ └── README.md │ ├── provider │ │ └── provider.py │ └── work │ │ ├── contract.sol │ │ ├── test.py │ │ ├── test2.py │ │ └── test3.py └── test_xbr_network │ ├── .crossbar │ ├── config-edge.json │ ├── config.json │ └── xbrnetwork-eth.key │ ├── env.sh │ ├── set-xbrnetwork-ethkey.py │ └── test_xbr_network.sh ├── tox.ini ├── versions.sh └── yapf.ini /.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | omit = 3 | crossbar/worker/test/examples/syntaxerror.py 4 | */test/*.py 5 | branch = True 6 | source = crossbar 7 | parallel = True 8 | 9 | [paths] 10 | source= 11 | crossbar 12 | .tox/*/lib/python*/site-packages/crossbar 13 | .tox/*/lib/site-packages/crossbar 14 | .tox/pypy*/site-packages/crossbar 15 | 16 | [report] 17 | precision = 2 18 | exclude_lines = 19 | def __repr__ 20 | raise AssertionError 21 | pragma: no cover 22 | if self\._debug 23 | raise NotImplementedError 24 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | root = true 4 | 5 | [*] 6 | indent_style = space 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | charset = utf-8 11 | 12 | # Python files 13 | [*.py] 14 | indent_size = 4 15 | # isort plugin configuration 16 | known_first_party = sphinxcontrib 17 | multi_line_output = 2 18 | default_section = THIRDPARTY 19 | skip = .eggs docs 20 | 21 | # .travis.yml 22 | [.travis.yml] 23 | indent_size = 2 24 | 25 | # Dockerfile 26 | [Dockerfile] 27 | indent_size = 4 28 | 29 | # Override for Makefile 30 | [{Makefile, makefile, GNUmakefile}] 31 | indent_style = tab 32 | indent_size = 4 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .qemu 2 | .build 3 | crossbar.spec 4 | key.pub 5 | key.priv 6 | *.mp4 7 | *.sec 8 | *.pyc 9 | *.pyo 10 | *.dat 11 | *.sublime-workspace 12 | *.sublime-project 13 | build 14 | dist 15 | .coverage 16 | htmlcov/ 17 | *.egg-info 18 | *.log 19 | *.pid 20 | dropin.cache 21 | crossbardata 22 | .sconsign.dblite 23 | *.~vsd 24 | node_modules 25 | .idea 26 | _trial_temp 27 | *~ 28 | dist 29 | build 30 | *.egg-info 31 | *.db 32 | *.zip 33 | *.egg 34 | /.crossbar 35 | _trial_temp* 36 | node_modules 37 | .tox 38 | *.swp 39 | *.ropeproject 40 | docs/_build 41 | .coverage.* 42 | vers/ 43 | .DS_Store 44 | _build 45 | pip-wheel-metadata 46 | 47 | # vscode 48 | .vscode/* 49 | !.vscode/settings.json 50 | !.vscode/tasks.json 51 | !.vscode/launch.json 52 | !.vscode/extensions.json 53 | .vscode 54 | get-pip.py 55 | .db-controller 56 | .db-mrealm-* 57 | .xbrnetwork 58 | test/test_automated/.test/ 59 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.rst 2 | include crossbar/LICENSE 3 | include crossbar/LICENSES-OSS 4 | include requirements.txt 5 | include requirements-min.txt 6 | include requirements-latest.txt 7 | include requirements-pinned.txt 8 | include requirements-dev.txt 9 | recursive-include crossbar/common/keys * 10 | recursive-include crossbar/node/templates * 11 | recursive-include crossbar/webservice/templates * 12 | recursive-include crossbar/adapter/mqtt/test/certs * 13 | recursive-include crossbar/edge/webservice/templates * 14 | recursive-include crossbar/edge/node/config * 15 | recursive-include crossbar/master/webservice/templates * 16 | recursive-include crossbar/master/node *.json 17 | recursive-include crossbar/network/node *.json 18 | recursive-include crossbar/test * 19 | -------------------------------------------------------------------------------- /cloc.def: -------------------------------------------------------------------------------- 1 | FlatBuffers 2 | filter call_regexp_common C++ 3 | extension fbs 4 | 3rd_gen_scale 0.77 5 | end_of_line_continuation \\$ 6 | -------------------------------------------------------------------------------- /crossbar.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar.ico -------------------------------------------------------------------------------- /crossbar/_compat.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | 9 | def native_string(string): 10 | """ 11 | Make C{string} be the type of C{str}, decoding with ASCII if required. 12 | """ 13 | if isinstance(string, bytes): 14 | return string.decode('ascii') 15 | else: 16 | raise ValueError("This is already a native string.") 17 | -------------------------------------------------------------------------------- /crossbar/_version.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | __version__ = '23.1.2' 9 | __build__ = '19000101-0000000' 10 | -------------------------------------------------------------------------------- /crossbar/bridge/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/bridge/mqtt/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/bridge/mqtt/test/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/bridge/mqtt/test/certs/dhparam: -------------------------------------------------------------------------------- 1 | -----BEGIN DH PARAMETERS----- 2 | MIIBCAKCAQEA2wdciscOCxu6vMl2P9s0u1v5TDbnq9m07z9I+3Etsotp2XF4bzoi 3 | kf9irMeYiKQyC07j2fsdy4sL19OrWimqIllfbwrMCwzSX2YVO9w2/qKStWA/bqgh 4 | jcnRDTnKF0uIpp2qvLqrWBV2uEeiZf+nU0VubIyl04sVb93sP56997f6e4p4kEPW 5 | tOHCJ1TngJglHFmVeQkyAkZ5nS1h8FMda8TB0U+35RSpLagEH8GDp7P4lCgJJwwW 6 | BDt/f6rPWyoNb+v5skFh2K5vOFiRXB4sqvTo248C+I/OzBSrmbypq486+tUJud1e 7 | Vei98HRM4LuJ+1LZB4kgEw9MeQgZ48RJAwIBAg== 8 | -----END DH PARAMETERS----- 9 | -------------------------------------------------------------------------------- /crossbar/bridge/rest/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | from crossbar.bridge.rest.callee import RESTCallee 9 | from crossbar.bridge.rest.caller import CallerResource 10 | from crossbar.bridge.rest.publisher import PublisherResource 11 | from crossbar.bridge.rest.subscriber import MessageForwarder 12 | from crossbar.bridge.rest.webhook import WebhookResource 13 | 14 | __all__ = ("PublisherResource", "CallerResource", "RESTCallee", "MessageForwarder", "WebhookResource") 15 | -------------------------------------------------------------------------------- /crossbar/common/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-16-10.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 16.10 release public key 2 | RWQ2MDk26PKBMNUZG2Jok1tMBB1SKyci+N7dtcep8jrikTl4NvI1Rnux 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-1.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.01 release public key 2 | RWT2m9aiCrNRpP5cqhQU++lSfqY5DiCgwsoYUqTbnZOV5kUT0CPbbH3v 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-10.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.10 release public key 2 | RWSn8tzJzPzvvgZZxRFsQeiSwFr7V72r49KtGJyU0YtaSFf0ZtxW2U7a 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-11.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.11 release public key 2 | RWT/n6IQ4dKesCP8YwwJiWH30ST8eq5D21ih4EFbJZazzsqEX6CmaT3k 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-12.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.12 release public key 2 | RWQ0XcNYBo35t9PnNO/8H9oV+bD6Ss3ti49fr6PoqhVfZSHPUvuvIyWT 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-2.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.2 release public key 2 | RWTmo7YQ1mmpesRyo4DYay3REDoJ7HsafXYcfhK3O+lM9JbeAAGSXUTh 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-3.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.3 release public key 2 | RWRGxs0uB6vQemWGPeBt7nLG53ADoOtZy/Vve3BjlaXDqkCiVhCs7Zrv 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-4.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.04 release public key 2 | RWSPrpj1lObrB99oQJEmKUaJW8noKYNiEYX23Wma5VGnrJOcyf9e4XpL 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-5.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.5 release public key 2 | RWRrH63dDsFR7o8Z7+7gv1uLF4qPKyZXq45Ble52SJ33KFz1UicMyq0b 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-6.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.6 release public key 2 | RWTAY0Umy44F3jAVWG+tEYunifD02Kmn4Pxc2cHUMEd2sckt/llYhRXp 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-8.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.8 release public key 2 | RWS7C+EWC0+LY3r7v/QTHDcJpdzmdXAZy2V7fms08hz6UP4AeS83/B3w 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-17-9.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 17.9 release public key 2 | RWRj+Sb8UH/pwLCycZ+3OroR5UV9aaLUDVbKxNcj+gYoOOZv0LrzMH1a 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-10.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.10 release public key 2 | RWTx2wgTugWxGlWCdOyiuxvD9MAgZR/uKGL7wb+B4GSMo+kk2ARBvYAd 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-11.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.11 release public key 2 | RWT7wee0x5xybWqK6YIiqugsEOGULeL+40maK5ZnIktIejS+j9DiyEtS 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-12.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.12 release public key 2 | RWRL2URPgi6MK0CkpI9a4HzKYMTH/wZtSX2tISkJIXE1ctt7+Bf+fWEn 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-3.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.3 release public key 2 | RWRo1ikD3CYkevlRg/r9/tfXNzulz3+2LB5XZiMkGlGjIhnalP5WoM8M 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-4.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.4 release public key 2 | RWRoWUpWxaQIXo+I/gl5/ghE46xcFKM4YXQlHck9kRBNLQI+rElVETMF 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-5.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.5 release public key 2 | RWQYgF8GhJnldUdxwe91sWCNoviCUlgdSzDqGzMDNDcvMzEoqslNfvZ9 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-6.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.6 release public key 2 | RWS0sX8obJP12KpJWWHyPSsJPeAxUVm+JjPWsPKCgxap8uTHuWeWU7ez 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-7.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.7 release public key 2 | RWS9T4NltFjmKSMbEtETnOMxRjLhOEZ6e80T5MYzTTh/+NP9Jk20sJmA 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-8.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.8 release public key 2 | RWSa7EvNMtH+pgqdsGMrFYLKzlafAfgcmBF17FRM/WPNHT4/j0jr3P77 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-18-9.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 18.9 release public key 2 | RWSDSZzMhv9utm/rhC+IL0t74bE6vQpI/gZuztT6MciW0/mzmijWMt9f 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-1.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.1 release public key 2 | RWSYMhkKjlumkHKD93y/IDruNCLAbAgcBYW551mEk1qtv0KkTapYBfmc 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-10.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.10 release public key 2 | RWRlUB1klnmQWao9JKtkTu5GeI74LHoQnhH8q7vvT+oRlbyWRmd74kbw 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-11.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.11 release public key 2 | RWRqR6raFel6OuYLTuprWw1j8WZWx+Zk0wCOnpkb42wem/l6mWCyb+Pe 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-2.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.2 release public key 2 | RWR2yD4qEkDnHAOwcTx6qTqaTT55n+J5pWez5jXUFT89fwlfVO77nFaV 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-3.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.3 release public key 2 | RWTugc8VlQqH/Fr5WgYYPCRo6CqsJuXOlLN0ZcEQpM8JXbj3g8KN6Aww 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-4.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.4 release public key 2 | RWS5uHo6IKYRP0FenpUuAdKEWqi2Y+BOeO+AE51m6YTjixrE7kZDjNq0 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-5.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.5 release public key 2 | RWS2VBAg82a+ff39Eo4xC0eZzAEjlRf9EKmQ/mSibc0/ZvYXBrQL/2FI 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-6.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.6 release public key 2 | RWTS7Lf+Zks97Pu2hRHkjaVPjjbDCUVc2tOAHjsd1a1W5cKKciAoSIRE 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-7.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.7 release public key 2 | RWQTB6Q9KDpGRX8p5mSxBUge+ZAKLC0/N2fJpyBPifUOlW3MfbwW8h6H 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-19-9.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 19.9 release public key 2 | RWQoOyjbSuwuwM6iEY7+43Myslb2wEJpCsTljGELCEeTMMyfWSjCQF1U 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-1.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.1 release public key 2 | RWTg6NK33a/KXvRvBD3AxRN6P+jyCQbTaELF2rzMa5h0ao+i0Te3I3K4 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-12.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.12 release public key 2 | RWREftnZm46PwN1JYek1p/4FhfA2UtCu8BniQeH6T5Gs712cDKQ7XbWc 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-2.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.2 release public key 2 | RWRNmnwUaF+fsGoUNR59gHdfKU0HLUTZSQmXzrcMODXwOpq17UWV4G2G 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-4.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.4 release public key 2 | RWRvxakry+zoFQFDliL0ALJ36rBzgAMQO9NKsxRLLLzXz0xFqIcmi8h4 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-5.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.5 release public key 2 | RWRCwbVSHPPyh5AMf5965n+tP1EJ18aOuO4yIAK4EiZkQsAGdWYh3Paw 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-6.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.6 release public key 2 | RWQHer9KKmNsqP057xopw37DfYE8pl92aOWU5E+OWdhlwtCns7nlKjpE 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-7.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.7 release public key 2 | RWT3yJ/q6XYhAf67c7VEgN/LBGCpjPOyoBsv6d32W/eyaKxQ4DR45diO 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-20-8.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 20.8 release public key 2 | RWQ4VrXXmZuEsP4YXlhRfRu+ZqVwNC1qmyJaWCXX/sv4Dqiy4SiPa0Yy 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-21-1.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 21.1 release public key 2 | RWRCg8IXEYo6/z3ZPrKHys8UZqC4psKjy7N8ukzTN/o+vUcEyhGw2COj 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-21-11.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 21.11 release public key 2 | RWT8YYDwXKYOjxxrQbsnUGFiIMKO5MDuAt+0i0s12fxM3zpfy3TCP4rU 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-21-2.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 21.2 release public key 2 | RWSPS2sNAXZ18kBoP19HNmkQL4O7eIhZIxpMrQ3WYpvHy9L5orbDzXGg 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-21-3.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 21.3 release public key 2 | RWT906S6dtgOY3NZrHd3uFtXpAPFUc6+bdpADYJRJi4daUaCT5U/0OrO 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-21-4.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 21.4 release public key 2 | RWRY4q+DtUUqfOWCXacMcn3sLro21Z9oMR+eh1XUiqx8au3j1xIofLqj 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-21-6.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 21.6 release public key 2 | RWQAuKCmh07GueDGPDEe/SwEbGXicGlJj+kDpjA9kVAPwQ6pmPDsCA7/ 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-22-1.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 22.1 release public key 2 | RWQ7w++/Cg/RiwlsA+sWBUkG+H6AtmUAgkRf024XBeWn0qzg7LEKWSSN 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-22-2.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 22.2 release public key 2 | RWRXn6E3fKGODnVOfeff9H/E+lc9hRgd+9wrOFbtFzqHcqxqusmUUo41 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-22-3.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 22.3 release public key 2 | RWRPe9BqdJL2vTjTj5h9evaVY4LiFHmbi8Gy1T83OVnWMFkYm9tQEOu4 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-22-4.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 22.4 release public key 2 | RWRKAzJYB4JSiJtkfJAAf7Zf6OvEHIZSQYW2+n6WWyWa6sRTmcFH4dPv 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-22-5.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 22.5 release public key 2 | RWTjiowxkBXdcYtq+5dhO6xtjCSCgySAIsZ/fzLU9w6ZwGlwB6areWfg 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-22-6.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 22.6 release public key 2 | RWRgokUo5rovJw07csyhF67Tw2NOeE7ygo/lxLYK0iF7LVZFxb4O6ti5 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-22-7.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 22.7 release public key 2 | RWShqPyCQYDTi6gHaD1KTNElM1OUTx8kTcJK+F7q4T63X5Q0knMlJf7g 3 | -------------------------------------------------------------------------------- /crossbar/common/keys/crossbar-23-1.pub: -------------------------------------------------------------------------------- 1 | untrusted comment: Crossbar.io 23.1 release public key 2 | RWTJEBnQ2CUAKCg6P72dpCqmZ/1zpiwhSNWZLlbn7HepEHtc/PYgxjd4 3 | -------------------------------------------------------------------------------- /crossbar/common/twisted/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/common/twisted/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar/common/twisted/test/__init__.py -------------------------------------------------------------------------------- /crossbar/common/twisted/test/test_resource.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/edge/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | import txaio 9 | 10 | txaio.use_twisted() # noqa 11 | 12 | from autobahn import xbr 13 | from crossbar._version import __version__, __build__ 14 | from crossbar.edge.personality import Personality 15 | 16 | __all__ = ('__version__', '__build__', 'Personality', 'xbr') 17 | __doc__ = Personality.DESC 18 | -------------------------------------------------------------------------------- /crossbar/edge/node/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from crossbar.edge.node.node import FabricNode, FabricNodeControllerSession 9 | 10 | __all__ = ('FabricNode', 'FabricNodeControllerSession') 11 | -------------------------------------------------------------------------------- /crossbar/edge/node/config/bare.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/crossbario/crossbar/master/crossbar.json", 3 | "version": 2, 4 | "controller": { 5 | "options": { 6 | "shutdown": ["shutdown_on_shutdown_requested"], 7 | "enable_parallel_worker_start": true 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /crossbar/edge/node/config/pairme.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/crossbario/crossbar/master/crossbar.json", 3 | "version": 2, 4 | "workers": [ 5 | { 6 | "type": "router", 7 | "realms": [], 8 | "transports": [ 9 | { 10 | "type": "web", 11 | "endpoint": { 12 | "type": "tcp", 13 | "port": 8080 14 | }, 15 | "paths": { 16 | "/": { 17 | "type": "pairme" 18 | } 19 | } 20 | } 21 | ] 22 | } 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /crossbar/edge/node/tests/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | # Don't ask me why this is needed, Sublime / py.test is an interesting 8 | # combination ... 9 | -------------------------------------------------------------------------------- /crossbar/edge/webservice/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from .pairme import RouterWebServicePairMe 9 | 10 | __all__ = ('RouterWebServicePairMe', ) 11 | -------------------------------------------------------------------------------- /crossbar/edge/worker/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | -------------------------------------------------------------------------------- /crossbar/edge/worker/monitor/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from crossbar.edge.worker.monitor._self import SelfMonitor 9 | from crossbar.edge.worker.monitor._hardware import HWMonitor 10 | from crossbar.edge.worker.monitor._network import NetMonitor 11 | from crossbar.edge.worker.monitor._storage import StorageMonitor 12 | from crossbar.edge.worker.monitor._system import SystemMonitor 13 | from crossbar.edge.worker.monitor._memory import MemoryMonitor 14 | from crossbar.edge.worker.monitor._cpu import CPUMonitor 15 | from crossbar.edge.worker.monitor._disk import IOMonitor 16 | from crossbar.edge.worker.monitor._process import ProcessMonitor 17 | 18 | __all__ = ('MONITORS', ) 19 | 20 | # class map: monitor name -> monitor class 21 | MONITORS = { 22 | SelfMonitor.ID: SelfMonitor, 23 | HWMonitor.ID: HWMonitor, 24 | NetMonitor.ID: NetMonitor, 25 | StorageMonitor.ID: StorageMonitor, 26 | SystemMonitor.ID: SystemMonitor, 27 | MemoryMonitor.ID: MemoryMonitor, 28 | CPUMonitor.ID: CPUMonitor, 29 | IOMonitor.ID: IOMonitor, 30 | ProcessMonitor.ID: ProcessMonitor, 31 | } 32 | -------------------------------------------------------------------------------- /crossbar/edge/worker/monitor/_network.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | import psutil 9 | 10 | from crossbar.edge.worker.monitor._base import Monitor 11 | from txaio import perf_counter_ns 12 | 13 | __all__ = ('NetMonitor', ) 14 | 15 | 16 | class NetMonitor(Monitor): 17 | """ 18 | Network monitoring via psutils. 19 | """ 20 | 21 | ID = u'network' 22 | 23 | def poll(self): 24 | """ 25 | Measure current stats value and return new stats. 26 | """ 27 | hdata = Monitor.poll(self) 28 | 29 | start = perf_counter_ns() 30 | 31 | counters = {} 32 | io_counters = psutil.net_io_counters(True) 33 | for dev in io_counters: 34 | if dev.startswith('virbr') or dev.startswith('lo') or dev.startswith('docker'): 35 | continue 36 | counters[dev] = io_counters[dev]._asdict() 37 | 38 | hdata['net_io_counters'] = counters 39 | hdata['net_if_addrs'] = psutil.net_if_addrs() 40 | 41 | hdata[u'elapsed'] = perf_counter_ns() - start 42 | 43 | self._last_value = hdata 44 | 45 | return hdata 46 | -------------------------------------------------------------------------------- /crossbar/edge/worker/monitor/_system.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | import os 9 | import psutil 10 | 11 | from crossbar.edge.worker.monitor._base import Monitor 12 | from txaio import perf_counter_ns 13 | 14 | __all__ = ('SystemMonitor', ) 15 | 16 | 17 | class SystemMonitor(Monitor): 18 | """ 19 | System monitoring via psutils. 20 | """ 21 | 22 | ID = u'system' 23 | 24 | def poll(self): 25 | hdata = Monitor.poll(self) 26 | 27 | start = perf_counter_ns() 28 | 29 | hdata['cpu'] = psutil.cpu_times_percent()._asdict() 30 | hdata['memory'] = psutil.virtual_memory()._asdict() 31 | hdata['loadavg'] = os.getloadavg() 32 | 33 | # uptime, as all durations, is in ns 34 | hdata['uptime'] = int(hdata['timestamp'] - psutil.boot_time() * 10**10) 35 | 36 | hdata[u'elapsed'] = perf_counter_ns() - start 37 | 38 | self._last_value = hdata 39 | 40 | return hdata 41 | -------------------------------------------------------------------------------- /crossbar/edge/worker/xbr/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from crossbar.edge.worker.xbr._marketmaker import MarketMaker 9 | from crossbar.edge.worker.xbr._authenticator import Authenticator 10 | 11 | __all__ = ('MarketMaker', 'Authenticator') 12 | -------------------------------------------------------------------------------- /crossbar/edge/worker/xbr/_util.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | import six 8 | 9 | from crossbar._util import hl 10 | 11 | 12 | def hlval(val): 13 | return hl('{}'.format(val), color='white', bold=True) 14 | 15 | 16 | def hlcontract(oid): 17 | if not isinstance(oid, six.text_type): 18 | oid = '{}'.format(oid) 19 | return hl('<{}>'.format(oid), color='magenta', bold=True) 20 | -------------------------------------------------------------------------------- /crossbar/functest_helpers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar/functest_helpers/__init__.py -------------------------------------------------------------------------------- /crossbar/functest_helpers/auth.py: -------------------------------------------------------------------------------- 1 | from autobahn.twisted.util import sleep 2 | 3 | 4 | def setup_auth(session, details): 5 | def register(_): 6 | def authenticate(*args, **kw): 7 | print("test.authenticate: {} {}".format(args, kw)) 8 | return { 9 | "allow": False, 10 | "role": "role0", 11 | # corresponds to a private-key of all "a"s 12 | "pubkey": "e734ea6c2b6257de72355e472aa05a4c487e6b463c029ed306df2f01b5636b58", 13 | } 14 | 15 | reg = session.register(authenticate, u"test.authenticate") 16 | print("registered: {}\n\n\n".format(reg)) 17 | return reg 18 | 19 | # we wait here to simulate slow startup of the authenticator 20 | d = sleep(5) 21 | d.addCallback(register) 22 | return d 23 | -------------------------------------------------------------------------------- /crossbar/functest_helpers/shutdown_test.py: -------------------------------------------------------------------------------- 1 | """ 2 | Helpers for test_cb_shutdown.py 3 | """ 4 | 5 | from twisted.internet import reactor, task 6 | 7 | 8 | def good_join(session, details): 9 | print("good join: {}".format(details)) 10 | 11 | def foo(): 12 | return "foo" 13 | 14 | session.register(foo, u"foo") 15 | return task.deferLater(reactor, 5, lambda: None) 16 | 17 | 18 | def failed_join(session, details): 19 | print("failed join: {}".format(details)) 20 | 21 | # we wait more than 2 seconds here to avoid the "component exited 22 | # really quickly, shut down the node" code in 23 | # crossbar/node/node.py 24 | 25 | def fail(): 26 | raise RuntimeError("the bad stuff") 27 | 28 | return task.deferLater(reactor, 5, fail) 29 | 30 | 31 | def join_then_close(session, details): 32 | print("join then fail: {}".format(details)) 33 | 34 | def fail(): 35 | session.disconnect() 36 | 37 | return task.deferLater(reactor, 5, fail) 38 | -------------------------------------------------------------------------------- /crossbar/master/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from autobahn import xbr 9 | from crossbar._version import __version__, __build__ 10 | 11 | import txaio 12 | 13 | txaio.use_twisted() 14 | 15 | from crossbar.master.personality import Personality # noqa 16 | 17 | __all__ = ('__version__', '__build__', 'Personality', 'xbr') 18 | __doc__ = Personality.DESC 19 | -------------------------------------------------------------------------------- /crossbar/master/api/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from typing import List, Union # noqa 9 | 10 | from crossbar.master.api.remote import RemoteApi # noqa 11 | from crossbar.master.api.node import RemoteNodeApi 12 | # from crossbar.master.api.nativeprocess import RemoteNativeProcessApi 13 | from crossbar.master.api.worker import RemoteWorkerApi 14 | from crossbar.master.api.router import RemoteRouterApi 15 | from crossbar.master.api.container import RemoteContainerApi 16 | from crossbar.master.api.proxy import RemoteProxyApi 17 | from crossbar.master.api.tracing import RemoteTracingApi 18 | from crossbar.master.api.docker import RemoteDockerApi 19 | from crossbar.master.api.wamp import RemoteWampApi 20 | 21 | APIS = [] # type: List[Union[RemoteApi, RemoteWampApi]] 22 | APIS.append(RemoteNodeApi()) 23 | # APIS.append(RemoteNativeProcessApi()) 24 | APIS.append(RemoteWorkerApi()) 25 | APIS.append(RemoteRouterApi()) 26 | APIS.append(RemoteContainerApi()) 27 | APIS.append(RemoteProxyApi()) 28 | APIS.append(RemoteTracingApi()) 29 | APIS.append(RemoteDockerApi()) 30 | APIS.append(RemoteWampApi()) 31 | -------------------------------------------------------------------------------- /crossbar/master/api/container.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.api.remote import RemoteApi 9 | 10 | __all__ = ('RemoteContainerApi', ) 11 | 12 | 13 | class RemoteContainerApi(RemoteApi): 14 | 15 | # remote procedures and topics are exposed under this prefix 16 | PREFIX = u'crossbarfabriccenter.remote.container.' 17 | 18 | PROCS = { 19 | # these are worker level procedures 20 | u'worker': [ 21 | (u'get_components', u'get_components'), 22 | (u'get_component', u'get_component'), 23 | (u'start_component', u'start_component'), 24 | (u'stop_component', u'stop_component'), 25 | ], 26 | } 27 | 28 | EVENTS = { 29 | # these are worker level topics 30 | u'worker': [ 31 | u'on_container_component_starting', 32 | u'on_container_component_started', 33 | u'on_container_component_stopping', 34 | u'on_container_component_stopped', 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /crossbar/master/api/tracing.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.api.remote import RemoteApi 9 | 10 | __all__ = ('RemoteTracingApi', ) 11 | 12 | 13 | class RemoteTracingApi(RemoteApi): 14 | 15 | # remote procedures and topics are exposed under this prefix 16 | PREFIX = u'crossbarfabriccenter.remote.tracing.' 17 | 18 | PROCS = { 19 | # these are worker level procedures 20 | u'worker': [ 21 | u'get_traces', 22 | u'get_trace', 23 | u'start_trace', 24 | u'stop_trace', 25 | u'get_trace_data', 26 | ], 27 | } 28 | 29 | EVENTS = { 30 | # these are worker level topics 31 | u'worker': [ 32 | u'on_trace_started', 33 | u'on_trace_stopped', 34 | u'on_trace_data', 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /crossbar/master/api/worker.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.api.remote import RemoteApi 9 | 10 | __all__ = ('RemoteWorkerApi', ) 11 | 12 | 13 | class RemoteWorkerApi(RemoteApi): 14 | 15 | PREFIX = u'crossbarfabriccenter.remote.worker.' 16 | 17 | PROCS = { 18 | # these are worker level procedures 19 | u'worker': [ 20 | u'shutdown', 21 | u'get_status', 22 | u'get_pythonpath', 23 | u'add_pythonpath', 24 | u'get_cpu_affinity', 25 | u'set_cpu_affinity', 26 | u'get_profilers', 27 | u'start_profiler', 28 | u'get_profile', 29 | u'get_process_info', 30 | u'get_process_stats', 31 | u'set_process_stats_monitoring', 32 | ], 33 | } 34 | 35 | EVENTS = { 36 | # these are worker level topics 37 | u'worker': [ 38 | u'on_worker_log', 39 | u'on_profile_started', 40 | u'on_profile_finished', 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /crossbar/master/arealm/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.arealm.arealm import ApplicationRealmManager 9 | 10 | __all__ = ('ApplicationRealmManager', ) 11 | -------------------------------------------------------------------------------- /crossbar/master/cluster/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.cluster.routercluster import RouterClusterManager 9 | from crossbar.master.cluster.webcluster import WebClusterManager 10 | 11 | __all__ = ( 12 | 'WebClusterManager', 13 | 'RouterClusterManager', 14 | ) 15 | -------------------------------------------------------------------------------- /crossbar/master/mrealm/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.mrealm.controller import MrealmController 9 | 10 | __all__ = ('MrealmController', ) 11 | -------------------------------------------------------------------------------- /crossbar/master/node/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.node.controller import DomainManager, DomainController 9 | 10 | __all__ = ( 11 | 'DomainManager', 12 | 'DomainController', 13 | ) 14 | -------------------------------------------------------------------------------- /crossbar/master/node/node.ini: -------------------------------------------------------------------------------- 1 | # geth cluster for CFC node to talk to the blockchain 2 | [geth] 3 | url=http://localhost:9003 4 | 5 | # Mailgun email gateway configuration and security credentials 6 | [mailgun] 7 | url=https://api.mailgun.net/v3/mailing.crossbar.io/messages 8 | key=key-1379af54ab7439eec2fbd58505b1a8ec 9 | 10 | [smtp] 11 | server=smtp.mailgun.org 12 | sender=fabric@crossbar.io 13 | password=3kh9umujora5 14 | 15 | # CFC web transport listening endpoint configuration 16 | [endpoint] 17 | hostname=fabric.crossbario.com,cf1.crossbario.com 18 | port=443 19 | tls=1 20 | tls_key=server.key 21 | tls_cert=server.crt 22 | tls_chain_certs=lets-encrypt-x3-cross-signed.pem 23 | tls_dhparam=dhparam.pem 24 | tls_ciphers=ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256 25 | -------------------------------------------------------------------------------- /crossbar/master/webservice/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from .registerme import RouterWebServiceRegisterMe 9 | 10 | __all__ = ('RouterWebServiceRegisterMe', ) 11 | -------------------------------------------------------------------------------- /crossbar/master/webservice/templates/cfc_debug_resource.html: -------------------------------------------------------------------------------- 1 | {% extends "cb_base.html" %} 2 | 3 | {% block content %} 4 | 5 |

CFC Web service test resource

6 |

Current time: {{ now }}

7 | 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /crossbar/master/webservice/templates/xbr-api-hub-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar/master/webservice/templates/xbr-api-hub-logo.png -------------------------------------------------------------------------------- /crossbar/master/webservice/templates/xbr-idl-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar/master/webservice/templates/xbr-idl-logo.png -------------------------------------------------------------------------------- /crossbar/master/xbr/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Master 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.master.xbr._marketplace import MarketPlace 9 | 10 | __all__ = ('MarketPlace', ) 11 | -------------------------------------------------------------------------------- /crossbar/master/xbr/_marketplace.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from autobahn import wamp 9 | 10 | __all__ = ('MarketPlace', ) 11 | 12 | 13 | class MarketPlace(object): 14 | """ 15 | XBR Market Maker. 16 | """ 17 | @wamp.register(None) 18 | def publish(self, publisher_id, api_id, service_id, price=None, details=None): 19 | """ 20 | Publish a data service implementing a data service API to the market place. 21 | 22 | :param api_id: 23 | :param service_id: 24 | :param price: 25 | :param details: 26 | :return: 27 | """ 28 | raise NotImplementedError() 29 | -------------------------------------------------------------------------------- /crossbar/network/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | import txaio 9 | 10 | txaio.use_twisted() 11 | 12 | from crossbar.network._authenticator import Authenticator as XbrNetworkAuthenticator 13 | from crossbar.network._api import Network as XbrNetwork 14 | from crossbar.network.personality import Personality 15 | 16 | __doc__ = Personality.DESC 17 | 18 | __all__ = ( 19 | 'Personality', 20 | 'XbrNetwork', 21 | 'XbrNetworkAuthenticator', 22 | ) 23 | -------------------------------------------------------------------------------- /crossbar/network/_error.py: -------------------------------------------------------------------------------- 1 | # coding=utf8 2 | 3 | ############################################################################## 4 | # 5 | # Crossbar.io 6 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 7 | # 8 | ############################################################################## 9 | 10 | from autobahn.wamp.exception import ApplicationError 11 | from autobahn.wamp.uri import error 12 | 13 | 14 | @error('xbr.network.error.username_already_exists') 15 | class UsernameAlreadyExists(ApplicationError): 16 | """ 17 | An action could not be performed because the chosen username already exists. 18 | """ 19 | def __init__(self, username, alt_username=None): 20 | if alt_username: 21 | msg = 'username "{}" already exists. alternative available username "{}"'.format(username, alt_username) 22 | else: 23 | msg = 'username "{}" already exists'.format(username) 24 | super().__init__('xbr.network.error.username_already_exists', msg, alt_username=alt_username) 25 | -------------------------------------------------------------------------------- /crossbar/network/node/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from crossbar.network.node.node import XbrNetworkNode, XbrNetworkNodeControllerSession 9 | 10 | __all__ = ('XbrNetworkNode', 'XbrNetworkNodeControllerSession') 11 | -------------------------------------------------------------------------------- /crossbar/network/node/node.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | from crossbar.edge.node import FabricNode, FabricNodeControllerSession 9 | 10 | 11 | class XbrNetworkNodeControllerSession(FabricNodeControllerSession): 12 | pass 13 | 14 | 15 | class XbrNetworkNode(FabricNode): 16 | """ 17 | Crossbar.io node personality. 18 | """ 19 | DEFAULT_CONFIG_PATH = 'network/node/config.json' 20 | NODE_CONTROLLER = XbrNetworkNodeControllerSession 21 | -------------------------------------------------------------------------------- /crossbar/network/personality.py: -------------------------------------------------------------------------------- 1 | ############################################################################## 2 | # 3 | # Crossbar.io 4 | # Copyright (C) Crossbar.io Technologies GmbH. All rights reserved. 5 | # 6 | ############################################################################## 7 | 8 | import txaio 9 | 10 | from crossbar.network.node.node import XbrNetworkNode 11 | from crossbar.edge.personality import Personality as _Personality 12 | 13 | 14 | class Personality(_Personality): 15 | 16 | log = txaio.make_logger() 17 | 18 | NAME = 'network' 19 | 20 | Node = XbrNetworkNode 21 | 22 | def check_config(self, personality): 23 | res = _Personality.check_config(self, personality) 24 | return res 25 | 26 | def check_config_file(self, personality, config_path): 27 | res = _Personality.check_config_file(self, personality, config_path) 28 | return res 29 | -------------------------------------------------------------------------------- /crossbar/newsfragments/.gitignore: -------------------------------------------------------------------------------- 1 | !.gitignore 2 | -------------------------------------------------------------------------------- /crossbar/newsfragments/1531.enhancement: -------------------------------------------------------------------------------- 1 | crossbar keygen output is now in hex (configuration uses hex) -------------------------------------------------------------------------------- /crossbar/newsfragments/1607.feature: -------------------------------------------------------------------------------- 1 | Added container shutdown and restart modes, and got rid of a 2 | special-case for controller shutdown (if any container-component 3 | failed in the first two seconds, the node would shutdown). Use 4 | shutdown trigger `shutdown_on_worker_exit_with_error' along with 5 | container shutdown option `shutdown-on-any-component-failed` to 6 | maintain similar behavior. -------------------------------------------------------------------------------- /crossbar/newsfragments/208.bugfix: -------------------------------------------------------------------------------- 1 | remove broken WAMP-Ticket auth from REST Bridge -------------------------------------------------------------------------------- /crossbar/node/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/node/templates/README.md: -------------------------------------------------------------------------------- 1 | Template for initialization of a new Crossbar.io node with a simple (insecure) development configuration. 2 | -------------------------------------------------------------------------------- /crossbar/node/templates/default/README.md: -------------------------------------------------------------------------------- 1 | Generated from Crossbar.io default node template. 2 | -------------------------------------------------------------------------------- /crossbar/node/templates/default/web/README.md: -------------------------------------------------------------------------------- 1 | Put your Web files here. Eg a "index.html" file would automatically render (and hide this otherwise generated directory listing.) 2 | 3 | Other URLs and Web services configured in this example node configuration: 4 | 5 | * `/ws`: WAMP-over-WebSocket endpoint with default "realm1" (anonymous authentication and everything allowed!) 6 | * `/info`: Node info page 7 | -------------------------------------------------------------------------------- /crossbar/node/test/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/quickstart/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Quickstart 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/router/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | 9 | class RouterOptions(object): 10 | """ 11 | Router options for creating routers. 12 | """ 13 | 14 | URI_CHECK_LOOSE = "loose" 15 | URI_CHECK_STRICT = "strict" 16 | 17 | def __init__(self, uri_check=None, event_dispatching_chunk_size=None): 18 | """ 19 | 20 | :param uri_check: Method which should be applied to check WAMP URIs. 21 | :type uri_check: str 22 | """ 23 | self.uri_check = uri_check or RouterOptions.URI_CHECK_STRICT 24 | self.event_dispatching_chunk_size = event_dispatching_chunk_size or 100 25 | 26 | def __str__(self): 27 | return ("RouterOptions(uri_check = {0}, " 28 | "event_dispatching_chunk_size = {1})".format( 29 | self.uri_check, 30 | self.event_dispatching_chunk_size, 31 | )) 32 | 33 | 34 | class NotAttached(RuntimeError): 35 | """ 36 | Internal error: session not attached to router. 37 | """ 38 | -------------------------------------------------------------------------------- /crossbar/router/test/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/shell/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Shell 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | """Crossbar.io Shell (cbsh) is a tool belt for crossbar.""" 8 | 9 | import txaio 10 | 11 | txaio.use_twisted() # noqa 12 | 13 | from autobahn import xbr 14 | from crossbar._version import __version__, __build__ 15 | 16 | __all__ = ( 17 | '__version__', 18 | '__build__', 19 | 'xbr', 20 | ) 21 | -------------------------------------------------------------------------------- /crossbar/shell/idl/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Shell 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/shell/idl/reflection.bfbs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar/shell/idl/reflection.bfbs -------------------------------------------------------------------------------- /crossbar/shell/reflection/BaseType.py: -------------------------------------------------------------------------------- 1 | # automatically generated by the FlatBuffers compiler, do not modify 2 | 3 | # namespace: reflection 4 | 5 | class BaseType(object): 6 | None_ = 0 7 | UType = 1 8 | Bool = 2 9 | Byte = 3 10 | UByte = 4 11 | Short = 5 12 | UShort = 6 13 | Int = 7 14 | UInt = 8 15 | Long = 9 16 | ULong = 10 17 | Float = 11 18 | Double = 12 19 | String = 13 20 | Vector = 14 21 | Obj = 15 22 | Union = 16 23 | -------------------------------------------------------------------------------- /crossbar/shell/reflection/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Shell 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from .BaseType import BaseType 9 | from .Enum import Enum 10 | from .EnumVal import EnumVal 11 | from .Field import Field 12 | from .KeyValue import KeyValue 13 | from .Object import Object 14 | from .RPCCall import RPCCall 15 | from .Schema import Schema 16 | from .Service import Service 17 | from .Type import Type 18 | -------------------------------------------------------------------------------- /crossbar/shell/tests/test_shell_util.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Crossbar.io Shell 4 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 5 | # 6 | ############################################################################### 7 | 8 | from crossbar.shell.util import localnow 9 | 10 | 11 | def test_localnow(): 12 | now = localnow() 13 | assert isinstance(now, str) 14 | 15 | 16 | class TestClass(object): 17 | def test_one(self): 18 | assert True 19 | -------------------------------------------------------------------------------- /crossbar/test/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | from os import getcwd, chdir 9 | 10 | from twisted.trial.unittest import TestCase as _TestCase 11 | 12 | 13 | class TestCase(_TestCase): 14 | """ 15 | A Trial TestCase that makes sure that it is in the same directory when it 16 | finishes as when it began. This is because the CLI changes directories, 17 | meaning we can end up making thousands deep file structures. 18 | """ 19 | def setUp(self): 20 | cb_original_dir = getcwd() 21 | self.addCleanup(lambda: chdir(cb_original_dir)) 22 | return super(TestCase, self).setUp() 23 | -------------------------------------------------------------------------------- /crossbar/test/test_compat.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | from twisted.trial.unittest import TestCase 9 | 10 | from crossbar import _compat as compat 11 | 12 | 13 | class NativeStringTestCase(TestCase): 14 | """ 15 | Tests for C{crossbar._compat.native_string}. 16 | """ 17 | def test_bytes_always_native(self): 18 | """ 19 | C{native_string}, with a bytes input, will always give a str output. 20 | """ 21 | self.assertEqual(type(compat.native_string(b"foo")), str) 22 | 23 | def test_unicode_not_allowed(self): 24 | """ 25 | A unicode argument should never be allowed. 26 | """ 27 | with self.assertRaises(ValueError): 28 | compat.native_string("bar") 29 | -------------------------------------------------------------------------------- /crossbar/test/test_config1.json: -------------------------------------------------------------------------------- 1 | { 2 | "controller": { 3 | "id": "mynode1", 4 | "options": { 5 | "title": "Kernreaktor 7", 6 | "shutdown": ["shutdown_on_last_worker_exit"] 7 | }, 8 | "fabric-center": { 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /crossbar/test/test_config2.json: -------------------------------------------------------------------------------- 1 | { 2 | "workers": [ 3 | "COPY", 4 | "COPY", 5 | { 6 | "id": "wstestee1", 7 | "type": "websocket-testee", 8 | "transport": { 9 | "type": "websocket", 10 | "endpoint": { 11 | "type": "tcp", 12 | "interface": "127.0.0.1", 13 | "port": 9000, 14 | "shared": true, 15 | "backlog": 500 16 | } 17 | }, 18 | "options": { 19 | "title": "Crossbar.io WebSocket Testee 1/2", 20 | "cpu_affinity": [0] 21 | } 22 | }, 23 | { 24 | "id": "wstestee2", 25 | "type": "websocket-testee", 26 | "transport": { 27 | "type": "websocket", 28 | "endpoint": { 29 | "type": "tcp", 30 | "interface": "127.0.0.1", 31 | "port": 9000, 32 | "shared": true, 33 | "backlog": 500 34 | } 35 | }, 36 | "options": { 37 | "title": "Crossbar.io WebSocket Testee 2/2", 38 | "cpu_affinity": [1] 39 | } 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /crossbar/test/test_config3.json: -------------------------------------------------------------------------------- 1 | { 2 | "workers": [ 3 | { 4 | "transports": [ 5 | "COPY", 6 | { 7 | "endpoint": { 8 | "port": 443, 9 | "backlog": 500, 10 | "tls": { 11 | "certificate": "server.crt", 12 | "key": "server.key", 13 | "dhparam": "dhparam.pem", 14 | "ca_certificates": [ 15 | "intermediate.cert.pem", 16 | "ca.cert.pem" 17 | ] 18 | } 19 | } 20 | } 21 | ] 22 | }, 23 | "COPY" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /crossbar/webservice/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/webservice/templates/cb_lp_notice.html: -------------------------------------------------------------------------------- 1 | {% extends "cb_base.html" %} 2 | 3 | {% block content %} 4 | 5 |

6 | This is a WAMP-over-LongPoll transport endpoint on your Crossbar.io server. 7 | 8 | Applications talk to me speaking the WAMP-over-LongPoll protocol. 9 |

10 |

11 | If you are a human, this is likely not what you want to do;) Try here instead. 12 |

13 |
14 |
15 | Served for {{ peer }} from Crossbar.io node worker with PID {{ workerPid }}. 16 |
17 |
18 | 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /crossbar/webservice/templates/cb_ws_status.html: -------------------------------------------------------------------------------- 1 | {% extends "cb_base.html" %} 2 | 3 | {% block content %} 4 | 5 |

6 | This is a WAMP-over-WebSocket transport endpoint on your Crossbar.io server. 7 | 8 | Applications talk to me speaking the WAMP-over-WebSocket protocol. 9 |

10 | {% if wsUri %} 11 |

12 | Clients connect using this WebSocket URL: 13 |

14 |
15 |
{{ wsUri }}
16 |
17 | {% endif %} 18 |

19 | If you are a human, this is likely not what you want to do;) Try here instead. 20 |

21 |
22 |
23 | Served for from Crossbar.io router worker with PID {{ workerPid }}. 24 |
25 |
26 | 27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /crossbar/webservice/templates/cb_ws_testee_status.html: -------------------------------------------------------------------------------- 1 | {% extends "cb_base.html" %} 2 | 3 | {% block content %} 4 | 5 |

6 | This is a WebSocket Testee Endpoint of your Crossbar.io server. 7 | Clients talk to me speaking WebSocket by connecting to: 8 |

9 |
10 |
11 |
{{ wsUri }}
12 |
13 |
14 |

15 | If you are a human, this is likely not what you want to do;) Try here instead. 16 |

17 |
18 | 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /crossbar/webservice/templates/wamp_catalog_enum.html: -------------------------------------------------------------------------------- 1 | {% extends "wamp_catalog_base.html" %} 2 | 3 | {% block header %} 4 | {% endblock %} 5 | 6 | {% block content %} 7 |

Enum

8 |
9 | {{ repo.basemodule }} 10 |
11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /crossbar/webservice/templates/wamp_catalog_home.html: -------------------------------------------------------------------------------- 1 | {% extends "wamp_catalog_base.html" %} 2 | 3 | {% block header %} 4 | {% endblock %} 5 | 6 | {% block content %} 7 |

Home

8 |

(created {{ created }})

9 | 10 |

Schemas

11 | 12 | {% for schema in repo.schemas.values() %} 13 | 14 | 15 | 16 | {% endfor %} 17 |
{{ schema.file_name }}
18 | 19 |

Services

20 | 21 | {% for svc in repo.services.values() %} 22 | 23 | 24 | 25 | 26 | {% endfor %} 27 |
{{ svc.name }}{{ svc.docs }}
28 | 29 |

Tables and Structs

30 | 31 | {% for obj in repo.objs.values() %} 32 | 33 | 34 | 35 | 36 | {% endfor %} 37 |
{{ obj.name }}{{ obj.docs }}
38 | 39 |

Enumerations

40 | 41 | {% for enum in repo.enums.values() %} 42 | 43 | 44 | 45 | 46 | {% endfor %} 47 |
{{ enum.name }}{{ enum.docs }}
48 | 49 | {% endblock %} 50 | -------------------------------------------------------------------------------- /crossbar/webservice/templates/wamp_catalog_service.html: -------------------------------------------------------------------------------- 1 | {% extends "wamp_catalog_base.html" %} 2 | 3 | {% block header %} 4 | {% endblock %} 5 | 6 | {% block content %} 7 |

Service

8 |
9 | {{ repo.basemodule }} 10 |
11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /crossbar/webservice/test/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | -------------------------------------------------------------------------------- /crossbar/webservice/test/templates/greeting.html: -------------------------------------------------------------------------------- 1 | 2 | Greeting 3 | 4 |

Greeting

5 |

6 | Hi {{ name }}! This is your personalized greeting message: 7 |

8 | {{ message }} 9 | 10 | 11 | -------------------------------------------------------------------------------- /crossbar/webservice/test/templates/product_report.html: -------------------------------------------------------------------------------- 1 | 2 | Report 3 | 4 |

Product Report

5 |
This is a product report for product id: {{product_id}}
6 |
Report is: {{report}}
7 |
For month {{month}} year {{year}} 8 |
Flasky: {{flasky}}
9 | 10 | 11 | -------------------------------------------------------------------------------- /crossbar/worker/sample/__init__.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | # 9 | # the imports here are important (though not used in CB unless configured), 10 | # because of single-exe packaging and pyinstaller otherwise missing deps 11 | # 12 | 13 | from crossbar.worker.sample._logging import LogTester # noqa 14 | -------------------------------------------------------------------------------- /crossbar/worker/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar/worker/test/__init__.py -------------------------------------------------------------------------------- /crossbar/worker/test/examples/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/crossbar/worker/test/examples/__init__.py -------------------------------------------------------------------------------- /crossbar/worker/test/examples/badclass.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | 9 | class AppSession(object): 10 | def __init__(self, ignored): 11 | """ 12 | A AppSession that doesn't descend from ApplicationSession. 13 | """ 14 | -------------------------------------------------------------------------------- /crossbar/worker/test/examples/goodclass.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | from autobahn.twisted.wamp import ApplicationSession 9 | from autobahn.wamp.types import PublishOptions 10 | 11 | from twisted.internet.defer import inlineCallbacks 12 | 13 | _ = [] 14 | 15 | 16 | class AppSession(ApplicationSession): 17 | @inlineCallbacks 18 | def onJoin(self, details): 19 | yield self.subscribe(_.append, "com.test") 20 | yield self.publish("com.test", "woo", options=PublishOptions(exclude_me=False)) 21 | -------------------------------------------------------------------------------- /crossbar/worker/test/examples/importerror.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | import kjcbdkfbsdonfvspdmcsnofsn # noqa 9 | -------------------------------------------------------------------------------- /crossbar/worker/test/examples/syntaxerror.py: -------------------------------------------------------------------------------- 1 | ##################################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH 4 | # SPDX-License-Identifier: EUPL-1.2 5 | # 6 | ##################################################################################### 7 | 8 | class # noqa 9 | -------------------------------------------------------------------------------- /deploy-docs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set +o verbose -o errexit 4 | 5 | export AWS_S3_BUCKET_NAME=crossbar.io 6 | export AWS_DEFAULT_REGION=eu-west-1 7 | 8 | echo 'building docs ..' 9 | 10 | tox -c tox.ini -e sphinx 11 | 12 | echo 'uploading docs to bucket "arn:aws:s3:::crossbar.io" ..' 13 | 14 | aws s3 cp --recursive --acl public-read ${HOME}/crossbar-docs s3://${AWS_S3_BUCKET_NAME}/docs 15 | 16 | echo '' 17 | echo 'docs ready at:' 18 | echo '' 19 | echo ' https://s3-eu-west-1.amazonaws.com/crossbar.io/docs/index.html' 20 | echo '' 21 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | ganache: 4 | # https://github.com/trufflesuite/ganache-cli/issues/593 5 | # image: crossbario/crossbarfx-blockchain:latest 6 | image: trufflesuite/ganache-cli:v6.2.4 7 | # UID:GID => id -u, id -g 8 | # user: "1000:1000" 9 | # network_mode: host 10 | ports: 11 | - "1545:1545" 12 | volumes: 13 | # mount a data location from the host into the container - read-write 14 | - "${PWD}/test/ganache/.data:/ganache:rw" 15 | command: 16 | # https://github.com/trufflesuite/ganache-cli#using-ganache-cli 17 | - "--accounts" 18 | - "15" 19 | - "--defaultBalanceEther" 20 | - "1000" 21 | # - "--deterministic" 22 | - "--mnemonic" 23 | - "myth like bonus scare over problem client lizard pioneer submit female collect" 24 | - "--gasLimit" 25 | - "0xfffffffffff" 26 | - "--gasPrice" 27 | - "1" 28 | - "--port" 29 | - "1545" 30 | - "--networkId" 31 | - "5777" 32 | - "--db" 33 | - "/ganache" 34 | -------------------------------------------------------------------------------- /docs-cfx/Documentation-License.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | Crossbar.io Documentation License 4 | ==================================== 5 | 6 | Copyright for the Crossbar.io Documentation (C) Crossbar.io Technologies GmbH. 7 | Licensed under the `Creative Commons CC BY-NC-ND 4.0 license `__. 8 | 9 | "Crossbar.io", "WAMP" and "XBR" are trademarks of Crossbar.io Technologies GmbH. 10 | 11 | This license allows you to copy and redistribute the material in any medium or format as long as you 12 | 13 | 1. attribute the source, 14 | 2. the material remains unchanged and 15 | 3. it is not used for commercial purposes. 16 | 17 | Attribution details: 18 | 19 | (c) by Crossbar.io Technologies GmbH, material licensed under the 20 | CC-BY-NC-ND 4.0, provided as-is without any warranties. 21 | 22 | For more details (and the legally binding conditions), please see the `Creative Commons license page `__. 23 | 24 | Note to Contributors to this documentation 25 | ------------------------------------------ 26 | 27 | By contributing, you accept that the above license applies to your contribution. 28 | -------------------------------------------------------------------------------- /docs-cfx/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | SPHINXPROJ = CrossbarioFabric 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -------------------------------------------------------------------------------- /docs-cfx/_static/cb-internal-architecture.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cb-internal-architecture.odg -------------------------------------------------------------------------------- /docs-cfx/_static/cb-internal-architecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cb-internal-architecture.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/cf-scaleout-arch-diagram.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cf-scaleout-arch-diagram.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/cf-scaleout-arch-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cf-scaleout-arch-diagram.png -------------------------------------------------------------------------------- /docs-cfx/_static/cf-scaleout-arch.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cf-scaleout-arch.odg -------------------------------------------------------------------------------- /docs-cfx/_static/cf-scaleout-arch.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cf-scaleout-arch.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/cfc-oem-overview.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfc-oem-overview.odg -------------------------------------------------------------------------------- /docs-cfx/_static/cfc-oem-overview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfc-oem-overview.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/cfc-system-architecture.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfc-system-architecture.odg -------------------------------------------------------------------------------- /docs-cfx/_static/cfc-system-architecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfc-system-architecture.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/cfc_database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfc_database.png -------------------------------------------------------------------------------- /docs-cfx/_static/cfx-clustering-elements.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfx-clustering-elements.odg -------------------------------------------------------------------------------- /docs-cfx/_static/cfx-clustering-elements.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfx-clustering-elements.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/cfx_environment_variables.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfx_environment_variables.ods -------------------------------------------------------------------------------- /docs-cfx/_static/cfxdb_database_schema.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfxdb_database_schema.ods -------------------------------------------------------------------------------- /docs-cfx/_static/cfxdb_database_schema.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/cfxdb_database_schema.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbar-api-namespaces.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbar-api-namespaces.ods -------------------------------------------------------------------------------- /docs-cfx/_static/crossbar-api-namespaces.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbar-api-namespaces.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbar-rlinks.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbar-rlinks.odg -------------------------------------------------------------------------------- /docs-cfx/_static/crossbar-rlinks.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbar-rlinks.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbar.png -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-aggregator.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-aggregator.odg -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-aggregator.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-aggregator.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-central-control-plane.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-central-control-plane.odg -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-central-control-plane.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-central-control-plane.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-install-from-wheels.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -f /tmp/*.whl 4 | 5 | curl -o /tmp/txaio-latest-py2.py3-none-any.whl https://crossbarbuilder.s3.eu-central-1.amazonaws.com/wheels/txaio-latest-py2.py3-none-any.whl 6 | curl -o /tmp/autobahn-latest-py2.py3-none-any.whl https://crossbarbuilder.s3.eu-central-1.amazonaws.com/wheels/autobahn-latest-py2.py3-none-any.whl 7 | curl -o /tmp/zlmdb-latest-py2.py3-none-any.whl https://crossbarbuilder.s3.eu-central-1.amazonaws.com/wheels/zlmdb-latest-py2.py3-none-any.whl 8 | curl -o /tmp/cfxdb-latest-py2.py3-none-any.whl https://crossbarbuilder.s3.eu-central-1.amazonaws.com/wheels/cfxdb-latest-py2.py3-none-any.whl 9 | curl -o /tmp/crossbar-latest-py2.py3-none-any.whl https://crossbarbuilder.s3.eu-central-1.amazonaws.com/wheels/crossbar-latest-py2.py3-none-any.whl 10 | 11 | pip install /tmp/txaio-latest-py2.py3-none-any.whl 12 | pip install /tmp/autobahn-latest-py2.py3-none-any.whl[all] 13 | pip install /tmp/zlmdb-latest-py2.py3-none-any.whl 14 | pip install /tmp/cfxdb-latest-py2.py3-none-any.whl 15 | pip install /tmp/crossbar-latest-py2.py3-none-any.whl 16 | 17 | which crossbar 18 | 19 | crossbar version 20 | -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-network-architecture-2.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-network-architecture-2.odg -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-network-architecture-2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-network-architecture-2.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-network-architecture.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-network-architecture.odg -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-network-architecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-network-architecture.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-xbr-layers.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-xbr-layers.odg -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx-xbr-layers.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx-xbr-layers.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx.png -------------------------------------------------------------------------------- /docs-cfx/_static/crossbarfx_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/crossbarfx_black.png -------------------------------------------------------------------------------- /docs-cfx/_static/custom.css: -------------------------------------------------------------------------------- 1 | .wy-nav-content { 2 | max-width: 1050px; 3 | } 4 | 5 | /* 6 | .wy-nav-side { 7 | width: 400px !important; 8 | } 9 | 10 | .wy-menu-vertical { 11 | width: 400px !important; 12 | } 13 | 14 | .wy-menu-vertical { 15 | width: 400px !important; 16 | } 17 | */ 18 | -------------------------------------------------------------------------------- /docs-cfx/_static/onboarding/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/onboarding/1.png -------------------------------------------------------------------------------- /docs-cfx/_static/onboarding/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/onboarding/2.png -------------------------------------------------------------------------------- /docs-cfx/_static/onboarding/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/onboarding/3.png -------------------------------------------------------------------------------- /docs-cfx/_static/onboarding/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/onboarding/4.png -------------------------------------------------------------------------------- /docs-cfx/_static/onboarding/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/onboarding/5.png -------------------------------------------------------------------------------- /docs-cfx/_static/onboarding/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/onboarding/6.png -------------------------------------------------------------------------------- /docs-cfx/_static/onboarding/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/onboarding/7.png -------------------------------------------------------------------------------- /docs-cfx/_static/router-worker-vmprof1.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/router-worker-vmprof1.odg -------------------------------------------------------------------------------- /docs-cfx/_static/router-worker-vmprof1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/router-worker-vmprof1.pdf -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/accessing_crossbar_wamp_event_history_from_jupyter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/accessing_crossbar_wamp_event_history_from_jupyter.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_cpython.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_cpython.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_pypy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_pypy.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_pypy_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_pypy_2.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_analyze_clients.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_analyze_clients.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_analyze_transports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_analyze_transports.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_brummer1_load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_brummer1_load.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_router_vmprof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_router_vmprof.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/benchmark_rpc_roundtrip_run.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/cfx-process-structure-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/cfx-process-structure-1.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/cfx-process-structure-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/cfx-process-structure-2.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/cfx-shell-monitor-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/cfx-shell-monitor-1.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/cfx-webcluster-haproxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/cfx-webcluster-haproxy.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/crossbar_on_snapcraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/crossbar_on_snapcraft.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/crossbar_pypy_on_snapcraft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/crossbar_pypy_on_snapcraft.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/crossbar_wamp_calls_between_jupyter_notebooks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/crossbar_wamp_calls_between_jupyter_notebooks.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/crossbarfx_on_dockerhub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/crossbarfx_on_dockerhub.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/crossbarfx_on_dockerhub_tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/crossbarfx_on_dockerhub_tags.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/crossbarfx_workbench_on_dockerhub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/crossbarfx_workbench_on_dockerhub.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/jupyter_setup1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/jupyter_setup1.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/jupyter_setup2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/jupyter_setup2.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/tree-routing-from-node1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/tree-routing-from-node1.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/tree-routing-from-node2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/tree-routing-from-node2.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/tree-routing-from-node3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/tree-routing-from-node3.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/tree-routing-from-node4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/tree-routing-from-node4.png -------------------------------------------------------------------------------- /docs-cfx/_static/screenshots/tree-routing-from-node5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/screenshots/tree-routing-from-node5.png -------------------------------------------------------------------------------- /docs-cfx/_static/webscaling_bigbox_results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/webscaling_bigbox_results.png -------------------------------------------------------------------------------- /docs-cfx/_static/xbr-hardware-identity.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/xbr-hardware-identity.odg -------------------------------------------------------------------------------- /docs-cfx/_static/xbr-hardware-identity.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/_static/xbr-hardware-identity.pdf -------------------------------------------------------------------------------- /docs-cfx/contents.rst: -------------------------------------------------------------------------------- 1 | :tocdepth: 0 2 | :orphan: 3 | 4 | .. _site_contents: 5 | 6 | Contents 7 | ======== 8 | 9 | This is the user reference documentation for Crossbar.io Fabric, the enterprise version of Crossbar.io. 10 | 11 | .. toctree:: 12 | :includehidden: 13 | :maxdepth: 3 14 | 15 | index 16 | gettingstarted/index 17 | management/index 18 | scaling/index 19 | xbr/index 20 | dataplane/index 21 | security_hardening 22 | benchmarks 23 | legal/index 24 | 25 | Indices and tables 26 | ================== 27 | 28 | * :ref:`genindex` 29 | * :ref:`modindex` 30 | * :ref:`search` 31 | -------------------------------------------------------------------------------- /docs-cfx/dataplane/analytics-architectures.rst: -------------------------------------------------------------------------------- 1 | Analytics Architectures 2 | ======================= 3 | 4 | .. centered:: :download:`CrossbarFX Analytics Architectures ` 5 | -------------------------------------------------------------------------------- /docs-cfx/dataplane/eventsdb/analysis.rst: -------------------------------------------------------------------------------- 1 | Data Analysis 2 | ============= 3 | 4 | This page describes analyzing WAMP events persisted in ZLMDB using the 5 | CrossbarFX Workbench, and from plain Python scripts. 6 | 7 | From Python 8 | ----------- 9 | 10 | Installation 11 | ............ 12 | 13 | .. code-block:: console 14 | 15 | pip install cfxdb 16 | 17 | 18 | From CrossbarFX Workbench 19 | ------------------------- 20 | 21 | .. thumbnail:: /_static/screenshots/accessing_crossbar_wamp_event_history_from_jupyter.png 22 | 23 | .. thumbnail:: /_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_cpython.png 24 | 25 | .. thumbnail:: /_static/screenshots/aggregating_crossbar_wamp_event_history_in_jupyter_on_pypy.png 26 | 27 | .. thumbnail:: /_static/screenshots/crossbar_wamp_calls_between_jupyter_notebooks.png 28 | -------------------------------------------------------------------------------- /docs-cfx/dataplane/eventsdb/index.rst: -------------------------------------------------------------------------------- 1 | WAMP Events Database 2 | ==================== 3 | 4 | Crossbar.io (OSS) includes *event history* which allows a WAMP client to retrieve a set of past 5 | events for a subscription. Retrieval is by subscription ID, and for a set number of events. 6 | 7 | CrossbarFX includes *event store* which allows events routed on selected topics to be persisted to disk 8 | and queried over WAMP APIs or directly attaching the underlying *event store* to an application component 9 | for data analysis on the persisted event history. 10 | 11 | .. toctree:: 12 | :maxdepth: 2 13 | 14 | overview 15 | analysis 16 | -------------------------------------------------------------------------------- /docs-cfx/dataplane/zlmdb/export.rst: -------------------------------------------------------------------------------- 1 | Database Export 2 | =============== 3 | 4 | CrossbarFX will allow export of data persisted from a nodes embedded databases into 5 | flat files in **Apache Parquet** format, with optional deflate or snappy compression. 6 | 7 | Flat files are created in a file export area that must be accessible as a local 8 | filesystem on the node. 9 | 10 | Exported files in the file export area can be automatically uploaded and synchronized 11 | to a **blob store** (eg AWS S3) which can serve as the data source or storage of a 12 | Hadoop cluster for historical data analysis. 13 | 14 | Hadoop file format 15 | Apache Spark 16 | 17 | Apache Parquet 18 | https://parquet.apache.org/ 19 | 20 | 21 | Apache Parquet provides a partitioned binary columnar serialization for data frames. It is designed to make reading 22 | and writing data frames efficient, and to make sharing data across data analysis languages easy. Parquet can use a 23 | variety of compression techniques to shrink the file size as much as possible while still maintaining good 24 | read performance. 25 | 26 | https://pandas.pydata.org/pandas-docs/version/0.21/io.html#io-parquet 27 | https://blog.cloudera.com/blog/2016/04/benchmarking-apache-parquet-the-allstate-experience/ 28 | -------------------------------------------------------------------------------- /docs-cfx/dataplane/zlmdb/index.rst: -------------------------------------------------------------------------------- 1 | ZLMDB 2 | ===== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | storage 8 | backup 9 | export 10 | fileformat 11 | -------------------------------------------------------------------------------- /docs-cfx/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | 4 | etcd1: 5 | image: quay.io/coreos/etcd:latest 6 | ports: 7 | - 2379 8 | - 2380 9 | volumes: 10 | - /usr/share/ca-certificates/:/etc/ssl/certs 11 | - ${PWD}/.etcd:/etcd-data 12 | network_mode: host 13 | command: 14 | - /usr/local/bin/etcd 15 | - --data-dir=/etcd-data 16 | - --advertise-client-urls 17 | - http://0.0.0.0:2379 18 | - --listen-client-urls 19 | - http://0.0.0.0:2379 20 | - --name 21 | - etcd1 22 | 23 | cfc1: 24 | depends_on: 25 | - etcd1 26 | image: crossbario/crossbar-fabric-center:latest 27 | environment: 28 | - MAILGUN_KEY 29 | ports: 30 | - 9000 31 | volumes: 32 | - ${PWD}/.cfc:/node 33 | network_mode: host 34 | entrypoint: /usr/local/bin/crossbar 35 | command: 36 | - start 37 | - --personality 38 | - fabriccenter 39 | - --loglevel 40 | - info 41 | - --cbdir 42 | - /node/.crossbar/ 43 | -------------------------------------------------------------------------------- /docs-cfx/gettingstarted/index.rst: -------------------------------------------------------------------------------- 1 | Getting Started 2 | =============== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | intro 8 | using_docker 9 | using_exe 10 | using_snaps 11 | using_aws 12 | envvars 13 | -------------------------------------------------------------------------------- /docs-cfx/gettingstarted/using_snaps.rst: -------------------------------------------------------------------------------- 1 | Using snaps 2 | =========== 3 | 4 | .. thumbnail:: /_static/screenshots/crossbar_on_snapcraft.png 5 | 6 | .. thumbnail:: /_static/screenshots/crossbar_pypy_on_snapcraft.png 7 | -------------------------------------------------------------------------------- /docs-cfx/index.rst: -------------------------------------------------------------------------------- 1 | ../README.rst -------------------------------------------------------------------------------- /docs-cfx/legal/index.rst: -------------------------------------------------------------------------------- 1 | Legal 2 | ===== 3 | 4 | By using the Crossbar.io Fabric service or any of the software provided 5 | in conjunction with it, you agree to the terms and conditions laid out 6 | in the `Crossbar.io Fabric Alpha Test 7 | Agreement <../legal/Crossbar_Fabric_Alpha_Test_Agreement.pdf>`__. 8 | 9 | Unless specifically stated otherwise, all software provided in 10 | connection with Crossbar.io Fabric is distributed under a commercial 11 | license. 12 | 13 | Licenses for the Crossbar.io Fabric router and the Crossbar.io Fabric 14 | Shell are granted to any legal user of the Crossbar.io Fabric service. 15 | The company behind Crossbar.io Fabric, Crossbar.io GmbH (a German 16 | limited company), which has been funding the development of the open 17 | source Crossbar.io router, hold the necessary rights to dual-license the 18 | Crossbar.io code for the Crossbar.io Fabric router (which is an extended 19 | version of the open source software). 20 | 21 | .. toctree:: 22 | :maxdepth: 2 23 | 24 | api_licenses 25 | oss_licenses 26 | -------------------------------------------------------------------------------- /docs-cfx/legal/oss_licenses.rst: -------------------------------------------------------------------------------- 1 | Open-source Licenses 2 | ==================== 3 | 4 | CrossbarFX builds on the following Opne-source software projects: 5 | 6 | .. include:: oss_licenses_table.rst 7 | -------------------------------------------------------------------------------- /docs-cfx/management/index.rst: -------------------------------------------------------------------------------- 1 | Management 2 | ========== 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | introduction 8 | domain/domain-config 9 | domain/domain-api 10 | mrealm-api/index 11 | remote-node-api 12 | zlmdb 13 | -------------------------------------------------------------------------------- /docs-cfx/management/zlmdb.rst: -------------------------------------------------------------------------------- 1 | zLMDB Tables 2 | ============ 3 | 4 | .. autoclass:: zlmdb.MapStringUuid 5 | 6 | .. autoclass:: zlmdb.MapUuidCbor 7 | 8 | .. autoclass:: zlmdb.MapUuidUuidCbor 9 | 10 | .. autoclass:: zlmdb.MapUuidStringUuid 11 | 12 | .. autoclass:: zlmdb.MapTimestampUuidFlatBuffers 13 | 14 | .. autoclass:: zlmdb.MapSlotUuidUuid 15 | 16 | .. autoclass:: zlmdb.MapTimestampUuidFlatBuffers 17 | 18 | .. autoclass:: zlmdb.MapTimestampUuidStringFlatBuffers 19 | -------------------------------------------------------------------------------- /docs-cfx/readthedocs-environment.yml: -------------------------------------------------------------------------------- 1 | channels: 2 | - conda-forge 3 | dependencies: 4 | - python==3.6 5 | - sphinx 6 | - pandoc 7 | - nbconvert 8 | - ipykernel 9 | - pip: 10 | - sphinx_rtd_theme 11 | -------------------------------------------------------------------------------- /docs-cfx/scaling/index.rst: -------------------------------------------------------------------------------- 1 | Scaling and High-Availability 2 | ============================= 3 | 4 | Read about the elements of Crossbar.io that enables multi-node clusters of nodes: 5 | 6 | .. toctree:: 7 | :maxdepth: 2 8 | 9 | introduction 10 | arealms 11 | routerclusters 12 | webclusters 13 | examples 14 | -------------------------------------------------------------------------------- /docs-cfx/work/architecture.rst: -------------------------------------------------------------------------------- 1 | Architecture 2 | ============ 3 | 4 | Crossbar.io has a multi-process (worker) architecture that allows to scale up (and out) of stateless 5 | Web services (`full report `_): 6 | 7 | .. figure:: /_static/webscaling_bigbox_results.png 8 | :align: center 9 | :alt: CrossbarFX Web scaling 10 | :figclass: align-center 11 | 12 | CrossbarFX: scaling Web worloads from 1-40 cores 13 | 14 | However, this only allows to run stateless Web services, not full blown WAMP routers and realms, 15 | and it is also hard to manage as keeping all the node configuration files in sync (to serve the same 16 | scale-out set of Web services) and everything up and running manually is time consuming and error prone. 17 | 18 | CrossbarFX addresses both problems, as it allows to scale up and out WAMP routing workloads and provides 19 | auto-managing of all resources in a whole cluster from a single point of management. 20 | 21 | .. figure:: /_static/crossbarfx-network-architecture.svg 22 | :align: center 23 | :alt: CrossbarFX network architecture 24 | :figclass: align-center 25 | 26 | Network architecture in a full setup 27 | 28 | 29 | .. centered:: :download:`CrossbarFX Analytics Architectures ` 30 | 31 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/docker-edge/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu 2 | RUN apt-get update 3 | RUN apt-get install -y curl 4 | COPY .crossbar / 5 | COPY crossbarfx / 6 | RUN chmod a+x /crossbarfx 7 | ENTRYPOINT ["./crossbarfx", "edge", "start"] 8 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/docker-edge/web/README.md: -------------------------------------------------------------------------------- 1 | Put your Web files here. -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/docker-edge/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Open JavaScript console to watch log output (hit F12)

5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/docker-master/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu 2 | RUN apt-get update 3 | RUN apt-get install -y curl 4 | RUN mkdir /.crossbar 5 | COPY crossbarfx / 6 | COPY crossbarfx-ui.zip /.crossbar/.crossbarfx-ui.zip 7 | RUN chmod a+x crossbarfx 8 | EXPOSE 443 9 | ENTRYPOINT ["./crossbarfx", "master", "start"] 10 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/edge/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | appVersion: "1.0" 3 | description: A Helm chart to provision a Crossbar Edge Node 4 | name: edge 5 | home: https://github.com/crossbario/crossbarfx 6 | version: 0.1.0 7 | details: 8 | Helm chart to install the Crossbar FX as an edge node on K8 -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/edge/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "crossbar-cfc.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "crossbar-cfc.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "crossbar-cfc.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/edge/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "crossbar-cfc.fullname" . -}} 3 | {{- $ingressPath := .Values.ingress.path -}} 4 | apiVersion: extensions/v1beta1 5 | kind: Ingress 6 | metadata: 7 | name: {{ $fullName }} 8 | labels: 9 | app: {{ template "crossbar-cfc.name" . }} 10 | chart: {{ template "crossbar-cfc.chart" . }} 11 | release: {{ .Release.Name }} 12 | heritage: {{ .Release.Service }} 13 | {{- with .Values.ingress.annotations }} 14 | annotations: 15 | {{ toYaml . | indent 4 }} 16 | {{- end }} 17 | spec: 18 | {{- if .Values.ingress.tls }} 19 | tls: 20 | {{- range .Values.ingress.tls }} 21 | - hosts: 22 | {{- range .hosts }} 23 | - {{ . }} 24 | {{- end }} 25 | secretName: {{ .secretName }} 26 | {{- end }} 27 | {{- end }} 28 | rules: 29 | {{- range .Values.ingress.hosts }} 30 | - host: {{ . }} 31 | http: 32 | paths: 33 | - path: {{ $ingressPath }} 34 | backend: 35 | serviceName: {{ $fullName }} 36 | servicePort: http 37 | {{- end }} 38 | {{- end }} 39 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/edge/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ template "crossbar-cfc.fullname" . }} 5 | labels: 6 | app: {{ template "crossbar-cfc.name" . }} 7 | chart: {{ template "crossbar-cfc.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - port: {{ .Values.service.port }} 14 | targetPort: http 15 | protocol: TCP 16 | name: http 17 | selector: 18 | app: {{ template "crossbar-cfc.name" . }} 19 | release: {{ .Release.Name }} 20 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/edge/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for crossbar-cfc (YAML) 2 | 3 | replicaCount: 2 4 | 5 | image: 6 | repository: IMAGE_REPO_REQUIRED 7 | tag: latest 8 | pullPolicy: Always 9 | 10 | service: 11 | type: LoadBalancer 12 | port: 8080 13 | 14 | etcd: 15 | host: cfc-etcd 16 | 17 | mailgun: 18 | key: MAILGUN_KEY_REQUIRED 19 | url: MAILGUN_URL_REQUIRED 20 | from: MAILGUN_FROM_REQUIRED 21 | 22 | ingress: 23 | enabled: false 24 | annotations: {} 25 | path: / 26 | hosts: 27 | - cfc.local 28 | tls: [] 29 | 30 | resources: {} 31 | 32 | nodeSelector: {} 33 | 34 | tolerations: [] 35 | 36 | affinity: {} 37 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/index.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | entries: 3 | edge: 4 | - apiVersion: v1 5 | appVersion: "1.0" 6 | created: 2018-08-07T17:38:10.169741336+01:00 7 | description: A Helm chart to provision a Crossbar Edge Node 8 | digest: 986b9e7e98de9ddb80780fb5c48de6a2d40d06daf19e54abd56ce7f0144f2f1b 9 | home: https://github.com/crossbario/crossbarfx 10 | name: edge 11 | urls: 12 | - edge-0.1.0.tgz 13 | version: 0.1.0 14 | master: 15 | - apiVersion: v1 16 | appVersion: "1.0" 17 | created: 2018-08-07T17:38:10.170435076+01:00 18 | description: A Helm chart to provision Crossbar Fabric Controller 19 | digest: 8f71c6679fb4e4a98ea7a857b28ac2e4ea63483a97444608197d94362a89c83b 20 | home: https://github.com/crossbario/crossbarfx 21 | name: master 22 | urls: 23 | - master-0.1.0.tgz 24 | version: 0.1.0 25 | generated: 2018-08-07T17:38:10.168751756+01:00 26 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/master/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/master/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | appVersion: "1.0" 3 | description: A Helm chart to provision Crossbar Fabric Controller 4 | name: master 5 | home: https://github.com/crossbario/crossbarfx 6 | version: 0.1.0 7 | details: 8 | Helm chart to install the Crossbar Fabric Controller executable 9 | on a Kubernetes 10 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/master/scripts/etcd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "etcd.database.coreos.com/v1beta2" 2 | kind: "EtcdCluster" 3 | metadata: 4 | name: "cfc-etcd" 5 | spec: 6 | size: 3 7 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/master/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "crossbar-cfc.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "crossbar-cfc.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "crossbar-cfc.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/master/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "crossbar-cfc.fullname" . -}} 3 | {{- $ingressPath := .Values.ingress.path -}} 4 | apiVersion: extensions/v1beta1 5 | kind: Ingress 6 | metadata: 7 | name: {{ $fullName }} 8 | labels: 9 | app: {{ template "crossbar-cfc.name" . }} 10 | chart: {{ template "crossbar-cfc.chart" . }} 11 | release: {{ .Release.Name }} 12 | heritage: {{ .Release.Service }} 13 | {{- with .Values.ingress.annotations }} 14 | annotations: 15 | {{ toYaml . | indent 4 }} 16 | {{- end }} 17 | spec: 18 | {{- if .Values.ingress.tls }} 19 | tls: 20 | {{- range .Values.ingress.tls }} 21 | - hosts: 22 | {{- range .hosts }} 23 | - {{ . }} 24 | {{- end }} 25 | secretName: {{ .secretName }} 26 | {{- end }} 27 | {{- end }} 28 | rules: 29 | {{- range .Values.ingress.hosts }} 30 | - host: {{ . }} 31 | http: 32 | paths: 33 | - path: {{ $ingressPath }} 34 | backend: 35 | serviceName: {{ $fullName }} 36 | servicePort: http 37 | {{- end }} 38 | {{- end }} 39 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/master/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ template "crossbar-cfc.fullname" . }} 5 | labels: 6 | app: {{ template "crossbar-cfc.name" . }} 7 | chart: {{ template "crossbar-cfc.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | spec: 11 | type: {{ .Values.service.type }} 12 | ports: 13 | - port: {{ .Values.service.port }} 14 | targetPort: http 15 | protocol: TCP 16 | name: http 17 | selector: 18 | app: {{ template "crossbar-cfc.name" . }} 19 | release: {{ .Release.Name }} 20 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/master/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for crossbar-cfc (YAML) 2 | 3 | replicaCount: 1 4 | 5 | image: 6 | repository: IMAGE_REPO_REQUIRED 7 | tag: latest 8 | pullPolicy: Always 9 | 10 | service: 11 | type: LoadBalancer 12 | port: 9000 13 | 14 | etcd: 15 | host: cfc-etcd 16 | 17 | mailgun: 18 | key: MAILGUN_KEY_REQUIRED 19 | url: MAILGUN_URL_REQUIRED 20 | from: MAILGUN_FROM_REQUIRED 21 | 22 | ingress: 23 | enabled: false 24 | annotations: {} 25 | path: / 26 | hosts: 27 | - cfc.local 28 | tls: [] 29 | 30 | resources: {} 31 | 32 | nodeSelector: {} 33 | 34 | tolerations: [] 35 | 36 | affinity: {} 37 | -------------------------------------------------------------------------------- /docs-cfx/work/kubernetes/yaml/etcd.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: "etcd.database.coreos.com/v1beta2" 2 | kind: "EtcdCluster" 3 | metadata: 4 | name: "cfc-etcd" 5 | spec: 6 | size: 3 7 | -------------------------------------------------------------------------------- /docs-cfx/work/xbr/index.rst: -------------------------------------------------------------------------------- 1 | XBR Data Markets 2 | ================ 3 | 4 | **XBR Open data markets platform - Enabling digital value chains.** 5 | 6 | -------------- 7 | 8 | 9 | .. toctree:: 10 | :maxdepth: 2 11 | :caption: Contents 12 | 13 | introduction.rst 14 | roles.rst 15 | interfaces.rst 16 | services.rst 17 | business.rst 18 | -------------------------------------------------------------------------------- /docs-cfx/work/xbr/xbr_data_token_flow.asciio: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/work/xbr/xbr_data_token_flow.asciio -------------------------------------------------------------------------------- /docs-cfx/work/xbr/xbr_on_chain_transactions.asciio: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs-cfx/work/xbr/xbr_on_chain_transactions.asciio -------------------------------------------------------------------------------- /docs-cfx/xbr/network-onboarding.rst: -------------------------------------------------------------------------------- 1 | On-boarding 2 | =========== 3 | 4 | .. thumbnail:: /_static/onboarding/1.png 5 | 6 | .. thumbnail:: /_static/onboarding/2.png 7 | 8 | .. thumbnail:: /_static/onboarding/3.png 9 | 10 | .. thumbnail:: /_static/onboarding/4.png 11 | 12 | .. thumbnail:: /_static/onboarding/5.png 13 | 14 | .. thumbnail:: /_static/onboarding/6.png 15 | -------------------------------------------------------------------------------- /docs-old/pages/Documentation.md: -------------------------------------------------------------------------------- 1 | title: Documentation 2 | toc: [Documentation] 3 | 4 | # Crossbar.io Documentation 5 | 6 | Welcome to the Crossbar.io Reference Documentation. 7 | 8 | * [Table of Contents](Table of Contents). 9 | 10 | ## Introduction 11 | 12 | * [Getting Started](Getting Started) 13 | 14 | ## Administrators 15 | 16 | * [Basic Concepts](Basic Concepts) 17 | * [Installation](Installation) 18 | * [Administration](Administration) 19 | 20 | ## Programmers 21 | 22 | * [Programming Guide](Programming Guide) 23 | * [Examples](Examples) 24 | 25 | ## More 26 | 27 | * [Compatibility Policy](Compatibility-Policy) 28 | * [Crossbar.io Code License](Crossbar-License) 29 | * [Crossbar.io Documentation License](Documentation-License) 30 | * [Contributing to the Project](https://github.com/crossbario/crossbar/blob/master/CONTRIBUTING.md) 31 | * [Contributing FAQ](Contributing FAQ) 32 | * [FAQ](FAQ) 33 | 34 | > This documentation is an open-source community effort sponsored by [Crossbar.io GmbH](http://crossbario.com). Should you find errors or if you have suggestions, please file a doc issue [here](https://github.com/crossbario/crossbar/issues/new). 35 | -------------------------------------------------------------------------------- /docs-old/pages/about/Documentation-License.md: -------------------------------------------------------------------------------- 1 | title: Crossbar.io Documentation License 2 | toc: [Documentation, Documentation License] 3 | 4 | # Crossbar.io Documentation License 5 | 6 | Copyright for the Crossbar.io documentation (C) Crossbar.io Technologies GmbH. 7 | Licensed under the Creative Commons [CC-BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/). 8 | 9 | "WAMP" and "Crossbar.io" are trademarks of Crossbar.io Technologies GmbH. 10 | 11 | This license allows you to use the material in this documentation, whole or in parts, in its present form or adapted, and for any purpose (including commercial use), as long as you 12 | 13 | * attribute the material to us giving the information provided below and 14 | * share the material under this same license 15 | 16 | For more details (and the legally binding conditions) see the [Creative Commons license page](https://creativecommons.org/licenses/by-sa/4.0/#) for this license. 17 | 18 | Attribution details: 19 | 20 | (c) by Crossbar.io Technologies GmbH, material licensed under the CC-BY-SA 4.0, provided as-is without any warranties, [Crossbar.io documentation wiki](https://github.com/crossbario/crossbar/wiki) 21 | 22 | ## Note to Contributors to this documentation 23 | 24 | By contributing, you accept that the above license applies to your contribution. 25 | -------------------------------------------------------------------------------- /docs-old/pages/administration/production/Going-to-Production.md: -------------------------------------------------------------------------------- 1 | title: Going to Production 2 | toc: [Documentation, Administration, Going to Production] 3 | 4 | # Going to Production 5 | 6 | This section covers security issues and fine-tuning of advanced options. Tips for a performant and secure production configuration. 7 | 8 | * [Running on privileged ports](Running on Privileged Ports) 9 | * [Secure WebSocket and HTTPS](Secure WebSocket and HTTPS) 10 | * [TLS Certificates](TLS Certificates) 11 | * [Automatic startup and restart](Automatic Startup and Restart) 12 | * [Network Tuning](Network Tuning) 13 | * [Reverse Proxies](Reverse Proxies) 14 | * [SSL/TLS Interception Proxies](SSL-TLS-Interception-Proxies) 15 | 16 | Testing your instance & browser support. 17 | 18 | * [Browser Support](Browser Support) 19 | * [WebSocket Compliance Testing](WebSocket Compliance Testing) 20 | * [Stream Testee](Stream Testee) 21 | -------------------------------------------------------------------------------- /docs-old/pages/administration/production/Reverse-Proxies.md: -------------------------------------------------------------------------------- 1 | title: Reverse Proxies 2 | toc: [Documentation, Administration, Going to Production, Reverse Proxies] 3 | 4 | # Reverse Proxies 5 | 6 | Running Crossbar.io behind [reverse proxies](http://en.wikipedia.org/wiki/Reverse_proxy). 7 | 8 | ## HAProxy 9 | 10 | Write me. 11 | 12 | ## Nginx 13 | 14 | Write me. You can find some Nginx examples and hints [here](https://github.com/nicokaiser/nginx-websocket-proxy). 15 | 16 | Note also that nginx's default timeout is 60 seconds; use `proxy_read_timeout` option to increase this. 17 | 18 | ## Apache 19 | 20 | Apache supports proxying WebSocket connections using [mod_proxy_wstunnel](http://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html). 21 | -------------------------------------------------------------------------------- /docs-old/pages/administration/production/Security.md: -------------------------------------------------------------------------------- 1 | title: Security 2 | toc: [Documentation, Administration, Going to Production, Security] 3 | 4 | # Security 5 | 6 | ## References 7 | 8 | * [A New Approach to IoT Security](http://www.pubnub.com/static/papers/IoT_Security_Whitepaper_Final.pdf) 9 | * [Inside-Out Security for the IoT](https://www.altera.com/solutions/technology/system-design/articles/_2014/security-iot.smartphone.highResolutionDisplay.html) 10 | * [TUV SUD IoT Honeynet Project (in German)](http://www.tuev-sued.de/tuev-sued-konzern/presse/pressemeldungen/potenzielle-angreifer-sind-ueberall) -------------------------------------------------------------------------------- /docs-old/pages/administration/web-service/Resource-Service.md: -------------------------------------------------------------------------------- 1 | title: Resource Service 2 | toc: [Documentation, Administration, Web Services, Resource Service] 3 | 4 | # Resource Service 5 | 6 | Allows to hook any Twisted Web resource into the service tree. 7 | 8 | ## Configuration 9 | 10 | To configure a Resource Service, attach a dictionary element to a path in your [Web transport](Web Transport and Services): 11 | 12 | attribute | description 13 | ---|--- 14 | **`type`** | Must be `"resource"`. 15 | **`classname`** | Fully qualified Python class of the Twisted Web resource to expose. 16 | **`extra`** | Arbitrary extra data provided to the constructor of the Twisted Web resource. 17 | 18 | ## Example 19 | 20 | Write me. -------------------------------------------------------------------------------- /docs-old/pages/administration/web-service/Reverse-Proxy-Service.md: -------------------------------------------------------------------------------- 1 | title: Reverse Proxy Service 2 | toc: [Documentation, Administration, Web Services, Reverse Proxy Service] 3 | 4 | # Reverse Proxy Service 5 | 6 | ## Configuration 7 | 8 | To configure a Web Reverse Proxy Service, attach a dictionary element to a path in your [Web transport](Web Transport and Services): 9 | 10 | option | description 11 | ---|--- 12 | **`type`** | must be `"reverseproxy"` 13 | **`host`** | the host of the web server to proxy, e.g. `"www.example.com"`. 14 | **`port`** | the port of the web server to proxy (default: `80`) 15 | **`path`** | the base path to fetch data from with no trailing slashes (default: `""`) 16 | 17 | ## Example 18 | 19 | Here is how you define a **Web Transport** that do reverse proxy to `example.com/my_path`: 20 | 21 | ```javascript 22 | { 23 | "type": "web", 24 | "endpoint": { 25 | "type": "tcp", 26 | "port": 80 27 | }, 28 | "paths": { 29 | "/": { 30 | "type": "reverseproxy", 31 | "host": "example.com", 32 | "path": "/my_path" 33 | } 34 | } 35 | } 36 | ``` 37 | > In this example, an incoming request `POST /login` would be proxied to domain `example.com` as `POST /my_path/login` 38 | 39 | --- -------------------------------------------------------------------------------- /docs-old/pages/programming-guide/Programming.md: -------------------------------------------------------------------------------- 1 | title: Programming Guide 2 | toc: [Documentation, Programming] 3 | 4 | The following are language specific guides for application developers working with Crossbar.io. 5 | 6 | * WAMP Programming 7 | - [WAMP Programming in Python](http://autobahn.ws/python/wamp/programming.html) 8 | - [WAMP Programming in JavaScript](http://autobahn.ws/js/programming.html) 9 | * Writing Application Components 10 | - [HTML5 Application Components](HTML5 Application Components) 11 | - [Node.js Application Components](Node.js Application Components) 12 | - [Python Application Components](Python Application Components) 13 | * Advanced Topics 14 | - [Database Programming with PostgreSQL](Database Programming with PostgreSQL) 15 | - [Session Meta Events and Procedures](Session Metaevents and Procedures) 16 | - [[AngularJS Application Components]] 17 | * [Starting and Stopping Crossbar.io](Starting and Stopping Crossbario) 18 | -------------------------------------------------------------------------------- /docs-old/pages/programming-guide/pubsub/PubSub.md: -------------------------------------------------------------------------------- 1 | title: Publish & Subscribe 2 | toc: [Documentation, Programming Guide, PubSub] 3 | 4 | # Overview 5 | 6 | See the following pages 7 | 8 | * [[How Subscriptions Work]] 9 | * [[Basic Subscriptions]] 10 | * [[Pattern Based Subscriptions]] 11 | * [[Publisher Identification]] 12 | * [[Publisher Exclusion]] 13 | * [[Subscriber Black and Whitelisting]] 14 | * [[Event History]] 15 | * [[Retained Events]] 16 | * [[Subscription Meta Events and Procedures]] 17 | -------------------------------------------------------------------------------- /docs-old/pages/programming-guide/pubsub/Retained-Events.md: -------------------------------------------------------------------------------- 1 | title: Retained Events 2 | toc: [Documentation, Programming Guide, Retained Events] 3 | 4 | # Retained Events 5 | 6 | When publishing an event, the publisher can set an option (`retain=True`) in the `PublishOptions` which will cause the Broker to retain the even being published as the most-recent event on this topic. 7 | 8 | Note that [[Event History]] is similar to this feature, but not the same. 9 | 10 | No configuration is required in Crossbar in order to take advantage of this; it is up to the publisher. 11 | 12 | # Retrieving an Event 13 | 14 | Upon subscription, a client can pass `get_retained=True` in the `SubscribeOptions`. If there is any retained event, it will be immediately sent to the subscriber. 15 | 16 | # Example 17 | 18 | There is a completely-worked example [in the Autobahn-Python repository](https://github.com/crossbario/autobahn-python/tree/master/examples/twisted/wamp/pubsub). 19 | -------------------------------------------------------------------------------- /docs-old/pages/programming-guide/rpc/RPC.md: -------------------------------------------------------------------------------- 1 | title: Remote Procedure Calls 2 | toc: [Documentation, Programming Guide, RPC] 3 | 4 | # Overview 5 | 6 | See the following pages 7 | 8 | * [[How Registrations Work]] 9 | * [[Basic Registrations]] 10 | * [[Registration Options]] 11 | * [[Pattern Based Registrations]] 12 | * [[Caller Identification]] 13 | * [[Shared Registrations]] 14 | * [[Progressive Call Results]] 15 | * [[Registration Meta Events and Procedures]] 16 | -------------------------------------------------------------------------------- /docs-old/static/site.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: sans-serif; 3 | } 4 | 5 | #contents { 6 | width: 960px; 7 | margin: auto; 8 | } -------------------------------------------------------------------------------- /docs-old/templates/changelog_preamble.md: -------------------------------------------------------------------------------- 1 | title: ChangeLog 2 | toc: [Documentation, Programming Guide, ChangeLog] 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs-old/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | 3 | {% block main %} 4 |

Crossbar.io Docs [DEV]

5 |

6 | This is the development version of the Crossbar.io Documentation. 7 |

8 |

9 | The contents here is exactly the same as deployed on http://crossbar.io/docs/, but without styling and embedding into the larger Crossbar.io web site. 10 |

11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /docs-old/templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Crossbar.io Docs 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 | {% block main %}{% endblock %} 15 |
16 |
17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /docs-old/templates/page.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | 3 | {% block main %} 4 |

5 | HOME 6 |

7 | 8 |
9 | 10 |

{{ title }}

11 | {{ contents|safe }} 12 | 13 |
14 | 15 | {% if last_commit %} 16 |

Last edit by {{ last_commit }}

17 | {% endif %} 18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /docs/Documentation-License.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | Crossbar.io Documentation License 4 | ================================= 5 | 6 | Copyright for the Crossbar.io documentation (C) Crossbar.io Technologies 7 | GmbH. Licensed under the Creative Commons `CC-BY-SA 4.0 8 | license `__. 9 | 10 | "WAMP" and "Crossbar.io" are trademarks of Crossbar.io Technologies 11 | GmbH. 12 | 13 | This license allows you to use the material in this documentation, whole 14 | or in parts, in its present form or adapted, and for any purpose 15 | (including commercial use), as long as you 16 | 17 | - attribute the material to us giving the information provided below 18 | and 19 | - share the material under this same license 20 | 21 | For more details (and the legally binding conditions) see the `Creative 22 | Commons license 23 | page `__ for this 24 | license. 25 | 26 | Attribution details: 27 | 28 | (c) by Crossbar.io Technologies GmbH, material licensed under the 29 | CC-BY-SA 4.0, provided as-is without any warranties, `Crossbar.io 30 | documentation wiki `__ 31 | 32 | Note to Contributors to this documentation 33 | ------------------------------------------ 34 | 35 | By contributing, you accept that the above license applies to your 36 | contribution. 37 | -------------------------------------------------------------------------------- /docs/Going-to-Production.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | Going to Production 4 | =================== 5 | 6 | This section covers security issues and fine-tuning of advanced options. 7 | Tips for a performant and secure production configuration. 8 | 9 | - :doc:`Running on privileged ports ` 10 | - :doc:`Secure WebSocket and HTTPS ` 11 | - :doc:`TLS Certificates ` 12 | - :doc:`Automatic startup and restart ` 13 | - :doc:`Network Tuning ` 14 | - :doc:`Reverse Proxies ` 15 | - :doc:`SSL/TLS Interception Proxies ` 16 | 17 | Testing your instance & browser support. 18 | 19 | - :doc:`Browser Support ` 20 | - :doc:`WebSocket Compliance Testing ` 21 | - :doc:`Stream Testee ` 22 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | SPHINXPROJ = Crossbario 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -------------------------------------------------------------------------------- /docs/Programming.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | The following are language specific guides for application developers 4 | working with Crossbar.io. 5 | 6 | WAMP Programming 7 | ================ 8 | - `WAMP Programming in Python `__ 9 | - `WAMP Programming in JavaScript `__ 10 | 11 | Writing Application Components 12 | ============================== 13 | - HTML5 Application Components 14 | - Node.js Application Components 15 | - Python Application Components 16 | 17 | Advanced Topics 18 | =============== 19 | - :doc:`Database Programming with PostgreSQL ` 20 | - :doc:`AngularJS Application Component ` 21 | - :doc:`Session Meta Events and Procedures ` 22 | - :doc:`Session Statistics ` 23 | - :doc:`Starting and Stopping Crossbar.io ` 24 | -------------------------------------------------------------------------------- /docs/PubSub.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | Overview 4 | ======== 5 | 6 | See the following pages 7 | 8 | - :doc:`How Subscriptions Work` 9 | - :doc:`Basic Subscriptions` 10 | - :doc:`Pattern Based Subscriptions` 11 | - :doc:`Publisher Identification` 12 | - :doc:`Publisher Exclusion` 13 | - :doc:`Subscriber Black and Whitelisting` 14 | - :doc:`Event History` 15 | - :doc:`Retained Events` 16 | - :doc:`Subscription Meta Events and Procedures` 17 | -------------------------------------------------------------------------------- /docs/RPC.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | 4 | Overview 5 | ======== 6 | 7 | See the following pages 8 | 9 | - :doc:`How Registrations Work ` 10 | - :doc:`Basic Registrations ` 11 | - :doc:`Registration Options ` 12 | - :doc:`Pattern Based Registrations ` 13 | - :doc:`Caller Identification ` 14 | - :doc:`Shared Registrations ` 15 | - :doc:`Progressive Call Results ` 16 | - :doc:`Registration Meta Events and Procedures ` 17 | -------------------------------------------------------------------------------- /docs/Resource-Service.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | Resource Service 4 | ================ 5 | 6 | Allows to hook any Twisted Web resource into the service tree. 7 | 8 | Configuration 9 | ------------- 10 | 11 | To configure a Resource Service, attach a dictionary element to a path 12 | in your :doc:`Web transport `: 13 | 14 | +-----------+-------------------------------------------------------------------------------+ 15 | | attribute | description | 16 | +===========+===============================================================================+ 17 | | type | Must be "resource". | 18 | +-----------+-------------------------------------------------------------------------------+ 19 | | classname | Fully qualified Python class of the Twisted Web resource to expose. | 20 | +-----------+-------------------------------------------------------------------------------+ 21 | | extra | Arbitrary extra data provided to the constructor of the Twisted Web resource. | 22 | +-----------+-------------------------------------------------------------------------------+ 23 | 24 | Example 25 | ------- 26 | 27 | Write me. 28 | -------------------------------------------------------------------------------- /docs/Retained-Events.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | Retained Events 4 | =============== 5 | 6 | When publishing an event, the publisher can set an option 7 | (``retain=True``) in the ``PublishOptions`` which will cause the Broker 8 | to retain the event being published as the most-recent event on this 9 | topic. 10 | 11 | Note that :doc:`Event History` is similar to this feature, but not the 12 | same. 13 | 14 | No configuration is required in Crossbar in order to take advantage of 15 | this; it is up to the publisher. 16 | 17 | Retrieving an Event 18 | =================== 19 | 20 | Upon subscription, a client can pass ``get_retained=True`` in the 21 | ``SubscribeOptions``. If there is any retained event, it will be 22 | immediately sent to the subscriber. 23 | 24 | Example 25 | ======= 26 | 27 | There is a completely-worked example `in the Autobahn-Python 28 | repository `__. 29 | -------------------------------------------------------------------------------- /docs/Reverse-Proxies.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | 4 | Reverse Proxies 5 | =============== 6 | 7 | Running Crossbar.io behind `reverse 8 | proxies `__. 9 | 10 | HAProxy 11 | ------- 12 | 13 | Write me. 14 | 15 | Nginx 16 | ----- 17 | 18 | Write me. You can find some Nginx examples and hints 19 | `here `__. 20 | 21 | Note also that nginx's default timeout is 60 seconds; use 22 | ``proxy_read_timeout`` option to increase this. 23 | 24 | Apache 25 | ------ 26 | 27 | Apache supports proxying WebSocket connections using 28 | `mod\_proxy\_wstunnel `__. 29 | -------------------------------------------------------------------------------- /docs/Security.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | 4 | Security 5 | ======== 6 | 7 | References 8 | ---------- 9 | 10 | - `A New Approach to IoT 11 | Security `__ 12 | - `Inside-Out Security for the 13 | IoT `__ 14 | - `TUV SUD IoT Honeynet Project (in 15 | German) `__ 16 | -------------------------------------------------------------------------------- /docs/Starting-and-Stopping-Crossbar.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _Starting-and-Stopping-Crossbar: 4 | 5 | Starting and Stopping Crossbar.io 6 | --------------------------------- 7 | -------------------------------------------------------------------------------- /docs/Table-of-Contents.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _site_contents: 4 | 5 | Table of Contents: 6 | ================== 7 | 8 | .. toctree:: 9 | :maxdepth: 4 10 | :glob: 11 | 12 | * 13 | -------------------------------------------------------------------------------- /docs/_static/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs/_static/.keep -------------------------------------------------------------------------------- /docs/_static/css/custom.css: -------------------------------------------------------------------------------- 1 | /* custom CSS to include in generated pages */ 2 | 3 | .wy-nav-content { 4 | max-width: 1200px; 5 | } 6 | 7 | .wy-nav-side { 8 | position: fixed; 9 | } 10 | 11 | .wy-side-nav-search { 12 | background-color: #333333; 13 | } 14 | 15 | .wy-side-nav-search>a img.logo { 16 | width: 160px; 17 | } 18 | 19 | .rdftriple { 20 | width: 100%; 21 | max-width: 600px; 22 | } 23 | 24 | .rst-content .note .admonition-title { 25 | background-color: #333333; 26 | color: #FFF000; 27 | } 28 | 29 | .rst-content table.docutils thead { 30 | background-color: #333333; 31 | color: #FFF000; 32 | } 33 | 34 | .rst-content .note { 35 | background-color: #E3E3E3; 36 | } 37 | 38 | .rst-content div[class^='highlight'] { 39 | 40 | background-color: #E3E3E3; 41 | } 42 | -------------------------------------------------------------------------------- /docs/_static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs/_static/favicon.ico -------------------------------------------------------------------------------- /docs/administration-guide.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _administration-guide: 4 | 5 | Administration Guide 6 | ==================== 7 | 8 | Test 9 | ---- 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/assets/crossbar-works.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs/assets/crossbar-works.png -------------------------------------------------------------------------------- /docs/assets/helloworldmix.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs/assets/helloworldmix.svg -------------------------------------------------------------------------------- /docs/assets/pubsub-backend-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs/assets/pubsub-backend-browser.png -------------------------------------------------------------------------------- /docs/assets/pubsub-frontend-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/docs/assets/pubsub-frontend-browser.png -------------------------------------------------------------------------------- /docs/basic-concept.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | 4 | .. _basic-concept: 5 | 6 | Basic Concept 7 | ============= 8 | 9 | WAMP 10 | ---- 11 | 12 | 13 | Publish & Subscribe 14 | ------------------- 15 | 16 | 17 | Routed Remote Procedure Calls 18 | ----------------------------- 19 | 20 | 21 | WAMP Roles 22 | ---------- 23 | 24 | 25 | Crossbar.io Node 26 | ---------------- 27 | 28 | 29 | Configuration 30 | ------------- 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /docs/code/backend.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

PubSub Basic Backend

5 | 6 |

You can also open JavaScript console to watch output.

7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/code/backend.js: -------------------------------------------------------------------------------- 1 | try { 2 | var autobahn = require('autobahn'); 3 | } catch (e) { 4 | // when running in browser, AutobahnJS will 5 | // be included without a module system 6 | } 7 | 8 | var connection = new autobahn.Connection({ 9 | url: 'ws://127.0.0.1:8080/ws', 10 | realm: 'realm1'} 11 | ); 12 | 13 | connection.onopen = function (session) { 14 | 15 | var counter = 0; 16 | 17 | setInterval(function () { 18 | console.log("publishing to topic 'com.myapp.hello': " + "Hello World "+counter); 19 | session.publish('com.myapp.hello', ['Hello World ' + counter]); 20 | document.getElementById('WAMPEvent').innerHTML = "Event: Hello World "+counter; 21 | counter += 1; 22 | }, 1000); 23 | }; 24 | 25 | connection.open(); 26 | -------------------------------------------------------------------------------- /docs/code/client_appsession_publish.py: -------------------------------------------------------------------------------- 1 | 2 | from __future__ import print_function 3 | from os import environ 4 | import os 5 | from twisted.internet.defer import inlineCallbacks 6 | 7 | from autobahn.twisted.util import sleep 8 | from autobahn.twisted.wamp import ApplicationSession, ApplicationRunner 9 | 10 | 11 | class ClientSession(ApplicationSession): 12 | """ 13 | An application component that publishes an event every second. 14 | """ 15 | 16 | @inlineCallbacks 17 | def onJoin(self, details): 18 | print("session attached") 19 | counter = 0 20 | while True: 21 | print('backend publishing com.myapp.topic1', counter) 22 | self.publish(u'com.myapp.topic1', "Hello World %d"%counter) 23 | counter += 1 24 | yield sleep(1) 25 | 26 | 27 | if __name__ == '__main__': 28 | import six 29 | url = os.environ.get('CBURL', u'ws://localhost:8080/ws') 30 | realm = os.environ.get('CBREALM', u'realm1') 31 | 32 | # any extra info we want to forward to our ClientSession (in self.config.extra) 33 | extra = { 34 | u'foobar': u'A custom value' 35 | } 36 | 37 | runner = ApplicationRunner(url=url, realm=realm, extra=extra) 38 | runner.run(ClientSession, auto_reconnect=True) 39 | 40 | -------------------------------------------------------------------------------- /docs/code/client_appsession_rpc_callee.py: -------------------------------------------------------------------------------- 1 | 2 | from os import environ 3 | import datetime 4 | import os 5 | from twisted.internet.defer import inlineCallbacks 6 | 7 | from autobahn.twisted.wamp import ApplicationSession, ApplicationRunner 8 | 9 | 10 | class ClientSession(ApplicationSession): 11 | """ 12 | A simple time service application component. 13 | """ 14 | 15 | @inlineCallbacks 16 | def onJoin(self, details): 17 | print("session attached") 18 | 19 | def utcnow(): 20 | now = datetime.datetime.utcnow() 21 | return now.strftime("%Y-%m-%dT%H:%M:%SZ") 22 | 23 | try: 24 | yield self.register(utcnow, u'com.timeservice.now') 25 | except Exception as e: 26 | print("failed to register procedure: {}".format(e)) 27 | else: 28 | print("procedure registered") 29 | 30 | 31 | if __name__ == '__main__': 32 | import six 33 | url = os.environ.get('CBURL', u'ws://localhost:8080/ws') 34 | realm = os.environ.get('CBREALM', u'realm1') 35 | 36 | # any extra info we want to forward to our ClientSession (in self.config.extra) 37 | extra = { 38 | u'foobar': u'A custom value' 39 | } 40 | 41 | runner = ApplicationRunner(url=url, realm=realm, extra=extra) 42 | runner.run(ClientSession, auto_reconnect=True) 43 | -------------------------------------------------------------------------------- /docs/code/client_appsession_rpc_caller.py: -------------------------------------------------------------------------------- 1 | 2 | from os import environ 3 | import os 4 | from twisted.internet import reactor 5 | from twisted.internet.defer import inlineCallbacks 6 | 7 | from autobahn.twisted.wamp import ApplicationSession, ApplicationRunner 8 | 9 | 10 | class ClientSession(ApplicationSession): 11 | """ 12 | An application component using the time service. 13 | """ 14 | 15 | @inlineCallbacks 16 | def onJoin(self, details): 17 | print("session attached") 18 | try: 19 | now = yield self.call(u'com.timeservice.now') 20 | except Exception as e: 21 | print("Error: {}".format(e)) 22 | else: 23 | print("Current time from time service: {}".format(now)) 24 | 25 | self.leave() 26 | 27 | def onDisconnect(self): 28 | print("disconnected") 29 | reactor.stop() 30 | 31 | 32 | if __name__ == '__main__': 33 | import six 34 | url = os.environ.get('CBURL', u'ws://localhost:8080/ws') 35 | realm = os.environ.get('CBREALM', u'realm1') 36 | 37 | # any extra info we want to forward to our ClientSession (in self.config.extra) 38 | extra = { 39 | u'foobar': u'A custom value' 40 | } 41 | 42 | runner = ApplicationRunner(url=url, realm=realm, extra=extra) 43 | runner.run(ClientSession, auto_reconnect=True) 44 | 45 | -------------------------------------------------------------------------------- /docs/code/client_component_publish.py: -------------------------------------------------------------------------------- 1 | from autobahn.twisted.component import Component, run 2 | from autobahn.twisted.util import sleep 3 | from twisted.internet.defer import inlineCallbacks 4 | import os 5 | import argparse 6 | import six 7 | 8 | url = os.environ.get('CBURL', u'ws://localhost:8080/ws') 9 | realmv = os.environ.get('CBREALM', u'realm1') 10 | print(url, realmv) 11 | component = Component(transports=url, realm=realmv) 12 | 13 | @component.on_join 14 | @inlineCallbacks 15 | def joined(session, details): 16 | print("session ready") 17 | counter = 0 18 | while True: 19 | # publish() only returns a Deferred if we asked for an acknowledgement 20 | session.publish(u'com.myapp.hello', "Hello World {}".format(counter)) 21 | counter += 1 22 | yield sleep(1) 23 | 24 | if __name__ == "__main__": 25 | run([component]) 26 | -------------------------------------------------------------------------------- /docs/code/client_component_rpc_callee.py: -------------------------------------------------------------------------------- 1 | from autobahn.twisted.component import Component, run 2 | from autobahn.twisted.util import sleep 3 | from twisted.internet.defer import inlineCallbacks 4 | import os 5 | import argparse 6 | import six 7 | import datetime 8 | 9 | url = os.environ.get('CBURL', u'ws://localhost:8080/ws') 10 | realmv = os.environ.get('CBREALM', u'realm1') 11 | print(url, realmv) 12 | component = Component(transports=url, realm=realmv) 13 | 14 | @component.on_join 15 | @inlineCallbacks 16 | def joined(session, details): 17 | print("session ready") 18 | 19 | def utcnow(): 20 | now = datetime.datetime.utcnow() 21 | return now.strftime("%Y-%m-%dT%H:%M:%SZ") 22 | 23 | try: 24 | yield session.register(utcnow, u'com.myapp.date') 25 | print("procedure registered") 26 | except Exception as e: 27 | print("could not register procedure: {0}".format(e)) 28 | 29 | 30 | if __name__ == "__main__": 31 | run([component]) 32 | -------------------------------------------------------------------------------- /docs/code/client_component_rpc_caller.py: -------------------------------------------------------------------------------- 1 | from autobahn.twisted.component import Component, run 2 | from autobahn.twisted.util import sleep 3 | from twisted.internet.defer import inlineCallbacks 4 | import os 5 | import argparse 6 | import six 7 | import datetime 8 | 9 | url = os.environ.get('CBURL', u'ws://localhost:8080/ws') 10 | realmv = os.environ.get('CBREALM', u'realm1') 11 | print(url, realmv) 12 | component = Component(transports=url, realm=realmv) 13 | 14 | @component.on_join 15 | @inlineCallbacks 16 | def joined(session, details): 17 | print("session ready") 18 | try: 19 | res = yield session.call(u'com.myapp.date') 20 | print("\ncall result: {}\n".format(res)) 21 | except Exception as e: 22 | print("call error: {0}".format(e)) 23 | yield session.leave() 24 | 25 | 26 | if __name__ == "__main__": 27 | run([component]) 28 | -------------------------------------------------------------------------------- /docs/code/client_component_subscribe.py: -------------------------------------------------------------------------------- 1 | from autobahn.twisted.component import Component, run 2 | from autobahn.twisted.util import sleep 3 | from twisted.internet.defer import inlineCallbacks 4 | import os 5 | 6 | url = os.environ.get('CBURL', u'ws://localhost:8080/ws') 7 | realmvalue = os.environ.get('CBREALM', u'realm1') 8 | component = Component(transports=url, realm=realmvalue) 9 | 10 | @component.on_join 11 | @inlineCallbacks 12 | def joined(session, details): 13 | print("session ready") 14 | 15 | def oncounter(count): 16 | print("event received: {0}", count) 17 | 18 | try: 19 | yield session.subscribe(oncounter, u'my.com.hello') 20 | print("subscribed to topic") 21 | except Exception as e: 22 | print("could not subscribe to topic: {0}".format(e)) 23 | 24 | if __name__ == "__main__": 25 | run([component]) 26 | -------------------------------------------------------------------------------- /docs/code/frontend.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

PubSub Basic Frontend

5 | 6 |

You can also open JavaScript console to watch output.

7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/code/frontend.js: -------------------------------------------------------------------------------- 1 | try { 2 | var autobahn = require('autobahn'); 3 | } catch (e) { 4 | // when running in browser, AutobahnJS will 5 | // be included without a module system 6 | } 7 | 8 | var connection = new autobahn.Connection({ 9 | url: 'ws://127.0.0.1:8080/ws', 10 | realm: 'realm1'} 11 | ); 12 | 13 | connection.onopen = function (session) { 14 | 15 | function onevent1(args) { 16 | console.log("Got event:", args[0]); 17 | document.getElementById('WAMPEvent').innerHTML = "Events:"+ args[0]; 18 | } 19 | 20 | session.subscribe('com.myapp.hello', onevent1); 21 | }; 22 | 23 | connection.open(); 24 | -------------------------------------------------------------------------------- /docs/code/rpc_callee.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

RPC Date Callee

5 |

You should open JavaScript console to watch output.

6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/code/rpc_callee.js: -------------------------------------------------------------------------------- 1 | var isBrowser = false; 2 | 3 | try { 4 | var autobahn = require('autobahn'); 5 | } catch (e) { 6 | isBrowser = true; 7 | } 8 | console.log("Running AutobahnJS " + autobahn.version); 9 | 10 | if (isBrowser) { 11 | url = 'ws://127.0.0.1:8080/ws'; 12 | realm = 'realm1'; 13 | } 14 | else { 15 | url = process.env.CBURL; 16 | realm = process.env.CBREALM; 17 | } 18 | 19 | var connection = new autobahn.Connection({ url: url, realm: realm }); 20 | 21 | connection.onopen = function (session, details) { 22 | console.log("session open!", details); 23 | 24 | function utcnow() { 25 | console.log("Someone is calling com.myapp.date"); 26 | now = new Date(); 27 | return now.toISOString(); 28 | } 29 | 30 | session.register('com.myapp.date', utcnow).then( 31 | function (registration) { 32 | console.log("Procedure registered:", registration.id); 33 | }, 34 | function (error) { 35 | console.log("Registration failed:", error); 36 | } 37 | ); 38 | }; 39 | 40 | connection.onclose = function (reason, details) { 41 | console.log("session closed: " + reason, details); 42 | } 43 | 44 | connection.open(); 45 | -------------------------------------------------------------------------------- /docs/concept-features.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _concept-features: 4 | 5 | Concept and Features 6 | ==================== 7 | 8 | basic-concept 9 | 10 | .. crossbar-features 11 | 12 | :doc:`Basic Concept ` 13 | ------------------------------------ 14 | 15 | Crossbar Features 16 | ----------------- 17 | 18 | -------------------------------------------------------------------------------- /docs/contents.rst.inc: -------------------------------------------------------------------------------- 1 | .. toctree:: 2 | :caption: Table of Contents 3 | :maxdepth: 2 4 | :name: mastertoc 5 | 6 | .. If you are new to Crossbar.io development in general you should start here at :ref:`getting-started` 7 | 8 | Introduction 9 | ------------- 10 | * :doc:`Getting Started ` 11 | 12 | Administrators 13 | -------------- 14 | * :doc:`Concept & Features ` 15 | * :doc:`Installation Guide ` 16 | * :doc:`Administration Guide ` 17 | 18 | Programmers 19 | ----------- 20 | * :doc:`Developer Guide ` 21 | * :doc:`Integration Guide ` 22 | * :doc:`Tutorials & Recipe ` 23 | 24 | More 25 | ---- 26 | * :doc:`Compatibility Policy ` 27 | * :doc:`Crossbar Code License ` 28 | * :doc:`Documentation License ` 29 | * `Contributing to the Project** `__ 30 | * :doc:`Contributing FAQ ` 31 | * :doc:`FAQ ` 32 | 33 | -------------------------------------------------------------------------------- /docs/crossbar-features.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | 4 | .. _crossbar-features: 5 | 6 | Crossbar Features 7 | ================= 8 | -------------------------------------------------------------------------------- /docs/developer-guide.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _developer-guide: 4 | 5 | Developer Guide 6 | =============== 7 | 8 | Usage 9 | ----- 10 | 11 | :ref:`Starting-and-Stopping-Crossbar` 12 | 13 | General 14 | ------- 15 | 16 | 17 | Publish and Subscribe 18 | --------------------- 19 | 20 | 21 | Remote Procedure Calls 22 | ---------------------- 23 | 24 | 25 | Specific Usages 26 | --------------- 27 | 28 | 29 | Specific Languages 30 | ------------------ 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /docs/integration-guide.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _integration-guide: 4 | 5 | Integration Guide 6 | ================= 7 | -------------------------------------------------------------------------------- /docs/policy-licence-faq.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _policy-license-faq: 4 | 5 | Policy, Licensing and FAQ 6 | ========================= 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/tutorials-recipe.rst: -------------------------------------------------------------------------------- 1 | :orphan: 2 | 3 | .. _tutorialandrecipe: 4 | 5 | Tutorials and Recipes 6 | ===================== 7 | 8 | 9 | -------------------------------------------------------------------------------- /legal/agplv3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/legal/agplv3.png -------------------------------------------------------------------------------- /legal/contributors_cb_tech.md: -------------------------------------------------------------------------------- 1 | Contributors with signed CAAs 2 | 3 | * meejah 4 | * yamakaky 5 | * mbonneau 6 | 7 | Entity CAAs 8 | 9 | * voryx 10 | -------------------------------------------------------------------------------- /legal/contributors_tavendo.md: -------------------------------------------------------------------------------- 1 | Contributors with signed CAAs 2 | 3 | * agronholm 4 | * bb4242 5 | * dimddev 6 | * eth3lbert 7 | * firefighterblu3 8 | * ftes 9 | * hawkowl 10 | * Kostronor 11 | * markope 12 | * meejah 13 | * paranaix 14 | * pataelmo 15 | * rlamy 16 | * schoonc 17 | * si618 18 | * SISCIA 19 | * slav0nic 20 | * svpcom 21 | * taion 22 | * touilleMan 23 | * voidfuture 24 | * w1z2g3 25 | * wilbertom 26 | * yoch 27 | 28 | Entity CAAs 29 | 30 | * Quantum SI Inc 31 | * Recode Systems 32 | -------------------------------------------------------------------------------- /legal/crossbar_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/legal/crossbar_icon.png -------------------------------------------------------------------------------- /legal/crossbar_icon_and_text_vectorized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/legal/crossbar_icon_and_text_vectorized.png -------------------------------------------------------------------------------- /legal/crossbar_text_vectorized.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/legal/crossbar_text_vectorized.png -------------------------------------------------------------------------------- /legal/entity_caa.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/legal/entity_caa.pdf -------------------------------------------------------------------------------- /legal/individual_caa.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/legal/individual_caa.pdf -------------------------------------------------------------------------------- /legal/wamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/legal/wamp.png -------------------------------------------------------------------------------- /mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | python_version = 3.11 3 | disable_error_code = annotation-unchecked 4 | 5 | [mypy-crossbar.worker.test.examples.*] 6 | ignore_errors = True 7 | 8 | [mypy-crossbar.*] 9 | ignore_missing_imports = True 10 | 11 | [mypy-six.*] 12 | ignore_missing_imports = True 13 | 14 | [mypy-requests.*] 15 | ignore_missing_imports = True 16 | 17 | [mypy-pkg_resources.*] 18 | ignore_missing_imports = True 19 | 20 | [mypy-yaml.*] 21 | ignore_missing_imports = True 22 | 23 | [mypy-mock.*] 24 | ignore_missing_imports = True 25 | 26 | [mypy-attr.*] 27 | ignore_missing_imports = True 28 | 29 | [mypy-docutils.*] 30 | ignore_missing_imports = True 31 | 32 | [mypy-OpenSSL.*] 33 | ignore_missing_imports = True 34 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.towncrier] 2 | package = "crossbar" 3 | package_dir = "." 4 | filename = "NEWS.rst" 5 | -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | filterwarnings = 3 | ignore::DeprecationWarning -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | py-cid @ git+https://github.com/crossbario/py-cid.git@e1dc52a43ced53845679405f78d92fb18f093653 2 | py-multihash @ git+https://github.com/crossbario/py-multihash.git@86b54b8f9f0cf14c7370f38ae32f2b4b14f5b5e0 3 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [bdist_wheel] 2 | universal=1 3 | 4 | # https://stackoverflow.com/a/49501010/884770 5 | [options] 6 | install_requires = 7 | wsaccel>=0.6.2; platform_python_implementation=='CPython' 8 | 9 | [pycodestyle] 10 | max-line-length = 110 11 | statistics = True 12 | -------------------------------------------------------------------------------- /sitecustomize.py: -------------------------------------------------------------------------------- 1 | try: 2 | import coverage 3 | coverage.process_startup() 4 | except ImportError: 5 | pass 6 | -------------------------------------------------------------------------------- /test/app1/README.md: -------------------------------------------------------------------------------- 1 | This app subscribes to the core set of WAMP meta events and logs events as received. 2 | 3 | To run: 4 | 5 | ```console 6 | python client.py --realm $CBREALM --url $CBURL --service app1a 7 | ``` 8 | -------------------------------------------------------------------------------- /test/app2/README.md: -------------------------------------------------------------------------------- 1 | This app subscribes to the core set of WAMP meta events and logs events as received. 2 | 3 | To run: 4 | 5 | ```console 6 | python client.py --realm $CBREALM --url $CBURL 7 | ``` 8 | -------------------------------------------------------------------------------- /test/cf1/.crossbar/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:46.061Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: core1 7 | node-cluster-ip: core1 8 | public-key-ed25519: 7be45c5ea077aff51973b9af8cadea31955087f9cd483bd57b51c3b7da4bc623 9 | public-adr-eth: 0x119AE3287bc259a944119456B03D3eC4D31c1105 10 | private-key-ed25519: 4fc5bcba148be97d2b20cd9c2e30b7f80f6c10f23e60e01974be66ba8920c51a 11 | private-key-eth: 8aab8bfd448640c92a1a2ed32aa7b4b6d75eae842c0ab8c20216fe1b711697cc 12 | -------------------------------------------------------------------------------- /test/cf1/.crossbar/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:46.061Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: core1 7 | node-cluster-ip: core1 8 | public-key-ed25519: 7be45c5ea077aff51973b9af8cadea31955087f9cd483bd57b51c3b7da4bc623 9 | public-adr-eth: 0x119AE3287bc259a944119456B03D3eC4D31c1105 10 | -------------------------------------------------------------------------------- /test/cf2/.crossbar/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:48.574Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: core2 7 | node-cluster-ip: core2 8 | public-key-ed25519: 72ada0f4af4dde782a68ca2f4604b53babc79506d2e66474858771411670ccaf 9 | public-adr-eth: 0x602B3396F4C09bc1735033074a6Df2f27aE72595 10 | private-key-ed25519: 49d13be7a161b8568dfeac61aa291b9134f8ebca8a9a48249819e37b855914db 11 | private-key-eth: ef130ed4050a818f99e4ec021420c60e16decd4a55f093936446a5d161d71571 12 | -------------------------------------------------------------------------------- /test/cf2/.crossbar/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:48.574Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: core2 7 | node-cluster-ip: core2 8 | public-key-ed25519: 72ada0f4af4dde782a68ca2f4604b53babc79506d2e66474858771411670ccaf 9 | public-adr-eth: 0x602B3396F4C09bc1735033074a6Df2f27aE72595 10 | -------------------------------------------------------------------------------- /test/cf3/.crossbar/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "controller": { 4 | "fabric": { 5 | "transport": { 6 | "type": "websocket", 7 | "endpoint": { 8 | "type": "tcp", 9 | "host": "localhost", 10 | "port": 9000 11 | }, 12 | "url": "ws://localhost:9000/ws" 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /test/cf3/.crossbar/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:51.053Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: core3 7 | node-cluster-ip: core3 8 | public-key-ed25519: 539c9c30f65531751261101898ca38b2441b3b4e5121513c5c4ee36599d4726f 9 | public-adr-eth: 0xC953dfb9Ecf880c337584AF29b152c40eAA41103 10 | private-key-ed25519: f676ffaae131fc5764f88811c9a975a5817ec499d1c32abce3e5665cebc2c5d2 11 | private-key-eth: c9ff74a6b510342f0f81c60564304b725983c71244f7fe825713988f4e53a567 12 | -------------------------------------------------------------------------------- /test/cf3/.crossbar/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:51.053Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: core3 7 | node-cluster-ip: core3 8 | public-key-ed25519: 539c9c30f65531751261101898ca38b2441b3b4e5121513c5c4ee36599d4726f 9 | public-adr-eth: 0xC953dfb9Ecf880c337584AF29b152c40eAA41103 10 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/README.md: -------------------------------------------------------------------------------- 1 | CFC has a built-in config 2 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/config.ini: -------------------------------------------------------------------------------- 1 | [default] 2 | 3 | url= 4 | privkey=default.priv 5 | pubkey=default.pub 6 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "controller": { 4 | "id": "cfc666", 5 | "fabric-center": { 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/default.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io user private key - KEEP THIS SAFE! 2 | 3 | creator: unknown 4 | created-at: 2023-01-20T18:15:14.693Z 5 | user-id: unknown 6 | public-key-ed25519: badf9df012e95a72e73b7edba8739199557289db1e6ec498133c3c6b5f7bb545 7 | public-adr-eth: 0x87419274BBb815cd8646154D4f8B7e83d022C046 8 | private-key-ed25519: 04e515dca26595af4fc3e65a75966ce71689d225ac83874cec38e27150be980b 9 | private-key-eth: 842f83e4c73b403fb0fe3232d9558b5d6feb83d9292d82302833cb917f6ff8fa 10 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/default.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io user public key 2 | 3 | creator: unknown 4 | created-at: 2023-01-20T18:15:14.693Z 5 | user-id: unknown 6 | public-key-ed25519: badf9df012e95a72e73b7edba8739199557289db1e6ec498133c3c6b5f7bb545 7 | public-adr-eth: 0x87419274BBb815cd8646154D4f8B7e83d022C046 8 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/dhparam.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN DH PARAMETERS----- 2 | MIIBCAKCAQEA2P5MLkaWXhFz29y2dOCFrf04GR+JY7vMvkXdNy6ub8toJIY3gc5M 3 | DBVVLDvK8GGycYHpLNWTJxVSQFemCVOtPIP2Hx1utw8llcAHD2tCnGSjfBvjBux8 4 | DzlIblr5y+aYtljjb5zNnR+mOfZ25MSvwyccficvxKQ8TXZQXcTxSOJ4AZjfeDZw 5 | SgZbBK6DLy9r5pVMEdM7hkUpV8oRkUg4A2DfiLm7hWqM5kidDVCxbP9eGAcT8yI/ 6 | wl4yRMzTPk2gCRGpZ50dt+KRXTyrTptDCzSi7SFpG68WwHFWy4IRS8HZ49vA15Ak 7 | Fg0zELKpDC58/Nk8nPxGuOWfmS7vbodyowIBAg== 8 | -----END DH PARAMETERS----- 9 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:54.228Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: intel-nuci7 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: ad83955cba41db6ae16261fe5a9f3649c6ee6beb7b4f3d74ffd3b65cdb572f03 9 | public-adr-eth: 0x8F852F2310BE66E06cbA20d9EFF459f60689c7eC 10 | private-key-ed25519: 44c594cf959af40c20fa965d8a4110f1b104ed2634bfe4db7ddf1252d2761f17 11 | private-key-eth: 8935edd906f3c5a00f791d13dbf6c3ce5be256e86a19e3ced581f69903e2f21d 12 | -------------------------------------------------------------------------------- /test/cfc/.crossbar/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T01:18:54.228Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: intel-nuci7 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: ad83955cba41db6ae16261fe5a9f3649c6ee6beb7b4f3d74ffd3b65cdb572f03 9 | public-adr-eth: 0x8F852F2310BE66E06cbA20d9EFF459f60689c7eC 10 | -------------------------------------------------------------------------------- /test/cfc/README.md: -------------------------------------------------------------------------------- 1 | CFC node directory (empty,as everything is stored in etcd) 2 | -------------------------------------------------------------------------------- /test/cfc/web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Open JavaScript console to watch log output (hit F12)

5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /test/full/.crossbar/dhparam.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN DH PARAMETERS----- 2 | MIIBCAKCAQEAnh9gVzS6KoxxA4gCFBHaxN15HQcDCO/eoBga0/9RNqNZIKTG5s7R 3 | b2bft0/GNqF1qlC5AeFp1aUG7u/3yclpTLjbkjlyF7UHbdfKBsudPBGYdDVeozVK 4 | gbu8MrHOnmplvT56iKrIaoQVQH+Ub2qmjIVkRTnQPR/xbbCqiF2WJKFkNbP33HVw 5 | c+Mmsd8NhDjPDlh9XnB8rP6JyG1baI4bS8VnoBrvc0rbVI0AnTJSW+tTfNViVCaY 6 | O/eKXhsf+hNxEMwnWrKJc83D4MDt64hCPml55Sv8+UH/znJqupU5XJy2brsE0f2g 7 | iVVivxKeMcC9FUbCRDerzVSrsSclvHvl6wIBAg== 8 | -----END DH PARAMETERS----- 9 | -------------------------------------------------------------------------------- /test/full/.crossbar/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T06:51:14.000Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: intel-nuci7 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: 477c171c3d0d4edf493d7dab46b062395dca1c9263965389c48212fd3f9394da 9 | public-adr-eth: 0x23Dc30967eD07A742A1562C9363691cFd332cF3c 10 | private-key-ed25519: f66cd0d9f4711051f01a10eda14eb3f9b0a279b240bc0ba8b1698413c5a0c844 11 | private-key-eth: 8dd00c81351147674964c156d261f74f8a8adf723b88857be4208d67321a352a 12 | -------------------------------------------------------------------------------- /test/full/.crossbar/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2022-07-03T06:51:14.000Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: intel-nuci7 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: 477c171c3d0d4edf493d7dab46b062395dca1c9263965389c48212fd3f9394da 9 | public-adr-eth: 0x23Dc30967eD07A742A1562C9363691cFd332cF3c 10 | -------------------------------------------------------------------------------- /test/full/.crossbar/ssh_host_rsa_key.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDnCmHM386aGNC/BXgRtsDnJWbA2FPQw2wl0hDN81Auy2pKvhbKzZwy9vcBEYYam8oxcOgMYdN4EH4B98tms3qgZt20XpPuxtRAKm56iC1+lS9iAE3u7uCT2EfT4eV4Ww8zMBZV/SwkM4GndFtJdfpkMLmVNTMH7s4LEXO5mfP2dJuBJ91tKyuUcWzwS4gH4Vt8bYV7sG4HU1YsnDu6JKIwy/uVwnYciKUY1LVit2RyLA8PA6+prOB4u1FHTEiEZ9aOKyJi1U191eO1KOmTvdZ4M3Mp0HJp/ExsgJAqguP3xGkHa8EhpqsfjCUagiCVswd8SfbQLVU7kJ9Oe/iODdTvy+T98QvQ6gp5fv9SysXi35shQ/JptDhZXBDYqBlpwQ5APQ2hr9mBfpSKy7PQYpK5bmVqh07XdcSG9Zzg4c0oOyJq0X5K+O/WCfr4ZcvStmIO0vTotB7gIyTxUesiR2NXKxpFgykd3kIiiAf0CVAiWmjVhyk//IGFHqmzG1U2YqXPe6Oy1SJCmyrKmPXI7PhLDYTj3mFg1/NcMTRk85HQkhNxq6MJSzpSLyI0OhgyzTG2N+89XoUn4Jp6qdY34RBzuni7qw9ITacEsQK7vt11fP5y4rWF607hkZ9gm0tvAKuhG9WtkjGPsq0UmdYWd/xhvUSP9M1lBjJqPu2PgE6f/Q== oberstet@thinkpad-t430s 2 | -------------------------------------------------------------------------------- /test/full/README.md: -------------------------------------------------------------------------------- 1 | Generated from Crossbar.io default node template. 2 | -------------------------------------------------------------------------------- /test/full/myapp.py: -------------------------------------------------------------------------------- 1 | from twisted.logger import Logger 2 | from autobahn.twisted.wamp import ApplicationSession 3 | 4 | class MySession(ApplicationSession): 5 | 6 | log = Logger() 7 | 8 | def __init__(self, config): 9 | self.log.info("MySession.__init__()") 10 | ApplicationSession.__init__(self, config) 11 | 12 | def onJoin(self, details): 13 | self.log.info("MySession.onJoin()") 14 | #self.leave() 15 | -------------------------------------------------------------------------------- /test/full/tick.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | while : 4 | do 5 | date 6 | sleep 1 7 | done 8 | -------------------------------------------------------------------------------- /test/full/web/README.md: -------------------------------------------------------------------------------- 1 | Put your Web files here. -------------------------------------------------------------------------------- /test/functests/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 4 | # 5 | ############################################################################### 6 | -------------------------------------------------------------------------------- /test/functests/cbtests/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 4 | # 5 | ############################################################################### 6 | -------------------------------------------------------------------------------- /test/functests/cfctests/__init__.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 4 | # 5 | ############################################################################### 6 | -------------------------------------------------------------------------------- /test/functests/components.py: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Copyright (c) typedef int GmbH. Licensed under EUPLv1.2. 4 | # 5 | ############################################################################### 6 | 7 | from __future__ import print_function 8 | 9 | from autobahn.twisted.wamp import ApplicationSession 10 | 11 | # these are helper-components for various tests. 12 | 13 | # they are *not* in the test_*.py files because those don't import in 14 | # the test-system unless we install py.test, pytest-cov, 15 | # pytest-twitsed and enable at least the Twisted plugin so that 16 | # "pytest.inlineCallbacks" is available (for import) 17 | 18 | 19 | class EmptyComponent(ApplicationSession): 20 | """ 21 | A component that does nothing. 22 | """ 23 | 24 | 25 | class ErrorComponent(ApplicationSession): 26 | """ 27 | A component that throws on construction. 28 | """ 29 | def __init__(self, *args, **kw): 30 | raise RuntimeError("ErrorComponent always fails") 31 | -------------------------------------------------------------------------------- /test/jupyter/.jupyter/migrated: -------------------------------------------------------------------------------- 1 | 2018-10-31T15:27:18.630403 -------------------------------------------------------------------------------- /test/management/ex_global_status.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) typedef int GmbH, licensed under The MIT License (MIT) 2 | 3 | from pprint import pformat 4 | 5 | from crossbar.shell import client 6 | 7 | 8 | async def main(session): 9 | """ 10 | Connect to CFC, get system status and exit. 11 | """ 12 | status = await session.call(u'crossbarfabriccenter.domain.get_status') 13 | session.log.info('CFC domain status:\n{status}', status=pformat(status)) 14 | 15 | 16 | if __name__ == '__main__': 17 | client.run(main) 18 | -------------------------------------------------------------------------------- /test/management/ex_list_workers.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) typedef int GmbH, licensed under The MIT License (MIT) 2 | 3 | from pprint import pformat 4 | 5 | from crossbar.shell import client 6 | 7 | 8 | async def main(session): 9 | """ 10 | Iterate over all nodes, and all workers on each nodes to retrieve and 11 | print worker information. 12 | """ 13 | nodes = await session.call( 14 | u'crossbarfabriccenter.mrealm.get_nodes', status=u'online') 15 | for node_id in nodes: 16 | 17 | workers = await session.call( 18 | u'crossbarfabriccenter.remote.node.get_workers', node_id) 19 | for worker_id in workers: 20 | worker = await session.call( 21 | u'crossbarfabriccenter.remote.node.get_worker', 22 | node_id, 23 | worker_id, 24 | include_stats=True) 25 | session.log.info( 26 | 'Node "{node_id}" / Worker "{worker_id}":\n{worker}', 27 | node_id=node_id, 28 | worker_id=worker_id, 29 | worker=pformat(worker)) 30 | 31 | 32 | if __name__ == '__main__': 33 | client.run(main) 34 | -------------------------------------------------------------------------------- /test/management/ex_status.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) typedef int GmbH, licensed under The MIT License (MIT) 2 | 3 | from pprint import pformat 4 | 5 | from crossbar.shell import client 6 | 7 | 8 | async def main(session): 9 | """ 10 | Connect to (a user management realm on) CFC, get status and exit. 11 | 12 | This is about the most basic example possible. You can copy this 13 | example and add your CFC calls, reuse the example driver (client.py) 14 | and get started super quickly. 15 | """ 16 | status = await session.call(u'crossbarfabriccenter.mrealm.get_status') 17 | session.log.info('CFC status:\n{status}', status=pformat(status)) 18 | 19 | 20 | if __name__ == '__main__': 21 | client.run(main) 22 | -------------------------------------------------------------------------------- /test/management/ex_worker_log.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) typedef int GmbH, licensed under The MIT License (MIT) 2 | 3 | from crossbar.shell import client 4 | 5 | 6 | async def main(session): 7 | """ 8 | Iterate over all nodes, and all workers on each nodes to retrieve and 9 | print worker information. then exit. 10 | """ 11 | nodes = await session.call( 12 | u'crossbarfabriccenter.mrealm.get_nodes', status=u'online') 13 | for node_id in nodes: 14 | workers = await session.call( 15 | u'crossbarfabriccenter.remote.node.get_workers', node_id) 16 | for worker_id in workers: 17 | 18 | session.log.info( 19 | 'Node "{node_id}" / Worker "{worker_id} log":', 20 | node_id=node_id, 21 | worker_id=worker_id) 22 | 23 | # retrieve log history of worker (last 100 lines) 24 | log = await session.call( 25 | u'crossbarfabriccenter.remote.node.get_worker_log', node_id, 26 | worker_id, 100) 27 | 28 | for log_rec in log: 29 | print(log_rec) 30 | 31 | 32 | if __name__ == '__main__': 33 | client.run(main) 34 | -------------------------------------------------------------------------------- /test/run_crossbar.py: -------------------------------------------------------------------------------- 1 | if __name__ == '__main__': 2 | from crossbar import run 3 | run() 4 | -------------------------------------------------------------------------------- /test/test_ab_examples.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cd /tmp 4 | rm -f master.zip 5 | curl -o master.zip https://codeload.github.com/crossbario/autobahn-python/zip/master 6 | rm -rf autobahn-python-master 7 | unzip -q master.zip 8 | cd autobahn-python-master/examples 9 | 10 | # run RawSocket tests using Twisted and asyncio Autobahn client 11 | AUTOBAHN_DEMO_ROUTER=rs://127.0.0.1:8080 python run-all-examples.py 12 | 13 | # run WebSocket tests using Twisted and asyncio Autobahn client 14 | AUTOBAHN_DEMO_ROUTER=ws://127.0.0.1:8080/ws python run-all-examples.py 15 | -------------------------------------------------------------------------------- /test/test_automated/.crossbar/config.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/test/test_automated/.crossbar/config.ini -------------------------------------------------------------------------------- /test/test_automated/.gitignore: -------------------------------------------------------------------------------- 1 | wamp_log.json 2 | -------------------------------------------------------------------------------- /test/test_automated/.test/master/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:30:04.687Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: intel-nuci7 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: ea48f5cdd9ce41fc00d8a1fe2dcf6c43dddcd93689419fd6b956952c8a04cad8 9 | public-adr-eth: 0xefdfe8239688F47BBa1Ce7CDbe6293bb2Cea3E74 10 | private-key-ed25519: 458bd65f624d94e23d7985b707ac7f61f0f50aac7b9c5483271b1762a94697de 11 | private-key-eth: db7fa9dba33a767c1cefd4718411949767dde5fb8a63aeb22b20f2dce6d799ca 12 | -------------------------------------------------------------------------------- /test/test_automated/.test/master/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:30:04.687Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: intel-nuci7 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: ea48f5cdd9ce41fc00d8a1fe2dcf6c43dddcd93689419fd6b956952c8a04cad8 9 | public-adr-eth: 0xefdfe8239688F47BBa1Ce7CDbe6293bb2Cea3E74 10 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node1/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:29:55.201Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node1 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: be7671649265b3b8303980d5c39fffdfd3ec0fceccfad48d5b9e45b2129ce51c 9 | public-adr-eth: 0x25d469b38be2FB34B1985061e003BBC3D8f579ad 10 | private-key-ed25519: 597775f244e89d1787effedb6942641f15b3362e14515732024169c2588206a6 11 | private-key-eth: 5fd3e0212f6ea71bfd68960dcd3f29ce3768f6ae3d6c3f4c21bd71dde0c07c2a 12 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node1/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:29:55.201Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node1 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: be7671649265b3b8303980d5c39fffdfd3ec0fceccfad48d5b9e45b2129ce51c 9 | public-adr-eth: 0x25d469b38be2FB34B1985061e003BBC3D8f579ad 10 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node2/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:29:57.378Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node2 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: a66fbff7d8f3521c1d69fc27f9c9d9e89ed543ea52ebdd82a86de02bcc8babf8 9 | public-adr-eth: 0x51194B30b6CBe63d86C3B610A7B613Fd86dbd342 10 | private-key-ed25519: 6bda135b317d19f9e2932e8bc840bcea4f4794bfa60c3a09c9b432297a13a2d6 11 | private-key-eth: ac4e14b65b28f3124db5302756df1211938e4ec3857d553b776e0d500ceef033 12 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node2/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:29:57.378Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node2 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: a66fbff7d8f3521c1d69fc27f9c9d9e89ed543ea52ebdd82a86de02bcc8babf8 9 | public-adr-eth: 0x51194B30b6CBe63d86C3B610A7B613Fd86dbd342 10 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node3/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:29:59.575Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node3 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: a0897dc2c31b48c4e4d0855e76710733f181f41883d0b47c403f6465d78411ed 9 | public-adr-eth: 0xdB1fECDb369a55815c90B3787583c15D7754C1C4 10 | private-key-ed25519: db3550ddfa2e37d0b7a051779aae875ce8bcdfd0c762d8b41229ddd3ca0cd3b6 11 | private-key-eth: b2d6a77378638ea3b9b98409dfd9e901d6fa736ab0b8e0842e76ba2ce1503768 12 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node3/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:29:59.575Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node3 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: a0897dc2c31b48c4e4d0855e76710733f181f41883d0b47c403f6465d78411ed 9 | public-adr-eth: 0xdB1fECDb369a55815c90B3787583c15D7754C1C4 10 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node4/key.priv: -------------------------------------------------------------------------------- 1 | Crossbar.io node private key - KEEP THIS SAFE! 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:30:01.743Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node4 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: 45a67448e3ab9c806a4681135b17fa44aee965d909ecd9b7e1af28b9b81a2f6d 9 | public-adr-eth: 0xDbE041D854158fa2993ddbc8b5499E7CDB8cbAD9 10 | private-key-ed25519: eecf0483fd3b87b50883dcabe93cfcd1d31cb4b33bfadd0dd6ab78ce604bf5c0 11 | private-key-eth: e5935c6c70f3a545460b22c3bec9ffdff76861f2d0705f75fe492352cef7bbde 12 | -------------------------------------------------------------------------------- /test/test_automated/.test/nodes/node4/key.pub: -------------------------------------------------------------------------------- 1 | Crossbar.io node public key 2 | 3 | creator: oberstet@intel-nuci7 4 | created-at: 2023-01-22T10:30:01.743Z 5 | machine-id: 816b4b901e774fc1ad59cbf2719806b7 6 | node-authid: node4 7 | node-cluster-ip: 127.0.0.1 8 | public-key-ed25519: 45a67448e3ab9c806a4681135b17fa44aee965d909ecd9b7e1af28b9b81a2f6d 9 | public-adr-eth: 0xDbE041D854158fa2993ddbc8b5499E7CDB8cbAD9 10 | -------------------------------------------------------------------------------- /test/test_automated/haproxy.cfg: -------------------------------------------------------------------------------- 1 | global 2 | log 127.0.0.1 local2 3 | maxconn 200000 4 | 5 | # https://www.freecodecamp.org/news/how-we-fine-tuned-haproxy-to-achieve-2-000-000-concurrent-ssl-connections-d017e61a4d27/ 6 | # https://blog.onefellow.com/post/82478335338/haproxy-mapping-process-to-cpu-core-for-maximum 7 | nbthread 8 8 | 9 | defaults 10 | log global 11 | timeout connect 2000 12 | timeout client 2000 13 | timeout server 2000 14 | 15 | listen stats 16 | bind *:1936 17 | mode http 18 | stats enable 19 | stats hide-version 20 | stats realm Haproxy\ Statistics 21 | stats uri / 22 | 23 | frontend crossbar 24 | bind *:8080 25 | mode tcp 26 | option tcplog 27 | default_backend crossbar_nodes 28 | timeout client 1m 29 | 30 | backend crossbar_nodes 31 | mode tcp 32 | option log-health-checks 33 | log global 34 | # balance roundrobin 35 | balance leastconn 36 | server node1 node1:8080 check fall 3 rise 2 37 | server node2 node2:8080 check fall 3 rise 2 38 | server node3 node3:8080 check fall 3 rise 2 39 | server node4 node4:8080 check fall 3 rise 2 40 | timeout connect 10s 41 | timeout server 1m 42 | -------------------------------------------------------------------------------- /test/test_automated/test_stop_host.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | CROSSBAR=crossbar 4 | CROSSBAR_FABRIC_SUPERUSER=${HOME}/.crossbar/default.pub 5 | CROSSBAR_FABRIC_URL=ws://localhost:9000/ws 6 | CROSSBAR_WATCH_TO_PAIR=../nodes 7 | 8 | pkill python 9 | 10 | ${CROSSBAR} edge stop --cbdir=./.test/nodes/node4 11 | ${CROSSBAR} edge stop --cbdir=./.test/nodes/node3 12 | ${CROSSBAR} edge stop --cbdir=./.test/nodes/node2 13 | ${CROSSBAR} edge stop --cbdir=./.test/nodes/node1 14 | ${CROSSBAR} master stop --cbdir=./.test/master 15 | 16 | rm -rf ./.test 17 | -------------------------------------------------------------------------------- /test/test_backend/cf1/backend.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) typedef int GmbH, licensed under The MIT License (MIT) 2 | 3 | import os 4 | 5 | from twisted.internet.defer import inlineCallbacks 6 | 7 | from autobahn.wamp.types import RegisterOptions 8 | from autobahn.twisted.wamp import ApplicationSession, ApplicationRunner 9 | 10 | 11 | class MyComponent(ApplicationSession): 12 | 13 | @inlineCallbacks 14 | def onJoin(self, details): 15 | self._ident = 'MyComponent[pid={}, session={}]'.format(os.getpid(), details.session) 16 | 17 | yield self.register(self.add2, 18 | u'com.example.add2', 19 | options=RegisterOptions(invoke=u'roundrobin')) 20 | 21 | self.log.info('{ident}.add2 registered', ident=self._ident) 22 | 23 | def add2(self, a, b): 24 | self.log.info('{ident}.add2(a={a} b={b}) called', ident=self._ident, a=a, b=b) 25 | return {u'result': a + b, u'ident': self._ident} 26 | -------------------------------------------------------------------------------- /test/test_backend/cf2/backend.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) typedef int GmbH, licensed under The MIT License (MIT) 2 | 3 | import os 4 | 5 | from twisted.internet.defer import inlineCallbacks 6 | 7 | from autobahn.wamp.types import RegisterOptions 8 | from autobahn.twisted.wamp import ApplicationSession, ApplicationRunner 9 | 10 | 11 | class MyComponent(ApplicationSession): 12 | 13 | @inlineCallbacks 14 | def onJoin(self, details): 15 | self._ident = 'MyComponent[pid={}, session={}]'.format(os.getpid(), details.session) 16 | 17 | yield self.register(self.add2, 18 | u'com.example.add2', 19 | options=RegisterOptions(invoke=u'roundrobin')) 20 | 21 | self.log.info('{ident}.add2 registered', ident=self._ident) 22 | 23 | def add2(self, a, b): 24 | self.log.info('{ident}.add2(a={a} b={b}) called', ident=self._ident, a=a, b=b) 25 | return {u'result': a + b, u'ident': self._ident} 26 | -------------------------------------------------------------------------------- /test/test_jupyter/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker image based on Jupyter Python stack with preinstalled CrossbarFX integration 2 | # https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-tensorflow-notebook 3 | 4 | FROM jupyter/tensorflow-notebook 5 | 6 | RUN pip install -U pip && pip install autobahn[asyncio] zlmdb 7 | -------------------------------------------------------------------------------- /test/test_jupyter/Makefile: -------------------------------------------------------------------------------- 1 | default: 2 | @echo "targets: build run" 3 | 4 | build: 5 | docker build --rm -t my-crossbarfx-notebook . 6 | 7 | run: 8 | docker run \ 9 | -p 8888:8888 \ 10 | -v /some/host/folder/for/work:/home/jovyan/work \ 11 | --user $UID --group-add users \ 12 | my-crossbarfx-notebook 13 | -------------------------------------------------------------------------------- /test/test_nodelog/test_usage.py: -------------------------------------------------------------------------------- 1 | DBFILE = '../cfc/.crossbar/.db-mrealm-ceabc374-99b1-4623-95ba-36b5f1f85e5c' 2 | GDBFILE = '../cfc/.crossbar/.db-controller' 3 | 4 | from pprint import pprint 5 | import zlmdb 6 | from crossbar.master.database.mrealmschema import MrealmSchema 7 | from crossbar.master.database.globalschema import GlobalSchema 8 | 9 | db = zlmdb.Database(DBFILE, maxsize=2**30, readonly=False) 10 | schema = MrealmSchema.attach(db) 11 | 12 | gdb = zlmdb.Database(GDBFILE, maxsize=2**30, readonly=False) 13 | gschema = GlobalSchema.attach(gdb) 14 | 15 | with db.begin() as txn: 16 | with gdb.begin() as gtxn: 17 | cnt = schema.mnode_logs.count(txn) 18 | print('{} node log records so far'.format(cnt)) 19 | 20 | cnt = gschema.usage.count(gtxn) 21 | print('{} usage records so far'.format(cnt)) 22 | for key, rec in gschema.usage.select(gtxn, return_keys=True): 23 | pprint(rec.marshal()) 24 | -------------------------------------------------------------------------------- /test/test_pevents/.gitignore: -------------------------------------------------------------------------------- 1 | .testdb 2 | .ipynb_checkpoints 3 | jupyter/.jupyter/migrated 4 | -------------------------------------------------------------------------------- /test/test_pevents/README.md: -------------------------------------------------------------------------------- 1 | Generated from Crossbar.io default node template. 2 | -------------------------------------------------------------------------------- /test/test_pevents/crossbar/subscriber.py: -------------------------------------------------------------------------------- 1 | from autobahn.twisted.wamp import ApplicationSession 2 | from autobahn.wamp.types import SubscribeOptions 3 | 4 | 5 | class SubscriberBackend(ApplicationSession): 6 | 7 | async def onJoin(self, details): 8 | self.log.debug("Connected: {details}", details=details) 9 | 10 | self._cnt_received = 0 11 | N = 100 12 | 13 | def on_event(evt, counter, value3=None, details=None): 14 | self._cnt_received += 1 15 | if self._cnt_received % N == 0: 16 | self.log.info('{session} received {cnt} events so far ..', 17 | session=self._session_id, cnt=self._cnt_received) 18 | 19 | sub = await self.subscribe(on_event, 'com.example.geoservice.', 20 | options=SubscribeOptions(match='prefix', details_arg='details')) 21 | 22 | self.log.info('Subscribed to "com.example.geoservice." with prefix match: {sub}', sub=sub) 23 | -------------------------------------------------------------------------------- /test/test_pevents/crossbar/web/README.md: -------------------------------------------------------------------------------- 1 | Put your Web files here. -------------------------------------------------------------------------------- /test/test_pevents/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | crossbar: 6 | image: crossbario/crossbarfx 7 | restart: always 8 | ports: 9 | - "8080:8080" 10 | network_mode: host 11 | volumes: 12 | - ${PWD}/crossbar/:/node/:rw 13 | environment: 14 | - CFX_URL=wss://cfx.crossbario.com/ws 15 | - CFX_CODE=VXUM-55KG-7C7T 16 | 17 | notebook: 18 | image: crossbario/crossbarfx-notebook 19 | ports: 20 | - "8888:8888" 21 | network_mode: host 22 | volumes: 23 | - ${PWD}/jupyter/notebooks/:/work/notebooks:rw 24 | - ${PWD}/jupyter/.jupyter/:/work/.jupyter:rw 25 | - ${PWD}/crossbar/.testdb:/work/testdb:rw 26 | environment: 27 | - CF_URL=ws://crossbar:8080/ws 28 | - CF_REALM=realm1 29 | -------------------------------------------------------------------------------- /test/test_pevents/jupyter/Dockerfile.cpy: -------------------------------------------------------------------------------- 1 | # Docker image based on Jupyter Python stack with preinstalled CrossbarFX integration 2 | # https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-tensorflow-notebook 3 | 4 | FROM jupyter/tensorflow-notebook 5 | 6 | COPY .jupyter/jupyter_notebook_config.py /home/jovyan/.jupyter 7 | 8 | RUN pip install -U pip && pip install aiohttp autobahn[asyncio,twisted,encryption,serialization,scram] 9 | 10 | # RUN pip install zlmdb cfxdb 11 | 12 | COPY .wheels /tmp/ 13 | 14 | RUN ls -la /tmp 15 | 16 | RUN pip install --no-cache-dir \ 17 | /tmp/zlmdb-*-py2.py3-none-any.whl \ 18 | /tmp/cfxdb-*-py2.py3-none-any.whl \ 19 | && pip show zlmdb cfxdb 20 | -------------------------------------------------------------------------------- /test/test_pevents/jupyter/notebooks/.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints 2 | .local 3 | -------------------------------------------------------------------------------- /test/test_pevents/jupyter/notebooks/Untitled1.txt: -------------------------------------------------------------------------------- 1 | 2 | %matplotlib inline 3 | 4 | import math 5 | import numpy as np 6 | import pandas as pd 7 | import seaborn as sns 8 | 9 | import zlmdb 10 | from cfxdb.schema import ZdbSchema 11 | 12 | 13 | 14 | # create pandas dataframe from data collected in lists 15 | df = pd.DataFrame({ 16 | 'x': np.asarray(vec_x, dtype='uint16'), 17 | 'y': np.asarray(vec_y, dtype='uint16'), 18 | 'category': np.asarray(vec_category, dtype='uint8'), 19 | 'value2': np.asarray(vec_value2, dtype='float32') 20 | }) 21 | 22 | # compute some basic statistics 23 | df.describe() 24 | 25 | 26 | def trunc(val): 27 | return int(val / 20) 28 | 29 | df3 = pd.DataFrame({ 30 | 'x': df['x'].apply(trunc), 31 | 'y': df['y'].apply(trunc), 32 | 'value': df['value2'], 33 | }) 34 | 35 | # compute aggregate 36 | df4 = df3.pivot_table(index='x', columns='y', values='value', aggfunc=np.median) 37 | 38 | # draw heatmap 39 | sns.heatmap(df4, annot=True, fmt=".3f") 40 | 41 | -------------------------------------------------------------------------------- /test/test_pevents/jupyter/red-data-tools.list: -------------------------------------------------------------------------------- 1 | deb [signed-by=/usr/share/keyrings/red-data-tools-keyring.gpg] https://packages.red-data-tools.org/ubuntu/ bionic universe 2 | deb-src [signed-by=/usr/share/keyrings/red-data-tools-keyring.gpg] https://packages.red-data-tools.org/ubuntu/ bionic universe 3 | -------------------------------------------------------------------------------- /test/test_xbr_marketmaker/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: crossbar example_provider jupyter ganache 2 | 3 | CROSSBAR=crossbarfx edge 4 | 5 | default: 6 | docker-compose up --build 7 | 8 | clean_db: 9 | rm -f ${PWD}/crossbar/.testdb/* 10 | # rm -f ./crossbar/.crossbar/key.* 11 | 12 | check_db: 13 | du -hs crossbar/.testdb/ 14 | ls -la crossbar/.testdb/ 15 | 16 | run_crossbar: 17 | $(CROSSBAR) start --cbdir=${PWD}/crossbar/.crossbar 18 | 19 | run_example_provider: 20 | python provider/provider.py 21 | 22 | run_example_consumer: 23 | python consumer/consumer.py 24 | 25 | run_jupyter: 26 | jupyter notebook \ 27 | --config=${PWD}/jupyter/.jupyter/jupyter_notebook_config.py \ 28 | --notebook-dir=${PWD}/jupyter/notebooks 29 | 30 | run_ganache: 31 | docker run -it --rm --user 1000 --net=host --volume=/tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix:0 --entrypoint=/bin/sh ganache /run.sh 32 | 33 | # https://stackoverflow.com/a/49021109 34 | # docker run -d --rm --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined 35 | # docker run -it --rm --cap-drop=all --net=host --volume=/tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix:0 ganache 36 | 37 | clean_ganache: 38 | -sudo rm -rf ./ganache/.data/* 39 | 40 | build_ganache: 41 | docker build -t ganache -f ganache/Dockerfile ganache 42 | -------------------------------------------------------------------------------- /test/test_xbr_marketmaker/crossbar/web/README.md: -------------------------------------------------------------------------------- 1 | Put your Web files here. -------------------------------------------------------------------------------- /test/test_xbr_marketmaker/ganache/README.md: -------------------------------------------------------------------------------- 1 | Ganache 2 | -------------------------------------------------------------------------------- /test/test_xbr_marketmaker/work/contract.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.25; 2 | 3 | contract StoreVar { 4 | 5 | uint8 public _myVar; 6 | event MyEvent(uint indexed _var); 7 | 8 | function setVar(uint8 _var) public { 9 | _myVar = _var; 10 | emit MyEvent(_var); 11 | } 12 | 13 | function getVar() public view returns (uint8) { 14 | return _myVar; 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /test/test_xbr_network/.crossbar/xbrnetwork-eth.key: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/crossbario/crossbar/d76f83c4eb5bb6f584b485c5160cf634fc44f23f/test/test_xbr_network/.crossbar/xbrnetwork-eth.key -------------------------------------------------------------------------------- /test/test_xbr_network/env.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set +e 4 | 5 | export XBR_DEBUG_TOKEN_ADDR=0x254dffcd3277C0b1660F6d42EFbB754edaBAbC2B 6 | export XBR_DEBUG_NETWORK_ADDR=0xC89Ce4735882C9F0f0FE26686c53074E09B0D550 7 | export XBR_DEBUG_DOMAIN_ADDR=0xD833215cBcc3f914bD1C9ece3EE7BF8B14f841bb 8 | export XBR_DEBUG_CATALOG_ADDR=0x9561C133DD8580860B6b7E504bC5Aa500f0f06a7 9 | export XBR_DEBUG_MARKET_ADDR=0xe982E462b094850F12AF94d21D470e21bE9D0E9C 10 | export XBR_DEBUG_CHANNEL_ADDR=0x59d3631c86BbE35EF041872d502F218A39FBa150 11 | export XBR_HDWALLET_SEED="myth like bonus scare over problem client lizard pioneer submit female collect" 12 | 13 | -------------------------------------------------------------------------------- /test/test_xbr_network/set-xbrnetwork-ethkey.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import binascii 4 | 5 | import txaio 6 | txaio.use_twisted() 7 | 8 | from autobahn.xbr import account_from_seedphrase 9 | 10 | 11 | seedphrase = os.environ['XBR_HDWALLET_SEED'] 12 | account_idx = int(sys.argv[1]) 13 | keyfile = os.path.abspath(sys.argv[2]) 14 | 15 | account = account_from_seedphrase(seedphrase, account_idx) 16 | adr = account.address 17 | pkey_hex = binascii.b2a_hex(account.privateKey).decode() 18 | 19 | print('Using account {} with address {} computed from wallet seedphrase "{}.."'.format(account_idx, adr, seedphrase[:12])) 20 | 21 | with open(keyfile, 'wb') as f: 22 | f.write(account.privateKey) 23 | 24 | print('Success! Private key written to file "{}".'.format(keyfile)) 25 | -------------------------------------------------------------------------------- /versions.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export CROSSBAR_BUILD_DATE=`date -u +"%Y-%m-%d"` 4 | export CROSSBAR_BUILD_ID=$(date --utc +%Y%m%d)-$(git rev-parse --short HEAD) 5 | export CROSSBAR_VCS_REF=`git rev-parse --short HEAD` 6 | # export CROSSBAR_VCS_REF=`git --git-dir="./.git" rev-list -n 1 v${CROSSBAR_VERSION} --abbrev-commit` 7 | export CROSSBAR_VERSION=$(grep -E '^(__version__)' ./crossbar/_version.py | cut -d ' ' -f3 | sed -e 's|[u"'\'']||g') 8 | export CROSSBAR_EXE_FILENAME="crossbar-linux-amd64-${CROSSBAR_BUILD_ID}" 9 | 10 | echo "" 11 | echo "Build environment configured:" 12 | echo "" 13 | echo " CROSSBAR_BUILD_DATE = ${CROSSBAR_BUILD_DATE}" 14 | echo " CROSSBAR_BUILD_ID = ${CROSSBAR_BUILD_ID}" 15 | echo " CROSSBAR_VCS_REF = ${CROSSBAR_VCS_REF}" 16 | echo " CROSSBAR_VERSION = ${CROSSBAR_VERSION}" 17 | echo " CROSSBAR_EXE_FILENAME = ${CROSSBAR_EXE_FILENAME}" 18 | echo "" 19 | --------------------------------------------------------------------------------