Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

engine: adapt to use bridges #2531

Closed
bassosimone opened this issue Sep 11, 2023 · 3 comments
Closed

engine: adapt to use bridges #2531

bassosimone opened this issue Sep 11, 2023 · 3 comments
Assignees
Labels
enhancement improving existing code or new feature ooni/probe-engine priority/high techdebt This issue describes technical debt testing

Comments

@bassosimone
Copy link
Contributor

bassosimone commented Sep 11, 2023

Update: 2023-10-06 we're now naming the functionality bridge because it looks like a better name.

This issue is about adapting the ooniprobe engine (i.e., the ./internal directory in ooni/probe-cli) to use beacons. We define as "beacon" a host that relies traffic to the OONI backend and the Web Connectivity test helper. We want to switch to use beacons for the two following reasons. First, we want to reduce the number of interactions required to run Web Connectivity. Second, we want to increase the reliability of the probes.

While working on this issue, we should also probably consider the following two side quests. First, the engine itself consists of several packages that need to interoperate and we can probably simplify the structure of the code by merging several packages together and better documenting the interaction between all the moving pieces. Second, we are currently using the same code paths for communicating with the backend and for measuring. However, the requirements are quite different. For example, using an HTTP/HTTPS proxy is more complex than it should because of this design. Additionally, the policies that we need for implementing beacons are different than we one we use for measuring. For example, the HTTP transport we are currently using has specific constraints required by the ./internal/legacy/netx package that prevent us from having parallel outstanding HTTP requests, which in turns limits our flexibility and performance. Therefore, it may be smarter to have a separate HTTP transport using a different configuration, to better meet our design goals with a conceptually simpler codebase. These two side quests are the reasons why I am tagging this issue also as "techdebt": there may be techdebt and in such case we'll pay for it.

Working on this issue proper would first entail studying the existing codebase carefully to determine the proper places where to intervene and make ameliorating changes. Once we have clarity about this, we will modify the implementation to make it (a) not more complex than it currently is and (b) suitable for using beacons in production.

We will consider this issue "fixed" when we'll have merged support for beacons into the main development branch.

Update (2023-10-02) You can read a summary of the work done this issue at #2531 (comment).

@bassosimone bassosimone added enhancement improving existing code or new feature testing priority/high ooni/probe-engine techdebt This issue describes technical debt labels Sep 11, 2023
@bassosimone bassosimone self-assigned this Sep 11, 2023
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 11, 2023
I am starting to look into how to support beacons into the codebase
as explained by ooni/probe#2531.

The first issue that I stumbled upon is that there is excessive
coupling between packages at the lower-levels, which we can reduce
with easy refactoring, and which would help reasoning on what to
do to address the underlying issue.

This diff is the first minor step towards cleaning up the code
a bit: we are moving a functionality that pertains to logging
from measurexlite to logx (which is where it should be).

While there, I noticed I needed to run `go mod tidy` to update
the `go.mod` and `go.sum` files, which were outdated.
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 11, 2023
## Checklist

