re/src/dns/cstr.c
2012-08-16 08:43:50 +00:00

61 lines
1.1 KiB
C

/**
* @file cstr.c DNS character strings encoding
*
* Copyright (C) 2010 Creytiv.com
*/
#include <string.h>
#include <re_types.h>
#include <re_fmt.h>
#include <re_list.h>
#include <re_mem.h>
#include <re_mbuf.h>
#include <re_dns.h>
/**
* Encode a DNS character string into a memory buffer
*
* @param mb Memory buffer to encode into
* @param str Character string
*
* @return 0 if success, otherwise errorcode
*/
int dns_cstr_encode(struct mbuf *mb, const char *str)
{
uint8_t len;
int err = 0;
if (!mb || !str)
return EINVAL;
len = (uint8_t)strlen(str);
err |= mbuf_write_u8(mb, len);
err |= mbuf_write_mem(mb, (const uint8_t *)str, len);
return err;
}
/**
* Decode a DNS character string from a memory buffer
*
* @param mb Memory buffer to decode from
* @param str Pointer to allocated character string
*
* @return 0 if success, otherwise errorcode
*/
int dns_cstr_decode(struct mbuf *mb, char **str)
{
uint8_t len;
if (!mb || !str || (mbuf_get_left(mb) < 1))
return EINVAL;
len = mbuf_read_u8(mb);
if (mbuf_get_left(mb) < len)
return EBADMSG;
return mbuf_strdup(mb, str, len);
}