From 449693d375e340bf2e0e326d873b1d8107547066 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Fri, 7 Apr 2023 11:42:17 -0700 Subject: [PATCH] integrating stun/turn for webrtc --- net/server/internal/api_addCall.go | 5 ++ net/server/internal/sturn/sturn.go | 75 ++++++++++++++++++++++++++++++ net/server/main.go | 5 ++ 3 files changed, 85 insertions(+) create mode 100644 net/server/internal/sturn/sturn.go diff --git a/net/server/internal/api_addCall.go b/net/server/internal/api_addCall.go index db660690..26026f9b 100644 --- a/net/server/internal/api_addCall.go +++ b/net/server/internal/api_addCall.go @@ -51,6 +51,11 @@ func AddCall(w http.ResponseWriter, r *http.Request) { ErrResponse(w, http.StatusInternalServerError, calleeErr) return } + //turnBin, turnErr := securerandom.Bytes(APPTokenSize) + //if turnErr != nil { + // ErrResponse(w, http.StatusInternalServerError, turnErr) + // return + //} callId := uuid.New().String() // allocate bridge diff --git a/net/server/internal/sturn/sturn.go b/net/server/internal/sturn/sturn.go new file mode 100644 index 00000000..12c2ac0d --- /dev/null +++ b/net/server/internal/sturn/sturn.go @@ -0,0 +1,75 @@ +package databag + +import ( +// "encoding/json" + "sync" +// "time" + "fmt" + "net" +) + +var sturn *Sturn +const SturnKeepAlive = 15 + +type SturnSession struct { +} + +type Sturn struct { + sync sync.Mutex + sessions []*SturnSession + port uint + relayStart uint + relayEnd uint + conn *net.PacketConn + closed chan bool +} + +func Listen(port uint, relayStart uint, relayEnd uint) (error) { + + if (sturn != nil) { + (*sturn.conn).Close() + <-sturn.closed + sturn = nil + } + + address := fmt.Sprintf(":%d", port) + conn, err := net.ListenPacket("udp", address) + if err != nil { + return err + } + + fmt.Println("STARTED STURN SERVER") + + sturn := &Sturn{ + port: port, + relayStart: relayStart, + relayEnd: relayEnd, + conn: &conn, + } + + go sturn.serve(conn); + return nil +} + +func Close() { + if (sturn != nil) { + (*sturn.conn).Close() + <-sturn.closed + sturn = nil + } +} + +func (s *Sturn) serve(conn net.PacketConn) { + for { + buf := make([]byte, 1024) + n, addr, err := conn.ReadFrom(buf) + if err != nil { + fmt.Println(err) + return + } + + fmt.Println("GOT STURN MESSAGE: ", n, addr); + } + s.closed <- true +} + diff --git a/net/server/main.go b/net/server/main.go index e914f69b..ee26fbeb 100644 --- a/net/server/main.go +++ b/net/server/main.go @@ -3,6 +3,7 @@ package main import ( app "databag/internal" "databag/internal/store" + sturn "databag/internal/sturn" "github.com/gorilla/handlers" "log" "net/http" @@ -18,6 +19,8 @@ func main() { origins := handlers.AllowedOrigins([]string{"*"}) methods := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS"}) + sturn.Listen(5001, 5002, 5101) + args := os.Args if len(args) == 3 { port := ":" + args[2] @@ -32,4 +35,6 @@ func main() { log.Printf("starting server"); log.Fatal(http.ListenAndServe(":7000", handlers.CORS(origins, methods)(router))) } + + sturn.Close(); }