Commit Graph

16 Commits

Author SHA1 Message Date
Anton Nikolaev
1fae3a24c9 Convert all connectivity logs from "log" to "info"
Summary: In a diff down the stack I introduced sending of info/warn/error logs to Scuba. Here I'm just changing level of all connectivity-related logging to "info" as they often required for investigations.

Reviewed By: mweststrate

Differential Revision: D31532770

fbshipit-source-id: 956d6712918291579b3beb12cb91ab69ce1e3859
2021-10-12 07:19:41 -07:00
Michel Weststrate
740093d0d9 Separate Client in server and client part
Summary: This diff separates the concept of a Client as now on the UI, from the concept of a Client as known on the server, and makes all interactions with client and vice versa async.

Reviewed By: timur-valiev

Differential Revision: D31235682

fbshipit-source-id: 99089e9b390b4c5359f97f6f2b15bf4b182b6cb9
2021-10-06 09:10:19 -07:00
Michel Weststrate
2d838efd4d Separate device in server and client version [2/n]
Summary:
This stack takes care of handling care of moving all device interactions over the (possible) async channel FlipperServer. The FlipperServer interface (see previous diff) allows listening to specific server events using `on`, and emit commands to be executed by the server by using `exec` (e.g. `exec('take-screenshot', serial) => Promise<buffer>`).

FlipperServerImpl implements this interface on the server side.

The device implementations are split as follows

```
server / backend process:

ServerDevice
- iOSDevice
- AndroidDevice
- MetroDevice
- DummyDevice
- Mac/Windows Device

frontend / ui:

BaseDevice: a normal connected, device, implements device apis as they already existed
- ArchivedDevice (note that this doesn't have a server counterpart)
- TestDevice (for unit tests, with stubbed backend communication)

```

All features of devices are for simplicity unified (since the deviations are small), where specific device types might not implement certain features like taking screenshots or running shell commands.

To avoid making this diff unnecessarily big, some open Todo's will be addressed later in this stack, and it shouldn't be landed alone.

Reviewed By: timur-valiev

Differential Revision: D30909346

fbshipit-source-id: cce0bee94fdd5db59bebe3577a6084219a038719
2021-09-22 09:03:32 -07:00
Michel Weststrate
845d0755f1 Move common types to flipper-plugin [1/n]
Summary: This is the first diff in a stack of many where server and UI logic is further decoupled to be only communication through an event listener / emitting commands, where all data going over these media is json serializable. In this diff we extract the common interfaces that are to be used by both server and UI layer.

Reviewed By: passy

Differential Revision: D30899609

fbshipit-source-id: dc3c783707d47671f1d0f5dbf99cde17a8f69062
2021-09-22 09:03:32 -07:00
Michel Weststrate
c865446312 Fixed issue where ADB would be initialised, despite being disabled in settings
Summary:
As reported here: https://github.com/facebook/flipper/issues/2873, ADB would be initialised, even when disabled explicitly, resulting in an error if ADB could not be found.

Changelog: Fix: made sure that the "Android disabled" setting is respected.

Reviewed By: lblasa

Differential Revision: D31019099

fbshipit-source-id: 9d57945f2c21655426da42eb976dd46d8605d007
2021-09-17 07:24:57 -07:00
Michel Weststrate
e771394350 Fix timeout handlers being shared across connections
Summary: If multiple apps connect simultanously, they could overwrite or cancel each other timeoutHandles, leading to potential incorrect messages.

Reviewed By: lblasa

Differential Revision: D31015171

fbshipit-source-id: 1d498a90c8a7a1847d2a961fc944d2f74e734cc2
2021-09-17 05:23:14 -07:00
Lorenzo Blasa
1390bf4a33 Define alt ports for web socket connections
Summary:
The changes below add the notion of alternative ports to Flipper.

These alternative ports are meant to and will be used to connect via WebSocket instead of RSocket. The name does not suggest that as to make as generic as possible so that they can be reused for different purposes in the future.

Reviewed By: passy

Differential Revision: D30898874

fbshipit-source-id: 5eed8c61b41b502c859192aaac59c284b7b36228
2021-09-15 07:59:55 -07:00
Lorenzo Blasa
977cc7598e RSocket and WebSocket
Summary:
Enable Flipper Desktop to run both RSocket and WebSocket servers.

I've used 'alt' ports and/or server instead of tying the name explicitly to web sockets. This more general approach can be used later on to supply and use an alternative socket pair for other usages.

Reviewed By: fabiomassimo

Differential Revision: D30482531

