diff --git a/http/http_connection.h b/http/http_connection.h
index b07459d..3459d55 100644
--- a/http/http_connection.h
+++ b/http/http_connection.h
@@ -74,11 +74,11 @@
         req.emplace(parser->get());
 
 #ifdef BMCWEB_ENABLE_MUTUAL_TLS_AUTHENTICATION
-        auto ca_available = !std::filesystem::is_empty(
+        auto caAvailable = !std::filesystem::is_empty(
             std::filesystem::path(ensuressl::trustStorePath));
-        if (ca_available && persistent_data::SessionStore::getInstance()
-                                .getAuthMethodsConfig()
-                                .tls)
+        if (caAvailable && persistent_data::SessionStore::getInstance()
+                               .getAuthMethodsConfig()
+                               .tls)
         {
             adaptor.set_verify_mode(boost::asio::ssl::verify_peer);
             SSL_set_session_id_context(
diff --git a/http/routing.h b/http/routing.h
index 1af1b2b..7b9086a 100644
--- a/http/routing.h
+++ b/http/routing.h
@@ -1059,10 +1059,10 @@
         {
             return;
         }
-        for (uint32_t method = 0, method_bit = 1; method < maxHttpVerbCount;
-             method++, method_bit <<= 1)
+        for (uint32_t method = 0, methodBit = 1; method < maxHttpVerbCount;
+             method++, methodBit <<= 1)
         {
-            if (ruleObject->methodsBitfield & method_bit)
+            if (ruleObject->methodsBitfield & methodBit)
             {
                 perMethods[method].rules.emplace_back(ruleObject);
                 perMethods[method].trie.add(
diff --git a/http/utility.h b/http/utility.h
index ec0a889..862f1db 100644
--- a/http/utility.h
+++ b/http/utility.h
@@ -315,12 +315,12 @@
 {
     template <typename F1, typename... Args1,
               typename = decltype(std::declval<F1>()(std::declval<Args1>()...))>
-    static char __test(int);
+    static char test(int);
 
     template <typename...>
-    static int __test(...);
+    static int test(...);
 
-    static constexpr bool value = sizeof(__test<F, Args...>(0)) == sizeof(char);
+    static constexpr bool value = sizeof(test<F, Args...>(0)) == sizeof(char);
 };
 
 template <uint64_t N>
diff --git a/http/websocket.h b/http/websocket.h
index 61b3463..021fffa 100644
--- a/http/websocket.h
+++ b/http/websocket.h
@@ -34,7 +34,7 @@
     virtual void sendText(const std::string_view msg) = 0;
     virtual void sendText(std::string&& msg) = 0;
     virtual void close(const std::string_view msg = "quit") = 0;
-    virtual boost::asio::io_context& get_io_context() = 0;
+    virtual boost::asio::io_context& getIoContext() = 0;
     virtual ~Connection() = default;
 
     void userdata(void* u)
@@ -81,7 +81,7 @@
         BMCWEB_LOG_DEBUG << "Creating new connection " << this;
     }
 
-    boost::asio::io_context& get_io_context() override
+    boost::asio::io_context& getIoContext() override
     {
         return static_cast<boost::asio::io_context&>(
             ws.get_executor().context());
