fixes url fragment parsing and adds url fragment and query parsing unit tests fixes #23

This commit is contained in:
Peter Thorson
2011-10-01 09:22:35 -05:00
parent 37396372c3
commit d40887c701
3 changed files with 21 additions and 5 deletions

View File

@@ -136,11 +136,9 @@ std::string lookup_ws_close_status_string(uint16_t code) {
bool websocketpp::ws_uri::parse(const std::string& uri) {
boost::cmatch what;
static const boost::regex expression("(ws|wss)://([^/:\\[]+|\\[[0-9:]+\\])(:\\d{1,5})?(/.*)?");
static const boost::regex expression("(ws|wss)://([^/:\\[]+|\\[[0-9:]+\\])(:\\d{1,5})?(/[^#]*)?");
// TODO: finish section 3 conformance:
// - forbid # character (fragment is meaningless to websocket
// - maybe split out query portion into path/query?
// TODO: should this split resource into path/query?
if (boost::regex_match(uri.c_str(), what, expression)) {
if (what[1] == "wss") {

View File

@@ -54,7 +54,6 @@ struct ws_uri {
std::string host;
uint16_t port;
std::string resource;
std::string query;
};
}

View File

@@ -145,3 +145,22 @@ BOOST_AUTO_TEST_CASE( uri_invalid_gt_16_bit_port ) {
BOOST_CHECK( uri.parse("wss:/localhost:70000/chat") == false);
}
// Invalid URI includes uri fragment
BOOST_AUTO_TEST_CASE( uri_invalid_fragment ) {
websocketpp::ws_uri uri;
BOOST_CHECK( uri.parse("wss:/localhost:70000/chat#foo") == false);
}
// Valid URI complicated resource path with query
BOOST_AUTO_TEST_CASE( uri_valid_4 ) {
websocketpp::ws_uri uri;
BOOST_CHECK( uri.parse("wss://localhost:9000/chat/foo/bar?foo=bar") == true);
BOOST_CHECK( uri.secure == true );
BOOST_CHECK( uri.host == "localhost");
BOOST_CHECK( uri.port == 9000 );
BOOST_CHECK( uri.resource == "/chat/foo/bar?foo=bar" );
}