Represent fingerprint internally as byte array

This commit is contained in:
Arlo Breault 2022-03-17 10:46:37 -04:00
parent fa2f6824d9
commit 2f89fbc2ed
4 changed files with 20 additions and 4 deletions

View file

@ -143,7 +143,7 @@ func (ctx *BrokerContext) AddSnowflake(id string, proxyType string, natType stri
type ClientOffer struct { type ClientOffer struct {
natType string natType string
sdp []byte sdp []byte
fingerprint string fingerprint [20]byte
} }
func main() { func main() {

View file

@ -2,6 +2,7 @@ package main
import ( import (
"container/heap" "container/heap"
"encoding/hex"
"fmt" "fmt"
"log" "log"
"net" "net"
@ -132,9 +133,14 @@ func (i *IPC) ClientOffers(arg messages.Arg, response *[]byte) error {
offer := &ClientOffer{ offer := &ClientOffer{
natType: req.NAT, natType: req.NAT,
sdp: []byte(req.Offer), sdp: []byte(req.Offer),
fingerprint: req.Fingerprint,
} }
fingerprint, err := hex.DecodeString(req.Fingerprint)
if err != nil {
return sendClientResponse(&messages.ClientPollResponse{Error: err.Error()}, response)
}
copy(offer.fingerprint[:], fingerprint)
// 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 {

View file

@ -5,6 +5,7 @@ package messages
import ( import (
"bytes" "bytes"
"encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
@ -105,6 +106,9 @@ func DecodeClientPollRequest(data []byte) (*ClientPollRequest, error) {
if message.Fingerprint == "" { if message.Fingerprint == "" {
message.Fingerprint = defaultBridgeFingerprint message.Fingerprint = defaultBridgeFingerprint
} }
if hex.DecodedLen(len(message.Fingerprint)) != 20 {
return nil, fmt.Errorf("cannot decode fingerprint")
}
switch message.NAT { switch message.NAT {
case "": case "":

View file

@ -344,6 +344,12 @@ func TestEncodeClientPollRequests(t *testing.T) {
defaultBridgeFingerprint, defaultBridgeFingerprint,
nil, nil,
}, },
{
"unknown",
"fake",
"123123",
fmt.Errorf(""),
},
} { } {
req1 := &ClientPollRequest{ req1 := &ClientPollRequest{
NAT: test.natType, NAT: test.natType,