- [x] I have read the [contribution
guidelines](https://github.com/ooni/probe-cli/blob/master/CONTRIBUTING.md)
- [x] reference issue for this pull request:
ooni/probe#2531
- [x] if you changed anything related to how experiments work and you
need to reflect these changes in the ooni/spec repository, please link
to the related ooni/spec pull request: N/A
- [x] if you changed code inside an experiment, make sure you bump its
version number: N/A

## Description

I am starting to look into how to support beacons into the codebase as
explained by ooni/probe#2531.

The first issue that I stumbled upon is that there is excessive coupling
between packages at the lower-levels, which we can reduce with easy
refactoring, and which would help reasoning on what to do to address the
underlying issue.

This diff is the first minor step towards cleaning up the code a bit: we
are moving a functionality that pertains to logging from measurexlite to
logx (which is where it should be).

While there, I noticed I needed to run `go mod tidy` to update the
`go.mod` and `go.sum` files, which were outdated.
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 11, 2023
I am reasoning about ooni/probe#2531 and thus
reading the codebase. I stumbled upon this inconsistency.

While there, I noticed some documentation also needed updating.
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 11, 2023
I am reasoning about ooni/probe#2531 and thus
reading the codebase. I stumbled upon this inconsistency.

While there, I noticed some documentation also needed updating.
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 11, 2023
This code modifies how we construct netxlite's system resolver such that
public functions use the *Netx equivalents.

The general idea for which I am pushing here is to have additional
clarity about dependencies, to better analyze the requirements of non
measuring code for ooni/probe#2531.
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff modifies how we construct netxlite's system resolver such that
public functions use the *Netx equivalents.

While there, recognize that there wasn't enough testing for the optional
wrappers provided by `model.DNSTransportWrapper` and that we are not
using this functionality. So, rather than writing new tests for this
functionality, we can actually just drop it and simplify the codebase.

While there, recognize that `netxlite.WrapDNSTransport` could easily
become private.

While there, recognize that `./legacy/netx` needs lots of public
function being exported by `netxlite` but we don't need to expose that
many implementation details to new code that will be using `*Netx`. So,
make sure all the new methods we create for `*Netx` are actually private
methods. (Ideally, the API surface of `netxlite` should be smaller; we
would not be able to get there for quite some time, but we can at least
avoid increasing the API surface.)

The general idea for which I am pushing here is to have additional
clarity about dependencies, to better analyze the requirements of non
measuring code for ooni/probe#2531.
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like 7224984
except that we are converting the system dialer constructors to
use *Netx rather than converting the system resolver.

While there, realize that DialerSystem could become private.

Part of ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like
7224984
except that we are converting the system dialer constructors to use
*Netx rather than converting the system resolver.

While there, realize that DialerSystem could become private.

Part of ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is similar to 07a048c
but here we use *Netx to create UDP sockets.

While there, recognize that UDP code needs its own files
and should not live inside quic{,_test}.go.

Part of ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is similar to
07a048c
but here we use *Netx to create UDP sockets.

While there, recognize that UDP code needs its own files and should not
live inside quic{,_test}.go.

Part of ooni/probe#2531.
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like 8a5edc2
but here we use *Netx to create QUIC dialers.

The general idea of this patchset is to ensure we're not
using duplicate code for constructing netxlite types, which
is good to do now, because we're about to introduce new
netxlite types for the network with which we communicate
with the OONI backend.

Reference issue: ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like
8a5edc2
but here we use *Netx to create QUIC dialers.

While there, recognize that `WrapQUICDialer` could become a private
function.

The general idea of this patchset is to ensure we're not using duplicate
code for constructing netxlite types, which is good to do now, because
we're about to introduce new netxlite types for the network with which
we communicate with the OONI backend.

Reference issue: ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like 50279a7
but uses *Netx to create TLS handshakers.

The general idea of this patchset is to ensure we're not using duplicate
code for constructing netxlite types, which is good to do now, because
we're about to introduce new netxlite types for the network with which
we communicate with the OONI backend.

Reference issue: ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like
50279a7
but uses *Netx to create TLS handshakers.

The general idea of this patchset is to ensure we're not using duplicate
code for constructing netxlite types, which is good to do now, because
we're about to introduce new netxlite types for the network with which
we communicate with the OONI backend.

Reference issue: ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like 50279a7 but uses *Netx to create HTTP transports.

The general idea of this patchset is to ensure we're not using duplicate code for constructing netxlite types, which is good to do now, because we're about to introduce new netxlite types for the network with which we communicate with the OONI backend.

Reference issue: ooni/probe#2531
bassosimone added a commit to ooni/probe-cli that referenced this issue Sep 12, 2023
This diff is like
50279a7
but uses *Netx to create HTTP transports.

While there, annotate a test that is notoriously flaky on Windows.

The general idea of this patchset is to ensure we're not using duplicate
code for constructing netxlite types, which is good to do now, because
we're about to introduce new netxlite types for the network with which
we communicate with the OONI backend.

Reference issue: ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
Now that we've more or less reached the point where we wanted to be with
ooni/probe#2531, let's spend some time to
refactor the implementation, now that we know very well how it works,
such that modifying it in the future would be easier.

The first order of business here seems to hide implementation details
and get rid of too many HTTPSDialer prefixes which only cause confusion
when looking at the available structs.

Here, in particular, we deal with the static-policy API. To this end, we
also need to more some tests around because they need internals.

Also, while there, add a top-level description to some files, so that
newcomers have an idea of what each file is about.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
The dns-policy API is the API where we use the DNS to generate tactics
for dialing. Now we have made it private.

Also, we have renamed files. Most of this package is related to HTTPS
dialing anyway, so we don't need to be that obsessive and add the
HTTPSDialer / httpsdialer prefix everywhere.

While there, also hide and move the "null" stats tracker, which is
clearly a private implementation detail.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
What needs to be public is the network API, while all the rest can and
should instead be private.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
We need this functionality to ask the stats questions like "what are all
the available tactics for www.example.com:443 along with their stats?".
In turn, this information is needed to implement a new policy that uses
existing stats to choose what to do.

While there, rename files to make it clear which files contain policies
and which contain state trackers. Useful because upcoming changes will
add files containing state-based policy.

While there, stop being paranoid about cloning a nil map to a nil map,
acknowledge this is not important and making it round trip correctly
would require more code we don't need, and simply adjust tests to accept
nil and empty map as equal.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This policy first checks the stats and sorts the entries for which we
have the highest nonzero success rate. Then, we use an underlying policy
to produce additional suitable tactics for the HTTPS dialer.

There is a check preventing the same tactic from being emitted twice.
This means that, if we emit a tactic looking into the stats, we're not
going to emit the same exact tactic again when using our beacons policy
generator.

Also, because we try using stable sorting, and assuming some tactics
work, we would most likely continue using the tactics that work, until
something bad happens and we need to try and see whether other tactics
work.

While there, rename statstracker{,_test}.go to statsmanager{,_test}.go
because the type inside it is called "state manager". The state tracker
is an abstract concept only used by the https dialer code.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This commit modifies the https-dialer policy we create to take into
account stats to generate tactics. As of this commit, the overall policy
is as follows:

1. if `$OONI_HOME/$engine_dir/httpsdialerstatic.conf` exists and
contains entries for the endpoint's domain (e.g.,
"www.example.com:443"), then we unconditionally use it to generate
tactics, otherwise;

