diff --git a/http/http2_connection.hpp b/http/http2_connection.hpp
index 84e666f..1dcf87a 100644
--- a/http/http2_connection.hpp
+++ b/http/http2_connection.hpp
@@ -54,9 +54,8 @@
   public:
     HTTP2Connection(Adaptor&& adaptorIn, Handler* handlerIn,
                     std::function<std::string()>& getCachedDateStrF) :
-        adaptor(std::move(adaptorIn)),
-        ngSession(initializeNghttp2Session()), handler(handlerIn),
-        getCachedDateStr(getCachedDateStrF)
+        adaptor(std::move(adaptorIn)), ngSession(initializeNghttp2Session()),
+        handler(handlerIn), getCachedDateStr(getCachedDateStrF)
     {}
 
     void start()
@@ -90,11 +89,10 @@
         return 0;
     }
 
-    static ssize_t fileReadCallback(nghttp2_session* /* session */,
-                                    int32_t streamId, uint8_t* buf,
-                                    size_t length, uint32_t* dataFlags,
-                                    nghttp2_data_source* /*source*/,
-                                    void* userPtr)
+    static ssize_t
+        fileReadCallback(nghttp2_session* /* session */, int32_t streamId,
+                         uint8_t* buf, size_t length, uint32_t* dataFlags,
+                         nghttp2_data_source* /*source*/, void* userPtr)
     {
         self_type& self = userPtrToSelf(userPtr);
 
@@ -257,13 +255,13 @@
 
         thisRes.setCompleteRequestHandler(
             [this, streamId](Response& completeRes) {
-            BMCWEB_LOG_DEBUG("res.completeRequestHandler called");
-            if (sendResponse(completeRes, streamId) != 0)
-            {
-                close();
-                return;
-            }
-        });
+                BMCWEB_LOG_DEBUG("res.completeRequestHandler called");
+                if (sendResponse(completeRes, streamId) != 0)
+                {
+                    close();
+                    return;
+                }
+            });
         auto asyncResp =
             std::make_shared<bmcweb::AsyncResp>(std::move(it->second.res));
         if constexpr (!BMCWEB_INSECURE_DISABLE_AUTH)
@@ -322,10 +320,9 @@
         return 0;
     }
 
-    static int onDataChunkRecvStatic(nghttp2_session* /* session */,
-                                     uint8_t flags, int32_t streamId,
-                                     const uint8_t* data, size_t len,
-                                     void* userData)
+    static int onDataChunkRecvStatic(
+        nghttp2_session* /* session */, uint8_t flags, int32_t streamId,
+        const uint8_t* data, size_t len, void* userData)
     {
         BMCWEB_LOG_DEBUG("on_frame_recv_callback");
         if (userData == nullptr)
@@ -333,8 +330,8 @@
             BMCWEB_LOG_CRITICAL("user data was null?");
             return NGHTTP2_ERR_CALLBACK_FAILURE;
         }
-        return userPtrToSelf(userData).onDataChunkRecvCallback(flags, streamId,
-                                                               data, len);
+        return userPtrToSelf(userData).onDataChunkRecvCallback(
+            flags, streamId, data, len);
     }
 
     int onFrameRecvCallback(const nghttp2_frame& frame)
@@ -457,11 +454,10 @@
         return 0;
     }
 
-    static int onHeaderCallbackStatic(nghttp2_session* /* session */,
-                                      const nghttp2_frame* frame,
-                                      const uint8_t* name, size_t namelen,
-                                      const uint8_t* value, size_t vallen,
-                                      uint8_t /* flags */, void* userData)
+    static int onHeaderCallbackStatic(
+        nghttp2_session* /* session */, const nghttp2_frame* frame,
+        const uint8_t* name, size_t namelen, const uint8_t* value,
+        size_t vallen, uint8_t /* flags */, void* userData)
     {
         if (userData == nullptr)
         {
