diff options
Diffstat (limited to 'broker/sqs.go')
-rw-r--r-- | broker/sqs.go | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/broker/sqs.go b/broker/sqs.go index 42e5dd3..614dafe 100644 --- a/broker/sqs.go +++ b/broker/sqs.go @@ -12,6 +12,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/sqs/types" "gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/messages" "gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/sqsclient" + "gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/v2/common/util" ) const ( @@ -144,9 +145,27 @@ func (r *sqsHandler) handleMessage(context context.Context, message *types.Messa answerSQSURL := res.QueueUrl encPollReq = []byte(*message.Body) + + // Get best guess Client IP for geolocating + remoteAddr := "" + req, err := messages.DecodeClientPollRequest(encPollReq) + if err != nil { + log.Printf("SQSHandler: error encounted when decoding client poll request %s: %v\n", *clientID, err) + } else { + sdp, err := util.DeserializeSessionDescription(req.Offer) + if err != nil { + log.Printf("SQSHandler: error encounted when deserializing session desc %s: %v\n", *clientID, err) + } else { + candidateAddrs := util.GetCandidateAddrs(sdp.SDP) + if len(candidateAddrs) > 0 { + remoteAddr = candidateAddrs[0].String() + } + } + } + arg := messages.Arg{ Body: encPollReq, - RemoteAddr: "", + RemoteAddr: remoteAddr, RendezvousMethod: messages.RendezvousSqs, } err = r.IPC.ClientOffers(arg, &response) |