udxtransport

package module
v0.1.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

README

go-libp2p-udx-transport

A go-libp2p transport implementation using UDX — a QUIC-inspired reliable UDP protocol with built-in stream multiplexing.

Overview

This package implements the go-libp2p Transport interface, allowing libp2p hosts to communicate over UDX. Like the QUIC transport, UDX has native stream multiplexing so this transport provides CapableConn directly without needing an Upgrader or separate muxer.

Multiaddr Format

/ip4/<addr>/udp/<port>/udx
/ip6/<addr>/udp/<port>/udx

Protocol code: 0x0300

Installation

go get github.com/stephanfeb/go-libp2p-udx-transport

Usage

package main

import (
    "context"
    "fmt"

    ic "github.com/libp2p/go-libp2p/core/crypto"
    "github.com/libp2p/go-libp2p/core/peer"
    ma "github.com/multiformats/go-multiaddr"
    udxtransport "github.com/stephanfeb/go-libp2p-udx-transport"
)

func main() {
    // Generate identity
    priv, _, _ := ic.GenerateEd25519Key(nil)

    // Create transport
    tr, _ := udxtransport.NewTransport(priv, nil)

    // Listen
    addr, _ := ma.NewMultiaddr("/ip4/0.0.0.0/udp/9000/udx")
    ln, _ := tr.Listen(addr)
    defer ln.Close()

    fmt.Println("Listening on", ln.Multiaddr())

    // Accept connections
    conn, _ := ln.Accept()
    stream, _ := conn.AcceptStream()

    buf := make([]byte, 1024)
    n, _ := stream.Read(buf)
    fmt.Printf("received: %s\n", buf[:n])
}

Architecture

transport.go    Transport — Dial, Listen, CanDial, Protocols, Proxy
conn.go         CapableConn wrapping udx.Connection
stream.go       MuxedStream wrapping udx.Stream
listener.go     Listener wrapping udx.Multiplexer
multiaddr.go    /udx protocol registration (0x0300), multiaddr helpers
Interface Mapping
libp2p Interface UDX Implementation
transport.Transport Transport — manages identity and resource manager
transport.CapableConn conn — wraps udx.Connection
transport.Listener listener — wraps udx.Multiplexer
network.MuxedStream stream — wraps udx.Stream

Testing

go test -race ./...

Tests cover:

  • CanDial — multiaddr filtering (/udx vs /tcp)
  • Protocols — protocol code advertisement
  • Proxy — non-proxy declaration
  • ListenAndDial — full loopback: listen, dial, open stream, bidirectional echo
  • Multiaddr — round-trip multiaddr construction and parsing

Dependencies

License

MIT

Documentation

Index

Constants

View Source
const P_UDX = 0x0300

P_UDX is the multiaddr protocol code for UDX. Uses 0x0300 (private use range), matching dart-libp2p.

Variables

This section is empty.

Functions

This section is empty.

Types

type Transport

type Transport struct {
	// contains filtered or unexported fields
}

Transport implements the go-libp2p Transport interface using UDX.

func NewTransport

func NewTransport(key ic.PrivKey, u tpt.Upgrader, rcmgr network.ResourceManager) (*Transport, error)

NewTransport creates a new UDX transport with the given upgrader. The upgrader handles security (Noise) and stream muxing (Yamux).

func (*Transport) CanDial

func (t *Transport) CanDial(addr ma.Multiaddr) bool

CanDial returns true if this transport can dial the given multiaddr.

func (*Transport) Close

func (t *Transport) Close() error

Close shuts down the shared outbound multiplexers and their UDP sockets.

func (*Transport) Dial

func (t *Transport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (tpt.CapableConn, error)

Dial dials a remote peer over UDX.

func (*Transport) Listen

func (t *Transport) Listen(laddr ma.Multiaddr) (tpt.Listener, error)

Listen listens for incoming UDX connections.

func (*Transport) Protocols

func (t *Transport) Protocols() []int

Protocols returns the protocol codes handled by this transport.

func (*Transport) Proxy

func (t *Transport) Proxy() bool

Proxy returns false — UDX is not a proxy transport.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
⌂ 换网址