# # # patch "keys.cc" # from [49e561d782572c02d86f9592e640d67b46cb9948] # to [0453371d883627c72f93b9817266b1a9e5981137] # # patch "netsync.cc" # from [a6566f28082593258f45405edae952172fe33370] # to [138dcff57de301ce1f7cd580797f550a0ec50e69] # # patch "network/connection_info.cc" # from [ea3efb9cd7ce7bfcf01def5b587b6e13eb95c14c] # to [625d8425fc442994c6bab5805824c6c602431d39] # # patch "uri.cc" # from [95e2f31ced2b7db78f6eb635a789505bf3d962fe] # to [cde1447e4a6c84a7d6397471930847524754283a] # # patch "uri.hh" # from [642fc516a8ffd9fe2dd6dafac3405a514a1bc2c5] # to [6dfda3984ad51731a5fb5005f74fb4eca038f385] # ============================================================ --- keys.cc 49e561d782572c02d86f9592e640d67b46cb9948 +++ keys.cc 0453371d883627c72f93b9817266b1a9e5981137 @@ -185,7 +185,7 @@ cache_netsync_key(options const & opts, found_key = true; } } - else if (lua.hook_get_netsync_key(utf8(info->client.get_uri().resource, origin::user), + else if (lua.hook_get_netsync_key(utf8(info->client.get_uri().resource(), origin::user), info->client.get_include_pattern(), info->client.get_exclude_pattern(), keys, project, key)) ============================================================ --- netsync.cc a6566f28082593258f45405edae952172fe33370 +++ netsync.cc 138dcff57de301ce1f7cd580797f550a0ec50e69 @@ -107,7 +107,7 @@ call_server(app_state & app, Netxx::Timeout timeout(static_cast(constants::netsync_timeout_seconds)), instant(0,1); - P(F("connecting to %s") % info->client.get_uri().resource); + P(F("connecting to %s") % info->client.get_uri().resource()); shared_ptr server = build_stream_to_server(app.opts, app.lua, info, timeout); @@ -119,7 +119,7 @@ call_server(app_state & app, shared_ptr sess(new session(app, project, keys, client_voice, - info->client.get_uri().resource, server)); + info->client.get_uri().resource(), server)); shared_ptr wrapped; switch (info->client.get_connection_type()) { @@ -211,7 +211,7 @@ session_from_server_sync_item(app_state try { - P(F("connecting to %s") % info->client.get_uri().resource); + P(F("connecting to %s") % info->client.get_uri().resource()); shared_ptr server = build_stream_to_server(app.opts, app.lua, info, Netxx::Timeout(constants::netsync_timeout_seconds)); @@ -224,7 +224,7 @@ session_from_server_sync_item(app_state shared_ptr sess(new session(app, project, keys, client_voice, - info->client.get_uri().resource, server)); + info->client.get_uri().resource(), server)); shared_ptr wrapped(new netsync_session(sess.get(), app.opts, app.lua, project, ============================================================ --- network/connection_info.cc ea3efb9cd7ce7bfcf01def5b587b6e13eb95c14c +++ network/connection_info.cc 625d8425fc442994c6bab5805824c6c602431d39 @@ -103,17 +103,17 @@ netsync_connection_info::Client::~Client var_name("default-exclude-pattern")); var_key server_include(var_domain("server-include"), - var_name(uri.resource, origin::user)); + var_name(uri.resource(), origin::user)); var_key server_exclude(var_domain("server-exclude"), - var_name(uri.resource, origin::user)); + var_name(uri.resource(), origin::user)); // Maybe set the default values. if (!db.var_exists(default_server_key) || opts.set_default) { - L(FL("setting default server to %s") % uri.resource); + L(FL("setting default server to %s") % uri.resource()); db.set_var(default_server_key, - var_value(uri.resource, origin::user)); + var_value(uri.resource(), origin::user)); } if (!db.var_exists(default_include_pattern_key) || opts.set_default) @@ -133,7 +133,7 @@ netsync_connection_info::Client::~Client || opts.set_default) { L(FL("setting default include pattern for server '%s' to '%s'") - % uri.resource % include_pattern); + % uri.resource() % include_pattern); db.set_var(server_include, typecast_vocab(include_pattern)); } @@ -141,7 +141,7 @@ netsync_connection_info::Client::~Client || opts.set_default) { L(FL("setting default exclude pattern for server '%s' to '%s'") - % uri.resource % exclude_pattern); + % uri.resource() % exclude_pattern); db.set_var(server_exclude, typecast_vocab(exclude_pattern)); } @@ -247,10 +247,13 @@ netsync_connection_info::Client::set_raw { parse_uri(raw_uri, uri, origin::user); + if (uri.scheme.empty()) + uri.scheme = "mtn"; + var_key server_include(var_domain("server-include"), - var_name(uri.resource, origin::user)); + var_name(uri.resource(), origin::user)); var_key server_exclude(var_domain("server-exclude"), - var_name(uri.resource, origin::user)); + var_name(uri.resource(), origin::user)); if (db.var_exists(server_include)) { @@ -306,8 +309,8 @@ netsync_connection_info::Client::ensure_ void netsync_connection_info::Client::ensure_completeness() const { - E(!uri.resource.empty(), origin::user, - F("connection resource is empty and no default value could be loaded")); + E(!uri.host.empty() || !uri.path.empty(), origin::user, + F("connection host / path is empty and no default value could be loaded")); E(conn_type != netsync_connection || !include_pattern().empty(), origin::user, F("branch pattern is empty and no default value could be loaded")); @@ -455,7 +458,7 @@ netsync_connection_info::setup_from_serv info.reset(new netsync_connection_info(db, opts)); info->client.conn_type = type; - info->client.set_raw_uri("mtn://" + host()); + info->client.set_raw_uri(host()); info->client.set_include_exclude_pattern(includes, excludes); info->client.ensure_completeness(); ============================================================ --- uri.cc 95e2f31ced2b7db78f6eb635a789505bf3d962fe +++ uri.cc cde1447e4a6c84a7d6397471930847524754283a @@ -102,18 +102,6 @@ parse_uri(string const & in, uri_t & uri { uri.clear(); - { - size_t resource_end = in.find_first_of("?#"); - if (resource_end == string::npos) - { - uri.resource = in; - } - else - { - uri.resource.assign(in, 0, resource_end); - } - } - if (try_parse_bare_authority(in, uri, made_from)) { return; ============================================================ --- uri.hh 642fc516a8ffd9fe2dd6dafac3405a514a1bc2c5 +++ uri.hh 6dfda3984ad51731a5fb5005f74fb4eca038f385 @@ -22,9 +22,6 @@ struct uri_t std::string query; std::string fragment; - // everything before the query/fragment - std::string resource; - void clear() { scheme.clear(); @@ -34,8 +31,22 @@ struct uri_t path.clear(); query.clear(); fragment.clear(); + } - resource.clear(); + std::string resource() const + { + std::string res; + if (!scheme.empty()) + res += scheme + "://"; + if (!user.empty()) + res += user + "@"; + if (!host.empty()) + res += host; + if (!port.empty()) + res += ":" + port; + if (!path.empty()) + res += path; + return res; } };