|
|
|
@ -538,7 +538,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
respond(messages::status::ERROR_RESPONSE);
|
|
|
|
|
respond(messages::ERROR_RESPONSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_router.rpc_client()->lookup_ons_hash(
|
|
|
|
@ -548,8 +548,7 @@ namespace llarp
|
|
|
|
|
if (maybe)
|
|
|
|
|
respond(serialize_response({{"NAME", maybe->ciphertext}}));
|
|
|
|
|
else
|
|
|
|
|
respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, FindNameMessage::NOT_FOUND}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, FindNameMessage::NOT_FOUND}}));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -567,7 +566,7 @@ namespace llarp
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
oxenc::bt_dict_consumer btdc{m.body()};
|
|
|
|
|
payload = btdc.require<std::string>(m ? "NAME" : messages::status::STATUS_KEY);
|
|
|
|
|
payload = btdc.require<std::string>(m ? "NAME" : messages::STATUS_KEY);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
@ -614,7 +613,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
respond(messages::status::ERROR_RESPONSE);
|
|
|
|
|
respond(messages::ERROR_RESPONSE);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -645,7 +644,7 @@ namespace llarp
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
respond(serialize_response(
|
|
|
|
|
{{messages::status::STATUS_KEY, FindRouterMessage::RETRY_EXP}, {"TARGET", neighbors}}));
|
|
|
|
|
{{messages::STATUS_KEY, FindRouterMessage::RETRY_EXP}, {"TARGET", neighbors}}));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -685,14 +684,14 @@ namespace llarp
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
respond(serialize_response(
|
|
|
|
|
{{messages::status::STATUS_KEY, FindRouterMessage::RETRY_ITER},
|
|
|
|
|
{{messages::STATUS_KEY, FindRouterMessage::RETRY_ITER},
|
|
|
|
|
{"TARGET", reinterpret_cast<const char*>(target_addr.data())}}));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
respond(serialize_response(
|
|
|
|
|
{{messages::status::STATUS_KEY, FindRouterMessage::RETRY_NEW},
|
|
|
|
|
{{messages::STATUS_KEY, FindRouterMessage::RETRY_NEW},
|
|
|
|
|
{"TARGET", reinterpret_cast<const char*>(closest_rid.data())}}));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -842,7 +841,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
respond(messages::status::ERROR_RESPONSE);
|
|
|
|
|
respond(messages::ERROR_RESPONSE);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -853,15 +852,14 @@ namespace llarp
|
|
|
|
|
if (not service::EncryptedIntroSet::verify(introset, derived_signing_key, sig))
|
|
|
|
|
{
|
|
|
|
|
log::error(link_cat, "Received PublishIntroMessage with invalid introset: {}", introset);
|
|
|
|
|
respond(serialize_response(
|
|
|
|
|
{{messages::status::STATUS_KEY, PublishIntroMessage::INVALID_INTROSET}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, PublishIntroMessage::INVALID_INTROSET}}));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (now + service::MAX_INTROSET_TIME_DELTA > signed_at + path::DEFAULT_LIFETIME)
|
|
|
|
|
{
|
|
|
|
|
log::error(link_cat, "Received PublishIntroMessage with expired introset: {}", introset);
|
|
|
|
|
respond(serialize_response({{messages::status::STATUS_KEY, PublishIntroMessage::EXPIRED}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, PublishIntroMessage::EXPIRED}}));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -871,8 +869,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::error(
|
|
|
|
|
link_cat, "Received PublishIntroMessage but only know {} nodes", closest_rcs.size());
|
|
|
|
|
respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PublishIntroMessage::INSUFFICIENT}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, PublishIntroMessage::INSUFFICIENT}}));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -884,8 +881,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::error(
|
|
|
|
|
link_cat, "Received PublishIntroMessage with invalide relay order: {}", relay_order);
|
|
|
|
|
respond(serialize_response(
|
|
|
|
|
{{messages::status::STATUS_KEY, PublishIntroMessage::INVALID_ORDER}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, PublishIntroMessage::INVALID_ORDER}}));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -902,7 +898,7 @@ namespace llarp
|
|
|
|
|
relay_order);
|
|
|
|
|
|
|
|
|
|
_router.contacts()->services()->PutNode(dht::ISNode{std::move(enc)});
|
|
|
|
|
respond(serialize_response({{messages::status::STATUS_KEY, ""}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, ""}}));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -940,7 +936,7 @@ namespace llarp
|
|
|
|
|
log::info(link_cat, "Received PublishIntroMessage for {} (TXID: {}); we are candidate {}");
|
|
|
|
|
|
|
|
|
|
_router.contacts()->services()->PutNode(dht::ISNode{std::move(enc)});
|
|
|
|
|
respond(serialize_response({{messages::status::STATUS_KEY, ""}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, ""}}));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
log::warning(
|
|
|
|
@ -963,7 +959,7 @@ namespace llarp
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
oxenc::bt_dict_consumer btdc{m.body()};
|
|
|
|
|
payload = btdc.require<std::string>(messages::status::STATUS_KEY);
|
|
|
|
|
payload = btdc.require<std::string>(messages::STATUS_KEY);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
@ -1014,7 +1010,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
respond(messages::status::ERROR_RESPONSE);
|
|
|
|
|
respond(messages::ERROR_RESPONSE);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1026,8 +1022,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::warning(
|
|
|
|
|
link_cat, "Received FindIntroMessage with invalid relay order: {}", relay_order);
|
|
|
|
|
respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, FindIntroMessage::INVALID_ORDER}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, FindIntroMessage::INVALID_ORDER}}));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1037,8 +1032,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::error(
|
|
|
|
|
link_cat, "Received FindIntroMessage but only know {} nodes", closest_rcs.size());
|
|
|
|
|
respond(serialize_response(
|
|
|
|
|
{{messages::status::STATUS_KEY, FindIntroMessage::INSUFFICIENT_NODES}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, FindIntroMessage::INSUFFICIENT_NODES}}));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1076,7 +1070,7 @@ namespace llarp
|
|
|
|
|
log::warning(
|
|
|
|
|
link_cat,
|
|
|
|
|
"Received FindIntroMessage with relayed == false and no local introset entry");
|
|
|
|
|
respond(serialize_response({{messages::status::STATUS_KEY, FindIntroMessage::NOT_FOUND}}));
|
|
|
|
|
respond(serialize_response({{messages::STATUS_KEY, FindIntroMessage::NOT_FOUND}}));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1095,7 +1089,7 @@ namespace llarp
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
oxenc::bt_dict_consumer btdc{m.body()};
|
|
|
|
|
payload = btdc.require<std::string>((m) ? "INTROSET" : messages::status::STATUS_KEY);
|
|
|
|
|
payload = btdc.require<std::string>((m) ? "INTROSET" : messages::STATUS_KEY);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
@ -1122,8 +1116,7 @@ namespace llarp
|
|
|
|
|
if (!_router.path_context().AllowingTransit())
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "got path build request when not permitting transit");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::NO_TRANSIT}}), true);
|
|
|
|
|
m.respond(serialize_response({{messages::STATUS_KEY, PathBuildMessage::NO_TRANSIT}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
try
|
|
|
|
@ -1154,8 +1147,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::info(link_cat, "DH server initialization failed during path build");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}),
|
|
|
|
|
true);
|
|
|
|
|
serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1169,8 +1161,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::error(link_cat, "HMAC failed on path build request");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}),
|
|
|
|
|
true);
|
|
|
|
|
serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!std::equal(
|
|
|
|
@ -1178,8 +1169,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::info(link_cat, "HMAC mismatch on path build request");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}),
|
|
|
|
|
true);
|
|
|
|
|
serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1192,8 +1182,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::info(link_cat, "Decrypt failed on path build request");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}),
|
|
|
|
|
true);
|
|
|
|
|
serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1214,9 +1203,7 @@ namespace llarp
|
|
|
|
|
if (frame.empty())
|
|
|
|
|
{
|
|
|
|
|
log::info(link_cat, "Path build request received invalid frame");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_FRAMES}}),
|
|
|
|
|
true);
|
|
|
|
|
m.respond(serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_FRAMES}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1233,9 +1220,7 @@ namespace llarp
|
|
|
|
|
if (hop_info.txID.IsZero() || hop_info.rxID.IsZero())
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Invalid PathID; PathIDs must be non-zero");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_PATHID}}),
|
|
|
|
|
true);
|
|
|
|
|
m.respond(serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_PATHID}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1244,9 +1229,7 @@ namespace llarp
|
|
|
|
|
if (_router.path_context().HasTransitHop(hop_info))
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Invalid PathID; PathIDs must be unique");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_PATHID}}),
|
|
|
|
|
true);
|
|
|
|
|
m.respond(serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_PATHID}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1254,9 +1237,7 @@ namespace llarp
|
|
|
|
|
hop->pathKey.data(), other_pubkey.data(), _router.pubkey(), inner_nonce.data()))
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "DH failed during path build.");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}),
|
|
|
|
|
true);
|
|
|
|
|
m.respond(serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_CRYPTO}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// generate hash of hop key for nonce mutation
|
|
|
|
@ -1271,8 +1252,7 @@ namespace llarp
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Path build attempt with too long of a lifetime.");
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, PathBuildMessage::BAD_LIFETIME}}),
|
|
|
|
|
true);
|
|
|
|
|
serialize_response({{messages::STATUS_KEY, PathBuildMessage::BAD_LIFETIME}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1284,7 +1264,7 @@ namespace llarp
|
|
|
|
|
hop->terminal_hop = true;
|
|
|
|
|
// we are terminal hop and everything is okay
|
|
|
|
|
_router.path_context().PutTransitHop(hop);
|
|
|
|
|
m.respond(messages::status::OK_RESPONSE, false);
|
|
|
|
|
m.respond(messages::OK_RESPONSE, false);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1316,7 +1296,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
m.respond(messages::status::ERROR_RESPONSE, true);
|
|
|
|
|
m.respond(messages::ERROR_RESPONSE, true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1331,7 +1311,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
m.respond(messages::status::ERROR_RESPONSE, true);
|
|
|
|
|
m.respond(messages::ERROR_RESPONSE, true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1346,7 +1326,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
// m.respond(serialize_response({{messages::status::STATUS_KEY, "EXCEPTION"}}), true);
|
|
|
|
|
// m.respond(serialize_response({{messages::STATUS_KEY, "EXCEPTION"}}), true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1361,7 +1341,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
m.respond(messages::status::ERROR_RESPONSE, true);
|
|
|
|
|
m.respond(messages::ERROR_RESPONSE, true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1376,7 +1356,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
m.respond(messages::status::ERROR_RESPONSE, true);
|
|
|
|
|
m.respond(messages::ERROR_RESPONSE, true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1415,7 +1395,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
m.respond(messages::status::ERROR_RESPONSE, true);
|
|
|
|
|
m.respond(messages::ERROR_RESPONSE, true);
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1484,8 +1464,7 @@ namespace llarp
|
|
|
|
|
(exit_ep->UpdateLocalPath(transit_hop->info.rxID))
|
|
|
|
|
? m.respond(UpdateExitMessage::sign_and_serialize_response(_router.identity(), tx_id))
|
|
|
|
|
: m.respond(
|
|
|
|
|
serialize_response(
|
|
|
|
|
{{messages::status::STATUS_KEY, UpdateExitMessage::UPDATE_FAILED}}),
|
|
|
|
|
serialize_response({{messages::STATUS_KEY, UpdateExitMessage::UPDATE_FAILED}}),
|
|
|
|
|
true);
|
|
|
|
|
}
|
|
|
|
|
// If we fail to verify the message, no-op
|
|
|
|
@ -1494,7 +1473,7 @@ namespace llarp
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
m.respond(messages::status::ERROR_RESPONSE, true);
|
|
|
|
|
m.respond(messages::ERROR_RESPONSE, true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1574,13 +1553,12 @@ namespace llarp
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m.respond(
|
|
|
|
|
serialize_response({{messages::status::STATUS_KEY, CloseExitMessage::UPDATE_FAILED}}),
|
|
|
|
|
true);
|
|
|
|
|
serialize_response({{messages::STATUS_KEY, CloseExitMessage::UPDATE_FAILED}}), true);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception& e)
|
|
|
|
|
{
|
|
|
|
|
log::warning(link_cat, "Exception: {}", e.what());
|
|
|
|
|
m.respond(messages::status::ERROR_RESPONSE, true);
|
|
|
|
|
m.respond(messages::ERROR_RESPONSE, true);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|