aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArlo Breault <arlolra@gmail.com>2022-03-17 10:46:37 -0400
committerArlo Breault <arlolra@gmail.com>2022-03-31 11:28:00 -0400
commit2f89fbc2ed3e25d2b4be76edc600cca37de91864 (patch)
tree7f6cc66e35d41c756f1727ff6bfaaab657263493
parentfa2f6824d924f3317c82bc740130f354f6a1780c (diff)
downloadsnowflake-2f89fbc2ed3e25d2b4be76edc600cca37de91864.tar.gz
snowflake-2f89fbc2ed3e25d2b4be76edc600cca37de91864.zip
Represent fingerprint internally as byte array
-rw-r--r--broker/broker.go2
-rw-r--r--broker/ipc.go12
-rw-r--r--common/messages/client.go4
-rw-r--r--common/messages/messages_test.go6
4 files changed, 20 insertions, 4 deletions
diff --git a/broker/broker.go b/broker/broker.go
index 6e85fbd..10129d7 100644
--- a/broker/broker.go
+++ b/broker/broker.go
@@ -143,7 +143,7 @@ func (ctx *BrokerContext) AddSnowflake(id string, proxyType string, natType stri
type ClientOffer struct {
natType string
sdp []byte
- fingerprint string
+ fingerprint [20]byte
}
func main() {
diff --git a/broker/ipc.go b/broker/ipc.go
index 2ef4ccd..e11a33c 100644
--- a/broker/ipc.go
+++ b/broker/ipc.go
@@ -2,6 +2,7 @@ package main
import (
"container/heap"
+ "encoding/hex"
"fmt"
"log"
"net"
@@ -130,11 +131,16 @@ func (i *IPC) ClientOffers(arg messages.Arg, response *[]byte) error {
}
offer := &ClientOffer{
- natType: req.NAT,
- sdp: []byte(req.Offer),
- fingerprint: req.Fingerprint,
+ natType: req.NAT,
+ sdp: []byte(req.Offer),
}
+ 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
var snowflakeHeap *SnowflakeHeap
if offer.natType == NATUnrestricted {
diff --git a/common/messages/client.go b/common/messages/client.go
index 4d435ab..96f8ed8 100644
--- a/common/messages/client.go
+++ b/common/messages/client.go
@@ -5,6 +5,7 @@ package messages
import (
"bytes"
+ "encoding/hex"
"encoding/json"
"fmt"
@@ -105,6 +106,9 @@ func DecodeClientPollRequest(data []byte) (*ClientPollRequest, error) {
if message.Fingerprint == "" {
message.Fingerprint = defaultBridgeFingerprint
}
+ if hex.DecodedLen(len(message.Fingerprint)) != 20 {
+ return nil, fmt.Errorf("cannot decode fingerprint")
+ }
switch message.NAT {
case "":
diff --git a/common/messages/messages_test.go b/common/messages/messages_test.go
index 5365aa8..dd1f4fb 100644
--- a/common/messages/messages_test.go
+++ b/common/messages/messages_test.go
@@ -344,6 +344,12 @@ func TestEncodeClientPollRequests(t *testing.T) {
defaultBridgeFingerprint,
nil,
},
+ {
+ "unknown",
+ "fake",
+ "123123",
+ fmt.Errorf(""),
+ },
} {
req1 := &ClientPollRequest{
NAT: test.natType,