Main entities

  • Link is a "driver of channel" or "channel endpoint". For example, MultiSiteConnect, IPSiteConnect, DExtraLink are links.
  • Context is a kind of connection. Contexts can be persistent (they don't require keep-alives, will exist for the whole life time of the server process) and regular (will be destroyed after 1 minute of inactivity). Contexts can contain IP address of remote peer and vendor-specific list of values.
  • Session is a state of the call. Every DMR transmission of voice or data has a session in BrandMeister.
  • Registry is a point of decision, how the call should be routed. Each registry provides methods to check user ID, update user location and build list of routes for specified type of call.

Types of links

  • Application
  • Repeater
  • Network

The main difference between types of application and repeater/network is in mechanism of updating user location. Application cannot update user location. That is mean that any call that was provided by application with ID of user will not affect to his private incoming calls.

The difference between types of repeater and network is in relations of object types. A user is always registers on repeater that is part of network based of some server.

Order of processing registries

  1. ScriptEngine to manage routes using Lua script
  2. CallInterceptor to dissect calls using AirCracker (feature for developers, AirCracker is a kind of dumping tools)
  3. CallInterceptor to make scrambling using Scramble (scrambling is prohibited for radio amateurs)
  4. CallInterceptor to simulate signalling scenarios using Knave
  5. CallInterceptor to process calls with AutoPatch
  6. Layer4Registry for data call applications
  7. EasyRegistry for static and dynamic route lists
TorstenHelper to provide services of DMR Plus (last heard, reflectors)
  1. MemoryCache for private and group calls routing
  2. SQLStore for private and group calls routing

Call processing scenario

  1. Check of call attributes (for example, call with privacy/encryption flag will not be processed at amateur radio network)
  2. Check validity and operational state of source repeater (for example, if the repeater sent its ID)
  3. Check of caller ID (if required by the source link)
  4. Update caller's location in all registries (if the source is not application)
  5. Check for duplicate call admission (by source ID, if required by the source link)
  6. Build list of routes with all registries available (each registry can stop the process of list building)