diff --git a/src/core/ddsi/include/ddsi/ddsi_ser.h b/src/core/ddsi/include/ddsi/ddsi_ser.h index d8f4506..5ac849d 100644 --- a/src/core/ddsi/include/ddsi/ddsi_ser.h +++ b/src/core/ddsi/include/ddsi/ddsi_ser.h @@ -189,4 +189,6 @@ void * ddsi_serstate_append (serstate_t st, size_t n); void * ddsi_serstate_append_align (serstate_t st, size_t a); void * ddsi_serstate_append_aligned (serstate_t st, size_t n, size_t a); +OSAPI_EXPORT void ddsi_serdata_getblob (void **raw, size_t *sz, serdata_t serdata); + #endif diff --git a/src/core/ddsi/src/ddsi_ser.c b/src/core/ddsi/src/ddsi_ser.c index eef360e..2fe02c5 100644 --- a/src/core/ddsi/src/ddsi_ser.c +++ b/src/core/ddsi/src/ddsi_ser.c @@ -140,6 +140,21 @@ uint32_t ddsi_serdata_size (const struct serdata *serdata) return (uint32_t) (sizeof (struct CDRHeader) + st->pos); } +void ddsi_serdata_getblob (void **raw, size_t *sz, serdata_t serdata) +{ + const struct serstate *st = serdata->v.st; + if (serdata->v.st->kind == STK_EMPTY) + { + *sz = 0; + *raw = NULL; + } + else + { + *sz = sizeof (struct CDRHeader) + st->pos; + *raw = &serdata->hdr; + } +} + int ddsi_serdata_is_key (const struct serdata * serdata) { return serdata->v.st->kind == STK_KEY;