diff options
author | Paul Selkirk <paul@psgd.org> | 2016-03-16 10:15:47 -0400 |
---|---|---|
committer | Paul Selkirk <paul@psgd.org> | 2016-03-16 10:15:47 -0400 |
commit | 79559c5041835ce6835a35265a97e291789ec0b0 (patch) | |
tree | a80ca837adce158a632633922e2e8786f0558871 /rpc_server.c | |
parent | 8db1d753745bb7b253cf969ff2fb32464b601bf5 (diff) |
Added serial RPC transport and lots more...
Added RPC function to get server version number.
Substantially reworked GNUMakefile with conditionals.
Renamed rpc_*() and xdr_*() to hal_*() for consistency.
Moved hal_io_fmc.c from stm32 repo.
Diffstat (limited to 'rpc_server.c')
-rw-r--r-- | rpc_server.c | 228 |
1 files changed, 124 insertions, 104 deletions
diff --git a/rpc_server.c b/rpc_server.c index 3447c53..d57fc57 100644 --- a/rpc_server.c +++ b/rpc_server.c @@ -34,6 +34,7 @@ #include "hal.h" #include "hal_internal.h" +#include "xdr_internal.h" /* * RPC calls. @@ -43,20 +44,36 @@ #define pad(n) (((n) + 3) & ~3) +static hal_error_t get_version(uint8_t **iptr, const uint8_t * const ilimit, + uint8_t **optr, const uint8_t * const olimit) +{ + uint32_t version; + hal_error_t ret; + + check(hal_xdr_encode_int(optr, olimit, RPC_VERSION)); + + /* call the local function */ + ret = hal_rpc_local_misc_dispatch.get_version(&version); + if (ret == HAL_OK) + check(hal_xdr_encode_int(optr, olimit, version)); + + return ret; +} + static hal_error_t get_random(uint8_t **iptr, const uint8_t * const ilimit, uint8_t **optr, const uint8_t * const olimit) { uint32_t length; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &length)); + check(hal_xdr_decode_int(iptr, ilimit, &length)); /* sanity check length */ if (length == 0 || length > olimit - *optr - 4) return HAL_ERROR_IO_BAD_COUNT; /* need a better error */ /* call the local function */ /* get the data directly into the output buffer */ - check(rpc_encode_int(optr, olimit, length)); + check(hal_xdr_encode_int(optr, olimit, length)); ret = hal_rpc_local_misc_dispatch.get_random(*optr, (size_t)length); if (ret == HAL_OK) *optr += pad(length); @@ -71,14 +88,14 @@ static hal_error_t set_pin(uint8_t **iptr, const uint8_t * const ilimit, uint8_t **optr, const uint8_t * const olimit) { hal_client_handle_t client; - hal_user_t user; + uint32_t user; uint8_t *pin; uint32_t pin_len; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &user)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &pin, &pin_len)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &user)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &pin, &pin_len)); /* call the local function */ ret = hal_rpc_local_misc_dispatch.set_pin(client, user, (const char * const)pin, pin_len); @@ -89,14 +106,14 @@ static hal_error_t login(uint8_t **iptr, const uint8_t * const ilimit, uint8_t **optr, const uint8_t * const olimit) { hal_client_handle_t client; - hal_user_t user; + uint32_t user; uint8_t *pin; uint32_t pin_len; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &user)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &pin, &pin_len)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &user)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &pin, &pin_len)); /* call the local function */ ret = hal_rpc_local_misc_dispatch.login(client, user, (const char * const)pin, pin_len); @@ -109,7 +126,7 @@ static hal_error_t logout(uint8_t **iptr, const uint8_t * const ilimit, hal_client_handle_t client; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); /* call the local function */ ret = hal_rpc_local_misc_dispatch.logout(client); @@ -130,11 +147,11 @@ static hal_error_t is_logged_in(uint8_t **iptr, const uint8_t * const ilimit, uint8_t **optr, const uint8_t * const olimit) { hal_client_handle_t client; - hal_user_t user; + uint32_t user; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &user)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &user)); /* call the local function */ ret = hal_rpc_local_misc_dispatch.is_logged_in(client, user); @@ -144,30 +161,30 @@ static hal_error_t is_logged_in(uint8_t **iptr, const uint8_t * const ilimit, static hal_error_t hash_get_digest_len(uint8_t **iptr, const uint8_t * const ilimit, uint8_t **optr, const uint8_t * const olimit) { - hal_digest_algorithm_t alg; + uint32_t alg; size_t length; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &alg)); + check(hal_xdr_decode_int(iptr, ilimit, &alg)); /* call the local function */ ret = hal_rpc_local_hash_dispatch.get_digest_length(alg, &length); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, length)); + check(hal_xdr_encode_int(optr, olimit, length)); return ret; } static hal_error_t hash_get_digest_algorithm_id(uint8_t **iptr, const uint8_t * const ilimit, uint8_t **optr, const uint8_t * const olimit) { - hal_digest_algorithm_t alg; + uint32_t alg; size_t len; uint32_t len_max; uint8_t *optr_orig = *optr; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &alg)); - check(rpc_decode_int(iptr, ilimit, &len_max)); + check(hal_xdr_decode_int(iptr, ilimit, &alg)); + check(hal_xdr_decode_int(iptr, ilimit, &len_max)); /* sanity check len_max */ if (len_max > olimit - *optr - 4) return HAL_ERROR_IO_BAD_COUNT; /* need a better error */ @@ -178,7 +195,7 @@ static hal_error_t hash_get_digest_algorithm_id(uint8_t **iptr, const uint8_t * ret = hal_rpc_local_hash_dispatch.get_digest_algorithm_id(alg, *optr, &len, (size_t)len_max); if (ret == HAL_OK) { *optr = optr_orig; - check(rpc_encode_int(optr, olimit, len)); + check(hal_xdr_encode_int(optr, olimit, len)); *optr += pad(len); } else { @@ -195,12 +212,12 @@ static hal_error_t hash_get_algorithm(uint8_t **iptr, const uint8_t * const ilim hal_digest_algorithm_t alg; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &hash.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &hash.handle)); /* call the local function */ ret = hal_rpc_local_hash_dispatch.get_algorithm(hash, &alg); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, alg)); + check(hal_xdr_encode_int(optr, olimit, alg)); return ret; } @@ -215,15 +232,15 @@ static hal_error_t hash_initialize(uint8_t **iptr, const uint8_t * const ilimit, uint32_t key_len; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &session.handle)); - check(rpc_decode_int(iptr, ilimit, &alg)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &key, &key_len)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &session.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &alg)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &key, &key_len)); /* call the local function */ ret = hal_rpc_local_hash_dispatch.initialize(client, session, &hash, (hal_digest_algorithm_t)alg, key, (size_t)key_len); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, hash.handle)); + check(hal_xdr_encode_int(optr, olimit, hash.handle)); return ret; } @@ -235,8 +252,8 @@ static hal_error_t hash_update(uint8_t **iptr, const uint8_t * const ilimit, uint32_t length; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &hash.handle)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &data, &length)); + check(hal_xdr_decode_int(iptr, ilimit, &hash.handle)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &data, &length)); /* call the local function */ ret = hal_rpc_local_hash_dispatch.update(hash, data, (size_t)length); @@ -250,15 +267,15 @@ static hal_error_t hash_finalize(uint8_t **iptr, const uint8_t * const ilimit, uint32_t length; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &hash.handle)); - check(rpc_decode_int(iptr, ilimit, &length)); + check(hal_xdr_decode_int(iptr, ilimit, &hash.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &length)); /* sanity check length */ if (length == 0 || length > olimit - *optr - 4) return HAL_ERROR_IO_BAD_COUNT; /* need a better error */ /* call the local function */ /* get the data directly into the output buffer */ - check(rpc_encode_int(optr, olimit, length)); + check(hal_xdr_encode_int(optr, olimit, length)); ret = hal_rpc_local_hash_dispatch.finalize(hash, *optr, (size_t)length); if (ret == HAL_OK) *optr += pad(length); @@ -274,25 +291,25 @@ static hal_error_t pkey_load(uint8_t **iptr, const uint8_t * const ilimit, hal_client_handle_t client; hal_session_handle_t session; hal_pkey_handle_t pkey; - hal_key_type_t type; - hal_curve_name_t curve; + uint32_t type; + uint32_t curve; uint8_t *name, *der; uint32_t name_len, der_len; hal_key_flags_t flags; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &session.handle)); - check(rpc_decode_int(iptr, ilimit, &type)); - check(rpc_decode_int(iptr, ilimit, &curve)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &der, &der_len)); - check(rpc_decode_int(iptr, ilimit, &flags)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &session.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &type)); + check(hal_xdr_decode_int(iptr, ilimit, &curve)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &der, &der_len)); + check(hal_xdr_decode_int(iptr, ilimit, &flags)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.load(client, session, &pkey, type, curve, name, name_len, der, der_len, flags); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, pkey.handle)); + check(hal_xdr_encode_int(optr, olimit, pkey.handle)); return ret; } @@ -302,20 +319,20 @@ static hal_error_t pkey_find(uint8_t **iptr, const uint8_t * const ilimit, hal_client_handle_t client; hal_session_handle_t session; hal_pkey_handle_t pkey; - hal_key_type_t type; + uint32_t type; uint8_t *name; uint32_t name_len; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &session.handle)); - check(rpc_decode_int(iptr, ilimit, &type)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &session.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &type)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.find(client, session, &pkey, type, name, name_len); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, pkey.handle)); + check(hal_xdr_encode_int(optr, olimit, pkey.handle)); return ret; } @@ -327,23 +344,23 @@ static hal_error_t pkey_generate_rsa(uint8_t **iptr, const uint8_t * const ilimi hal_pkey_handle_t pkey; uint8_t *name; uint32_t name_len; - unsigned key_len; + uint32_t key_len; uint8_t *exp; uint32_t exp_len; hal_key_flags_t flags; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &session.handle)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); - check(rpc_decode_int(iptr, ilimit, &key_len)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &exp, &exp_len)); - check(rpc_decode_int(iptr, ilimit, &flags)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &session.handle)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); + check(hal_xdr_decode_int(iptr, ilimit, &key_len)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &exp, &exp_len)); + check(hal_xdr_decode_int(iptr, ilimit, &flags)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.generate_rsa(client, session, &pkey, name, name_len, key_len, exp, exp_len, flags); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, pkey.handle)); + check(hal_xdr_encode_int(optr, olimit, pkey.handle)); return ret; } @@ -355,20 +372,20 @@ static hal_error_t pkey_generate_ec(uint8_t **iptr, const uint8_t * const ilimit hal_pkey_handle_t pkey; uint8_t *name; uint32_t name_len; - hal_curve_name_t curve; + uint32_t curve; hal_key_flags_t flags; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &client.handle)); - check(rpc_decode_int(iptr, ilimit, &session.handle)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); - check(rpc_decode_int(iptr, ilimit, &curve)); - check(rpc_decode_int(iptr, ilimit, &flags)); + check(hal_xdr_decode_int(iptr, ilimit, &client.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &session.handle)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &name, &name_len)); + check(hal_xdr_decode_int(iptr, ilimit, &curve)); + check(hal_xdr_decode_int(iptr, ilimit, &flags)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.generate_ec(client, session, &pkey, name, name_len, curve, flags); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, pkey.handle)); + check(hal_xdr_encode_int(optr, olimit, pkey.handle)); return ret; } @@ -378,7 +395,7 @@ static hal_error_t pkey_close(uint8_t **iptr, const uint8_t * const ilimit, hal_pkey_handle_t pkey; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.close(pkey); @@ -391,7 +408,7 @@ static hal_error_t pkey_delete(uint8_t **iptr, const uint8_t * const ilimit, hal_pkey_handle_t pkey; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.delete(pkey); @@ -405,12 +422,12 @@ static hal_error_t pkey_get_key_type(uint8_t **iptr, const uint8_t * const ilimi hal_key_type_t type; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.get_key_type(pkey, &type); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, type)); + check(hal_xdr_encode_int(optr, olimit, type)); return ret; } @@ -421,12 +438,12 @@ static hal_error_t pkey_get_key_flags(uint8_t **iptr, const uint8_t * const ilim hal_key_flags_t flags; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.get_key_flags(pkey, &flags); if (ret == HAL_OK) - check(rpc_encode_int(optr, olimit, flags)); + check(hal_xdr_encode_int(optr, olimit, flags)); return ret; } @@ -437,11 +454,11 @@ static hal_error_t pkey_get_public_key_len(uint8_t **iptr, const uint8_t * const size_t len; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); /* call the local function */ len = hal_rpc_local_pkey_dispatch.get_public_key_len(pkey); - check(rpc_encode_int(optr, olimit, len)); + check(hal_xdr_encode_int(optr, olimit, len)); return HAL_OK; } @@ -454,8 +471,8 @@ static hal_error_t pkey_get_public_key(uint8_t **iptr, const uint8_t * const ili uint8_t *optr_orig = *optr; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); - check(rpc_decode_int(iptr, ilimit, &len_max)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &len_max)); /* sanity check len_max */ if (len_max > olimit - *optr - 4) return HAL_ERROR_IO_BAD_COUNT; /* need a better error */ @@ -466,7 +483,7 @@ static hal_error_t pkey_get_public_key(uint8_t **iptr, const uint8_t * const ili ret = hal_rpc_local_pkey_dispatch.get_public_key(pkey, *optr, &len, len_max); if (ret == HAL_OK) { *optr = optr_orig; - check(rpc_encode_int(optr, olimit, len)); + check(hal_xdr_encode_int(optr, olimit, len)); *optr += pad(len); } else { @@ -489,11 +506,11 @@ static hal_error_t pkey_remote_sign(uint8_t **iptr, const uint8_t * const ilimit uint8_t *optr_orig = *optr; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &session.handle)); - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); - check(rpc_decode_int(iptr, ilimit, &hash.handle)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &input, &input_len)); - check(rpc_decode_int(iptr, ilimit, &sig_max)); + check(hal_xdr_decode_int(iptr, ilimit, &session.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &hash.handle)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &input, &input_len)); + check(hal_xdr_decode_int(iptr, ilimit, &sig_max)); /* sanity check sig_max */ if (sig_max > olimit - *optr - 4) return HAL_ERROR_IO_BAD_COUNT; /* need a better error */ @@ -504,7 +521,7 @@ static hal_error_t pkey_remote_sign(uint8_t **iptr, const uint8_t * const ilimit ret = hal_rpc_local_pkey_dispatch.sign(session, pkey, hash, input, input_len, *optr, &sig_len, sig_max); *optr = optr_orig; if (ret == HAL_OK) { - check(rpc_encode_int(optr, olimit, sig_len)); + check(hal_xdr_encode_int(optr, olimit, sig_len)); *optr += pad(sig_len); } return ret; @@ -522,26 +539,26 @@ static hal_error_t pkey_remote_verify(uint8_t **iptr, const uint8_t * const ilim uint32_t sig_len; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &session.handle)); - check(rpc_decode_int(iptr, ilimit, &pkey.handle)); - check(rpc_decode_int(iptr, ilimit, &hash.handle)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &input, &input_len)); - check(rpc_decode_buffer_in_place(iptr, ilimit, &sig, &sig_len)); + check(hal_xdr_decode_int(iptr, ilimit, &session.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &pkey.handle)); + check(hal_xdr_decode_int(iptr, ilimit, &hash.handle)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &input, &input_len)); + check(hal_xdr_decode_buffer_in_place(iptr, ilimit, &sig, &sig_len)); /* call the local function */ ret = hal_rpc_local_pkey_dispatch.verify(session, pkey, hash, input, input_len, sig, sig_len); return ret; } -static hal_error_t rpc_encode_pkey_info(uint8_t **optr, const uint8_t * const olimit, const hal_pkey_info_t *info) +static hal_error_t hal_xdr_encode_pkey_info(uint8_t **optr, const uint8_t * const olimit, const hal_pkey_info_t *info) { uint8_t *optr_orig = *optr; hal_error_t ret; - if ((ret = rpc_encode_int(optr, olimit, info->type)) != HAL_OK || - (ret = rpc_encode_int(optr, olimit, info->curve)) != HAL_OK || - (ret = rpc_encode_int(optr, olimit, info->flags)) != HAL_OK || - (ret = rpc_encode_buffer(optr, olimit, (uint8_t *)&info->name[0], info->name_len)) != HAL_OK) + if ((ret = hal_xdr_encode_int(optr, olimit, info->type)) != HAL_OK || + (ret = hal_xdr_encode_int(optr, olimit, info->curve)) != HAL_OK || + (ret = hal_xdr_encode_int(optr, olimit, info->flags)) != HAL_OK || + (ret = hal_xdr_encode_buffer(optr, olimit, (uint8_t *)&info->name[0], info->name_len)) != HAL_OK) *optr = optr_orig; return ret; } @@ -554,7 +571,7 @@ static hal_error_t pkey_list(uint8_t **iptr, const uint8_t * const ilimit, uint32_t result_max; hal_error_t ret; - check(rpc_decode_int(iptr, ilimit, &result_max)); + check(hal_xdr_decode_int(iptr, ilimit, &result_max)); hal_pkey_info_t result[result_max]; unsigned result_len; @@ -563,9 +580,9 @@ static hal_error_t pkey_list(uint8_t **iptr, const uint8_t * const ilimit, ret = hal_rpc_local_pkey_dispatch.list(result, &result_len, result_max); if (ret == HAL_OK) { int i; - check(rpc_encode_int(optr, olimit, result_len)); + check(hal_xdr_encode_int(optr, olimit, result_len)); for (i = 0; i < result_len; ++i) { - if ((ret = rpc_encode_pkey_info(optr, olimit, &result[i])) != HAL_OK) { + if ((ret = hal_xdr_encode_pkey_info(optr, olimit, &result[i])) != HAL_OK) { *optr = optr_orig; break; } @@ -577,24 +594,27 @@ static hal_error_t pkey_list(uint8_t **iptr, const uint8_t * const ilimit, #define MAX_PKT_SIZE 1024 #define interrupt 0 -void rpc_server_main(void) +void hal_rpc_server_main(void) { uint8_t inbuf[MAX_PKT_SIZE], outbuf[MAX_PKT_SIZE]; uint8_t *iptr, *ilimit, *optr, *olimit; size_t ilen, olen; - rpc_func_num_t rpc_func_num; + uint32_t rpc_func_num; void *opaque; hal_error_t ret; while (!interrupt) { ilen = sizeof(inbuf); - if (rpc_recvfrom(inbuf, &ilen, &opaque) == HAL_OK) { + if (hal_rpc_recvfrom(inbuf, &ilen, &opaque) == HAL_OK) { iptr = inbuf; ilimit = inbuf + ilen; optr = outbuf + 4; /* reserve 4 bytes for return code */ olimit = outbuf + sizeof(outbuf); - rpc_decode_int(&iptr, ilimit, &rpc_func_num); + hal_xdr_decode_int(&iptr, ilimit, &rpc_func_num); switch (rpc_func_num) { + case RPC_FUNC_GET_VERSION: + ret = get_version(&iptr, ilimit, &optr, olimit); + break; case RPC_FUNC_GET_RANDOM: ret = get_random(&iptr, ilimit, &optr, olimit); break; @@ -677,8 +697,8 @@ void rpc_server_main(void) /* encode the return code at the beginning of the payload */ olen = optr - outbuf; optr = outbuf; - rpc_encode_int(&optr, olimit, ret); - rpc_sendto(outbuf, olen, opaque); + hal_xdr_encode_int(&optr, olimit, ret); + hal_rpc_sendto(outbuf, olen, opaque); } } } @@ -691,14 +711,14 @@ const hal_rpc_misc_dispatch_t *hal_rpc_misc_dispatch = &hal_rpc_local_misc_dispa const hal_rpc_hash_dispatch_t *hal_rpc_hash_dispatch = &hal_rpc_local_hash_dispatch; const hal_rpc_pkey_dispatch_t *hal_rpc_pkey_dispatch = &hal_rpc_local_pkey_dispatch; -hal_error_t rpc_server_init(void) +hal_error_t hal_rpc_server_init(void) { - return rpc_server_transport_init(); + return hal_rpc_server_transport_init(); } -hal_error_t rpc_server_close(void) +hal_error_t hal_rpc_server_close(void) { - return rpc_server_transport_close(); + return hal_rpc_server_transport_close(); } |