summaryrefslogtreecommitdiff
path: root/crates/arti-rpcserver
Commit message (Collapse)AuthorAgeFilesLines
...
* rpc: Move "rpc:release" to be a method on the rpc object.Nick Mathewson2024-10-231-24/+24
| | | | | | | Now, instead of telling the session or the connection to drop the object ID, we tell the object ID to go away. Closes #1663.
* rpcserver: detect and use methods that bypass method dispatch.Nick Mathewson2024-10-231-3/+8
|
* rpc: Remove unimplemented rpc:downgrade method for now.Nick Mathewson2024-10-231-9/+0
| | | | | If and when we implement this, it will likely be different; arti#868 has some thoughts on the implications.
* rpc: Move some object-id-manipulation methods to a new module.Nick Mathewson2024-10-233-50/+63
| | | | | These will have different implementations soon; this is a more logical place for them.
* Merge branch 'arti-rpcserver-comment' into 'main'wesleyac2024-10-211-1/+1
|\ | | | | | | | | Fix typo in arti-rpcserver auth.rs comment See merge request tpo/core/arti!2558
| * Fix typo in arti-rpcserver auth.rs commentNeel Chauhan2024-10-181-1/+1
| |
* | rpc: List missing required features in error dataNick Mathewson2024-10-171-5/+7
| | | | | | | | | | | | | | | | | | | | Our spec says that when the RPC client has said "I require you to have feature X" and we don't have it, we need to include the feature(s) we don't have in an `rpc:unsupported_features` field of our error. Also, add an integration test for this behavior. Closes #1662
* | Remove Rpc* variants from tor_error::ErrorKindNick Mathewson2024-10-173-21/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | These are not regular ErrorKinds, since they can never occur in an error that's meant to be returned from a Rust API like `arti-client`. Instead, they only exist for errors returned from RpcError. (I can't find the place where we discussed this previously, but the rationale is that if an ErrorKind never makes sense in response to something that the user does from Rust, we should never have that be an ErrorKind. The fact that the removed kinds do not actually appear outside the RPC system suggests that this is reasonable.)
* | rpcserver: Wrap InvokeError as internal errorNick Mathewson2024-10-172-6/+8
|/ | | | | | | | | I'm about to remove HasKind from InvokeError, which would otherwise break this code. These errors are all in fact internal errors, since in this context they can only stem from incorrectly formed calls to `invoke_special_method`.
* Merge branch 'mq-prevent' into 'main'Ian Jackson2024-10-151-2/+5
|\ | | | | | | | | | | | | Use clippy to prevent non-mq use of mpsc::channel Closes #1659 See merge request tpo/core/arti!2536
| * Use mpsc_channel_no_memquota in the RPC system (adding a TODO)Ian Jackson2024-10-151-2/+5
| | | | | | | | | | We need to decide whether RPC will participate in memquota. Perhaps it should. But that's for the future.
* | Replace _ => panic!() elsewhereIan Jackson2024-10-151-1/+1
|/
* arti-rpcserver: minimal handling for request.meta.requireNick Mathewson2024-10-072-2/+30
| | | | | | | | | | We have defined a forward-compatibility mechanism for the RPC system, where a request may list one or more required "features", and if any feature is absent, the request will fail. Since no "features" are currently implemented, this code does the bare minimum to implement this mechanism, by rejecting every request with a nonempty "require" field.
* arti-rpcserver: Correctly handle rpc.meta without `updates`Nick Mathewson2024-10-071-0/+1
| | | | | The `update` field in request.meta is optional, so we should allow it to default to `false` when it is absent.
* rpcserver: Remove TODO about optionality of paramsNick Mathewson2024-10-071-3/+0
| | | | | | | The spec no longer says that `params` is optional, so we can remove the TODO about making it optional. Closes #1665.
* rpc: clarify documentation and fix typosNick Mathewson2024-10-022-3/+6
| | | | Based on review from @opara.
* Revise RPC documentation to be more informative.Nick Mathewson2024-10-024-13/+73
| | | | | | Previous documentation was more-or-less meant for the Arti developer only. This new documentation is intended for actual users of RPC functionality. It's meant to be extracted with `maint/rpc-doc-tool`.
* Bump arti- and tor- crates to 0.23.0Nick Mathewson2024-09-301-10/+10
| | | | | | | | | | | | | | Per our policy, every one of these gets a minor bump. Generated with: ``` for crate in $(./maint/list_crates | grep '^\(tor\|arti\)-' ); do cargo set-version --bump minor -p $crate; done ``` (Note the use of `-` at the end end of the grep pattern to prevent matching the `arti` crate.)
* Minor bumps on non-tor/arti cratesNick Mathewson2024-09-301-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These crates are not in the tor/arti namespace, but we have given them MSRV bumps: ``` oneshot-fused-workaround slotmap-careful fslock-guard hashx equix caret fs-mistrust safelog test-temp-dir retry-error ``` We are counting this as a breaking change. Since all of these crates are at 0.x.x, we have indicated the breaking change with a minor version bump. This commit was generated with the following script: ``` BUMPS=" oneshot-fused-workaround slotmap-careful fslock-guard hashx equix caret fs-mistrust safelog test-temp-dir retry-error " for crate in $BUMPS; do cargo set-version --bump minor -p $crate; done ```
* Merge branch 'msrv-1.77-and-rusqlite-update' into 'main'David Goulet2024-09-261-1/+1
|\ | | | | | | | | Upgrade MSRV to 1.77 , and rusqlite to 0.32.1 See merge request tpo/core/arti!2451
| * Upgrade MSRV to 1.77Nick Mathewson2024-09-251-1/+1
| | | | | | | | This will allow us to upgrade to the latest version of rusqlite.
* | Merge branch 'upgrades-20240925' into 'main'Nick Mathewson2024-09-261-1/+1
|\ \ | |/ |/| | | | | Upgrade dependencies in preparation for next week's releases. See merge request tpo/core/arti!2450
| * Upgrade to derive_more version 1.0.0Nick Mathewson2024-09-251-1/+1
| | | | | | | | | | | | The `derive_more` crate broke backward compatibility with this version, so this change involved quite a few manual fixups. With luck, they'll keep compatibility for some while in the future.
* | rpc: Rename SingletonId to SingleIdResponseNick Mathewson2024-09-242-8/+8
|/ | | | | | | | | | Calling it "singleton" might have suggested that it was using the [singleton pattern](https://en.wikipedia.org/wiki/Singleton_pattern), which it isn't. (Renaming done with rust-analyzer and double-checked with `git grep`.) Closes #1585.
* Bump MSRV from 1.70 to 1.75.Wesley Aptekar-Cassels2024-09-161-1/+1
|
* rpcserver: Split a few long lines.Nick Mathewson2024-09-161-5/+10
|
* rpcserver: move is_connection_close detection into run_loop.Nick Mathewson2024-09-161-6/+10
| | | | | | I've used an `async{ expr }.await` pattern, to make sure that _every_ error returned by the `loop{select!{}}` construct is actually transformed.
* rpcserver: Add an extra level of braces.Nick Mathewson2024-09-161-50/+52
| | | | (This will make the next commit easier to read.)
* rpcserver: Apply documentation suggestion.Nick Mathewson2024-09-161-0/+2
|
* rpcserver: Use a struct to enforce explicit ContinueNick Mathewson2024-09-161-2/+10
| | | | Per suggestion from @diziet.
* rpc: Simplify simplified close logic even furtherNick Mathewson2024-09-162-35/+38
| | | | | | Instead of classifying errors and complicating our behavior _early_ in our loop, instead we just decide whether an error indicates an EOF immediately before we return it.
* rpc: Simplify close logic even further.Nick Mathewson2024-09-161-6/+4
| | | | | | Make it more clear than the previous match statement that once we get an Err() from request_stream.next(), we aren't going to continue the loop.
* rpc: Simplify handling of fatal Json read errors.Nick Mathewson2024-09-163-44/+33
| | | | | | | | | | | | | | | | | | | | Previously, after determining that an error on an RPC connection was fatal, we would: 1. Determine whether it was a "clean" close or one that needed to be logged. 2. In exactly one case (specifically, when the inbound Json stream contained a Value that was not an Object) , we would send back a message to the client. 3. Exit the connection with Ok() or Err(e). We no longer do step "2" above. Additionally, we document: - Why it's important to exit immediately on syntax errors. - A better way to tolerate non-Object Json Values, if we decide someday to do so. Closes #1591.
* rpc: More specificity surrounding SOCKS-rpc integrationNick Mathewson2024-09-091-1/+8
|
* Bump all the unstable tor- and arti- crates to 0.22.0.Gabriela Moldovan2024-09-031-10/+10
| | | | | | | | | | Done using: ``` for crate in $(./maint/list_crates | rg '^(tor|arti-)'); do cargo set-version -p $crate 0.22.0 done ```
* oneshot-fused-workaround: Set the initial version to 0.1.0.Gabriela Moldovan2024-09-031-1/+1
| | | | This is the first time we're publishing this, so let's start at 0.1.0.
* arti-rpcserver: Use a non-wildcard version requirement for slotmap-careful.Gabriela Moldovan2024-09-031-1/+1
|
* Run fixup-features in preparation for release.Gabriela Moldovan2024-09-031-1/+1
|
* extract tor_async_utils::oneshot into ::oneshot-fused-workaroundJim Newsome2024-08-282-1/+2
| | | | | | | | | | | | | | Having this in the `tor-async-utils` crate prevents us from doing both of the following without introducing a circular dependency: * using it in `tor-rtmock` (which we currently do, particularly in tests). * using `tor-rtmock` to test things in `tor-async-utils`. We don't do this yet, but it is generally sensible to do so. In particular we want to move the `stream_peak` module there, which is currently tested with `tor-rtmock`. Moving this into its own crate avoids this circular dependency.
* rpcserver: Fix a trivial doc typo.Nick Mathewson2024-08-281-1/+1
|
* rpcserver: Use slotmap-careful instead of generational-arena.Nick Mathewson2024-08-143-35/+38
| | | | | | | | | Unlike generational-arena, slotmap is maintained. Unlike slotmap, slotmap-careful should never be able to reuse the same key for two different objects. Closes #1282.
* Merge branch 'rpc-connection-error' into 'main'Nick Mathewson2024-08-131-16/+66
|\ | | | | | | | | | | | | rpcserver: use more sophisticated handling for ConnectionError. Closes #1517 See merge request tpo/core/arti!2335
| * rpcserver: use more sophisticated handling for ConnectionError.Nick Mathewson2024-08-121-16/+66
| | | | | | | | | | | | | | | | | | | | | | | | In general, we don't want to return a ConnectionError for a simple EOF condition; we only want to report an error when there's an actual failure. Also, it's a good idea to capture the actual error return conditions that we get from aynchronous_codecs, rather than throwing them away as we did before. Closes #1517.
* | Unstable RPC method to dump method information.Nick Mathewson2024-08-122-1/+43
|/
* Bump versions for tor- and arti- crates to 0.21.0Nick Mathewson2024-08-011-10/+10
| | | | | | | | | | This is the result of: ``` for crate in $( ./maint/list_crates |grep '^\(tor\|arti-\)' ); do cargo set-version -p $crate 0.21.0 done ```
* Mark a struct as allowed-to-be-unused.Nick Mathewson2024-07-281-0/+1
| | | | | (This will either become used later, or we will remove it; the TODO RPC will remind us.)
* rpc: Rename the error codes for something like consistency.Nick Mathewson2024-07-253-4/+4
|
* rpc: Remove RpcError data field and use ReportNick Mathewson2024-07-251-1/+1
| | | | | | | | | | | | Per discussion, this field isn't really specified in a way that lets us fill it sensibly at the moment. So for now, we're going to just omit it. Additionally, we said that we'd Report on our errors; this branch changes the implementation of RpcError to do that. Question: Will the blanket implementation for Into<RpcError> make it harder to re-add a Data field later on if we want to do so?
* rpc: Refactor errors part 1: a new RpcMethod trait.Nick Mathewson2024-07-254-14/+7
| | | | | It is no longer necessary to say, for every RPC method, that its error type is RpcError.
* Update to derive-deftly 0.14Ian Jackson2024-07-081-1/+1
| | | | | This removes the deprecated syntaxes. Updating now will prevent us re-introducing the old syntaxes, which we updated in arti!2209.