pkgauth "github.com/seantywork/sorrylinus-again/pkg/auth"
pkgcom "github.com/seantywork/sorrylinus-again/pkg/com"
pkgedition "github.com/seantywork/sorrylinus-again/pkg/edition"
+ pkgsoli "github.com/seantywork/sorrylinus-again/pkg/sorrylinus"
pkgstream "github.com/seantywork/sorrylinus-again/pkg/stream"
pkgutils "github.com/seantywork/sorrylinus-again/pkg/utils"
)
e.MaxMultipartMemory = CONF.MaxFileSize
- pkgauth.DEBUG = CONF.Debug
+ pkgsoli.SOLI_FRONT_ADDR = CONF.Sorrylinus.FrontAddr
- pkgstream.EXTERNAL_URL = CONF.ExternalUrl
+ pkgsoli.SOLI_SIGNAL_PATH = CONF.Sorrylinus.SoliSignalAddr
- pkgstream.INTERNAL_URL = CONF.InternalUrl
+ pkgsoli.TIMEOUT_SEC = CONF.Sorrylinus.TimeoutSec
+
+ pkgsoli.EXTERNAL_URL = CONF.ExternalUrl
+
+ pkgauth.DEBUG = CONF.Debug
pkgcom.CHANNEL_ADDR = CONF.ServeAddr
pkgcom.CHANNEL_PORT = fmt.Sprintf("%d", CONF.Com.ChannelPort)
pkgstream.TURN_SERVER_ADDR = append(pkgstream.TURN_SERVER_ADDR, tmp)
}
+ pkgstream.EXTERNAL_URL = CONF.ExternalUrl
+
+ pkgstream.INTERNAL_URL = CONF.InternalUrl
+
pkgstream.PEERS_SIGNAL_PATH = CONF.Stream.PeerSignalAddr
pkgstream.RTCP_PLI_INTERVAL = time.Second * time.Duration(CONF.Stream.RtcpPLIInterval)
// sorrylinus
- // e.POST("/api/sorrylinus/connect", pkgsoli.Connect)
-
- // e.POST("/api/sorrylinus/disconnect", pkgsoli.Disconnect)
-
- // e.POST("/api/sorrylinus/rt", pkgsoli.RoundTripEx)
+ e.GET("/api/sorrylinus/signal/address", pkgsoli.GetSoliSignalAddress)
// edition
// com
+ pkgcom.AddChannelHandler(CONF.Sorrylinus.SoliSignalAddr, pkgsoli.SoliSignalHandler)
+
pkgcom.AddChannelHandler(CONF.Stream.PeerSignalAddr, pkgstream.RoomSignalHandler)
pkgcom.AddChannelCallback(pkgstream.SignalDispatcher)
package sorrylinus
-import "github.com/gin-gonic/gin"
+import (
+ "log"
+ "net/http"
+ "time"
-func Connect(c *gin.Context) {
+ "github.com/gin-gonic/gin"
+ "github.com/gorilla/websocket"
+ "github.com/seantywork/sorrylinus-again/pkg/com"
+)
-}
+var SOLI_FRONT_ADDR string
+
+var SOLI_SIGNAL_PATH string
-func Disconnect(c *gin.Context) {
+var EXTERNAL_URL string
+var TIMEOUT_SEC int
+
+type RT_REQ_DATA struct {
+ Command string `json:"command"`
+ Data string `json:"data"`
}
-func RoundTripEx(c *gin.Context) {
+type RT_RESP_DATA struct {
+ Status string `json:"status"`
+ Data string `json:"data"`
+}
+
+var UREG map[*websocket.Conn]string
+
+var UPGRADER = websocket.Upgrader{}
+
+func GetSoliSignalAddress(c *gin.Context) {
+
+ s_addr := EXTERNAL_URL + ":" + com.CHANNEL_PORT_EXTERNAL + SOLI_SIGNAL_PATH
+
+ c.JSON(http.StatusOK, com.SERVER_RE{Status: "success", Reply: s_addr})
}
-func RoundTrip() {
+func SoliSignalHandler(w http.ResponseWriter, r *http.Request) {
+
+ c, _, err := websocket.DefaultDialer.Dial(SOLI_FRONT_ADDR, nil)
+
+ if err != nil {
+ log.Fatal("dial:", err)
+ }
+
+ defer c.Close()
+
+ timeout_iter_count := 0
+
+ timeout_iter := TIMEOUT_SEC * 10
+
+ ticker := time.NewTicker(100 * time.Millisecond)
+
+ received_auth := make(chan RT_REQ_DATA)
+
+ got_auth := 0
+
+ c_ret := RT_RESP_DATA{}
+
+ var req RT_REQ_DATA
+
+ go func() {
+
+ auth_req := RT_REQ_DATA{}
+
+ err := c.ReadJSON(&auth_req)
+
+ if err != nil {
+
+ log.Fatal("read auth:", err)
+ return
+ }
+
+ received_auth <- auth_req
+
+ }()
+
+ for got_auth == 0 {
+
+ select {
+
+ case <-ticker.C:
+
+ if timeout_iter_count <= timeout_iter {
+
+ timeout_iter_count += 1
+
+ } else {
+
+ log.Fatal("read auth timed out:", err)
+
+ return
+ }
+
+ case a := <-received_auth:
+
+ req = a
+
+ got_auth = 1
+
+ break
+ }
+
+ }
+
+ resp, err := RoundTrip(&req)
+
+ if err != nil {
+
+ c_ret.Status = "error"
+
+ c.WriteJSON(c_ret)
+
+ log.Fatal("rt: auth error:", err)
+
+ return
+ }
+
+ if resp.Status != "success" {
+
+ c_ret.Status = "error"
+
+ c_ret.Data = "authentication failed"
+
+ c.WriteJSON(c_ret)
+
+ return
+
+ }
}