https://github.com/odebe/murmur-ruby
Mumble server written in Ruby and async-io
https://github.com/odebe/murmur-ruby
asyncio mumble mumble-server murmur ruby-async voip
Last synced: 11 months ago
JSON representation
Mumble server written in Ruby and async-io
- Host: GitHub
- URL: https://github.com/odebe/murmur-ruby
- Owner: Odebe
- Created: 2023-06-25T14:47:26.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-02-13T18:04:07.000Z (over 2 years ago)
- Last Synced: 2024-02-13T19:28:11.727Z (over 2 years ago)
- Topics: asyncio, mumble, mumble-server, murmur, ruby-async, voip
- Language: Ruby
- Homepage:
- Size: 167 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# MurmurRuby
Mumble server implemented with Ruby and [async-io](https://github.com/socketry/async-io)/[rb_mumble_protocol](https://github.com/Odebe/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
- [x] Version
- [x] Save client version
- [ ] Send back the actual server version
- [x] UDPTunnel (see also 'Voice parsing')
- [x] Loopback
- [x] Channel speech
- [ ] Target speech
- [x] Authenticate
- [x] Credentials checking
- [x] Updating the server's most popular CELT codec version
- [x] Generating aes-128-ocb
- [x] Announce users about new client
- [x] Sync state
- [x] Ping
- [x] Send a ping back
- [ ] Update client timers
- [x] Reject
- [x] ServerSync
- [ ] ChannelRemove
- [x] ChannelState
- [x] Send all states on connection
- [ ] Links
- [ ] Description
- [ ] Permissions
- [ ] Update by Admin
- [x] UserRemove
- [x] Announce users about client disconnection
- [x] UserState
- [x] Change channel
- [x] Mute\Deafen self
- [ ] BanList
- [x] TextMessage
- [ ] To Tree
- [x] To client
- [x] To channel
- [x] PermissionDenied
- [ ] ACL
- [ ] QueryUsers
- [x] CryptSetup
- [ ] ContextActionModify
- [ ] ContextAction
- [ ] UserList
- [ ] VoiceTarget
- [x] PermissionQuery
- [x] CodecVersion
- [ ] UserStats
- [ ] RequestBlob
- [x] ServerConfig
- [ ] SuggestConfig
- [ ] UDP
- [x] Ping
- [x] Voice (see also 'Voice parsing')
- [ ] Stable CryptState
- [x] Voice parsing
- [x] OPUS
- [x] CELT
- [x] Speex
- [ ] Basic role model
- [ ] Traffic shaping
- [x] Throttling
- [ ] Leaky bucket
## Configuration
See example `run/config.yml`
### General configuration parameters
#### Connection block
```yaml
host: 0.0.0.0
port: 64_738
```
#### SSL block
##### Selfsigned cert
Run `make generate-cert`
```yaml
ssl_cert: 'run/server.cert'
ssl_key: 'run/server.key'
# Optional field
ssl_ca: 'run/ca.cert'
```
##### Let's Encrypt (recommended)
#### Server settings
```yaml
# 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`.
```yaml
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.
```yaml
users:
- id: 0
username: admin
password: example
```