2. we generate tactics using existing stats and filter only the tactics
that are less than one week old (filtering done when loading from the
kvstore) and have worked at least once, otherwise;

3. we generate tactics using known beacons and candidate SNIs with the
extra caveat that we're not going to generate a tactic we have generate
already in the previous step, otherwise;

4. we use whatever resolver is configured to lookup for the domain name
and generate tactics doing the boring thing of using the resolved IP
addrs along with the SNI being equal to the original domain.

Note that this diff fixes a previously untested for bug caused by trying
to obtain statistics for an unknow endpoint domain.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This diff attempts to improve the code quality of enginenetx by
identifying cases where the code could be made to crash with specially
written input and adds regress tests and checks to avoid these kind of
crashes to happen.

While there, perform a code review and improve comments and naming.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This diff modifies how we construct a `*Network` to use a very simple
DNS-only policy when using a proxy.

We don't need to try anything fancy when we're using a proxy because we
assume the proxy knows how to do circumvention and we don't to get in
the proxy way.

While there, recognize that the static policy was named very similarly
to the stats policy, so rename the former user policy, such that there
is more lexicographical difference.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This diff adjusts code inside the enginenetx package such that we
gracefully deal with nil values in more cases.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
If we're running the enginenetx code inside an environment that sprays
~random IP addresses during DNS lookup, we're going to end up using
quite a large amount of statistics. While this amount of statistics
could potentially be great in general, we need to be mindful of memory
and disk occupation as well as of the overhead of serializing and
deserializing.

To address these concerns, add the arbitrary rule that we don't want
more than ten domain-endpoint entries and implement code to zap old
and/or always-failing entries. The code will run when loading the
entries, when serializing them, and periodically while the `*Network` is
up and running.

See ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
Provided that we get correct IP addresses, which is a big IF, we can try
to avoid using offending SNIs when using the THs.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This diff is yak shaving for a subsequent diff that attempts to mitigate
potential IP addresses leaks caused by using happy eyeballs more
aggressively in the codebase. The general idea is that we previously had
a netxlite implementation that gave IPv4 preference over IPv6, meaning
that we would end up using IPv4 in most cases and very rarely IPv6. As
part of my work to make beacons possible, I have introduced happy
eyeballs, which means we may sometimes use IPv4 instead of IPv6 if we
adopt happy eyeballs more widely. This fact makes it more likely that we
include the IPv6 address of a probe when we know its IPv4 address or the
other way around into measurements. To mitigate this possible issue
before it actually is possible (note that I have not yet changed how we
discover the probe IP), I am going to proactively modify the
serialization of HTTP bodies and headers to scrub IP endpoints
unconditionally. However, to do this, I need to decouple the scrubber
package from model such that internal/model/archival.go can use the
scrubber package.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This set of changes is the continuation of what I started doing in
ooni@4a86c54
to revamp out scrubbing capabilities.

Reorganizing tests is pure refactoring. Exposing ScrubBytes is because I
think we can rationalize a bit what we scrub on the fly in the
`internal/model/archival.go` file and we need to indeed start scrubbing
byte arrays.

I'm doing this work as part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
There are cases where we know we have binary data in input and we want
the output to be binary data using the dictionary encoding like
`{"format":"base64","data":"..."}`.

Such cases are, for example, DNS messages bodies.

There is no need for us to pass through the MaybeArchivalBinaryData in
such cases. Additionally, this makes MaybeArchivalBinaryData a bit more
complex than it probably needs to be.

What's more, ArchivalBinaryData is for when you do not require to scrub
the data. I want to introduce new data types that automatically perform
scrubbing when they're used.

But this puts even more pressure on MaybeArchivalBinaryData, and hence
this commit, to start differentiating between:

1. always binary data vs maybe binary data

2. no scrubbing required vs scrubbing required

The rationale for doing this set of changes has been explained in
ooni#1319.

The reference issue is ooni/probe#2531.

For now, this commit just adds the new type and tests for it without
using the type, which we'll do later once we have added better
marshal/unmarshal testing for the interested types.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
I am about to modify this structure to unconditionally use
ArchivalBinaryData rather than ArchivalMaybeBinaryData, following the
plan that I explained in ooni#1319.

Before doing that, I want MORE test coverage for
ArchivalTLSOrQUICHandshakeResult.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
It did not originally occur to me, but now it's clear that we can avoid
using a struct to wrap the data type.

It just suffices to use the new type.

I think this is better in terms of writing code because the only two
things we need to do are:

1. make sure we have serialization and unserialization tests;

2. use the correct data type in the struct.

For all intents and purposes the ArchivalBinaryData is just a special
kind of []byte attached to custom marshal/unmarshal rules.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
…ni#1324)

This diff modifies model.ArchivalBinaryData to always use
ArchivalBinaryData for representing certificates rather than passing
through the more complex (and unneeded in this case!)
model.ArchivalMaybeBinaryData.

Closes ooni/probe#2165

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This type is ~equivalent to ArchivalMaybeBinaryData but designed to hold
a string, do less type conversions, and be easier to use.

The intent is to replace the ArchivalMaybeBinaryData type with this
type.

For now, let us introduce the new type and its tests.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
My aim here is to have marshal/unmarshal tests for all the toplevel data
structures inside the internal/model/archival.go file.

Once I have done that, I can have additional confidence about changing
the structure fields and simplifying the code.

All of this is preparatory work to automatically scrub HTTP measurements
which is something we should really do before continuing to improve the
boostrap process in light of ooni/probe#2531.

I have also added currently skipped tests for other structures as
placeholder, but I did not want to submit a too large PR, hence for now
we will just have tests for ArchivalDNSLookupResult. More PRs will
follow and they will add additional unit tests.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
My aim here is to have marshal/unmarshal tests for all the toplevel data
structures inside the internal/model/archival.go file.

Once I have done that, I can have additional confidence about changing
the structure fields and simplifying the code.

