1/* 2 * Copyright (C) 2004-2008 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 2000, 2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 * PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18/* $Id: hex.h,v 1.13 2008/09/25 04:02:39 tbox Exp $ */ 19 20#ifndef ISC_HEX_H 21#define ISC_HEX_H 1 22 23/*! \file isc/hex.h */ 24 25#include <isc/lang.h> 26#include <isc/types.h> 27 28ISC_LANG_BEGINDECLS 29 30/*** 31 *** Functions 32 ***/ 33 34isc_result_t 35isc_hex_totext(isc_region_t *source, int wordlength, 36 const char *wordbreak, isc_buffer_t *target); 37/*!< 38 * \brief Convert data into hex encoded text. 39 * 40 * Notes: 41 *\li The hex encoded text in 'target' will be divided into 42 * words of at most 'wordlength' characters, separated by 43 * the 'wordbreak' string. No parentheses will surround 44 * the text. 45 * 46 * Requires: 47 *\li 'source' is a region containing binary data 48 *\li 'target' is a text buffer containing available space 49 *\li 'wordbreak' points to a null-terminated string of 50 * zero or more whitespace characters 51 * 52 * Ensures: 53 *\li target will contain the hex encoded version of the data 54 * in source. The 'used' pointer in target will be advanced as 55 * necessary. 56 */ 57 58isc_result_t 59isc_hex_decodestring(const char *cstr, isc_buffer_t *target); 60/*!< 61 * \brief Decode a null-terminated hex string. 62 * 63 * Requires: 64 *\li 'cstr' is non-null. 65 *\li 'target' is a valid buffer. 66 * 67 * Returns: 68 *\li #ISC_R_SUCCESS -- the entire decoded representation of 'cstring' 69 * fit in 'target'. 70 *\li #ISC_R_BADHEX -- 'cstr' is not a valid hex encoding. 71 * 72 * Other error returns are any possible error code from: 73 * isc_lex_create(), 74 * isc_lex_openbuffer(), 75 * isc_hex_tobuffer(). 76 */ 77 78isc_result_t 79isc_hex_tobuffer(isc_lex_t *lexer, isc_buffer_t *target, int length); 80/*!< 81 * \brief Convert hex encoded text from a lexer context into data. 82 * 83 * Requires: 84 *\li 'lex' is a valid lexer context 85 *\li 'target' is a buffer containing binary data 86 *\li 'length' is an integer 87 * 88 * Ensures: 89 *\li target will contain the data represented by the hex encoded 90 * string parsed by the lexer. No more than length bytes will be read, 91 * if length is positive. The 'used' pointer in target will be 92 * advanced as necessary. 93 */ 94 95 96ISC_LANG_ENDDECLS 97 98#endif /* ISC_HEX_H */ 99