feat(sdk): add Swift and Kotlin mobile client foundations with push token proto

Swift SDK: Swift Package wrapping libquicproquo_ffi with QpqClient class
(connect, login, send, receive, disconnect) for iOS 15+ / macOS 13+.

Kotlin SDK: JNI bridge to libquicproquo_ffi with QpqClient class for
Android (aarch64, armv7) and JVM, Gradle build configuration.

Adds RegisterPushToken RPC (method ID 710) to device.proto for
APNs/FCM/WebPush device push token registration.
This commit is contained in:
2026-03-04 20:58:23 +01:00
parent cbb76af6b1
commit f57dda3f36
14 changed files with 816 additions and 1 deletions

View File

@@ -0,0 +1,5 @@
module CQuicProQuo {
header "quicproquo_ffi.h"
link "quicproquo_ffi"
export *
}

View File

@@ -0,0 +1,52 @@
// quicproquo_ffi.h — C header for libquicproquo_ffi.
//
// Mirrors the extern "C" functions from crates/quicproquo-ffi/src/lib.rs.
#ifndef QUICPROQUO_FFI_H
#define QUICPROQUO_FFI_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Status codes.
#define QPQ_OK 0
#define QPQ_ERROR 1
#define QPQ_AUTH_FAILED 2
#define QPQ_TIMEOUT 3
#define QPQ_NOT_CONNECTED 4
// Opaque handle type.
typedef struct QpqHandle QpqHandle;
// Connect to a quicproquo server. Returns NULL on failure.
QpqHandle* qpq_connect(const char* server, const char* ca_cert, const char* server_name);
// Authenticate with OPAQUE credentials.
int qpq_login(QpqHandle* handle, const char* username, const char* password);
// Send a message to a recipient (by username).
int qpq_send(QpqHandle* handle, const char* recipient,
const uint8_t* message, size_t message_len);
// Receive pending messages (blocking). On success, *out_json is a
// heap-allocated JSON string that must be freed with qpq_free_string.
int qpq_receive(QpqHandle* handle, uint32_t timeout_ms, char** out_json);
// Disconnect and free the handle.
void qpq_disconnect(QpqHandle* handle);
// Return the last error message, or NULL. Do NOT free the result.
const char* qpq_last_error(const QpqHandle* handle);
// Free a string returned by qpq_receive.
void qpq_free_string(char* ptr);
#ifdef __cplusplus
}
#endif
#endif // QUICPROQUO_FFI_H