integrating stun/turn for webrtc

This commit is contained in:
Roland Osborne 2023-04-07 11:42:17 -07:00
parent eff87f2526
commit 449693d375
3 changed files with 85 additions and 0 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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();
}