Rust implementation of the JDA-NAS interface

Overview

publish-natives rust-clippy analyze

udpqueue.rs

This is a rust implementation of the original JDA-NAS natives. This can be used to make a minimal modular jar with only the required target natives.

Setup

Supported native platforms:

Linux x86 (intel):

Linux ARM (v7 and x64):

Windows x86 (intel):

MacOS/Darwin universal (x86 intel & aarch64 M1):

More platforms can be added on request. Linux shared libraries are compiled against GLIBC 2.18.

While this project is published to maven-central, the lavaplayer commons dependency is currently only available through jcenter. So you will have to depend on jcenter for now.

  1. Add the original jda-nas dependency to your project, and exclude udp-queue from its transitive dependencies:
repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation("com.sedmelluq:jda-nas:1.1.0") {
        exclude(module="udp-queue")
    }
}
  1. Add udpqueue natives
dependencies {
    // Fully modular, choose which platforms to use!
    implementation("club.minnced:udpqueue-native-linux-x86-64:0.2.6") // adds linux 64bit
    implementation("club.minnced:udpqueue-native-win-x86-64:0.2.6") // adds windows 64bit
}

Alternatively, you can also install rustup locally on your target platform and build it yourself.

Use ./install.sh <triplet> to install the jar for your specific platform in maven local. Example: ./install.sh x86_64-unknown-linux-gnu

To add all supported platforms, you can use this:

dependencies {
    implementation("club.minnced:udpqueue-native-linux-x86-64:0.2.6")
    implementation("club.minnced:udpqueue-native-linux-x86:0.2.6")
    implementation("club.minnced:udpqueue-native-linux-aarch64:0.2.6")
    implementation("club.minnced:udpqueue-native-linux-arm:0.2.6")
    implementation("club.minnced:udpqueue-native-win-x86-64:0.2.6")
    implementation("club.minnced:udpqueue-native-win-x86:0.2.6")
    implementation("club.minnced:udpqueue-native-darwin:0.2.6")
}
You might also like...
Rust implementation of PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols

Rust PRECIS Framework libray PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols as descr

A high performence Socks5 proxy server with bind/reverse support implementation by Rust.

rsocx A high performence Socks5 proxy server with bind/reverse support implementation by Rust Features Async-std No unsafe code Single executable Linu

Interactive bind/reverse PTY shell with Windows&Linux support implementation by Rust.
Interactive bind/reverse PTY shell with Windows&Linux support implementation by Rust.

Cliws Lightweight interactive bind/reverse PTY shell with Windows&Linux support implementation by Rust. Features WebSocket Full pty support: VIM, SSH,

Rustus - TUS protocol implementation in Rust.

Rustus Tus protocol implementation written in Rust. Features This implementation has several features to make usage as simple as possible. Rustus is r

An implementation of the ZITADEL gRPC API in Rust.

An implementation of the ZITADEL gRPC API in Rust. Complemented with other useful elements such as ServiceAccount auth.

RakNet Protocol implementation by Rust.

rust-raknet RakNet Protocol implementation by Rust. Raknet is a reliable udp transport protocol that is often used for communication between game clie

Implementation of the Docker Registry HTTP API V2 in Rust, that can act as a proxy to other registries

Docker registry server and proxy (I'm bad at creating catchy names, but this one is good enough.) This project aims to implement a Docker Registry HTT

Rust implementation of TCP + UDP Proxy Protocol (aka. MMProxy)

mmproxy-rs A Rust implementation of MMProxy! 🚀 Rationale Many previous implementations only support PROXY Protocol for either TCP or UDP, whereas thi

A rust implementation of websock/socket proxy. Support noVNC

websockify-rs: WebSockets support for any application/server This is a rust implement of the websockify-js, which is part of the noVNC project. At the

Comments
  • Optimizations and cleanup

    Optimizations and cleanup

    1. Use abort() for panics rather than unwinding. Removes unneeded unwinding code/symbols from binary.
    2. Avoid parsing port of socket address. Removes redundant formatter usage and simplifies address creation.
    3. Lower visibility for internals to avoid leaking symbols.
    opened by MinnDevelopment 0
  • Add system property to turn off send error logging

    Add system property to turn off send error logging

    With this, you could do -Dudpqueue.log_errors=false to turn off error logging during the send process. This might be worth doing in cases where the internet is known to have issues.

    Right now, all errors are logged by default, to allow for easy debugging. However, it might be desirable to disable this in a production environment. Doing this at runtime is also possible with System.setProperty("udpqueue.log_errors", "false").

    opened by MinnDevelopment 0
  • musl - support

    musl - support

    I'm currently looking into adding official support for musl into Lavalink/Lavaplayer. It would be nice to also have JDA-NAS working for that

    This would include x86-64 & aarch64 like lavadsp already supports

    opened by TopiSenpai 2
  • Doesn't work on Centos 7 - glibc version request

    Doesn't work on Centos 7 - glibc version request

    Hi Minn, do you have any interest in supporting Centos 7/glibc 2.17? The OS has an end of life date of June 30, 2024 and I have Lavalink users that have that OS installed. The Lavalink error that comes up is a standard missing glibc version error, which is attached. spring.log

    opened by aikaterna 1
Owner
Florian Spieß
Professional Robot Kidnapper.
Florian Spieß
The netns-rs crate provides an ultra-simple interface for handling network namespaces in Rust.

netns-rs The netns-rs crate provides an ultra-simple interface for handling network namespaces in Rust. Changing namespaces requires elevated privileg

OpenAnolis Community 7 Dec 15, 2022
Tunnel TCP traffic through SOCKS5 or HTTP using a TUN interface.

tun2proxy Tunnel TCP traffic through SOCKS5 or HTTP on Linux. Authentication not yet supported. Error handling incomplete and too restrictive. Build C

B. Blechschmidt 34 Nov 29, 2022
An experimental IPC interface definition language for Hubris.

Idol: interface definitions for Hubris This is an experimental interface definition language for defining IPC interfaces between tasks in a Hubris app

Oxide Computer Company 8 Oct 19, 2022
Replay packets from pcap -file to network interface

pktreplay can be used to read packets from pcap file or interface and write them into interface. By default packets are written with the same rate they have been saved into the pcap file, or, when reading from interface, as fast as they are received.

Jukka Taimisto 3 Nov 23, 2022
Futures-based QUIC implementation in Rust

Pure-rust QUIC protocol implementation Quinn is a pure-rust, future-based implementation of the QUIC transport protocol undergoing standardization by

null 2.6k Jan 8, 2023
neqo — an Implementation of QUIC written in Rust

Neqo, an Implementation of QUIC written in Rust To run test HTTP/3 programs (neqo-client and neqo-server): cargo build ./target/debug/neqo-server [::]

Mozilla 1.6k Jan 7, 2023
The Rust Implementation of libp2p networking stack.

Central repository for work on libp2p This repository is the central place for Rust development of the libp2p spec. Warning: While we are trying our b

libp2p 3k Jan 4, 2023
A pure Rust implementation of WebRTC API

A pure Rust implementation of WebRTC API

WebRTC.rs 2.7k Jan 7, 2023
Backroll is a pure Rust implementation of GGPO rollback networking library.

backroll-rs Backroll is a pure Rust implementation of GGPO rollback networking library. Development Status This is still in an untested alpha stage. A

Hourai Teahouse 273 Dec 28, 2022
A small holepunching implementation written in Rust (UDP)

rust-udp-holepunch A small holepunching implementation written in Rust (UDP) Prerequisites Your rendezvous server must lay in a network which doesn't

Amit Katz 8 Dec 26, 2022