md5.cc test-base64_cc.cc test-iputils_hh.cc test-dns_random_hh.cc aes/dns_random.cc \
aes/aescpp.h \
aes/aescrypt.c aes/aes.h aes/aeskey.c aes/aes_modes.c aes/aesopt.h \
- aes/aestab.c aes/aestab.h aes/brg_endian.h aes/brg_types.h
+ aes/aestab.c aes/aestab.h aes/brg_endian.h aes/brg_types.h test-rcpgenerator_cc.cc
testrunner_LDFLAGS= @DYNLINKFLAGS@ @THREADFLAGS@ $(BOOST_UNIT_TEST_FRAMEWORK_LDFLAGS)
testrunner_LDADD= ext/polarssl-1.1.2/library/libpolarssl.a $(BOOST_UNIT_TEST_FRAMEWORK_LIBS)
void RecordTextReader::xfrIP6(std::string &val)
{
- char addrbuf[40];
struct in6_addr tmpbuf;
skipSpaces();
- if(!isxdigit(d_string.at(d_pos)))
- throw RecordTextException("while parsing IPv6 address, expected xdigits at position "+lexical_cast<string>(d_pos)+" in '"+d_string+"'");
size_t len;
// lookup end of value
- for(len=0; len < sizeof(addrbuf) && d_pos+len < d_string.length() && (isxdigit(d_string.at(d_pos+len)) || d_string.at(d_pos+len) == ':');len++);
+ for(len=0;
+ d_pos+len < d_string.length() && (isxdigit(d_string.at(d_pos+len)) || d_string.at(d_pos+len) == ':');
+ len++);
- // end of value is here, try parse as IPv6
- d_string.copy(addrbuf, len, d_pos);
+ if(!len)
+ throw RecordTextException("while parsing IPv6 address, expected xdigits at position "+lexical_cast<string>(d_pos)+" in '"+d_string+"'");
- if (inet_pton(AF_INET6, addrbuf, &tmpbuf) != 1) {
- throw RecordTextException("while parsing IPv6 address: '" + std::string(addrbuf) + "' is invalid");
+ // end of value is here, try parse as IPv6
+ string address=d_string.substr(d_pos, len);
+
+ if (inet_pton(AF_INET6, address.c_str(), &tmpbuf) != 1) {
+ throw RecordTextException("while parsing IPv6 address: '" + address + "' is invalid");
}
val = std::string((char*)tmpbuf.s6_addr, 16);
--- /dev/null
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_NO_MAIN
+
+#include <boost/test/unit_test.hpp>
+#include "rcpgenerator.hh"
+#include "misc.hh"
+#include <utility>
+
+using std::string;
+
+BOOST_AUTO_TEST_SUITE(rcp_generator_cc)
+
+BOOST_AUTO_TEST_CASE(test_xfrIP6) {
+ RecordTextReader rtr("::1");
+ string rawIPv6;
+ rtr.xfrIP6(rawIPv6);
+ string loopback6;
+ loopback6.append(15, 0);
+ loopback6.append(1,1);
+ BOOST_CHECK_EQUAL(makeHexDump(rawIPv6), makeHexDump(loopback6));
+
+ RecordTextReader rtr2("2a01:4f8:d12:1880::5");
+ rtr2.xfrIP6(rawIPv6);
+ string ip6("\x2a\x01\x04\xf8\x0d\x12\x18\x80\x00\x00\x00\x00\x00\x00\x00\x05", 16);
+ BOOST_CHECK_EQUAL(makeHexDump(rawIPv6), makeHexDump(ip6));
+
+
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+