mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Get rid of legacy version
Move the logic for the legacy version into the http handlers and use a shim when doing ipc.
This commit is contained in:
parent
0ced1cc324
commit
87ad06a5e2
3 changed files with 53 additions and 49 deletions
|
@ -102,7 +102,6 @@ func proxyPolls(i *IPC, w http.ResponseWriter, r *http.Request) {
|
|||
arg := messages.Arg{
|
||||
Body: body,
|
||||
RemoteAddr: r.RemoteAddr,
|
||||
NatType: "",
|
||||
}
|
||||
|
||||
var response []byte
|
||||
|
@ -138,28 +137,57 @@ func clientOffers(i *IPC, w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
// Handle the legacy version
|
||||
isLegacy := false
|
||||
if len(body) > 0 && body[0] == '{' {
|
||||
isLegacy = true
|
||||
req := messages.ClientPollRequest{
|
||||
Offer: string(body),
|
||||
NAT: r.Header.Get("Snowflake-NAT-Type"),
|
||||
}
|
||||
body, err = req.EncodePollRequest()
|
||||
if err != nil {
|
||||
log.Printf("Error shimming the legacy request: %s", err.Error())
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
arg := messages.Arg{
|
||||
Body: body,
|
||||
RemoteAddr: "",
|
||||
NatType: r.Header.Get("Snowflake-NAT-Type"),
|
||||
}
|
||||
|
||||
var response []byte
|
||||
err = i.ClientOffers(arg, &response)
|
||||
switch {
|
||||
case err == nil:
|
||||
case errors.Is(err, messages.ErrUnavailable):
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
return
|
||||
case errors.Is(err, messages.ErrTimeout):
|
||||
w.WriteHeader(http.StatusGatewayTimeout)
|
||||
return
|
||||
default:
|
||||
if err != nil {
|
||||
// Assert err == messages.ErrInternal
|
||||
log.Println(err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if isLegacy {
|
||||
resp, err := messages.DecodeClientPollResponse(response)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
switch resp.Error {
|
||||
case "":
|
||||
response = []byte(resp.Answer)
|
||||
case "no snowflake proxies currently available":
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
return
|
||||
case "timed out waiting for answer!":
|
||||
w.WriteHeader(http.StatusGatewayTimeout)
|
||||
return
|
||||
default:
|
||||
panic("unknown error")
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := w.Write(response); err != nil {
|
||||
log.Printf("clientOffers unable to write answer with error: %v", err)
|
||||
}
|
||||
|
@ -181,7 +209,6 @@ func proxyAnswers(i *IPC, w http.ResponseWriter, r *http.Request) {
|
|||
arg := messages.Arg{
|
||||
Body: body,
|
||||
RemoteAddr: "",
|
||||
NatType: "",
|
||||
}
|
||||
|
||||
var response []byte
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue