99#include < limits>
1010#include < chrono>
1111#include < map>
12+ #include < ranges>
13+ #include < algorithm>
1214
1315#include < spdlog/spdlog.h>
1416
@@ -136,7 +138,7 @@ namespace hcpp
136138 }
137139 else // TODO 用于控制自身行为
138140 {
139- if (auto p= base_handlers_.find ({req.url_ .data (),req.url_param_start_ });p!= base_handlers_.end ())
141+ if (auto p = base_handlers_.find ({req.url_ .data (), req.url_param_start_ }); p != base_handlers_.end ())
140142 {
141143 co_await ss->async_write_all ((p->second )(req.url_ ));
142144 }
@@ -158,8 +160,8 @@ namespace hcpp
158160 }
159161 }
160162 }
161-
162- void http_handler::add_handler (std::string_view path, std::function<std::string (std::string_view)> handler)
163+
164+ void http_handler::add_handler (std::string_view path, std::function<std::string(std::string_view)> handler)
163165 {
164166 base_handlers_.insert ({path, handler});
165167 }
@@ -176,8 +178,7 @@ namespace hcpp
176178 hh.add_handler (" /stop" , [&ic](auto &&path)
177179 {
178180 ic.stop ();
179- return " HTTP/1.1 200 OK\r\n Content-Type: text/html; charset=utf-8\r\n Content-Length: 12\r\n\r\n server stop!" ;
180- });
181+ return " HTTP/1.1 200 OK\r\n Content-Type: text/html; charset=utf-8\r\n Content-Length: 12\r\n\r\n server stop!" ; });
181182 for (;;)
182183 {
183184 try
@@ -299,7 +300,7 @@ namespace hcpp
299300 };
300301 std::jthread t (https_service);
301302
302- std::unique_ptr<int , std::function<void (int *)>> ptr (new int (0 ), [ &executor](auto &&p)
303+ std::unique_ptr<int , std::function<void (int *)>> ptr (new int (0 ), [&executor](auto &&p)
303304 {
304305 log::info (" work_guard分离" );
305306 executor.stop ();
@@ -313,10 +314,21 @@ namespace hcpp
313314
314315 std::optional<std::shared_ptr<tunnel>> mimt_https_server::find_tunnel (std::string_view svc_host, std::string_view svc_service)
315316 {
317+ auto can_proxy = false ;
318+
316319 if (tunnel_set_.contains ({svc_host.data (), svc_service.data ()}))
317320 {
318- return std::make_optional (std::make_shared<channel_tunnel>(channel_)) ;
321+ can_proxy = true ;
319322 }
323+ if (std::ranges::any_of (tunnel_regx_list_, [&svc_host, &svc_service](auto &&i) {
324+ return std::regex_match (svc_host.data (),i.first )&&svc_service==i.second ;
325+ }))
326+ {
327+ can_proxy = true ;
328+ }
329+
330+ if (can_proxy)
331+ return std::make_optional (std::make_shared<channel_tunnel>(channel_));
320332 return std::nullopt ;
321333 }
322334
@@ -332,7 +344,7 @@ namespace hcpp
332344
333345 void mimt_https_server::set_ch (std::shared_ptr<socket_channel> ch)
334346 {
335- channel_= ch;
347+ channel_ = ch;
336348 }
337349
338350} // namespace hcpp
0 commit comments