2 #include <ail/string.hpp>
6 //#include <boost/format.hpp>
7 #include <boost/foreach.hpp>
11 void extract_data(boost::asio::streambuf
& stream_buffer
, std::string
& buffer
)
13 std::size_t size
= stream_buffer
.in_avail();
14 char * char_buffer
= new char[size
];
15 stream_buffer
.sgetn(char_buffer
, size
);
16 buffer
.append(char_buffer
, size
);
20 std::string
extract_data(boost::asio::streambuf
& stream_buffer
)
23 extract_data(stream_buffer
, output
);
27 std::string
convert_ipv4(ulong input
)
29 std::stringstream output
;
31 for(long i
= 3; i
>= 0; i
--)
37 output
<< ((input
>> (i
* 8)) & 0xff);
42 bool convert_ipv4(std::string
const & input
, ulong
& output
)
44 std::size_t const token_count
= 4;
46 string_vector tokens
= tokenise(input
, ".");
47 if(tokens
.size() != token_count
)
52 for(std::size_t i
= 0; i
< token_count
; i
++)
55 if(!string_to_number
<ulong
>(tokens
[i
], value
))
57 if(value
< 0 || value
> 0xff)
66 std::string
get_ipv6_unit(std::string
const & input
)
68 if(input
[0] == 0 && input
[1] == 0)
70 std::stringstream output
;
71 BOOST_FOREACH(char i
, input
)
76 output
<< static_cast<ulong
>(static_cast<unsigned char>(i
));
81 std::string
convert_ipv6(std::string
const & input
)
83 if(input
.size() != 16)
84 throw exception("Invalid IPv6 address input");
87 for(std::size_t i
= 0; i
< input
.size(); i
+= 4)
89 std::string unit
= input
.substr(i
, 4);
94 output
+= get_ipv6_unit(unit
);
99 ulong
convert_ipv4(std::string
const & input
)
102 if(!convert_ipv4(input
, output
))
103 throw exception("Failed to convert IPv4 address");