aboutsummaryrefslogtreecommitdiff
path: root/rpc_server.c
diff options
context:
space:
mode:
authorPaul Selkirk <paul@psgd.org>2016-03-16 10:15:47 -0400
committerPaul Selkirk <paul@psgd.org>2016-03-16 10:15:47 -0400
commit79559c5041835ce6835a35265a97e291789ec0b0 (patch)
treea80ca837adce158a632633922e2e8786f0558871 /rpc_server.c
parent8db1d753745bb7b253cf969ff2fb32464b601bf5 (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.c228
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();
}