mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-14 05:11:19 -04:00
Represent Bridge Fingerprint As String
This commit is contained in:
parent
dd61e2be0f
commit
f789dce6d2
7 changed files with 69 additions and 21 deletions
|
@ -2,27 +2,26 @@ package main
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/bridgefingerprint"
|
||||
"io"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var ErrBridgeNotFound = errors.New("bridge not found")
|
||||
var ErrBridgeFingerprintInvalid = errors.New("bridge fingerprint invalid")
|
||||
|
||||
func NewBridgeListHolder() BridgeListHolderFileBased {
|
||||
return &bridgeListHolder{}
|
||||
}
|
||||
|
||||
type bridgeListHolder struct {
|
||||
bridgeInfo map[[20]byte]BridgeInfo
|
||||
bridgeInfo map[bridgefingerprint.Fingerprint]BridgeInfo
|
||||
accessBridgeInfo sync.RWMutex
|
||||
}
|
||||
|
||||
type BridgeListHolder interface {
|
||||
GetBridgeInfo(fingerprint [20]byte) (BridgeInfo, error)
|
||||
GetBridgeInfo(bridgefingerprint.Fingerprint) (BridgeInfo, error)
|
||||
}
|
||||
|
||||
type BridgeListHolderFileBased interface {
|
||||
|
@ -36,7 +35,7 @@ type BridgeInfo struct {
|
|||
Fingerprint string `json:"fingerprint"`
|
||||
}
|
||||
|
||||
func (h *bridgeListHolder) GetBridgeInfo(fingerprint [20]byte) (BridgeInfo, error) {
|
||||
func (h *bridgeListHolder) GetBridgeInfo(fingerprint bridgefingerprint.Fingerprint) (BridgeInfo, error) {
|
||||
h.accessBridgeInfo.RLock()
|
||||
defer h.accessBridgeInfo.RUnlock()
|
||||
if bridgeInfo, ok := h.bridgeInfo[fingerprint]; ok {
|
||||
|
@ -46,7 +45,7 @@ func (h *bridgeListHolder) GetBridgeInfo(fingerprint [20]byte) (BridgeInfo, erro
|
|||
}
|
||||
|
||||
func (h *bridgeListHolder) LoadBridgeInfo(reader io.Reader) error {
|
||||
bridgeInfoMap := map[[20]byte]BridgeInfo{}
|
||||
bridgeInfoMap := map[bridgefingerprint.Fingerprint]BridgeInfo{}
|
||||
inputScanner := bufio.NewScanner(reader)
|
||||
for inputScanner.Scan() {
|
||||
inputLine := inputScanner.Bytes()
|
||||
|
@ -54,13 +53,14 @@ func (h *bridgeListHolder) LoadBridgeInfo(reader io.Reader) error {
|
|||
if err := json.Unmarshal(inputLine, &bridgeInfo); err != nil {
|
||||
return err
|
||||
}
|
||||
var bridgeHash [20]byte
|
||||
if n, err := hex.Decode(bridgeHash[:], []byte(bridgeInfo.Fingerprint)); err != nil {
|
||||
|
||||
var bridgeFingerprint bridgefingerprint.Fingerprint
|
||||
var err error
|
||||
if bridgeFingerprint, err = bridgefingerprint.FingerprintFromHexString(bridgeInfo.Fingerprint); err != nil {
|
||||
return err
|
||||
} else if n != 20 {
|
||||
return ErrBridgeFingerprintInvalid
|
||||
}
|
||||
bridgeInfoMap[bridgeHash] = bridgeInfo
|
||||
|
||||
bridgeInfoMap[bridgeFingerprint] = bridgeInfo
|
||||
}
|
||||
h.accessBridgeInfo.Lock()
|
||||
defer h.accessBridgeInfo.Unlock()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue