/murmur-ruby

Mumble server written in Ruby and async-io

Primary LanguageRuby

MurmurRuby

Mumble server implemented with Ruby and async-io/rb_mumble_protocol gems.

Installation

Docker compose

  • Clone repo git clone git@github.com:Odebe/murmur-ruby.git
  • Generate SSL cert make generate-cert
  • Build docker image docker-compose build
  • Run container docker-compose up -d

Roadmap

Not all points will be implemented.

  • Messages
    • TCP
      • Version
        • Save client version
        • Send back the actual server version
      • UDPTunnel (see also 'Voice parsing')
        • Loopback
        • Channel speech
        • Target speech
      • Authenticate
        • Credentials checking
        • Updating the server's most popular CELT codec version
        • Generating aes-128-ocb
        • Announce users about new client
        • Sync state
      • Ping
        • Send a ping back
        • Update client timers
      • Reject
      • ServerSync
      • ChannelRemove
      • ChannelState
        • Send all states on connection
        • Links
        • Description
        • Permissions
        • Update by Admin
      • UserRemove
        • Announce users about client disconnection
      • UserState
        • Change channel
        • Mute\Deafen self
      • BanList
      • TextMessage
        • To Tree
        • To client
        • To channel
      • PermissionDenied
      • ACL
      • QueryUsers
      • CryptSetup
      • ContextActionModify
      • ContextAction
      • UserList
      • VoiceTarget
      • PermissionQuery
      • CodecVersion
      • UserStats
      • RequestBlob
      • ServerConfig
      • SuggestConfig
    • UDP
      • Ping
      • Voice (see also 'Voice parsing')
      • Stable CryptState
  • Voice parsing
    • OPUS
    • CELT
    • Speex
  • Basic role model
  • Traffic shaping
    • Throttling
    • Leaky bucket

Configuration

See example run/config.yml

General configuration parameters

Connection block

host: 0.0.0.0
port: 64_738

SSL block

Selfsigned cert

Run make generate-cert

ssl_cert: 'run/server.cert'
ssl_key: 'run/server.key'

# Optional field
ssl_ca: 'run/ca.cert'
Let's Encrypt (recommended)

Server settings

# Bits per second
max_bandwidth: 192_000

welcome_text: 'Hello world!'
allow_html: false
image_message_length: 0
max_users: 15
recording_allowed: true
max_username_length: 20
message_length: 500

Channel configuration

Channels are defined by array in rooms key in config file.

Channel has to contain fields id, name, parent_id and position.

Root channel is mandatory and defined by parent_id: null nd id: 0.

rooms:
  - id: 0
    name: Root
    parent_id: null
    position: 0
  - id: 1
    name: guest_room
    parent_id: 0
    position: 1
  - id: 2
    name: forum
    parent_id: 0
    position: 0

Users configuration

Registered users are defined by array in users key in config file.

users:
  - id: 0
    username: admin
    password: example