From ac43d7b96edf1164301cee159fecc26054b70c17 Mon Sep 17 00:00:00 2001 From: Lubos Slovak <lubos.slovak@nic.cz> Date: Fri, 5 Nov 2010 13:14:06 +0100 Subject: [PATCH] Comments to dname API + minor fix. Fixed creating dname struct from wire format (was not copying). refs #5, #88 --- src/dnslib/dname.c | 2 +- src/dnslib/dname.h | 65 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 56 insertions(+), 11 deletions(-) diff --git a/src/dnslib/dname.c b/src/dnslib/dname.c index fc42d4c6b..3eab23b3e 100644 --- a/src/dnslib/dname.c +++ b/src/dnslib/dname.c @@ -105,7 +105,7 @@ dnslib_dname_t *dnslib_dname_new_from_wire( uint8_t *name, uint size, return NULL; } - dname->name = name; + memcpy(dname->name, name, size); dname->size = size; dname->node = node; diff --git a/src/dnslib/dname.h b/src/dnslib/dname.h index f57913451..0902dc766 100644 --- a/src/dnslib/dname.h +++ b/src/dnslib/dname.h @@ -6,11 +6,21 @@ #include "node.h" /*----------------------------------------------------------------------------*/ - +/*! + * \brief Structure for representing a domain name. + * + * Stores the domain name in wire format. + * + * \todo Consider restricting to FQDN only (see dnslib_dname_new_from_str()). + */ struct dnslib_dname { - uint8_t *name; // wire format of a domain name; always ends with 0!! - uint size; // is this needed? every dname should end with \0 or pointer - dnslib_node_t *node; // NULL if not in zone + uint8_t *name; /*!< Wire format of the domain name. */ + /*! + * \brief Size of the domain name in octets. + * \todo Is this needed? Every dname should end with \0 or pointer. + */ + uint size; + dnslib_node_t *node; /*!< Zone node the domain name belongs to. */ }; typedef struct dname dnslib_dname_t; @@ -18,32 +28,67 @@ typedef struct dname dnslib_dname_t; /*----------------------------------------------------------------------------*/ /*! + * \brief Creates empty dname structure (no name, no owner node). + * + * \return Newly allocated and initialized dname structure. * \todo Possibly useless. */ dnslib_dname_t *dnslib_dname_new(); /*! - * \note \a name must be 0-terminated. - * \note \a node may be NULL. + * \brief Creates a dname structure from domain name given in presentation + * format. + * + * \param name Domain name in presentation format (labels separated by dots). + * \param size Size of the domain name (count of characters with all dots). + * \param node Zone node the domain name belongs to. Set to NULL if not + * applicable. + * + * The resulting domain name is stored in wire format and ALWAYS ENDS WITH 0, + * e.g. is a FQDN even if the given domain name was not. + * + * \return Newly allocated and initialized dname structure representing the + * given domain name. + * + * \todo Check if the FQDN issue is OK. */ dnslib_dname_t *dnslib_dname_new_from_str( char *name, uint size, dnslib_node_t *node ); /*! - * \note Copies the name. + * \brief Creates a dname structure from domain name given in wire format. + * + * \param name Domain name in wire format. + * \param size Size of the domain name in octets. + * + * \return Newly allocated and initialized dname structure representing the + * given domain name. + * + * \note The name is copied into the structure. + * \note If the given name is not a FQDN, the result will be neither. This + * does not correspond to the behaviour of dnslib_dname_new_from_str(). + * \todo Address the FQDN issue. */ dnslib_dname_t *dnslib_dname_new_from_wire( uint8_t *name, uint size ); /*! - * \note Allocates new memory, remember to free it. Returns 0-terminated string. + * \brief Converts the given domain name to string representation. + * + * \param dname Domain name to be converted. + * + * \return 0-terminated string representing the given domain name in + * presentation format. + * \note Allocates new memory, remember to free it. */ char *dnslib_dname_to_str( dnslib_dname_t *dname ); /*! + * \brief Destroys the given domain name. + * + * \param dname Domain name to be destroyed. + * * \note Frees also the data within the struct. */ void dnslib_dname_free( dnslib_dname *dname ); - - #endif /* _CUTEDNS_DNAME_H */ -- GitLab