Deglobalize some flag-controlled variables.

Remove global opt struct.
This commit is contained in:
David Fifield 2017-08-01 15:53:36 -07:00
parent 1eb5c66428
commit 3e3e4b8dd9

View file

@ -25,12 +25,8 @@ const defaultBrokerURL = "https://snowflake-reg.appspot.com/"
const defaultRelayURL = "wss://snowflake.bamsoftware.com/" const defaultRelayURL = "wss://snowflake.bamsoftware.com/"
const defaultSTUNURL = "stun:stun.l.google.com:19302" const defaultSTUNURL = "stun:stun.l.google.com:19302"
type snowflakeOptions struct { var brokerURL string
capacity uint var relayURL string
broker string
stun string
relay string
}
const ( const (
sessionIDLength = 16 sessionIDLength = 16
@ -38,7 +34,6 @@ const (
var ( var (
tokens chan bool tokens chan bool
opt *snowflakeOptions
config *webrtc.Configuration config *webrtc.Configuration
client http.Client client http.Client
) )
@ -111,7 +106,7 @@ func mustParseURL(rawurl string) *url.URL {
} }
func pollOffer(sid string) *webrtc.SessionDescription { func pollOffer(sid string) *webrtc.SessionDescription {
broker := mustParseURL(opt.broker) broker := mustParseURL(brokerURL)
broker.Path = "/proxy" broker.Path = "/proxy"
for { for {
req, _ := http.NewRequest("POST", broker.String(), bytes.NewBuffer([]byte(sid))) req, _ := http.NewRequest("POST", broker.String(), bytes.NewBuffer([]byte(sid)))
@ -136,7 +131,7 @@ func pollOffer(sid string) *webrtc.SessionDescription {
} }
func sendAnswer(sid string, pc *webrtc.PeerConnection) error { func sendAnswer(sid string, pc *webrtc.PeerConnection) error {
broker := mustParseURL(opt.broker) broker := mustParseURL(brokerURL)
broker.Path = "/answer" broker.Path = "/answer"
body := bytes.NewBuffer([]byte(pc.LocalDescription().Serialize())) body := bytes.NewBuffer([]byte(pc.LocalDescription().Serialize()))
req, _ := http.NewRequest("POST", broker.String(), body) req, _ := http.NewRequest("POST", broker.String(), body)
@ -190,7 +185,7 @@ func datachannelHandler(conn *webRTCConn) {
defer conn.Close() defer conn.Close()
defer retToken() defer retToken()
wsConn, err := websocket.Dial(opt.relay, "", opt.relay) wsConn, err := websocket.Dial(relayURL, "", relayURL)
if err != nil { if err != nil {
log.Printf("error dialing relay: %s", err) log.Printf("error dialing relay: %s", err)
return return
@ -304,12 +299,14 @@ func runSession(sid string) {
} }
func main() { func main() {
var capacity uint
var stunURL string
var logFilename string var logFilename string
opt = new(snowflakeOptions)
flag.UintVar(&opt.capacity, "capacity", 10, "maximum concurrent clients") flag.UintVar(&capacity, "capacity", 10, "maximum concurrent clients")
flag.StringVar(&opt.broker, "broker", defaultBrokerURL, "broker URL") flag.StringVar(&brokerURL, "broker", defaultBrokerURL, "broker URL")
flag.StringVar(&opt.relay, "relay", defaultRelayURL, "websocket relay URL") flag.StringVar(&relayURL, "relay", defaultRelayURL, "websocket relay URL")
flag.StringVar(&opt.stun, "stun", defaultSTUNURL, "stun URL") flag.StringVar(&stunURL, "stun", defaultSTUNURL, "stun URL")
flag.StringVar(&logFilename, "log", "", "log filename") flag.StringVar(&logFilename, "log", "", "log filename")
flag.Parse() flag.Parse()
@ -324,22 +321,22 @@ func main() {
} }
var err error var err error
_, err = url.Parse(opt.broker) _, err = url.Parse(brokerURL)
if err != nil { if err != nil {
log.Fatalf("invalid broker url: %s", err) log.Fatalf("invalid broker url: %s", err)
} }
_, err = url.Parse(opt.stun) _, err = url.Parse(stunURL)
if err != nil { if err != nil {
log.Fatalf("invalid stun url: %s", err) log.Fatalf("invalid stun url: %s", err)
} }
_, err = url.Parse(opt.relay) _, err = url.Parse(relayURL)
if err != nil { if err != nil {
log.Fatalf("invalid relay url: %s", err) log.Fatalf("invalid relay url: %s", err)
} }
config = webrtc.NewConfiguration(webrtc.OptionIceServer(opt.stun)) config = webrtc.NewConfiguration(webrtc.OptionIceServer(stunURL))
tokens = make(chan bool, opt.capacity) tokens = make(chan bool, capacity)
for i := uint(0); i < opt.capacity; i++ { for i := uint(0); i < capacity; i++ {
tokens <- true tokens <- true
} }