diff --git a/src/cmdu.c b/src/cmdu.c index a3b5db0ab6d678584a5ae99440158bb69fda6efc..8e85e2c3138689ba8719b221748d3bf6328f909e 100644 --- a/src/cmdu.c +++ b/src/cmdu.c @@ -141,7 +141,6 @@ struct cmdu_buff *cmdu_alloc(int size) if (!p) return NULL; - fprintf(stderr, "%s: %d\n", __func__, __LINE__); n = (struct cmdu_buff *)p; n->head = (uint8_t *)(n + 1) + CMDU_RESERVE_HEADSPACE; n->end = n->head + size; @@ -308,6 +307,11 @@ int cmdu_put(struct cmdu_buff *c, uint8_t *bytes, int len) return 0; } +int cmdu_put_eom(struct cmdu_buff *c) +{ + return cmdu_put(c, "\x00\x00\x00", 3); +} + int cmdu_parse_tlvs(struct cmdu_buff *c, struct tlv *tv[][16], struct tlv_policy *policy, int policy_len) { diff --git a/src/cmdu.h b/src/cmdu.h index 8d1fae0a1b9f00236b234464d6b78a144c3ec77e..6f2f174ef9526fa12e8b84a5cc866a0b5b9c8878 100644 --- a/src/cmdu.h +++ b/src/cmdu.h @@ -98,18 +98,36 @@ struct cmdu_buff *cmdu_alloc(int size); struct cmdu_buff *cmdu_alloc_default(void); void cmdu_free(struct cmdu_buff *c); +static inline void cmdu_set_type(struct cmdu_buff *c, uint16_t type) +{ + if (c && c->cdata) + buf_put_be16((uint8_t *)&c->cdata->hdr.type, type); +} + static inline uint16_t cmdu_get_type(struct cmdu_buff *c) { return (c && c->cdata) ? buf_get_be16((uint8_t *)&c->cdata->hdr.type) : 0xffff; } +static inline void cmdu_set_mid(struct cmdu_buff *c, uint16_t mid) +{ + if (c && c->cdata) + buf_put_be16((uint8_t *)&c->cdata->hdr.mid, mid); +} + static inline uint16_t cmdu_get_mid(struct cmdu_buff *c) { return (c && c->cdata) ? buf_get_be16((uint8_t *)&c->cdata->hdr.mid) : 0xffff; } +static inline void cmdu_set_fid(struct cmdu_buff *c, uint8_t fid) +{ + if (c && c->cdata) + c->cdata->hdr.fid = fid; +} + static inline uint8_t cmdu_get_fid(struct cmdu_buff *c) { return (c && c->cdata) ? c->cdata->hdr.fid : 0xff; @@ -140,6 +158,7 @@ int cmdu_copy_tlvs(struct cmdu_buff *c, struct tlv *tv[], int tv_arrsize); int cmdu_put_tlv(struct cmdu_buff *c, struct tlv *t); int cmdu_put(struct cmdu_buff *c, uint8_t *bytes, int len); +int cmdu_put_eom(struct cmdu_buff *c); struct tlv *cmdu_get_tlv(struct cmdu_buff *c, uint8_t tlv_type); struct tlv *cmdu_peek_tlv(struct cmdu_buff *c, uint8_t tlv_type);