diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/enroll.proto | 14 | ||||
| -rw-r--r-- | src/lib/protobuf.c | 81 | ||||
| -rw-r--r-- | src/lib/serdes-oep.c | 37 | 
3 files changed, 94 insertions, 38 deletions
diff --git a/src/lib/enroll.proto b/src/lib/enroll.proto index 34ca1847..3b22ac17 100644 --- a/src/lib/enroll.proto +++ b/src/lib/enroll.proto @@ -25,16 +25,18 @@ import "ipcp_config.proto";  message enroll_req_msg {          /* TODO authentication */ -        required uint32 magic = 1; +        required bytes id = 1;  }  message enroll_resp_msg { -        required int64           t_sec    = 1; -        required int32           t_nsec   = 2; -        required int32           response = 3; -        optional ipcp_config_msg conf     = 4; +        required bytes           id       = 1; +        required int64           t_sec    = 2; +        required int32           t_nsec   = 3; +        required int32           response = 4; +        optional ipcp_config_msg conf     = 5;  }  message enroll_ack_msg { -        required int32 response = 1; +        required bytes id     = 1; +        required int32 result = 2;  } diff --git a/src/lib/protobuf.c b/src/lib/protobuf.c index 830efd40..937e4efc 100644 --- a/src/lib/protobuf.c +++ b/src/lib/protobuf.c @@ -343,62 +343,86 @@ struct qos_spec qos_spec_msg_to_s(const qosspec_msg_t * msg)          return s;  } -enroll_req_msg_t * enroll_req_s_to_msg(void) +enroll_req_msg_t * enroll_req_s_to_msg(const struct enroll_req * s)  {          enroll_req_msg_t * msg; +        uint8_t *          id;          msg = malloc(sizeof(*msg));          if (msg == NULL) -                return NULL; +                goto fail_msg; + +        id = malloc(ENROLL_ID_LEN); +        if (id == NULL) +                goto fail_id; + +        memcpy(id, s->id, ENROLL_ID_LEN);          enroll_req_msg__init(msg); -        msg->magic = 0xC0FFEE; +        msg->id.len  = ENROLL_ID_LEN; +        msg->id.data = id;          return msg; + + fail_id: +        free(msg); + fail_msg: +        return NULL;  } -int enroll_req_msg_to_s(const enroll_req_msg_t * msg) +struct enroll_req enroll_req_msg_to_s(const enroll_req_msg_t * msg)  { -        (void) msg; +        struct enroll_req s;          assert(msg != NULL); -        return 0; +        memcpy(s.id, msg->id.data, ENROLL_ID_LEN); + +        return s;  }  enroll_resp_msg_t * enroll_resp_s_to_msg(const struct enroll_resp * s)  {          enroll_resp_msg_t * msg; +        uint8_t *           id;          assert(s != NULL);          msg = malloc(sizeof(*msg));          if (msg == NULL) -                goto fail_malloc; +                goto fail_msg; + +        id = malloc(ENROLL_ID_LEN); +        if (id == NULL) +                goto fail_id; + +        memcpy(id, s->id, ENROLL_ID_LEN);          enroll_resp_msg__init(msg); +        msg->id.len   = ENROLL_ID_LEN; +        msg->id.data  = id; +          msg->t_sec    = s->t.tv_sec;          msg->t_nsec   = s->t.tv_nsec;          msg->response = s->response; -          if (msg->response < 0)                  return msg;          msg->conf = ipcp_config_s_to_msg(&s->conf);          if (msg->conf == NULL) -                goto fail_conf; +                goto fail_id;          return msg; - fail_conf: + fail_id:          enroll_resp_msg__free_unpacked(msg, NULL); - fail_malloc: + fail_msg:          return NULL;  } -struct enroll_resp enroll_resp_msg_to_s(enroll_resp_msg_t * msg) +struct enroll_resp enroll_resp_msg_to_s(const enroll_resp_msg_t * msg)  {          struct enroll_resp s; @@ -411,27 +435,50 @@ struct enroll_resp enroll_resp_msg_to_s(enroll_resp_msg_t * msg)          s.t.tv_sec  = msg->t_sec;          s.t.tv_nsec = msg->t_nsec; +        memcpy(s.id, msg->id.data, ENROLL_ID_LEN); +          return s;  } -enroll_ack_msg_t * enroll_ack_s_to_msg(int response) +enroll_ack_msg_t * enroll_ack_s_to_msg(const struct enroll_ack * s)  {          enroll_ack_msg_t * msg; +        uint8_t *          id;          msg = malloc(sizeof(*msg));          if (msg == NULL) -                return NULL; +                goto fail_msg; + +        id = malloc(ENROLL_ID_LEN); +        if (id == NULL) +                goto fail_id; + +        memcpy(id, s->id, ENROLL_ID_LEN);          enroll_ack_msg__init(msg); -        msg->response = response; +        msg->id.len   = ENROLL_ID_LEN; +        msg->id.data  = id; + +        msg->result = s->result;          return msg; + + fail_id: +        enroll_ack_msg__free_unpacked(msg, NULL); + fail_msg: +        return NULL;  } -int enroll_ack_msg_to_s(const enroll_ack_msg_t * msg) +struct enroll_ack enroll_ack_msg_to_s(const enroll_ack_msg_t * msg)  { +        struct enroll_ack s; +          assert(msg != NULL); -        return msg->response; +        memcpy(s.id, msg->id.data, ENROLL_ID_LEN); + +        s.result = msg->result; + +        return s;  } diff --git a/src/lib/serdes-oep.c b/src/lib/serdes-oep.c index cae5c598..f5034a4a 100644 --- a/src/lib/serdes-oep.c +++ b/src/lib/serdes-oep.c @@ -26,12 +26,13 @@  #include <ouroboros/serdes-oep.h> -ssize_t enroll_req_ser(buffer_t buf) +ssize_t enroll_req_ser(const struct enroll_req * req, +                       buffer_t                  buf)  {          enroll_req_msg_t * msg;          ssize_t            sz; -        msg = enroll_req_s_to_msg(); +        msg = enroll_req_s_to_msg(req);          if (msg == NULL)                  goto fail_msg; @@ -46,24 +47,33 @@ ssize_t enroll_req_ser(buffer_t buf)          return sz;   fail_pack: -    enroll_req_msg__free_unpacked(msg, NULL); +        enroll_req_msg__free_unpacked(msg, NULL);   fail_msg:      return -1;  } -int enroll_req_des(const buffer_t buf) +int enroll_req_des(struct enroll_req * req, +                   const buffer_t      buf)  {          enroll_req_msg_t * msg;          msg = enroll_req_msg__unpack(NULL, buf.len, buf.data);          if (msg == NULL) -                return -1; +                goto fail_unpack; -        /* Nothing in request yet, if it unpacks, it's good. */ +        if (msg->id.len != ENROLL_ID_LEN) +                goto fail_id; + +        *req = enroll_req_msg_to_s(msg);          enroll_req_msg__free_unpacked(msg, NULL);          return 0; + + fail_id: +        enroll_req_msg__free_unpacked(msg, NULL); + fail_unpack: +        return -1;  }  ssize_t enroll_resp_ser(const struct enroll_resp * resp, @@ -80,9 +90,6 @@ ssize_t enroll_resp_ser(const struct enroll_resp * resp,          if (sz < 0 || (size_t) sz > buf.len)                  goto fail_pack; -        msg->t_sec = resp->t.tv_sec; -        msg->t_nsec = resp->t.tv_nsec; -          enroll_resp_msg__pack(msg, buf.data);          enroll_resp_msg__free_unpacked(msg, NULL); @@ -111,13 +118,13 @@ int enroll_resp_des(struct enroll_resp * resp,          return 0;  } -ssize_t enroll_ack_ser(const int response, -                       buffer_t  buf) +ssize_t enroll_ack_ser(const struct enroll_ack * ack, +                       buffer_t                  buf)  {          enroll_ack_msg_t * msg;          ssize_t            sz; -        msg = enroll_ack_s_to_msg(response); +        msg = enroll_ack_s_to_msg(ack);          if (msg == NULL)                  goto fail_msg; @@ -138,8 +145,8 @@ ssize_t enroll_ack_ser(const int response,  } -int enroll_ack_des(int *          response, -                   const buffer_t buf) +int enroll_ack_des(struct enroll_ack * ack, +                   const buffer_t      buf)  {          enroll_ack_msg_t * msg; @@ -147,7 +154,7 @@ int enroll_ack_des(int *          response,          if (msg == NULL)                  return -1; -        *response = enroll_ack_msg_to_s(msg); +        *ack = enroll_ack_msg_to_s(msg);          enroll_ack_msg__free_unpacked(msg, NULL);  | 
