Skip to content

Commit 927124e

Browse files
committed
Simplify TURN data retrieval API.
Receivers no longer must implement the rather large "Sender" interface and a complete "Session" object also is no longer required to get TURN data.
1 parent c9be334 commit 927124e

File tree

6 files changed

+42
-16
lines changed

6 files changed

+42
-16
lines changed

go/channelling/api/handle_self.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (api *channellingAPI) HandleSelf(sender channelling.Sender, session *channe
4444
Token: token,
4545
Version: api.config.Version,
4646
ApiVersion: apiVersion,
47-
Turn: api.TurnDataCreator.CreateTurnData(sender, session),
47+
Turn: api.TurnDataCreator.CreateTurnData(session.Id, sender),
4848
Stun: api.config.StunURIs,
4949
}
5050
api.BusManager.Trigger(channelling.BusManagerSession, session.Id, session.Userid(), nil, nil)

go/channelling/client.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ import (
2828
)
2929

3030
type Sender interface {
31-
Index() uint64
31+
TurnDataReceiver
32+
3233
Send(buffercache.Buffer)
3334
Outgoing(interface{})
3435
}
@@ -106,3 +107,10 @@ func (client *Client) ReplaceAndClose(oldClient *Client) {
106107
oldClient.Close()
107108
}()
108109
}
110+
111+
func (client *Client) TurnDataAvailable(turn *DataTurn) {
112+
client.Outgoing(&DataTurnUpdate{
113+
Type: "TurnUpdate",
114+
Turn: turn,
115+
})
116+
}

go/channelling/hub.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,13 @@ func (h *hub) ClientInfo(details bool) (clientCount int, sessions map[string]*Da
9191
return
9292
}
9393

94-
func (h *hub) CreateTurnData(sender Sender, session *Session) *DataTurn {
94+
func (h *hub) CreateTurnData(sessionId string, receiver TurnDataReceiver) *DataTurn {
9595
if len(h.turnSecret) > 0 {
9696
// Create turn data credentials for shared secret auth with TURN
9797
// server. See http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00
9898
// and https://code.google.com/p/rfc5766-turn-server/ REST API auth
9999
// and set shared secret in TURN server with static-auth-secret.
100-
id := session.Id
100+
id := sessionId
101101
bar := sha256.New()
102102
bar.Write([]byte(id))
103103
id = base64.StdEncoding.EncodeToString(bar.Sum(nil))

go/channelling/pipeline.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,3 +270,10 @@ func (pipeline *Pipeline) attach(sink Sink) error {
270270
pipeline.sink = sink
271271
return nil
272272
}
273+
274+
func (pipeline *Pipeline) TurnDataAvailable(turn *DataTurn) {
275+
pipeline.Outgoing(&DataTurnUpdate{
276+
Type: "TurnUpdate",
277+
Turn: turn,
278+
})
279+
}

go/channelling/turndata.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@
2121

2222
package channelling
2323

24+
type TurnDataReceiver interface {
25+
Index() uint64
26+
27+
TurnDataAvailable(*DataTurn)
28+
}
29+
2430
type TurnDataCreator interface {
25-
CreateTurnData(Sender, *Session) *DataTurn
31+
/*
32+
First parameter is the id of the session that requests the TURN data.
33+
Second parameter will be notified when TURN data become available if none
34+
were ready at the time the method was called (can be nil if no notification
35+
is required).
36+
*/
37+
CreateTurnData(string, TurnDataReceiver) *DataTurn
2638
}

go/channelling/turnservice_manager.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ type TURNServiceManager interface {
3535

3636
type turnServiceManager struct {
3737
sync.Mutex
38-
pleaders map[uint64]Sender // Mapping of clients waiting to receive TURN data.
38+
pleaders map[uint64]TurnDataReceiver // Mapping of clients waiting to receive TURN data.
3939

4040
uri string
4141
accessToken string
@@ -51,7 +51,7 @@ func NewTURNServiceManager(uri string, accessToken string, clientID string) TURN
5151
clientID: clientID,
5252

5353
turnService: turnService,
54-
pleaders: make(map[uint64]Sender),
54+
pleaders: make(map[uint64]TurnDataReceiver),
5555
}
5656

5757
turnService.Open(accessToken, clientID, "")
@@ -71,14 +71,16 @@ func NewTURNServiceManager(uri string, accessToken string, clientID string) TURN
7171
return mgr
7272
}
7373

74-
func (mgr *turnServiceManager) CreateTurnData(sender Sender, session *Session) *DataTurn {
74+
func (mgr *turnServiceManager) CreateTurnData(sessionId string, receiver TurnDataReceiver) *DataTurn {
7575
credentials := mgr.turnService.Credentials(false)
7676
turn, err := mgr.turnData(credentials)
7777
if err != nil || turn.Ttl == 0 {
7878
// When no data was return from service, refresh quickly.
79-
mgr.Lock()
80-
mgr.pleaders[sender.Index()] = sender
81-
mgr.Unlock()
79+
if receiver != nil {
80+
mgr.Lock()
81+
mgr.pleaders[receiver.Index()] = receiver
82+
mgr.Unlock()
83+
}
8284

8385
// Have client come back early.
8486
turn.Ttl = 300
@@ -129,12 +131,9 @@ func (mgr *turnServiceManager) onCredentials(credentials *turnservicecli.CachedC
129131
mgr.Lock()
130132
for _, sender := range mgr.pleaders {
131133
if turn, err := mgr.turnData(credentials); err == nil {
132-
sender.Outgoing(&DataTurnUpdate{
133-
Type: "TurnUpdate",
134-
Turn: turn,
135-
})
134+
sender.TurnDataAvailable(turn)
136135
}
137136
}
138-
mgr.pleaders = make(map[uint64]Sender) // Clear.
137+
mgr.pleaders = make(map[uint64]TurnDataReceiver) // Clear.
139138
mgr.Unlock()
140139
}

0 commit comments

Comments
 (0)