mirror of
https://gitlab.com/comunic/ComunicRTCProxy
synced 2024-11-17 02:51:12 +00:00
Can specify custom IP & port access
This commit is contained in:
parent
71b7f8d71c
commit
6ef144c3b9
@ -17,6 +17,13 @@ type Config struct {
|
||||
Path string
|
||||
Token string
|
||||
|
||||
// Optional information to inject proxy reachability (can be left empty)
|
||||
AccessIP string
|
||||
|
||||
// Optionaly restrict Ports range (can be left to 0)
|
||||
PortStart int
|
||||
PortEnd int
|
||||
|
||||
// Amount of time to wait before automatically
|
||||
//quitting the application when the websocket
|
||||
// connection was interrupted
|
||||
|
@ -8,6 +8,13 @@ port: 3000
|
||||
path: /rtc_proxy/ws
|
||||
token: SecretToken
|
||||
|
||||
# Set the IP this relay can be reached (optional)
|
||||
# accessip:
|
||||
|
||||
# Limit UDP ports this server will listen to
|
||||
portstart: 0
|
||||
portend: 0
|
||||
|
||||
# Number of seconds to wait before automatically
|
||||
# closing the proxy (if WebSocket connection was
|
||||
# interrupted)
|
||||
|
8
main.go
8
main.go
@ -19,6 +19,14 @@ func main() {
|
||||
// First, load the config
|
||||
conf := loadConfig(os.Args[1])
|
||||
|
||||
if len(conf.AccessIP) > 0 {
|
||||
fmt.Printf("RTC reachable at %s\n", conf.AccessIP)
|
||||
}
|
||||
|
||||
if conf.PortStart > 0 && conf.PortEnd > conf.PortStart {
|
||||
fmt.Printf("Will listen only on these ports: %d to %d\n", conf.PortStart, conf.PortEnd)
|
||||
}
|
||||
|
||||
/// Avoid to quick restart loop
|
||||
defer timeBeforeQuit(&conf)
|
||||
|
||||
|
34
relay.go
34
relay.go
@ -52,7 +52,7 @@ var connections = make(map[string]*activeRelay)
|
||||
var currID uint = 0
|
||||
|
||||
/// Process incoming messages
|
||||
func onSignal(callHash, peerID string, data map[string]interface{}) {
|
||||
func onSignal(config *Config, callHash, peerID string, data map[string]interface{}) {
|
||||
|
||||
// Close all the channels that requested so
|
||||
processCloseRequests()
|
||||
@ -134,7 +134,7 @@ func onSignal(callHash, peerID string, data map[string]interface{}) {
|
||||
}
|
||||
currID++
|
||||
connections[callHash] = &newRelay
|
||||
go newCall(newSignal, &newRelay)
|
||||
go newCall(config, newSignal, &newRelay)
|
||||
|
||||
} else {
|
||||
// Forward the message to the channel
|
||||
@ -143,15 +143,15 @@ func onSignal(callHash, peerID string, data map[string]interface{}) {
|
||||
}
|
||||
|
||||
/// Request an offer for a client of a broadcast
|
||||
func onRequestOffer(callHash, peerID string) {
|
||||
onSignal(callHash, peerID, map[string]interface{}{
|
||||
func onRequestOffer(c *Config, callHash, peerID string) {
|
||||
onSignal(c, callHash, peerID, map[string]interface{}{
|
||||
"type": "REQUEST_OFFER",
|
||||
})
|
||||
}
|
||||
|
||||
/// Request connections to be closed
|
||||
func onCloseConnection(callHash, peerID string) {
|
||||
onSignal(callHash, peerID, map[string]interface{}{
|
||||
func onCloseConnection(c *Config, callHash, peerID string) {
|
||||
onSignal(c, callHash, peerID, map[string]interface{}{
|
||||
"type": "CLOSE_CONN",
|
||||
})
|
||||
}
|
||||
@ -191,7 +191,7 @@ func processCloseRequests() {
|
||||
}
|
||||
|
||||
/// Start new call
|
||||
func newCall(mainOffer receivedSignal, r *activeRelay) {
|
||||
func newCall(config *Config, mainOffer receivedSignal, r *activeRelay) {
|
||||
|
||||
// I am not sure this is a strong way to determine whether we are having
|
||||
// a video call or not, but I have not found any better way yet...
|
||||
@ -220,16 +220,20 @@ func newCall(mainOffer receivedSignal, r *activeRelay) {
|
||||
s := webrtc.SettingEngine{}
|
||||
s.SetTrickle(false) // I did not manage to make the connection trickling, sorry...
|
||||
|
||||
// TODO : remove hardcoded ports
|
||||
if err := s.SetEphemeralUDPPortRange(5000, 5001); err != nil {
|
||||
log.Println("Error: faild to set ephemeral UDP Port range!", err)
|
||||
askForClose(r)
|
||||
return
|
||||
// Optional : restrict ports
|
||||
if config.PortStart > 0 && config.PortEnd > config.PortStart {
|
||||
if err := s.SetEphemeralUDPPortRange(uint16(config.PortStart), uint16(config.PortEnd)); err != nil {
|
||||
log.Println("Error: faild to set ephemeral UDP Port range!", err)
|
||||
askForClose(r)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// TODO : remove hardcoded ips
|
||||
ips := []string{"127.0.0.1"}
|
||||
s.SetNAT1To1IPs(ips, webrtc.ICECandidateTypeHost)
|
||||
// Optional : set access IP
|
||||
if len(config.AccessIP) > 0 {
|
||||
ips := []string{config.AccessIP}
|
||||
s.SetNAT1To1IPs(ips, webrtc.ICECandidateTypeHost)
|
||||
}
|
||||
|
||||
// Create the API object with the MediaEngine
|
||||
api := webrtc.NewAPI(webrtc.WithMediaEngine(mediaEngine),
|
||||
|
6
ws.go
6
ws.go
@ -82,17 +82,17 @@ func openWs(conf *Config) {
|
||||
|
||||
// Remote signal
|
||||
case "signal":
|
||||
onSignal(msg.CallHash, msg.PeerID, msg.Data.(map[string]interface{}))
|
||||
onSignal(conf, msg.CallHash, msg.PeerID, msg.Data.(map[string]interface{}))
|
||||
break
|
||||
|
||||
// Request an offer
|
||||
case "request_offer":
|
||||
onRequestOffer(msg.CallHash, msg.PeerID)
|
||||
onRequestOffer(conf, msg.CallHash, msg.PeerID)
|
||||
break
|
||||
|
||||
// Close a connection
|
||||
case "close_conn":
|
||||
onCloseConnection(msg.CallHash, msg.PeerID)
|
||||
onCloseConnection(conf, msg.CallHash, msg.PeerID)
|
||||
break
|
||||
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user