new server conf
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 2m1s
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 2m1s
This commit is contained in:
59
main.go
59
main.go
@@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"fmt"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
@@ -11,17 +11,26 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
certmagic.DefaultACME.Email = "serverussnap@outlook.com"
|
domain := "qgo-server.quizer.space"
|
||||||
certmagic.DefaultACME.Agreed = true
|
email := "serverussnap@outlook.com"
|
||||||
|
|
||||||
tlsConfig, err := certmagic.TLS([]string{"qgo-server.quizer.space"})
|
// 1. Настройка CertMagic
|
||||||
|
certmagic.DefaultACME.Email = email
|
||||||
|
certmagic.DefaultACME.Agreed = true
|
||||||
|
certmagic.Default.Storage = &certmagic.FileStorage{Path: "/root/.local/share/certmagic"}
|
||||||
|
|
||||||
|
// Создаем TLS конфигурацию
|
||||||
|
tlsConfig, err := certmagic.TLS([]string{domain})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
slog.Error("failed to setup TLS", "error", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsConfig.NextProtos = append([]string{"h3"}, tlsConfig.NextProtos...)
|
// Поддержка протоколов для браузера и MoQ
|
||||||
|
tlsConfig.NextProtos = []string{"h3", "moq-00", "http/1.1"}
|
||||||
|
|
||||||
server := moqt.Server{
|
// 2. Инициализация MoQ сервера
|
||||||
|
moqServer := moqt.Server{
|
||||||
Addr: ":443",
|
Addr: ":443",
|
||||||
TLSConfig: tlsConfig,
|
TLSConfig: tlsConfig,
|
||||||
QUICConfig: &quic.Config{
|
QUICConfig: &quic.Config{
|
||||||
@@ -32,39 +41,43 @@ func main() {
|
|||||||
|
|
||||||
path := "/relay"
|
path := "/relay"
|
||||||
|
|
||||||
http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
slog.Info("Incoming WebTransport request")
|
w.Header().Set("Alt-Svc", `h3=":443"; ma=2592000`)
|
||||||
|
|
||||||
err := server.HandleWebTransport(w, r)
|
if r.URL.Path == path {
|
||||||
|
err := moqServer.HandleWebTransport(w, r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("WebTransport error", "error", err)
|
slog.Error("WebTransport error", "error", err)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprintf(w, "MoQ Server is active at %s", path)
|
||||||
})
|
})
|
||||||
|
|
||||||
moqt.HandleFunc(path, func(w moqt.SetupResponseWriter, r *moqt.SetupRequest) {
|
moqt.HandleFunc(path, func(w moqt.SetupResponseWriter, r *moqt.SetupRequest) {
|
||||||
slog.Info("MoQ setup request received")
|
|
||||||
|
|
||||||
sess, err := moqt.Accept(w, r, nil)
|
sess, err := moqt.Accept(w, r, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("Failed to accept session", "error", err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
slog.Info("MoQ session established", "remote", sess.RemoteAddr())
|
|
||||||
go handleSession(sess)
|
go handleSession(sess)
|
||||||
})
|
})
|
||||||
|
|
||||||
slog.Info("Server starting on https://localhost:8080")
|
slog.Info("Starting MoQ server", "url", "https://"+domain)
|
||||||
|
|
||||||
if err := server.ListenAndServe(); err != nil {
|
go func() {
|
||||||
slog.Error("Server failed", "error", err)
|
err := certmagic.HTTPS([]string{domain}, http.DefaultServeMux)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("TCP/HTTPS Server failed", "error", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err := moqServer.ListenAndServe(); err != nil {
|
||||||
|
slog.Error("MoQ UDP Server failed", "error", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleSession(sess *moqt.Session) {
|
func handleSession(sess *moqt.Session) {
|
||||||
defer sess.Context().Done()
|
slog.Info("MoQ session established", "remote", sess.RemoteAddr())
|
||||||
|
<-sess.Context().Done()
|
||||||
for {
|
slog.Info("MoQ session closed")
|
||||||
select {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user