chore: merge probe-engine into probe-cli (#201)
This is how I did it: 1. `git clone https://github.com/ooni/probe-engine internal/engine` 2. ``` (cd internal/engine && git describe --tags) v0.23.0 ``` 3. `nvim go.mod` (merging `go.mod` with `internal/engine/go.mod` 4. `rm -rf internal/.git internal/engine/go.{mod,sum}` 5. `git add internal/engine` 6. `find . -type f -name \*.go -exec sed -i 's@/ooni/probe-engine@/ooni/probe-cli/v3/internal/engine@g' {} \;` 7. `go build ./...` (passes) 8. `go test -race ./...` (temporary failure on RiseupVPN) 9. `go mod tidy` 10. this commit message Once this piece of work is done, we can build a new version of `ooniprobe` that is using `internal/engine` directly. We need to do more work to ensure all the other functionality in `probe-engine` (e.g. making mobile packages) are still WAI. Part of https://github.com/ooni/probe/issues/1335
This commit is contained in:
parent
b1ce300c8d
commit
d57c78bc71
535 changed files with 66182 additions and 23 deletions
91
internal/engine/experiment/ndt7/dial.go
Normal file
91
internal/engine/experiment/ndt7/dial.go
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
package ndt7
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/model"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/netx/dialer"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/netx/resolver"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/netx/selfcensor"
|
||||
)
|
||||
|
||||
type dialManager struct {
|
||||
ndt7URL string
|
||||
logger model.Logger
|
||||
proxyURL *url.URL
|
||||
readBufferSize int
|
||||
tlsConfig *tls.Config
|
||||
userAgent string
|
||||
writeBufferSize int
|
||||
}
|
||||
|
||||
func newDialManager(ndt7URL string, logger model.Logger, userAgent string) dialManager {
|
||||
return dialManager{
|
||||
ndt7URL: ndt7URL,
|
||||
logger: logger,
|
||||
readBufferSize: paramMaxBufferSize,
|
||||
userAgent: userAgent,
|
||||
writeBufferSize: paramMaxBufferSize,
|
||||
}
|
||||
}
|
||||
|
||||
func (mgr dialManager) dialWithTestName(ctx context.Context, testName string) (*websocket.Conn, error) {
|
||||
var reso resolver.Resolver = resolver.SystemResolver{}
|
||||
reso = resolver.LoggingResolver{Resolver: reso, Logger: mgr.logger}
|
||||
var dlr dialer.Dialer = selfcensor.SystemDialer{}
|
||||
dlr = dialer.TimeoutDialer{Dialer: dlr}
|
||||
dlr = dialer.ErrorWrapperDialer{Dialer: dlr}
|
||||
dlr = dialer.LoggingDialer{Dialer: dlr, Logger: mgr.logger}
|
||||
dlr = dialer.DNSDialer{Dialer: dlr, Resolver: reso}
|
||||
dlr = dialer.ProxyDialer{Dialer: dlr, ProxyURL: mgr.proxyURL}
|
||||
dlr = dialer.ByteCounterDialer{Dialer: dlr}
|
||||
dlr = dialer.ShapingDialer{Dialer: dlr}
|
||||
dialer := websocket.Dialer{
|
||||
NetDialContext: dlr.DialContext,
|
||||
ReadBufferSize: mgr.readBufferSize,
|
||||
TLSClientConfig: mgr.tlsConfig,
|
||||
WriteBufferSize: mgr.writeBufferSize,
|
||||
}
|
||||
headers := http.Header{}
|
||||
headers.Add("Sec-WebSocket-Protocol", "net.measurementlab.ndt.v7")
|
||||
headers.Add("User-Agent", mgr.userAgent)
|
||||
mgr.logrequest(mgr.ndt7URL, headers)
|
||||
conn, _, err := dialer.DialContext(ctx, mgr.ndt7URL, headers)
|
||||
mgr.logresponse(err)
|
||||
return conn, err
|
||||
}
|
||||
|
||||
func (mgr dialManager) logrequest(url string, headers http.Header) {
|
||||
mgr.logger.Debugf("> GET %s", url)
|
||||
for key, values := range headers {
|
||||
for _, v := range values {
|
||||
mgr.logger.Debugf("> %s: %s", key, v)
|
||||
}
|
||||
}
|
||||
mgr.logger.Debug("> Connection: upgrade")
|
||||
mgr.logger.Debug("> Upgrade: websocket")
|
||||
mgr.logger.Debug(">")
|
||||
}
|
||||
|
||||
func (mgr dialManager) logresponse(err error) {
|
||||
if err != nil {
|
||||
mgr.logger.Debugf("< %+v", err)
|
||||
return
|
||||
}
|
||||
mgr.logger.Debug("< 101")
|
||||
mgr.logger.Debug("< Connection: upgrade")
|
||||
mgr.logger.Debug("< Upgrade: websocket")
|
||||
mgr.logger.Debug("<")
|
||||
}
|
||||
|
||||
func (mgr dialManager) dialDownload(ctx context.Context) (*websocket.Conn, error) {
|
||||
return mgr.dialWithTestName(ctx, "download")
|
||||
}
|
||||
|
||||
func (mgr dialManager) dialUpload(ctx context.Context) (*websocket.Conn, error) {
|
||||
return mgr.dialWithTestName(ctx, "upload")
|
||||
}
|
||||
Loading…
Reference in a new issue