All of this is preparatory work to automatically scrub HTTP measurements
which is something we should really do before continuing to improve the
boostrap process in light of ooni/probe#2531.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
My aim here is to have marshal/unmarshal tests for all the toplevel data
structures inside the internal/model/archival.go file.

Once I have done that, I can have additional confidence about changing
the structure fields and simplifying the code.

All of this is preparatory work to automatically scrub HTTP measurements
which is something we should really do before continuing to improve the
boostrap process in light of ooni/probe#2531.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
My aim here is to have marshal/unmarshal tests for all the toplevel data
structures inside the internal/model/archival.go file.

Once I have done that, I can have additional confidence about changing
the structure fields and simplifying the code.

All of this is preparatory work to automatically scrub HTTP measurements
which is something we should really do before continuing to improve the
boostrap process in light of ooni/probe#2531.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
ooni#1330)

We want the tests w/ binary data to make sure we can safely replace
model.ArchivalMaybeBinaryData.

We want the tests w/ IP addresses because once we replace the above
mentioned type, we'll implement aggressive scrubbing.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
)

This diff modifies the model for HTTP requests and responses to use the
ArchivalBinaryString type to represent bodies.

The tests I have introduced in previous commits are still passing, so we
can have good confidence that this change is actually WAI.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
I was trying to make sure the code was using a new definition of headers
based on ArchivalMaybeBinaryString, but I stumbled upon a roadblock
where there were too many code paths settings headers.

I did not feel comfortable changing multiple code paths, so here is
instead a diff that unifies setting headers.

The slightly tricky part of this diff has been the requirement that we
preserve headers' capitalization for hhfm. The catch seems to be that we
should not use http.Header for setting the headers in hhfm, but rather
pass through map[string][]string, which is not attached case
normalization setters. I think we're fine in this department because we
already had test cases and I added a bunch more test cases.

After this diff is merged, I can resume with my plan to make headers use
ArchivalMaybeBinaryString, which, in turn, is functional to
automatically scrub headers, which is something we would like to happen
in light of the introduction of more happy eyeballs code due to
ooni/probe#2531.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This diff modifies the headers-as-a-map representation such that we use
ArchivalMaybeBinaryString instead of ArchivalMaybeBinaryData.

The overall idea is to migrate all users of the latter to the former,
such that we can remove the latter and implement extra scrubbing for all
ArchivalMaybeBinaryString users.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This commit changes the list representation of HTTP headers to use the
ArchivalMaybeBinaryString type.

Now that we have migrated most representations of HTTP headers to use
this new type, we can finally implement scrubbing.

As a reminder, we still need to migrate the ./legacy/measurex
implementation, however that one is a bit annoying because there are no
tests at all for measurex 🤦🤦🤦🤦🤦🤦🤦.

That said, given that ./legacy/measurex is deprecated and it is only
used by the tor experiment, I think leaving it untouched would probably
be the right thing to do here.

Part of ooni/probe#2531
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
)

This commit modifies ArchivalMaybeBinaryData to unconditionally scrub IP
addresses and endpoints. It also renames the struct
ArchivalScrubbedMaybeBinaryData to underline that it's scrubbing now.

We're using ArchivalScrubbedMaybeBinaryData to represent HTTP headers
and bodies collected by OONI measurements.

With this commit merged, I am now much less concerned about the
potential unintended effects of aggressively using happy eyeballs, which
we started introducing as part of
ooni/probe#2531.

In other words, the rest of the refactoring of the OONI bootstrap could
proceed a bit faster.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
This diff concludes most of the development work associated with
ooni/probe#2531. We move the nearly unused
ArchivalMaybeBinaryData to the internal/legacy/legacymodel package to
clearly mark it deprecated.

Finishing removing this struct is a task that is documented by
ooni/probe#2543.
Murphy-OrangeMud pushed a commit to Murphy-OrangeMud/probe-cli that referenced this issue Feb 13, 2024
They're quack like bridges, OONI bridges. Also, name the config file
from the PoV of the user.

Part of ooni/probe#2531.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement improving existing code or new feature ooni/probe-engine priority/high techdebt This issue describes technical debt testing
Projects
None yet
Development

No branches or pull requests

1 participant