summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadRustRuntime/include
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2025-02-19 15:55:20 +0100
committerEmīls <emils@mullvad.net>2025-03-03 14:23:34 +0100
commit68352d1e0e5e5e285d8018cd382e128c136bd194 (patch)
tree5423c1aa5d1b01dcadd2aa6f29ddcb2dfadf2376 /ios/MullvadRustRuntime/include
parentbf43d23c3f2317ee3cba2702e57a608c72f835fa (diff)
downloadmullvadvpn-68352d1e0e5e5e285d8018cd382e128c136bd194.tar.xz
mullvadvpn-68352d1e0e5e5e285d8018cd382e128c136bd194.zip
Add retry strategy to mullvad api
Diffstat (limited to 'ios/MullvadRustRuntime/include')
-rw-r--r--ios/MullvadRustRuntime/include/mullvad_rust_runtime.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
index faae315d6d..e054de0044 100644
--- a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
+++ b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
@@ -26,6 +26,8 @@ typedef struct ExchangeCancelToken ExchangeCancelToken;
typedef struct RequestCancelHandle RequestCancelHandle;
+typedef struct RetryStrategy RetryStrategy;
+
typedef struct SwiftApiContext {
const struct ApiContext *_0;
} SwiftApiContext;
@@ -34,6 +36,10 @@ typedef struct SwiftCancelHandle {
struct RequestCancelHandle *ptr;
} SwiftCancelHandle;
+typedef struct SwiftRetryStrategy {
+ struct RetryStrategy *_0;
+} SwiftRetryStrategy;
+
typedef struct SwiftMullvadApiResponse {
uint8_t *body;
uintptr_t body_size;
@@ -41,8 +47,6 @@ typedef struct SwiftMullvadApiResponse {
uint8_t *error_description;
uint8_t *server_response_code;
bool success;
- bool should_retry;
- uint64_t retry_after;
} SwiftMullvadApiResponse;
typedef struct CompletionCookie {
@@ -106,7 +110,8 @@ struct SwiftApiContext mullvad_api_init_new(const uint8_t *host,
* This function is not safe to call multiple times with the same `CompletionCookie`.
*/
struct SwiftCancelHandle mullvad_api_get_addresses(struct SwiftApiContext api_context,
- void *completion_cookie);
+ void *completion_cookie,
+ struct SwiftRetryStrategy retry_strategy);
/**
* Called by the Swift side to signal that a Mullvad API call should be cancelled.
@@ -157,6 +162,29 @@ extern void mullvad_api_completion_finish(struct SwiftMullvadApiResponse respons
void mullvad_response_drop(struct SwiftMullvadApiResponse response);
/**
+ * Creates a retry strategy that never retries after failure.
+ * The result needs to be consumed.
+ */
+struct SwiftRetryStrategy mullvad_api_retry_strategy_never(void);
+
+/**
+ * Creates a retry strategy that retries `max_retries` times with a constant delay of `delay_sec`.
+ * The result needs to be consumed.
+ */
+struct SwiftRetryStrategy mullvad_api_retry_strategy_constant(uintptr_t max_retries,
+ uint64_t delay_sec);
+
+/**
+ * Creates a retry strategy that retries `max_retries` times with a exponantially increating delay.
+ * The delay will never exceed `max_delay_sec`
+ * The result needs to be consumed.
+ */
+struct SwiftRetryStrategy mullvad_api_retry_strategy_exponential(uintptr_t max_retries,
+ uint64_t initial_sec,
+ uint32_t factor,
+ uint64_t max_delay_sec);
+
+/**
* Initializes a valid pointer to an instance of `EncryptedDnsProxyState`.
*
* # Safety