diff options
Diffstat (limited to 'src/client/libwebidoidc-client.c')
-rw-r--r-- | src/client/libwebidoidc-client.c | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/src/client/libwebidoidc-client.c b/src/client/libwebidoidc-client.c index 4937135..f31c100 100644 --- a/src/client/libwebidoidc-client.c +++ b/src/client/libwebidoidc-client.c @@ -107,9 +107,8 @@ disfluid_api_make_client (const struct DisfluidApi *api, { scm_jwk = scm_from_utf8_string (jwk); } - SCM object = - scm_call_3 (api->scm_make_client, scm_client_id, scm_redirect_uri, - scm_jwk); + SCM object = scm_call_3 (api->scm_make_client, scm_client_id, scm_jwk, + scm_redirect_uri); scm_dynwind_begin (0); *client = scm_malloc (sizeof (struct DisfluidClient)); scm_dynwind_unwind_handler (free, *client, 0); @@ -127,6 +126,17 @@ disfluid_client_free (struct DisfluidClient *client) free (client); } +void +disfluid_client_copy (const DisfluidClient * client, const DisfluidApi * api, + DisfluidClient ** copy) +{ + scm_dynwind_begin (0); + *copy = scm_malloc (sizeof (struct DisfluidClient)); + scm_dynwind_unwind_handler (free, *copy, 0); + (*copy)->object = scm_gc_protect_object (client->object); + scm_dynwind_end (); +} + static size_t copy_scm_string (SCM string, size_t start, size_t max, char *dest) { @@ -188,15 +198,15 @@ struct DisfluidAccount }; void -disfluid_api_make_account (const struct DisfluidApi *api, - struct DisfluidAccount **account, - const char *subject, - const char *issuer, - const char *key_pair, - const char *id_token_header, - const char *id_token, - const char *access_token, - const char *refresh_token) +disfluid_api_make_account_full (const struct DisfluidApi *api, + struct DisfluidAccount **account, + const char *subject, + const char *issuer, + const char *key_pair, + const char *id_token_header, + const char *id_token, + const char *access_token, + const char *refresh_token) { SCM scm_subject = scm_from_utf8_string (subject); SCM scm_issuer = scm_from_utf8_string (issuer); @@ -224,6 +234,17 @@ disfluid_api_make_account (const struct DisfluidApi *api, } void +disfluid_account_copy (const DisfluidAccount * account, + const DisfluidApi * api, DisfluidAccount ** copy) +{ + scm_dynwind_begin (0); + *copy = scm_malloc (sizeof (struct DisfluidAccount)); + scm_dynwind_unwind_handler (free, *copy, 0); + (*copy)->object = scm_gc_protect_object (account->object); + scm_dynwind_end (); +} + +void disfluid_account_free (struct DisfluidAccount *account) { if (account) |