fbshipit-source-id: a2c5f25b925c731e7970614b5ed987ce00219918
2021-09-10 10:06:05 -07:00
Michel Weststrate
80f48b444c Fix pending connections for websocket browser connections
Summary:
Connections from VSCode and Kite would remain forever pending because they don't go through the secure connection handler. This diff fixes that. Also removed the separate event that existed for that, since registering a new client is already a 'success' signal, so it doesn't need a separate event.

It turned out that the VSCode pending connection is actually correct, as it never handles the `getPlugins` event, so apparently the handling is broken. Added timeouts to guard against that as well.

Applied several code simplications as well.

Introduced an explicit cert exchange medium 'NONE' so that in code it is a bit clearer where CSR negotiation is supposed to happen.

Changelog: Fixed an issue where Kite / Unity apps didn't connect anymore

Reviewed By: timur-valiev

Differential Revision: D30866301

fbshipit-source-id: 8bd214fd9eebcd9a7583f1b44ee283883002f62e
2021-09-10 07:04:43 -07:00
Michel Weststrate
d8f77db632 Code improvements and more logging on connection handling
Summary:
In an attempt to trace Android issues:

1. added more logging to the process (opted for info level for now since this is pretty critical for support requests, yet not super repetitive overall. We could maybe turn it into usage tracking at some point to have central stats?).
2. rewrote promise chains to async/await since they are easier to follow and harder to do accidentally wrong
3. fixed some minor potential problems, will highlights those in code.

Changelog: Improved handling of edge cases in certificate exchange, which should address cases where a Flipper connection wouldn't come up when connection to Android / IOS. Added explicit logging around connection negation.

Reviewed By: lblasa

Differential Revision: D30838947

fbshipit-source-id: a898c6d3be6edc22bd24f9d2bad76e81871360da
2021-09-10 07:04:43 -07:00
Michel Weststrate
bd8912080b Kill IPC rendering / connection
Summary:
Remove IPC rendering / connection implementation. This has been behind GK for a couple of weeks, and no one complained / white listed. See also D30367413.

flipper_js_client_emulator

Reviewed By: passy

Differential Revision: D30452442

fbshipit-source-id: fbe7b4914fecc023f3ec78a027106ea32c5a99bd
2021-09-01 11:46:27 -07:00
Michel Weststrate
ebe5e7f9ff Make CertificateProvider side effect free in test (#2706)
Summary:
Pull Request resolved: https://github.com/facebook/flipper/pull/2706

Creating a CertificateProvider in test had the side effect of generating certificate files, which fails in windows CI. This change makes sure the files aren't generated in test. See https://github.com/facebook/flipper/runs/3366318523.

Since it is not possible to start the flipper server 'physically' without writing file (for the secure server), figured to remove the test entirely, since there is high impact but little risk captured by it; if the server doesn't start, *any* manual / exploratory test will fail.

Reviewed By: lblasa

Differential Revision: D30423173

fbshipit-source-id: e411cc61df04120a7132983e9f8d3d140e4ca048
2021-08-19 04:08:18 -07:00
Michel Weststrate
0cbe063c77 Move UnitializedClient to server
Summary: Move UnitializedClient interface to server namespace

Reviewed By: timur-valiev

Differential Revision: D30367328

fbshipit-source-id: 367a607fa2bb20dd140b1ad28946073ca764e517
2021-08-17 07:51:51 -07:00
Michel Weststrate
3736cbc480 Decouple JS device from Store
Summary: Made a start with decoupling JS device. Incomplete as there are still Electron deps.

Reviewed By: timur-valiev

Differential Revision: D30309257

fbshipit-source-id: b8002170cbbe8d68e1795ce7c12ffce4c8eac853
2021-08-17 07:51:51 -07:00
Michel Weststrate
c0cd32564a Organise files per device
Summary:
Moved all logic per device type we support to its own dir, including tools and utilities around it, which makes it easier to consolidate logic and decouple in turn per device type.

Per type, all logic can be found in

`server/devices/(desktop|metro|android|ios|webapp)`

Reviewed By: timur-valiev

Differential Revision: D30277817

fbshipit-source-id: 2b5339c363d5d31ceeba07cec03826fc67cf3748
2021-08-13 04:02:32 -07:00
Michel Weststrate
5e8c968222 Move devices to server folder
Summary:
This is the first of many diffs that extracts the connection, device, client detection out of the flipper core, to create a reusable flipper-server library that can be used in e.g. flipper-dump.

To keep diffs a little smaller, the current connection logic is first moved to the `server/` directory, and decoupled manually from the rest of the core, before moving it over to a separate package.

This first diffs moves the `comms/`, `devices/` and certificate utilities to the `server` directory.

Further untangling will follow in next diffs

Reviewed By: timur-valiev

Differential Revision: D30246551

fbshipit-source-id: c84259bfb1239119b3267a51b015e30c3c080866
2021-08-12 05:43:43 -07:00