Try to fix the lambda formatting issue
clang-tidy has a setting, LambdaBodyIndentation, which it says:
"For callback-heavy code, it may improve readability to have the
signature indented two levels and to use OuterScope."
bmcweb is very callback heavy code. Try to enable it and see if that
improves things. There are many cases where the length of a lambda call
will change, and reindent the entire lambda function. This is really
bad for code reviews, as it's difficult to see the lines changed. This
commit should resolve it. This does have the downside of reindenting a
lot of functions, which is unfortunate, but probably worth it in the
long run.
All changes except for the .clang-format file were made by the robot.
Tested: Code compiles, whitespace changes only.
Signed-off-by: Ed Tanous <edtanous@google.com>
Change-Id: Ib4aa2f1391fada981febd25b67dcdb9143827f43
diff --git a/include/nbd_proxy.hpp b/include/nbd_proxy.hpp
index 97c8b57..4431662 100644
--- a/include/nbd_proxy.hpp
+++ b/include/nbd_proxy.hpp
@@ -67,33 +67,33 @@
acceptor.async_accept(
[this, self(shared_from_this())](boost::system::error_code ec,
stream_protocol::socket socket) {
- if (ec)
- {
- BMCWEB_LOG_ERROR << "UNIX socket: async_accept error = "
- << ec.message();
- return;
- }
- if (peerSocket)
- {
- // Something is wrong - socket shouldn't be acquired at this
- // point
- BMCWEB_LOG_ERROR
- << "Failed to open connection - socket already used";
- return;
- }
+ if (ec)
+ {
+ BMCWEB_LOG_ERROR << "UNIX socket: async_accept error = "
+ << ec.message();
+ return;
+ }
+ if (peerSocket)
+ {
+ // Something is wrong - socket shouldn't be acquired at this
+ // point
+ BMCWEB_LOG_ERROR
+ << "Failed to open connection - socket already used";
+ return;
+ }
- BMCWEB_LOG_DEBUG << "Connection opened";
- peerSocket = std::move(socket);
- doRead();
+ BMCWEB_LOG_DEBUG << "Connection opened";
+ peerSocket = std::move(socket);
+ doRead();
- // Trigger Write if any data was sent from server
- // Initially this is negotiation chunk
- doWrite();
- });
+ // Trigger Write if any data was sent from server
+ // Initially this is negotiation chunk
+ doWrite();
+ });
- auto mountHandler = [this, self(shared_from_this())](
- const boost::system::error_code ec,
- const bool) {
+ auto mountHandler =
+ [this, self(shared_from_this())](const boost::system::error_code ec,
+ const bool) {
if (ec)
{
BMCWEB_LOG_ERROR << "DBus error: cannot call mount method = "
@@ -158,27 +158,27 @@
ux2wsBuf.prepare(nbdBufferSize),
[this, self(shared_from_this())](boost::system::error_code ec,
std::size_t bytesRead) {
- if (ec)
- {
- BMCWEB_LOG_ERROR << "UNIX socket: async_read_some error = "
- << ec.message();
- // UNIX socket has been closed by peer, best we can do is to
- // break all connections
- close();
- return;
- }
+ if (ec)
+ {
+ BMCWEB_LOG_ERROR << "UNIX socket: async_read_some error = "
+ << ec.message();
+ // UNIX socket has been closed by peer, best we can do is to
+ // break all connections
+ close();
+ return;
+ }
- // Fetch data from UNIX socket
+ // Fetch data from UNIX socket
- ux2wsBuf.commit(bytesRead);
+ ux2wsBuf.commit(bytesRead);
- // Paste it to WebSocket as binary
- connection.sendBinary(
- boost::beast::buffers_to_string(ux2wsBuf.data()));
- ux2wsBuf.consume(bytesRead);
+ // Paste it to WebSocket as binary
+ connection.sendBinary(
+ boost::beast::buffers_to_string(ux2wsBuf.data()));
+ ux2wsBuf.consume(bytesRead);
- // Allow further reads
- doRead();
+ // Allow further reads
+ doRead();
});
}
@@ -209,19 +209,19 @@
*peerSocket, ws2uxBuf.data(),
[this, self(shared_from_this())](boost::system::error_code ec,
std::size_t bytesWritten) {
- ws2uxBuf.consume(bytesWritten);
- uxWriteInProgress = false;
- if (ec)
- {
- BMCWEB_LOG_ERROR << "UNIX: async_write error = "
- << ec.message();
- return;
- }
- // Retrigger doWrite if there is something in buffer
- if (ws2uxBuf.size() > 0)
- {
- doWrite();
- }
+ ws2uxBuf.consume(bytesWritten);
+ uxWriteInProgress = false;
+ if (ec)
+ {
+ BMCWEB_LOG_ERROR << "UNIX: async_write error = "
+ << ec.message();
+ return;
+ }
+ // Retrigger doWrite if there is something in buffer
+ if (ws2uxBuf.size() > 0)
+ {
+ doWrite();
+ }
});
}
@@ -258,143 +258,138 @@
.onopen([](crow::websocket::Connection& conn) {
BMCWEB_LOG_DEBUG << "nbd-proxy.onopen(" << &conn << ")";
- auto getUserInfoHandler = [&conn](
- const boost::system::error_code ec,
- const dbus::utility::
- DBusPropertiesMap& userInfo) {
+ auto getUserInfoHandler =
+ [&conn](const boost::system::error_code ec,
+ const dbus::utility::DBusPropertiesMap& userInfo) {
+ if (ec)
+ {
+ BMCWEB_LOG_ERROR << "GetUserInfo failed...";
+ conn.close("Failed to get user information");
+ return;
+ }
+
+ const std::string* userRolePtr = nullptr;
+ auto userInfoIter = std::find_if(userInfo.begin(), userInfo.end(),
+ [](const auto& p) {
+ return p.first == "UserPrivilege";
+ });
+ if (userInfoIter != userInfo.end())
+ {
+ userRolePtr = std::get_if<std::string>(&userInfoIter->second);
+ }
+
+ std::string userRole{};
+ if (userRolePtr != nullptr)
+ {
+ userRole = *userRolePtr;
+ BMCWEB_LOG_DEBUG << "userName = " << conn.getUserName()
+ << " userRole = " << *userRolePtr;
+ }
+
+ // Get the user privileges from the role
+ ::redfish::Privileges userPrivileges =
+ ::redfish::getUserPrivileges(userRole);
+
+ const ::redfish::Privileges requiredPrivileges{
+ requiredPrivilegeString};
+
+ if (!userPrivileges.isSupersetOf(requiredPrivileges))
+ {
+ BMCWEB_LOG_DEBUG << "User " << conn.getUserName()
+ << " not authorized for nbd connection";
+ conn.close("Unathourized access");
+ return;
+ }
+
+ auto openHandler =
+ [&conn](const boost::system::error_code ec,
+ const dbus::utility::ManagedObjectType& objects) {
+ const std::string* socketValue = nullptr;
+ const std::string* endpointValue = nullptr;
+ const std::string* endpointObjectPath = nullptr;
+
if (ec)
{
- BMCWEB_LOG_ERROR << "GetUserInfo failed...";
- conn.close("Failed to get user information");
+ BMCWEB_LOG_ERROR << "DBus error: " << ec.message();
+ conn.close("Failed to create mount point");
return;
}
- const std::string* userRolePtr = nullptr;
- auto userInfoIter = std::find_if(
- userInfo.begin(), userInfo.end(),
- [](const auto& p) { return p.first == "UserPrivilege"; });
- if (userInfoIter != userInfo.end())
+ for (const auto& [objectPath, interfaces] : objects)
{
- userRolePtr =
- std::get_if<std::string>(&userInfoIter->second);
+ for (const auto& [interface, properties] : interfaces)
+ {
+ if (interface !=
+ "xyz.openbmc_project.VirtualMedia.MountPoint")
+ {
+ continue;
+ }
+
+ for (const auto& [name, value] : properties)
+ {
+ if (name == "EndpointId")
+ {
+ endpointValue =
+ std::get_if<std::string>(&value);
+
+ if (endpointValue == nullptr)
+ {
+ BMCWEB_LOG_ERROR
+ << "EndpointId property value is null";
+ }
+ }
+ if (name == "Socket")
+ {
+ socketValue = std::get_if<std::string>(&value);
+ if (socketValue == nullptr)
+ {
+ BMCWEB_LOG_ERROR
+ << "Socket property value is null";
+ }
+ }
+ }
+ }
+
+ if ((endpointValue != nullptr) &&
+ (socketValue != nullptr) &&
+ *endpointValue == conn.req.target())
+ {
+ endpointObjectPath = &objectPath.str;
+ break;
+ }
}
- std::string userRole{};
- if (userRolePtr != nullptr)
+ if (objects.empty() || endpointObjectPath == nullptr)
{
- userRole = *userRolePtr;
- BMCWEB_LOG_DEBUG << "userName = " << conn.getUserName()
- << " userRole = " << *userRolePtr;
- }
-
- // Get the user privileges from the role
- ::redfish::Privileges userPrivileges =
- ::redfish::getUserPrivileges(userRole);
-
- const ::redfish::Privileges requiredPrivileges{
- requiredPrivilegeString};
-
- if (!userPrivileges.isSupersetOf(requiredPrivileges))
- {
- BMCWEB_LOG_DEBUG << "User " << conn.getUserName()
- << " not authorized for nbd connection";
- conn.close("Unathourized access");
+ BMCWEB_LOG_ERROR << "Cannot find requested EndpointId";
+ conn.close("Failed to match EndpointId");
return;
}
- auto openHandler = [&conn](
- const boost::system::error_code ec,
- const dbus::utility::ManagedObjectType&
- objects) {
- const std::string* socketValue = nullptr;
- const std::string* endpointValue = nullptr;
- const std::string* endpointObjectPath = nullptr;
-
- if (ec)
+ for (const auto& session : sessions)
+ {
+ if (session.second->getEndpointId() == conn.req.target())
{
- BMCWEB_LOG_ERROR << "DBus error: " << ec.message();
- conn.close("Failed to create mount point");
+ BMCWEB_LOG_ERROR
+ << "Cannot open new connection - socket is in use";
+ conn.close("Slot is in use");
return;
}
+ }
- for (const auto& [objectPath, interfaces] : objects)
- {
- for (const auto& [interface, properties] : interfaces)
- {
- if (interface !=
- "xyz.openbmc_project.VirtualMedia.MountPoint")
- {
- continue;
- }
+ // If the socket file exists (i.e. after bmcweb crash),
+ // we cannot reuse it.
+ std::remove((*socketValue).c_str());
- for (const auto& [name, value] : properties)
- {
- if (name == "EndpointId")
- {
- endpointValue =
- std::get_if<std::string>(&value);
+ sessions[&conn] = std::make_shared<NbdProxyServer>(
+ conn, *socketValue, *endpointValue, *endpointObjectPath);
- if (endpointValue == nullptr)
- {
- BMCWEB_LOG_ERROR
- << "EndpointId property value is null";
- }
- }
- if (name == "Socket")
- {
- socketValue =
- std::get_if<std::string>(&value);
- if (socketValue == nullptr)
- {
- BMCWEB_LOG_ERROR
- << "Socket property value is null";
- }
- }
- }
- }
-
- if ((endpointValue != nullptr) &&
- (socketValue != nullptr) &&
- *endpointValue == conn.req.target())
- {
- endpointObjectPath = &objectPath.str;
- break;
- }
- }
-
- if (objects.empty() || endpointObjectPath == nullptr)
- {
- BMCWEB_LOG_ERROR << "Cannot find requested EndpointId";
- conn.close("Failed to match EndpointId");
- return;
- }
-
- for (const auto& session : sessions)
- {
- if (session.second->getEndpointId() ==
- conn.req.target())
- {
- BMCWEB_LOG_ERROR
- << "Cannot open new connection - socket is in use";
- conn.close("Slot is in use");
- return;
- }
- }
-
- // If the socket file exists (i.e. after bmcweb crash),
- // we cannot reuse it.
- std::remove((*socketValue).c_str());
-
- sessions[&conn] = std::make_shared<NbdProxyServer>(
- conn, *socketValue, *endpointValue,
- *endpointObjectPath);
-
- sessions[&conn]->run();
- };
- crow::connections::systemBus->async_method_call(
- std::move(openHandler), "xyz.openbmc_project.VirtualMedia",
- "/xyz/openbmc_project/VirtualMedia",
- "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
+ sessions[&conn]->run();
+ };
+ crow::connections::systemBus->async_method_call(
+ std::move(openHandler), "xyz.openbmc_project.VirtualMedia",
+ "/xyz/openbmc_project/VirtualMedia",
+ "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
};
crow::connections::systemBus->async_method_call(
@@ -405,18 +400,17 @@
})
.onclose(
[](crow::websocket::Connection& conn, const std::string& reason) {
- BMCWEB_LOG_DEBUG << "nbd-proxy.onclose(reason = '" << reason
- << "')";
- auto session = sessions.find(&conn);
- if (session == sessions.end())
- {
- BMCWEB_LOG_DEBUG << "No session to close";
- return;
- }
- session->second->close();
- // Remove reference to session in global map
- sessions.erase(session);
- })
+ BMCWEB_LOG_DEBUG << "nbd-proxy.onclose(reason = '" << reason << "')";
+ auto session = sessions.find(&conn);
+ if (session == sessions.end())
+ {
+ BMCWEB_LOG_DEBUG << "No session to close";
+ return;
+ }
+ session->second->close();
+ // Remove reference to session in global map
+ sessions.erase(session);
+ })
.onmessage([](crow::websocket::Connection& conn,
const std::string& data, bool) {
BMCWEB_LOG_DEBUG << "nbd-proxy.onmessage(len = " << data.length()