diff --git a/internal/experiment/torsf/torsf.go b/internal/experiment/torsf/torsf.go index f61d6b9781..c209dbc8b5 100644 --- a/internal/experiment/torsf/torsf.go +++ b/internal/experiment/torsf/torsf.go @@ -25,7 +25,7 @@ import ( // We may want to have a single implementation for both nettests in the future. // testVersion is the experiment version. -const testVersion = "0.5.0" +const testVersion = "0.5.1" // Config contains the experiment config. type Config struct { @@ -37,6 +37,9 @@ type Config struct { // RendezvousMethod allows to choose the method with which to rendezvous. RendezvousMethod string `ooni:"Choose the method with which to rendezvous. Must be one of amp and domain_fronting. Leaving this field empty means we should use the default."` + + BrokerURL string `ooni:"TODO"` + FrontDomain string `ooni:"TODO"` } // TestKeys contains the experiment's result. @@ -176,6 +179,11 @@ func (m *Measurer) setup(ctx context.Context, // cannot run the experiment with unknown rendezvous method return nil, nil, err } + if rm.Name() == "domain_fronting" { + t1 := rm.(*ptx.SnowflakeRendezvousMethodDomainFronting) + t1.URL = m.config.BrokerURL + t1.Front = m.config.FrontDomain + } sfdialer := ptx.NewSnowflakeDialerWithRendezvousMethod(rm) ptl := &ptx.Listener{ ExperimentByteCounter: bytecounter.ContextExperimentByteCounter(ctx), diff --git a/internal/experiment/torsf/torsf_test.go b/internal/experiment/torsf/torsf_test.go index f7c2301810..5ecc94e41e 100644 --- a/internal/experiment/torsf/torsf_test.go +++ b/internal/experiment/torsf/torsf_test.go @@ -25,7 +25,7 @@ func TestExperimentNameAndVersion(t *testing.T) { if m.ExperimentName() != "torsf" { t.Fatal("invalid experiment name") } - if m.ExperimentVersion() != "0.5.0" { + if m.ExperimentVersion() != "0.5.1" { t.Fatal("invalid experiment version") } } diff --git a/internal/ptx/snowflake.go b/internal/ptx/snowflake.go index cf6cd0c352..766acd848a 100644 --- a/internal/ptx/snowflake.go +++ b/internal/ptx/snowflake.go @@ -27,25 +27,36 @@ type SnowflakeRendezvousMethod interface { // NewSnowflakeRendezvousMethodDomainFronting is a rendezvous method // that uses domain fronting to perform the rendezvous. func NewSnowflakeRendezvousMethodDomainFronting() SnowflakeRendezvousMethod { - return &snowflakeRendezvousMethodDomainFronting{} + return &SnowflakeRendezvousMethodDomainFronting{} } -type snowflakeRendezvousMethodDomainFronting struct{} +type SnowflakeRendezvousMethodDomainFronting struct { + URL string + Front string +} -func (d *snowflakeRendezvousMethodDomainFronting) Name() string { +func (d *SnowflakeRendezvousMethodDomainFronting) Name() string { return "domain_fronting" } -func (d *snowflakeRendezvousMethodDomainFronting) AMPCacheURL() string { +func (d *SnowflakeRendezvousMethodDomainFronting) AMPCacheURL() string { return "" } -func (d *snowflakeRendezvousMethodDomainFronting) BrokerURL() string { - return "https://snowflake-broker.torproject.net.global.prod.fastly.net/" +func (d *SnowflakeRendezvousMethodDomainFronting) BrokerURL() string { + if d.URL != "" { + return d.URL + } else { + return "https://1098762253.rsc.cdn77.org/" + } } -func (d *snowflakeRendezvousMethodDomainFronting) FrontDomain() string { - return "foursquare.com" +func (d *SnowflakeRendezvousMethodDomainFronting) FrontDomain() string { + if d.Front != "" { + return d.Front + } else { + return "www.phpmyadmin.net" + } } // NewSnowflakeRendezvousMethodAMP is a rendezvous method that