mirror of
https://github.com/go-i2p/go-meta-listener.git
synced 2025-07-15 12:57:19 -04:00
91 lines
2.6 KiB
Markdown
91 lines
2.6 KiB
Markdown
# go-meta-listener
|
|
|
|
A Go package that implements a unified network listener interface capable of simultaneously handling connections from multiple underlying transport protocols.
|
|
|
|
[](https://pkg.go.dev/github.com/go-i2p/go-meta-listener)
|
|
[](https://opensource.org/licenses/MIT)
|
|
|
|
## Overview
|
|
|
|
`go-meta-listener` provides a "meta listener" implementation that:
|
|
- Manages multiple network listeners through a single interface
|
|
- Supports any `net.Listener` implementation (TCP, Unix sockets, TLS, etc.)
|
|
- Handles connections and errors from all managed listeners
|
|
- Enables graceful shutdown across all listeners
|
|
|
|
The package also includes a specialized `mirror` implementation for multi-protocol network services supporting:
|
|
- TLS-secured clearnet connections
|
|
- Tor onion services
|
|
- I2P garlic services
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
# Install core package
|
|
go get github.com/go-i2p/go-meta-listener
|
|
|
|
# For multi-protocol mirror functionality
|
|
go get github.com/go-i2p/go-meta-listener/mirror
|
|
```
|
|
|
|
## Basic Usage
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"net"
|
|
"net/http"
|
|
|
|
"github.com/go-i2p/go-meta-listener"
|
|
)
|
|
|
|
func main() {
|
|
// Create a new meta listener
|
|
metaListener := meta.NewMetaListener()
|
|
defer metaListener.Close()
|
|
|
|
// Add a TCP listener
|
|
tcpListener, _ := net.Listen("tcp", ":8080")
|
|
metaListener.AddListener("tcp", tcpListener)
|
|
|
|
// Add a TLS listener
|
|
tlsListener, _ := tls.Listen("tcp", ":8443", tlsConfig)
|
|
metaListener.AddListener("tls", tlsListener)
|
|
|
|
// Use with standard http server
|
|
http.Serve(metaListener, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write([]byte("Hello from any protocol!"))
|
|
}))
|
|
}
|
|
```
|
|
|
|
## Mirror Functionality
|
|
|
|
The `mirror` package provides a simpler interface for creating services available on clearnet, Tor, and I2P simultaneously:
|
|
|
|
```go
|
|
import "github.com/go-i2p/go-meta-listener/mirror"
|
|
|
|
// Create a multi-protocol listener
|
|
listener, err := mirror.Listen(
|
|
"yourdomain.com", // Domain name for TLS
|
|
"your.email@example.com", // Email for Let's Encrypt
|
|
"./certs", // Certificate directory
|
|
false // Enable/disable TLS on hidden services
|
|
)
|
|
defer listener.Close()
|
|
|
|
// Use with standard library
|
|
http.Serve(listener, yourHandler)
|
|
```
|
|
|
|
## Examples
|
|
|
|
See the [example directory](./example) for complete HTTP server examples and the [mirror/metaproxy directory](./mirror/metaproxy) for multi-protocol connection forwarding.
|
|
|
|
## License
|
|
|
|
MIT License - Copyright (c) 2025 I2P For Go
|