@@ -19,7 +19,7 @@ namespace hcpp
1919
2020 awaitable<void > http_do (std::unique_ptr<http_client> client, std::shared_ptr<service_keeper> sk)
2121 {
22- client->init ();
22+ co_await client->init ();
2323 while (true )
2424 {
2525 auto ss = client->get_memory ();
@@ -211,11 +211,10 @@ namespace hcpp
211211 try
212212 {
213213 std::shared_ptr<channel_client> cc = co_await c->async_receive ();
214- // BUG 这里以下部分需要放到协程执行,因为一些操作会阻塞住线程
214+ // BUG 这里以下部分需要放到协程执行,因为一些操作会阻塞住线程
215215 auto hsc = std::make_unique<https_client>();
216216 hsc->host_ = cc->host_ ;
217217 hsc->service_ = cc->service_ ;
218- log::error (" channel_client: {}" , hsc->host_ );
219218 if (!cc->sock_ )
220219 {
221220 log::error (" 无法获取socket" );
@@ -224,32 +223,35 @@ namespace hcpp
224223 // TODO 抽象工厂方法
225224 auto sk = std::make_shared<mitm_svc>();
226225
227- subject_identify si{};
228- if (auto i = cr_ps_map.find (hsc->host_ ); i != cr_ps_map.end ())
226+ hsc->init_ = [&cr_ps_map,sk,cc,ca_subject](https_client &self)->awaitable <void >
229227 {
230- sk->set_sni_host (i->second .sni_host_ );
231- if (i->second .close_sni_ )
232- sk->close_sni ();
233- }
228+ subject_identify si{};
229+ if (auto i = cr_ps_map.find (self.host_ ); i != cr_ps_map.end ())
230+ {
231+ sk->set_sni_host (i->second .sni_host_ );
232+ if (i->second .close_sni_ )
233+ sk->close_sni ();
234+ }
234235
235- if (auto i = server_subject_map.find (hsc-> host_ ); i != server_subject_map.end ())
236- {
237- co_await sk->make_memory (hsc-> host_ , hsc-> service_ );
238- si = i->second ;
239- }
240- else
241- {
242- part_cert_info pci{};
243- sk->add_SAN_collector (pci);
244- co_await sk->make_memory (hsc-> host_ , hsc-> service_ );
245- si = sk->make_fake_server_id (pci.dns_name_ , ca_subject);
246- // XXX 插入失败不用管
247- server_subject_map.insert ({hsc-> host_ , si});
248- log::error (" mimt_https_server::wait_c:创建server_subject_map缓存 => {}" , hsc-> host_ );
249- log::error (" mimt_https_server::wait_c:当前缓存数量 {}" , server_subject_map.size ());
250- }
236+ if (auto i = server_subject_map.find (self. host_ ); i != server_subject_map.end ())
237+ {
238+ co_await sk->make_memory (self. host_ , self. service_ );
239+ si = i->second ;
240+ }
241+ else
242+ {
243+ part_cert_info pci{};
244+ sk->add_SAN_collector (pci);
245+ co_await sk->make_memory (self. host_ , self. service_ );
246+ si = sk->make_fake_server_id (pci.dns_name_ , ca_subject);
247+ // XXX 插入失败不用管
248+ server_subject_map.insert ({self. host_ , si});
249+ log::error (" mimt_https_server::wait_c:创建server_subject_map缓存 => {}" , self. host_ );
250+ log::error (" mimt_https_server::wait_c:当前缓存数量 {}" , server_subject_map.size ());
251+ }
251252
252- hsc->set_mem (co_await std::move (*cc).make (std::move (si)));
253+ self.set_mem (co_await std::move (*cc).make (std::move (si)));
254+ };
253255
254256 co_spawn (executor, http_do (std::move (hsc), std::move (sk)), detached);
255257 }
0 commit comments