mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 20:11:19 -04:00
Add Relay Info Forwarding for Snowflake
This commit is contained in:
parent
d5a87c3c02
commit
5d7a3766d6
2 changed files with 26 additions and 1 deletions
|
@ -36,6 +36,13 @@ type BrokerContext struct {
|
||||||
snowflakeLock sync.Mutex
|
snowflakeLock sync.Mutex
|
||||||
proxyPolls chan *ProxyPoll
|
proxyPolls chan *ProxyPoll
|
||||||
metrics *Metrics
|
metrics *Metrics
|
||||||
|
|
||||||
|
bridgeList BridgeListHolderFileBased
|
||||||
|
allowedRelayPattern string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ctx *BrokerContext) GetBridgeInfo(fingerprint [20]byte) (BridgeInfo, error) {
|
||||||
|
return ctx.bridgeList.GetBridgeInfo(fingerprint)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBrokerContext(metricsLogger *log.Logger) *BrokerContext {
|
func NewBrokerContext(metricsLogger *log.Logger) *BrokerContext {
|
||||||
|
@ -139,6 +146,14 @@ func (ctx *BrokerContext) AddSnowflake(id string, proxyType string, natType stri
|
||||||
return snowflake
|
return snowflake
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ctx *BrokerContext) InstallBridgeListProfile(reader io.Reader, relayPattern string) error {
|
||||||
|
if err := ctx.bridgeList.LoadBridgeInfo(reader); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ctx.allowedRelayPattern = relayPattern
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Client offer contains an SDP, bridge fingerprint and the NAT type of the client
|
// Client offer contains an SDP, bridge fingerprint and the NAT type of the client
|
||||||
type ClientOffer struct {
|
type ClientOffer struct {
|
||||||
natType string
|
natType string
|
||||||
|
|
|
@ -102,7 +102,13 @@ func (i *IPC) ProxyPolls(arg messages.Arg, response *[]byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
i.ctx.metrics.promMetrics.ProxyPollTotal.With(prometheus.Labels{"nat": natType, "status": "matched"}).Inc()
|
i.ctx.metrics.promMetrics.ProxyPollTotal.With(prometheus.Labels{"nat": natType, "status": "matched"}).Inc()
|
||||||
b, err = messages.EncodePollResponse(string(offer.sdp), true, offer.natType)
|
var relayURL string
|
||||||
|
if info, err := i.ctx.bridgeList.GetBridgeInfo(offer.fingerprint); err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
relayURL = info.WebSocketAddress
|
||||||
|
}
|
||||||
|
b, err = messages.EncodePollResponseWithRelayURL(string(offer.sdp), true, offer.natType, relayURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return messages.ErrInternal
|
return messages.ErrInternal
|
||||||
}
|
}
|
||||||
|
@ -141,6 +147,10 @@ func (i *IPC) ClientOffers(arg messages.Arg, response *[]byte) error {
|
||||||
}
|
}
|
||||||
copy(offer.fingerprint[:], fingerprint)
|
copy(offer.fingerprint[:], fingerprint)
|
||||||
|
|
||||||
|
if _, err := i.ctx.GetBridgeInfo(offer.fingerprint); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Only hand out known restricted snowflakes to unrestricted clients
|
// Only hand out known restricted snowflakes to unrestricted clients
|
||||||
var snowflakeHeap *SnowflakeHeap
|
var snowflakeHeap *SnowflakeHeap
|
||||||
if offer.natType == NATUnrestricted {
|
if offer.natType == NATUnrestricted {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue