├── .github
└── workflows
│ └── PSS_ASIO.yml
├── Build
├── Linux
│ ├── server_config.json
│ └── server_config_test_gcov.json
└── Windows
│ ├── ca.pem
│ ├── dh2048.pem
│ ├── libcrypto.dll
│ ├── libssl.dll
│ ├── server.pem
│ └── server_config.json
├── CMakeLists.txt
├── Common
├── IFrameObject.h
├── IIoBridge.hpp
├── ISessionService.h
├── LoadLibrary.hpp
├── PerformanceCheck.hpp
├── ReadBuffer.hpp
├── SessionBuffer.hpp
├── ThreadQueue.h
├── TimeStamp.hpp
├── TimerManager.hpp
├── VersionConfig.h
├── VersionConfig.h.in
├── WriteBuffer.hpp
├── consoleoutput.hpp
├── define.h
├── singleton.h
└── tms.hpp
├── Icon.jpg
├── LICENSE
├── Module_Logic
└── Test_Logic
│ ├── BaseCommand.cpp
│ ├── BaseCommand.h
│ ├── CMakeLists.txt
│ ├── Test_Logic.cpp
│ ├── Test_Logic.sln
│ ├── Test_Logic.vcxproj
│ ├── Test_Logic.vcxproj.filters
│ └── Test_Logic.vcxproj.user
├── NOTES-LINUX.md
├── NOTES-WINDOWS.md
├── PSS_ASIO
├── CMakeLists.txt
├── Common
│ ├── CommunicationService.cpp
│ ├── CommunicationService.h
│ ├── ConnectCounter.cpp
│ ├── ConnectCounter.h
│ ├── CoreTimer.hpp
│ ├── FrameObject.hpp
│ ├── ICommunicationService.h
│ ├── ISession.h
│ ├── IoContextPool.cpp
│ ├── IoContextPool.h
│ ├── IoListManager.h
│ ├── IoNetServer.h
│ ├── NetSvrManager.cpp
│ ├── NetSvrManager.h
│ ├── SendBuffer.h
│ ├── ServerService.cpp
│ ├── ServerService.h
│ ├── serverconfig.cpp
│ ├── serverconfig.h
│ └── serverconfigtype.h
├── Message
│ ├── Iobridge.cpp
│ ├── Iobridge.h
│ ├── IotoIo.cpp
│ ├── IotoIo.h
│ ├── LoadModule.cpp
│ ├── LoadModule.h
│ ├── LoadPacketParse.cpp
│ ├── LoadPacketParse.h
│ ├── ModuleInterfalce.cpp
│ ├── ModuleInterfalce.h
│ ├── ModuleLogic.cpp
│ ├── ModuleLogic.h
│ ├── SessionAddrList.cpp
│ ├── SessionAddrList.h
│ ├── SessionInterface.cpp
│ ├── SessionInterface.h
│ ├── SessionService.cpp
│ ├── SessionService.h
│ ├── SyncLogic.cpp
│ └── SyncLogic.h
├── PSS_ASIO.cpp
├── PSS_ASIO.sln
├── PSS_ASIO.vcxproj
├── PSS_ASIO.vcxproj.filters
├── PSS_ASIO.vcxproj.user
├── QueueSession
│ ├── QueueService.h
│ └── Queueservice.cpp
├── TTySession
│ ├── TtyServer.cpp
│ └── TtyServer.h
├── TcpSession
│ ├── TcpClientSession.cpp
│ ├── TcpClientSession.h
│ ├── TcpSSLClientSession.cpp
│ ├── TcpSSLClientSession.h
│ ├── TcpSSLServer.cpp
│ ├── TcpSSLServer.h
│ ├── TcpSSLSession.cpp
│ ├── TcpSSLSession.h
│ ├── TcpServer.cpp
│ ├── TcpServer.h
│ ├── TcpSession.cpp
│ └── TcpSession.h
├── UdpSession
│ ├── KcpServer.cpp
│ ├── KcpServer.h
│ ├── UdpClientSession.cpp
│ ├── UdpClientSession.h
│ ├── UdpServer.cpp
│ └── UdpServer.h
├── lib
│ ├── libcrypto.lib
│ └── libssl.lib
└── sonar-project.properties
├── PSS_ASIO_CLIENT
├── CMakeLists.txt
├── Common
│ └── SendBuffer.h
├── PSS_ASIO_CLIENT.cpp
├── PSS_ASIO_CLIENT.sln
├── PSS_ASIO_CLIENT.vcxproj
├── PSS_ASIO_CLIENT.vcxproj.filters
├── PSS_ASIO_CLIENT.vcxproj.user
├── TcpSession
│ ├── TcpSession.cpp
│ └── TcpSession.h
├── UdpSession
│ ├── UdpSession.cpp
│ └── UdpSession.h
├── kcp
│ ├── ikcp.c
│ └── ikcp.h
├── kcp_client.cpp
└── kcp_client.h
├── PSS_PLUGIN_LOGIC_MAKER
├── Build
│ ├── plugin_maker.json
│ └── template
│ │ ├── CMakeLists.txt
│ │ ├── template_Command.cpp
│ │ ├── template_Command.h
│ │ └── template_logic.cpp
├── CMakeLists.txt
├── PSS_PLUGIN_LOGIC_MAKER.cpp
├── PSS_PLUGIN_LOGIC_MAKER.sln
├── PSS_PLUGIN_LOGIC_MAKER.vcxproj
├── PSS_PLUGIN_LOGIC_MAKER.vcxproj.filters
├── PSS_PLUGIN_LOGIC_MAKER.vcxproj.user
├── logic_maker_type.h
├── read_logic_json_info.cpp
└── read_logic_json_info.h
├── PacketParse_Http
├── Base64.hpp
├── CMakeLists.txt
├── HttpFormat.cpp
├── HttpFormat.h
├── PacketParse_Http.cpp
├── PacketParse_Http.sln
├── PacketParse_Http.vcxproj
├── PacketParse_Http.vcxproj.filters
├── PacketParse_Http.vcxproj.user
├── SHA1.hpp
├── WebsocketFormat.hpp
├── http_parser.c
└── http_parser.h
├── PacketParse_Interface
├── CMakeLists.txt
├── PacketParse_Interface.cpp
├── PacketParse_Interface.sln
├── PacketParse_Interface.vcxproj
├── PacketParse_Interface.vcxproj.filters
└── PacketParse_Interface.vcxproj.user
├── _config.yml
├── jemalloc.sh
├── md
├── How_to_config_server.md
├── How_to_make_logic_plugin.md
├── How_to_make_packetparse_plugin.md
├── How_to_use_framework_api_in_logic_plugin.md
├── How_to_use_http_or_websocket.md
└── How_use_tools_make_logic_plugin.md
├── readme.md
├── tests
├── CMakeLists.txt
├── cmake
│ └── FindGTEST.cmake
├── google_test.py
├── gtest_output.html
├── gtest_template.html
├── make_test_report_html.sh
├── test_Iotoio.cpp
├── test_Iotoio.h
├── test_buffpacket.cpp
├── test_buffpacket.h
├── test_pss_asio.cpp
├── test_pss_asio.sln
├── test_pss_asio.vcxproj
├── test_pss_asio.vcxproj.filters
└── test_pss_asio.vcxproj.user
└── third_include
├── asio.hpp
├── asio
├── any_completion_executor.hpp
├── any_completion_handler.hpp
├── any_io_executor.hpp
├── append.hpp
├── as_tuple.hpp
├── associated_allocator.hpp
├── associated_cancellation_slot.hpp
├── associated_executor.hpp
├── associated_immediate_executor.hpp
├── associator.hpp
├── async_result.hpp
├── awaitable.hpp
├── basic_datagram_socket.hpp
├── basic_deadline_timer.hpp
├── basic_file.hpp
├── basic_io_object.hpp
├── basic_random_access_file.hpp
├── basic_raw_socket.hpp
├── basic_readable_pipe.hpp
├── basic_seq_packet_socket.hpp
├── basic_serial_port.hpp
├── basic_signal_set.hpp
├── basic_socket.hpp
├── basic_socket_acceptor.hpp
├── basic_socket_iostream.hpp
├── basic_socket_streambuf.hpp
├── basic_stream_file.hpp
├── basic_stream_socket.hpp
├── basic_streambuf.hpp
├── basic_streambuf_fwd.hpp
├── basic_waitable_timer.hpp
├── basic_writable_pipe.hpp
├── bind_allocator.hpp
├── bind_cancellation_slot.hpp
├── bind_executor.hpp
├── bind_immediate_executor.hpp
├── buffer.hpp
├── buffer_registration.hpp
├── buffered_read_stream.hpp
├── buffered_read_stream_fwd.hpp
├── buffered_stream.hpp
├── buffered_stream_fwd.hpp
├── buffered_write_stream.hpp
├── buffered_write_stream_fwd.hpp
├── buffers_iterator.hpp
├── cancellation_signal.hpp
├── cancellation_state.hpp
├── cancellation_type.hpp
├── co_spawn.hpp
├── completion_condition.hpp
├── compose.hpp
├── connect.hpp
├── connect_pipe.hpp
├── consign.hpp
├── coroutine.hpp
├── deadline_timer.hpp
├── defer.hpp
├── deferred.hpp
├── detached.hpp
├── detail
│ ├── array.hpp
│ ├── array_fwd.hpp
│ ├── assert.hpp
│ ├── atomic_count.hpp
│ ├── base_from_cancellation_state.hpp
│ ├── base_from_completion_cond.hpp
│ ├── bind_handler.hpp
│ ├── blocking_executor_op.hpp
│ ├── buffer_resize_guard.hpp
│ ├── buffer_sequence_adapter.hpp
│ ├── buffered_stream_storage.hpp
│ ├── call_stack.hpp
│ ├── chrono.hpp
│ ├── chrono_time_traits.hpp
│ ├── completion_handler.hpp
│ ├── composed_work.hpp
│ ├── concurrency_hint.hpp
│ ├── conditionally_enabled_event.hpp
│ ├── conditionally_enabled_mutex.hpp
│ ├── config.hpp
│ ├── consuming_buffers.hpp
│ ├── cstddef.hpp
│ ├── cstdint.hpp
│ ├── date_time_fwd.hpp
│ ├── deadline_timer_service.hpp
│ ├── dependent_type.hpp
│ ├── descriptor_ops.hpp
│ ├── descriptor_read_op.hpp
│ ├── descriptor_write_op.hpp
│ ├── dev_poll_reactor.hpp
│ ├── epoll_reactor.hpp
│ ├── event.hpp
│ ├── eventfd_select_interrupter.hpp
│ ├── exception.hpp
│ ├── executor_function.hpp
│ ├── executor_op.hpp
│ ├── fd_set_adapter.hpp
│ ├── fenced_block.hpp
│ ├── functional.hpp
│ ├── future.hpp
│ ├── global.hpp
│ ├── handler_alloc_helpers.hpp
│ ├── handler_cont_helpers.hpp
│ ├── handler_tracking.hpp
│ ├── handler_type_requirements.hpp
│ ├── handler_work.hpp
│ ├── hash_map.hpp
│ ├── impl
│ │ ├── buffer_sequence_adapter.ipp
│ │ ├── descriptor_ops.ipp
│ │ ├── dev_poll_reactor.hpp
│ │ ├── dev_poll_reactor.ipp
│ │ ├── epoll_reactor.hpp
│ │ ├── epoll_reactor.ipp
│ │ ├── eventfd_select_interrupter.ipp
│ │ ├── handler_tracking.ipp
│ │ ├── io_uring_descriptor_service.ipp
│ │ ├── io_uring_file_service.ipp
│ │ ├── io_uring_service.hpp
│ │ ├── io_uring_service.ipp
│ │ ├── io_uring_socket_service_base.ipp
│ │ ├── kqueue_reactor.hpp
│ │ ├── kqueue_reactor.ipp
│ │ ├── null_event.ipp
│ │ ├── pipe_select_interrupter.ipp
│ │ ├── posix_event.ipp
│ │ ├── posix_mutex.ipp
│ │ ├── posix_serial_port_service.ipp
│ │ ├── posix_thread.ipp
│ │ ├── posix_tss_ptr.ipp
│ │ ├── reactive_descriptor_service.ipp
│ │ ├── reactive_socket_service_base.ipp
│ │ ├── resolver_service_base.ipp
│ │ ├── scheduler.ipp
│ │ ├── select_reactor.hpp
│ │ ├── select_reactor.ipp
│ │ ├── service_registry.hpp
│ │ ├── service_registry.ipp
│ │ ├── signal_set_service.ipp
│ │ ├── socket_ops.ipp
│ │ ├── socket_select_interrupter.ipp
│ │ ├── strand_executor_service.hpp
│ │ ├── strand_executor_service.ipp
│ │ ├── strand_service.hpp
│ │ ├── strand_service.ipp
│ │ ├── thread_context.ipp
│ │ ├── throw_error.ipp
│ │ ├── timer_queue_ptime.ipp
│ │ ├── timer_queue_set.ipp
│ │ ├── win_event.ipp
│ │ ├── win_iocp_file_service.ipp
│ │ ├── win_iocp_handle_service.ipp
│ │ ├── win_iocp_io_context.hpp
│ │ ├── win_iocp_io_context.ipp
│ │ ├── win_iocp_serial_port_service.ipp
│ │ ├── win_iocp_socket_service_base.ipp
│ │ ├── win_mutex.ipp
│ │ ├── win_object_handle_service.ipp
│ │ ├── win_static_mutex.ipp
│ │ ├── win_thread.ipp
│ │ ├── win_tss_ptr.ipp
│ │ ├── winrt_ssocket_service_base.ipp
│ │ ├── winrt_timer_scheduler.hpp
│ │ ├── winrt_timer_scheduler.ipp
│ │ └── winsock_init.ipp
│ ├── initiate_defer.hpp
│ ├── initiate_dispatch.hpp
│ ├── initiate_post.hpp
│ ├── io_control.hpp
│ ├── io_object_impl.hpp
│ ├── io_uring_descriptor_read_at_op.hpp
│ ├── io_uring_descriptor_read_op.hpp
│ ├── io_uring_descriptor_service.hpp
│ ├── io_uring_descriptor_write_at_op.hpp
│ ├── io_uring_descriptor_write_op.hpp
│ ├── io_uring_file_service.hpp
│ ├── io_uring_null_buffers_op.hpp
│ ├── io_uring_operation.hpp
│ ├── io_uring_service.hpp
│ ├── io_uring_socket_accept_op.hpp
│ ├── io_uring_socket_connect_op.hpp
│ ├── io_uring_socket_recv_op.hpp
│ ├── io_uring_socket_recvfrom_op.hpp
│ ├── io_uring_socket_recvmsg_op.hpp
│ ├── io_uring_socket_send_op.hpp
│ ├── io_uring_socket_sendto_op.hpp
│ ├── io_uring_socket_service.hpp
│ ├── io_uring_socket_service_base.hpp
│ ├── io_uring_wait_op.hpp
│ ├── is_buffer_sequence.hpp
│ ├── is_executor.hpp
│ ├── keyword_tss_ptr.hpp
│ ├── kqueue_reactor.hpp
│ ├── limits.hpp
│ ├── local_free_on_block_exit.hpp
│ ├── memory.hpp
│ ├── mutex.hpp
│ ├── non_const_lvalue.hpp
│ ├── noncopyable.hpp
│ ├── null_event.hpp
│ ├── null_fenced_block.hpp
│ ├── null_global.hpp
│ ├── null_mutex.hpp
│ ├── null_reactor.hpp
│ ├── null_signal_blocker.hpp
│ ├── null_socket_service.hpp
│ ├── null_static_mutex.hpp
│ ├── null_thread.hpp
│ ├── null_tss_ptr.hpp
│ ├── object_pool.hpp
│ ├── old_win_sdk_compat.hpp
│ ├── op_queue.hpp
│ ├── operation.hpp
│ ├── pipe_select_interrupter.hpp
│ ├── pop_options.hpp
│ ├── posix_event.hpp
│ ├── posix_fd_set_adapter.hpp
│ ├── posix_global.hpp
│ ├── posix_mutex.hpp
│ ├── posix_serial_port_service.hpp
│ ├── posix_signal_blocker.hpp
│ ├── posix_static_mutex.hpp
│ ├── posix_thread.hpp
│ ├── posix_tss_ptr.hpp
│ ├── push_options.hpp
│ ├── reactive_descriptor_service.hpp
│ ├── reactive_null_buffers_op.hpp
│ ├── reactive_socket_accept_op.hpp
│ ├── reactive_socket_connect_op.hpp
│ ├── reactive_socket_recv_op.hpp
│ ├── reactive_socket_recvfrom_op.hpp
│ ├── reactive_socket_recvmsg_op.hpp
│ ├── reactive_socket_send_op.hpp
│ ├── reactive_socket_sendto_op.hpp
│ ├── reactive_socket_service.hpp
│ ├── reactive_socket_service_base.hpp
│ ├── reactive_wait_op.hpp
│ ├── reactor.hpp
│ ├── reactor_op.hpp
│ ├── reactor_op_queue.hpp
│ ├── recycling_allocator.hpp
│ ├── regex_fwd.hpp
│ ├── resolve_endpoint_op.hpp
│ ├── resolve_op.hpp
│ ├── resolve_query_op.hpp
│ ├── resolver_service.hpp
│ ├── resolver_service_base.hpp
│ ├── scheduler.hpp
│ ├── scheduler_operation.hpp
│ ├── scheduler_task.hpp
│ ├── scheduler_thread_info.hpp
│ ├── scoped_lock.hpp
│ ├── scoped_ptr.hpp
│ ├── select_interrupter.hpp
│ ├── select_reactor.hpp
│ ├── service_registry.hpp
│ ├── signal_blocker.hpp
│ ├── signal_handler.hpp
│ ├── signal_init.hpp
│ ├── signal_op.hpp
│ ├── signal_set_service.hpp
│ ├── socket_holder.hpp
│ ├── socket_ops.hpp
│ ├── socket_option.hpp
│ ├── socket_select_interrupter.hpp
│ ├── socket_types.hpp
│ ├── source_location.hpp
│ ├── static_mutex.hpp
│ ├── std_event.hpp
│ ├── std_fenced_block.hpp
│ ├── std_global.hpp
│ ├── std_mutex.hpp
│ ├── std_static_mutex.hpp
│ ├── std_thread.hpp
│ ├── strand_executor_service.hpp
│ ├── strand_service.hpp
│ ├── string_view.hpp
│ ├── thread.hpp
│ ├── thread_context.hpp
│ ├── thread_group.hpp
│ ├── thread_info_base.hpp
│ ├── throw_error.hpp
│ ├── throw_exception.hpp
│ ├── timer_queue.hpp
│ ├── timer_queue_base.hpp
│ ├── timer_queue_ptime.hpp
│ ├── timer_queue_set.hpp
│ ├── timer_scheduler.hpp
│ ├── timer_scheduler_fwd.hpp
│ ├── tss_ptr.hpp
│ ├── type_traits.hpp
│ ├── utility.hpp
│ ├── wait_handler.hpp
│ ├── wait_op.hpp
│ ├── win_event.hpp
│ ├── win_fd_set_adapter.hpp
│ ├── win_global.hpp
│ ├── win_iocp_file_service.hpp
│ ├── win_iocp_handle_read_op.hpp
│ ├── win_iocp_handle_service.hpp
│ ├── win_iocp_handle_write_op.hpp
│ ├── win_iocp_io_context.hpp
│ ├── win_iocp_null_buffers_op.hpp
│ ├── win_iocp_operation.hpp
│ ├── win_iocp_overlapped_op.hpp
│ ├── win_iocp_overlapped_ptr.hpp
│ ├── win_iocp_serial_port_service.hpp
│ ├── win_iocp_socket_accept_op.hpp
│ ├── win_iocp_socket_connect_op.hpp
│ ├── win_iocp_socket_recv_op.hpp
│ ├── win_iocp_socket_recvfrom_op.hpp
│ ├── win_iocp_socket_recvmsg_op.hpp
│ ├── win_iocp_socket_send_op.hpp
│ ├── win_iocp_socket_service.hpp
│ ├── win_iocp_socket_service_base.hpp
│ ├── win_iocp_thread_info.hpp
│ ├── win_iocp_wait_op.hpp
│ ├── win_mutex.hpp
│ ├── win_object_handle_service.hpp
│ ├── win_static_mutex.hpp
│ ├── win_thread.hpp
│ ├── win_tss_ptr.hpp
│ ├── winapp_thread.hpp
│ ├── wince_thread.hpp
│ ├── winrt_async_manager.hpp
│ ├── winrt_async_op.hpp
│ ├── winrt_resolve_op.hpp
│ ├── winrt_resolver_service.hpp
│ ├── winrt_socket_connect_op.hpp
│ ├── winrt_socket_recv_op.hpp
│ ├── winrt_socket_send_op.hpp
│ ├── winrt_ssocket_service.hpp
│ ├── winrt_ssocket_service_base.hpp
│ ├── winrt_timer_scheduler.hpp
│ ├── winrt_utils.hpp
│ ├── winsock_init.hpp
│ ├── work_dispatcher.hpp
│ └── wrapped_handler.hpp
├── dispatch.hpp
├── error.hpp
├── error_code.hpp
├── execution.hpp
├── execution
│ ├── allocator.hpp
│ ├── any_executor.hpp
│ ├── bad_executor.hpp
│ ├── blocking.hpp
│ ├── blocking_adaptation.hpp
│ ├── context.hpp
│ ├── context_as.hpp
│ ├── executor.hpp
│ ├── impl
│ │ └── bad_executor.ipp
│ ├── invocable_archetype.hpp
│ ├── mapping.hpp
│ ├── occupancy.hpp
│ ├── outstanding_work.hpp
│ ├── prefer_only.hpp
│ └── relationship.hpp
├── execution_context.hpp
├── executor.hpp
├── executor_work_guard.hpp
├── experimental
│ ├── append.hpp
│ ├── as_single.hpp
│ ├── as_tuple.hpp
│ ├── awaitable_operators.hpp
│ ├── basic_channel.hpp
│ ├── basic_concurrent_channel.hpp
│ ├── cancellation_condition.hpp
│ ├── channel.hpp
│ ├── channel_error.hpp
│ ├── channel_traits.hpp
│ ├── co_composed.hpp
│ ├── co_spawn.hpp
│ ├── concurrent_channel.hpp
│ ├── coro.hpp
│ ├── coro_traits.hpp
│ ├── deferred.hpp
│ ├── detail
│ │ ├── channel_handler.hpp
│ │ ├── channel_message.hpp
│ │ ├── channel_operation.hpp
│ │ ├── channel_payload.hpp
│ │ ├── channel_receive_op.hpp
│ │ ├── channel_send_functions.hpp
│ │ ├── channel_send_op.hpp
│ │ ├── channel_service.hpp
│ │ ├── coro_completion_handler.hpp
│ │ ├── coro_promise_allocator.hpp
│ │ ├── has_signature.hpp
│ │ ├── impl
│ │ │ └── channel_service.hpp
│ │ └── partial_promise.hpp
│ ├── impl
│ │ ├── as_single.hpp
│ │ ├── channel_error.ipp
│ │ ├── co_composed.hpp
│ │ ├── coro.hpp
│ │ ├── parallel_group.hpp
│ │ ├── promise.hpp
│ │ ├── use_coro.hpp
│ │ └── use_promise.hpp
│ ├── parallel_group.hpp
│ ├── prepend.hpp
│ ├── promise.hpp
│ ├── use_coro.hpp
│ └── use_promise.hpp
├── file_base.hpp
├── generic
│ ├── basic_endpoint.hpp
│ ├── datagram_protocol.hpp
│ ├── detail
│ │ ├── endpoint.hpp
│ │ └── impl
│ │ │ └── endpoint.ipp
│ ├── raw_protocol.hpp
│ ├── seq_packet_protocol.hpp
│ └── stream_protocol.hpp
├── handler_continuation_hook.hpp
├── high_resolution_timer.hpp
├── impl
│ ├── any_completion_executor.ipp
│ ├── any_io_executor.ipp
│ ├── append.hpp
│ ├── as_tuple.hpp
│ ├── awaitable.hpp
│ ├── buffered_read_stream.hpp
│ ├── buffered_write_stream.hpp
│ ├── cancellation_signal.ipp
│ ├── co_spawn.hpp
│ ├── connect.hpp
│ ├── connect_pipe.hpp
│ ├── connect_pipe.ipp
│ ├── consign.hpp
│ ├── deferred.hpp
│ ├── detached.hpp
│ ├── error.ipp
│ ├── error_code.ipp
│ ├── execution_context.hpp
│ ├── execution_context.ipp
│ ├── executor.hpp
│ ├── executor.ipp
│ ├── io_context.hpp
│ ├── io_context.ipp
│ ├── multiple_exceptions.ipp
│ ├── prepend.hpp
│ ├── read.hpp
│ ├── read_at.hpp
│ ├── read_until.hpp
│ ├── redirect_error.hpp
│ ├── serial_port_base.hpp
│ ├── serial_port_base.ipp
│ ├── spawn.hpp
│ ├── src.hpp
│ ├── system_context.hpp
│ ├── system_context.ipp
│ ├── system_executor.hpp
│ ├── thread_pool.hpp
│ ├── thread_pool.ipp
│ ├── use_awaitable.hpp
│ ├── use_future.hpp
│ ├── write.hpp
│ └── write_at.hpp
├── io_context.hpp
├── io_context_strand.hpp
├── io_service.hpp
├── io_service_strand.hpp
├── ip
│ ├── address.hpp
│ ├── address_v4.hpp
│ ├── address_v4_iterator.hpp
│ ├── address_v4_range.hpp
│ ├── address_v6.hpp
│ ├── address_v6_iterator.hpp
│ ├── address_v6_range.hpp
│ ├── bad_address_cast.hpp
│ ├── basic_endpoint.hpp
│ ├── basic_resolver.hpp
│ ├── basic_resolver_entry.hpp
│ ├── basic_resolver_iterator.hpp
│ ├── basic_resolver_query.hpp
│ ├── basic_resolver_results.hpp
│ ├── detail
│ │ ├── endpoint.hpp
│ │ ├── impl
│ │ │ └── endpoint.ipp
│ │ └── socket_option.hpp
│ ├── host_name.hpp
│ ├── icmp.hpp
│ ├── impl
│ │ ├── address.hpp
│ │ ├── address.ipp
│ │ ├── address_v4.hpp
│ │ ├── address_v4.ipp
│ │ ├── address_v6.hpp
│ │ ├── address_v6.ipp
│ │ ├── basic_endpoint.hpp
│ │ ├── host_name.ipp
│ │ ├── network_v4.hpp
│ │ ├── network_v4.ipp
│ │ ├── network_v6.hpp
│ │ └── network_v6.ipp
│ ├── multicast.hpp
│ ├── network_v4.hpp
│ ├── network_v6.hpp
│ ├── resolver_base.hpp
│ ├── resolver_query_base.hpp
│ ├── tcp.hpp
│ ├── udp.hpp
│ ├── unicast.hpp
│ └── v6_only.hpp
├── is_applicable_property.hpp
├── is_contiguous_iterator.hpp
├── is_executor.hpp
├── is_read_buffered.hpp
├── is_write_buffered.hpp
├── local
│ ├── basic_endpoint.hpp
│ ├── connect_pair.hpp
│ ├── datagram_protocol.hpp
│ ├── detail
│ │ ├── endpoint.hpp
│ │ └── impl
│ │ │ └── endpoint.ipp
│ ├── seq_packet_protocol.hpp
│ └── stream_protocol.hpp
├── multiple_exceptions.hpp
├── packaged_task.hpp
├── placeholders.hpp
├── posix
│ ├── basic_descriptor.hpp
│ ├── basic_stream_descriptor.hpp
│ ├── descriptor.hpp
│ ├── descriptor_base.hpp
│ └── stream_descriptor.hpp
├── post.hpp
├── prefer.hpp
├── prepend.hpp
├── query.hpp
├── random_access_file.hpp
├── read.hpp
├── read_at.hpp
├── read_until.hpp
├── readable_pipe.hpp
├── recycling_allocator.hpp
├── redirect_error.hpp
├── registered_buffer.hpp
├── require.hpp
├── require_concept.hpp
├── serial_port.hpp
├── serial_port_base.hpp
├── signal_set.hpp
├── signal_set_base.hpp
├── socket_base.hpp
├── spawn.hpp
├── ssl.hpp
├── ssl
│ ├── context.hpp
│ ├── context_base.hpp
│ ├── detail
│ │ ├── buffered_handshake_op.hpp
│ │ ├── engine.hpp
│ │ ├── handshake_op.hpp
│ │ ├── impl
│ │ │ ├── engine.ipp
│ │ │ └── openssl_init.ipp
│ │ ├── io.hpp
│ │ ├── openssl_init.hpp
│ │ ├── openssl_types.hpp
│ │ ├── password_callback.hpp
│ │ ├── read_op.hpp
│ │ ├── shutdown_op.hpp
│ │ ├── stream_core.hpp
│ │ ├── verify_callback.hpp
│ │ └── write_op.hpp
│ ├── error.hpp
│ ├── host_name_verification.hpp
│ ├── impl
│ │ ├── context.hpp
│ │ ├── context.ipp
│ │ ├── error.ipp
│ │ ├── host_name_verification.ipp
│ │ ├── rfc2818_verification.ipp
│ │ └── src.hpp
│ ├── rfc2818_verification.hpp
│ ├── stream.hpp
│ ├── stream_base.hpp
│ ├── verify_context.hpp
│ └── verify_mode.hpp
├── static_thread_pool.hpp
├── steady_timer.hpp
├── strand.hpp
├── stream_file.hpp
├── streambuf.hpp
├── system_context.hpp
├── system_error.hpp
├── system_executor.hpp
├── system_timer.hpp
├── this_coro.hpp
├── thread.hpp
├── thread_pool.hpp
├── time_traits.hpp
├── traits
│ ├── equality_comparable.hpp
│ ├── execute_member.hpp
│ ├── prefer_free.hpp
│ ├── prefer_member.hpp
│ ├── query_free.hpp
│ ├── query_member.hpp
│ ├── query_static_constexpr_member.hpp
│ ├── require_concept_free.hpp
│ ├── require_concept_member.hpp
│ ├── require_free.hpp
│ ├── require_member.hpp
│ ├── static_query.hpp
│ ├── static_require.hpp
│ └── static_require_concept.hpp
├── ts
│ ├── buffer.hpp
│ ├── executor.hpp
│ ├── internet.hpp
│ ├── io_context.hpp
│ ├── net.hpp
│ ├── netfwd.hpp
│ ├── socket.hpp
│ └── timer.hpp
├── unyield.hpp
├── use_awaitable.hpp
├── use_future.hpp
├── uses_executor.hpp
├── version.hpp
├── wait_traits.hpp
├── windows
│ ├── basic_object_handle.hpp
│ ├── basic_overlapped_handle.hpp
│ ├── basic_random_access_handle.hpp
│ ├── basic_stream_handle.hpp
│ ├── object_handle.hpp
│ ├── overlapped_handle.hpp
│ ├── overlapped_ptr.hpp
│ ├── random_access_handle.hpp
│ └── stream_handle.hpp
├── writable_pipe.hpp
├── write.hpp
├── write_at.hpp
└── yield.hpp
├── jemalloc
├── COPYING
├── ChangeLog
├── INSTALL.md
├── Makefile
├── Makefile.in
├── README
├── TUNING.md
├── VERSION
├── autogen.sh
├── bin
│ ├── jemalloc-config
│ ├── jemalloc-config.in
│ ├── jemalloc.sh
│ ├── jemalloc.sh.in
│ ├── jeprof
│ └── jeprof.in
├── build-aux
│ ├── config.guess
│ ├── config.sub
│ └── install-sh
├── config.log
├── config.stamp
├── config.stamp.in
├── config.status
├── configure
├── configure.ac
├── configure~
├── doc
│ ├── html.xsl
│ ├── html.xsl.in
│ ├── jemalloc.xml
│ ├── jemalloc.xml.in
│ ├── manpages.xsl
│ ├── manpages.xsl.in
│ └── stylesheet.xsl
├── doc_internal
│ ├── PROFILING_INTERNALS.md
│ └── jemalloc.svg
├── include
│ ├── jemalloc
│ │ ├── internal
│ │ │ ├── activity_callback.h
│ │ │ ├── arena_externs.h
│ │ │ ├── arena_inlines_a.h
│ │ │ ├── arena_inlines_b.h
│ │ │ ├── arena_stats.h
│ │ │ ├── arena_structs.h
│ │ │ ├── arena_types.h
│ │ │ ├── assert.h
│ │ │ ├── atomic.h
│ │ │ ├── atomic_c11.h
│ │ │ ├── atomic_gcc_atomic.h
│ │ │ ├── atomic_gcc_sync.h
│ │ │ ├── atomic_msvc.h
│ │ │ ├── background_thread_externs.h
│ │ │ ├── background_thread_inlines.h
│ │ │ ├── background_thread_structs.h
│ │ │ ├── base.h
│ │ │ ├── bin.h
│ │ │ ├── bin_info.h
│ │ │ ├── bin_stats.h
│ │ │ ├── bin_types.h
│ │ │ ├── bit_util.h
│ │ │ ├── bitmap.h
│ │ │ ├── buf_writer.h
│ │ │ ├── cache_bin.h
│ │ │ ├── ckh.h
│ │ │ ├── counter.h
│ │ │ ├── ctl.h
│ │ │ ├── decay.h
│ │ │ ├── div.h
│ │ │ ├── ecache.h
│ │ │ ├── edata.h
│ │ │ ├── edata_cache.h
│ │ │ ├── ehooks.h
│ │ │ ├── emap.h
│ │ │ ├── emitter.h
│ │ │ ├── eset.h
│ │ │ ├── exp_grow.h
│ │ │ ├── extent.h
│ │ │ ├── extent_dss.h
│ │ │ ├── extent_mmap.h
│ │ │ ├── fb.h
│ │ │ ├── fxp.h
│ │ │ ├── hash.h
│ │ │ ├── hook.h
│ │ │ ├── hpa.h
│ │ │ ├── hpa_hooks.h
│ │ │ ├── hpa_opts.h
│ │ │ ├── hpdata.h
│ │ │ ├── inspect.h
│ │ │ ├── jemalloc_internal_decls.h
│ │ │ ├── jemalloc_internal_defs.h
│ │ │ ├── jemalloc_internal_defs.h.in
│ │ │ ├── jemalloc_internal_externs.h
│ │ │ ├── jemalloc_internal_includes.h
│ │ │ ├── jemalloc_internal_inlines_a.h
│ │ │ ├── jemalloc_internal_inlines_b.h
│ │ │ ├── jemalloc_internal_inlines_c.h
│ │ │ ├── jemalloc_internal_macros.h
│ │ │ ├── jemalloc_internal_types.h
│ │ │ ├── jemalloc_preamble.h
│ │ │ ├── jemalloc_preamble.h.in
│ │ │ ├── large_externs.h
│ │ │ ├── lockedint.h
│ │ │ ├── log.h
│ │ │ ├── malloc_io.h
│ │ │ ├── mpsc_queue.h
│ │ │ ├── mutex.h
│ │ │ ├── mutex_prof.h
│ │ │ ├── nstime.h
│ │ │ ├── pa.h
│ │ │ ├── pac.h
│ │ │ ├── pages.h
│ │ │ ├── pai.h
│ │ │ ├── peak.h
│ │ │ ├── peak_event.h
│ │ │ ├── ph.h
│ │ │ ├── private_namespace.sh
│ │ │ ├── private_symbols.awk
│ │ │ ├── private_symbols.sh
│ │ │ ├── private_symbols_jet.awk
│ │ │ ├── prng.h
│ │ │ ├── prof_data.h
│ │ │ ├── prof_externs.h
│ │ │ ├── prof_hook.h
│ │ │ ├── prof_inlines.h
│ │ │ ├── prof_log.h
│ │ │ ├── prof_recent.h
│ │ │ ├── prof_stats.h
│ │ │ ├── prof_structs.h
│ │ │ ├── prof_sys.h
│ │ │ ├── prof_types.h
│ │ │ ├── psset.h
│ │ │ ├── public_namespace.h
│ │ │ ├── public_namespace.sh
│ │ │ ├── public_symbols.txt
│ │ │ ├── public_unnamespace.h
│ │ │ ├── public_unnamespace.sh
│ │ │ ├── ql.h
│ │ │ ├── qr.h
│ │ │ ├── quantum.h
│ │ │ ├── rb.h
│ │ │ ├── rtree.h
│ │ │ ├── rtree_tsd.h
│ │ │ ├── safety_check.h
│ │ │ ├── san.h
│ │ │ ├── san_bump.h
│ │ │ ├── sc.h
│ │ │ ├── sec.h
│ │ │ ├── sec_opts.h
│ │ │ ├── seq.h
│ │ │ ├── slab_data.h
│ │ │ ├── smoothstep.h
│ │ │ ├── smoothstep.sh
│ │ │ ├── spin.h
│ │ │ ├── stats.h
│ │ │ ├── sz.h
│ │ │ ├── tcache_externs.h
│ │ │ ├── tcache_inlines.h
│ │ │ ├── tcache_structs.h
│ │ │ ├── tcache_types.h
│ │ │ ├── test_hooks.h
│ │ │ ├── thread_event.h
│ │ │ ├── ticker.h
│ │ │ ├── tsd.h
│ │ │ ├── tsd_generic.h
│ │ │ ├── tsd_malloc_thread_cleanup.h
│ │ │ ├── tsd_tls.h
│ │ │ ├── tsd_types.h
│ │ │ ├── tsd_win.h
│ │ │ ├── typed_list.h
│ │ │ ├── util.h
│ │ │ └── witness.h
│ │ ├── jemalloc.h
│ │ ├── jemalloc.sh
│ │ ├── jemalloc_defs.h
│ │ ├── jemalloc_defs.h.in
│ │ ├── jemalloc_macros.h
│ │ ├── jemalloc_macros.h.in
│ │ ├── jemalloc_mangle.h
│ │ ├── jemalloc_mangle.sh
│ │ ├── jemalloc_mangle_jet.h
│ │ ├── jemalloc_protos.h
│ │ ├── jemalloc_protos.h.in
│ │ ├── jemalloc_protos_jet.h
│ │ ├── jemalloc_rename.h
│ │ ├── jemalloc_rename.sh
│ │ ├── jemalloc_typedefs.h
│ │ └── jemalloc_typedefs.h.in
│ └── msvc_compat
│ │ ├── C99
│ │ ├── stdbool.h
│ │ └── stdint.h
│ │ ├── strings.h
│ │ └── windows_extra.h
├── jemalloc.pc
├── jemalloc.pc.in
├── m4
│ └── ax_cxx_compile_stdcxx.m4
├── msvc
│ ├── ReadMe.txt
│ ├── jemalloc_vc2015.sln
│ ├── jemalloc_vc2017.sln
│ ├── projects
│ │ ├── vc2015
│ │ │ ├── jemalloc
│ │ │ │ ├── jemalloc.vcxproj
│ │ │ │ └── jemalloc.vcxproj.filters
│ │ │ └── test_threads
│ │ │ │ ├── test_threads.vcxproj
│ │ │ │ └── test_threads.vcxproj.filters
│ │ └── vc2017
│ │ │ ├── jemalloc
│ │ │ ├── jemalloc.vcxproj
│ │ │ └── jemalloc.vcxproj.filters
│ │ │ └── test_threads
│ │ │ ├── test_threads.vcxproj
│ │ │ └── test_threads.vcxproj.filters
│ └── test_threads
│ │ ├── test_threads.cpp
│ │ ├── test_threads.h
│ │ └── test_threads_main.cpp
├── run_tests.sh
├── scripts
│ ├── check-formatting.sh
│ ├── freebsd
│ │ ├── before_install.sh
│ │ ├── before_script.sh
│ │ └── script.sh
│ ├── gen_run_tests.py
│ ├── gen_travis.py
│ ├── linux
│ │ └── before_install.sh
│ └── windows
│ │ ├── before_install.sh
│ │ ├── before_script.sh
│ │ └── script.sh
├── src
│ ├── arena.c
│ ├── background_thread.c
│ ├── base.c
│ ├── bin.c
│ ├── bin_info.c
│ ├── bitmap.c
│ ├── buf_writer.c
│ ├── cache_bin.c
│ ├── ckh.c
│ ├── counter.c
│ ├── ctl.c
│ ├── decay.c
│ ├── div.c
│ ├── ecache.c
│ ├── edata.c
│ ├── edata_cache.c
│ ├── ehooks.c
│ ├── emap.c
│ ├── eset.c
│ ├── exp_grow.c
│ ├── extent.c
│ ├── extent_dss.c
│ ├── extent_mmap.c
│ ├── fxp.c
│ ├── hook.c
│ ├── hpa.c
│ ├── hpa_hooks.c
│ ├── hpdata.c
│ ├── inspect.c
│ ├── jemalloc.c
│ ├── jemalloc_cpp.cpp
│ ├── large.c
│ ├── log.c
│ ├── malloc_io.c
│ ├── mutex.c
│ ├── nstime.c
│ ├── pa.c
│ ├── pa_extra.c
│ ├── pac.c
│ ├── pages.c
│ ├── pai.c
│ ├── peak_event.c
│ ├── prof.c
│ ├── prof_data.c
│ ├── prof_log.c
│ ├── prof_recent.c
│ ├── prof_stats.c
│ ├── prof_sys.c
│ ├── psset.c
│ ├── rtree.c
│ ├── safety_check.c
│ ├── san.c
│ ├── san_bump.c
│ ├── sc.c
│ ├── sec.c
│ ├── stats.c
│ ├── sz.c
│ ├── tcache.c
│ ├── test_hooks.c
│ ├── thread_event.c
│ ├── ticker.c
│ ├── ticker.py
│ ├── tsd.c
│ ├── witness.c
│ └── zone.c
└── test
│ ├── analyze
│ ├── prof_bias.c
│ ├── rand.c
│ └── sizes.c
│ ├── include
│ └── test
│ │ ├── SFMT-alti.h
│ │ ├── SFMT-params.h
│ │ ├── SFMT-params11213.h
│ │ ├── SFMT-params1279.h
│ │ ├── SFMT-params132049.h
│ │ ├── SFMT-params19937.h
│ │ ├── SFMT-params216091.h
│ │ ├── SFMT-params2281.h
│ │ ├── SFMT-params4253.h
│ │ ├── SFMT-params44497.h
│ │ ├── SFMT-params607.h
│ │ ├── SFMT-params86243.h
│ │ ├── SFMT-sse2.h
│ │ ├── SFMT.h
│ │ ├── arena_util.h
│ │ ├── bench.h
│ │ ├── bgthd.h
│ │ ├── btalloc.h
│ │ ├── extent_hooks.h
│ │ ├── jemalloc_test.h
│ │ ├── jemalloc_test.h.in
│ │ ├── jemalloc_test_defs.h
│ │ ├── jemalloc_test_defs.h.in
│ │ ├── math.h
│ │ ├── mq.h
│ │ ├── mtx.h
│ │ ├── nbits.h
│ │ ├── san.h
│ │ ├── sleep.h
│ │ ├── test.h
│ │ ├── thd.h
│ │ └── timer.h
│ ├── integration
│ ├── MALLOCX_ARENA.c
│ ├── aligned_alloc.c
│ ├── allocated.c
│ ├── cpp
│ │ ├── basic.cpp
│ │ ├── infallible_new_false.cpp
│ │ ├── infallible_new_false.sh
│ │ ├── infallible_new_true.cpp
│ │ └── infallible_new_true.sh
│ ├── extent.c
│ ├── extent.sh
│ ├── malloc.c
│ ├── mallocx.c
│ ├── mallocx.sh
│ ├── overflow.c
│ ├── posix_memalign.c
│ ├── rallocx.c
│ ├── sdallocx.c
│ ├── slab_sizes.c
│ ├── slab_sizes.sh
│ ├── smallocx.c
│ ├── smallocx.sh
│ ├── thread_arena.c
│ ├── thread_tcache_enabled.c
│ ├── xallocx.c
│ └── xallocx.sh
│ ├── src
│ ├── SFMT.c
│ ├── btalloc.c
│ ├── btalloc_0.c
│ ├── btalloc_1.c
│ ├── math.c
│ ├── mtx.c
│ ├── sleep.c
│ ├── test.c
│ ├── thd.c
│ └── timer.c
│ ├── stress
│ ├── batch_alloc.c
│ ├── fill_flush.c
│ ├── hookbench.c
│ ├── large_microbench.c
│ ├── mallctl.c
│ └── microbench.c
│ ├── test.sh
│ ├── test.sh.in
│ └── unit
│ ├── SFMT.c
│ ├── a0.c
│ ├── arena_decay.c
│ ├── arena_decay.sh
│ ├── arena_reset.c
│ ├── arena_reset_prof.c
│ ├── arena_reset_prof.sh
│ ├── atomic.c
│ ├── background_thread.c
│ ├── background_thread_enable.c
│ ├── base.c
│ ├── batch_alloc.c
│ ├── batch_alloc.sh
│ ├── batch_alloc_prof.c
│ ├── batch_alloc_prof.sh
│ ├── binshard.c
│ ├── binshard.sh
│ ├── bit_util.c
│ ├── bitmap.c
│ ├── buf_writer.c
│ ├── cache_bin.c
│ ├── ckh.c
│ ├── counter.c
│ ├── decay.c
│ ├── div.c
│ ├── double_free.c
│ ├── double_free.h
│ ├── edata_cache.c
│ ├── emitter.c
│ ├── extent_quantize.c
│ ├── fb.c
│ ├── fork.c
│ ├── fxp.c
│ ├── hash.c
│ ├── hook.c
│ ├── hpa.c
│ ├── hpa_background_thread.c
│ ├── hpa_background_thread.sh
│ ├── hpdata.c
│ ├── huge.c
│ ├── inspect.c
│ ├── inspect.sh
│ ├── junk.c
│ ├── junk.sh
│ ├── junk_alloc.c
│ ├── junk_alloc.sh
│ ├── junk_free.c
│ ├── junk_free.sh
│ ├── log.c
│ ├── mallctl.c
│ ├── malloc_conf_2.c
│ ├── malloc_conf_2.sh
│ ├── malloc_io.c
│ ├── math.c
│ ├── mpsc_queue.c
│ ├── mq.c
│ ├── mtx.c
│ ├── nstime.c
│ ├── oversize_threshold.c
│ ├── pa.c
│ ├── pack.c
│ ├── pack.sh
│ ├── pages.c
│ ├── peak.c
│ ├── ph.c
│ ├── prng.c
│ ├── prof_accum.c
│ ├── prof_accum.sh
│ ├── prof_active.c
│ ├── prof_active.sh
│ ├── prof_gdump.c
│ ├── prof_gdump.sh
│ ├── prof_hook.c
│ ├── prof_hook.sh
│ ├── prof_idump.c
│ ├── prof_idump.sh
│ ├── prof_log.c
│ ├── prof_log.sh
│ ├── prof_mdump.c
│ ├── prof_mdump.sh
│ ├── prof_recent.c
│ ├── prof_recent.sh
│ ├── prof_reset.c
│ ├── prof_reset.sh
│ ├── prof_stats.c
│ ├── prof_stats.sh
│ ├── prof_sys_thread_name.c
│ ├── prof_sys_thread_name.sh
│ ├── prof_tctx.c
│ ├── prof_tctx.sh
│ ├── prof_thread_name.c
│ ├── prof_thread_name.sh
│ ├── psset.c
│ ├── ql.c
│ ├── qr.c
│ ├── rb.c
│ ├── retained.c
│ ├── rtree.c
│ ├── safety_check.c
│ ├── safety_check.sh
│ ├── san.c
│ ├── san.sh
│ ├── san_bump.c
│ ├── sc.c
│ ├── sec.c
│ ├── seq.c
│ ├── size_check.c
│ ├── size_check.sh
│ ├── size_classes.c
│ ├── slab.c
│ ├── smoothstep.c
│ ├── spin.c
│ ├── stats.c
│ ├── stats_print.c
│ ├── sz.c
│ ├── tcache_max.c
│ ├── tcache_max.sh
│ ├── test_hooks.c
│ ├── thread_event.c
│ ├── thread_event.sh
│ ├── ticker.c
│ ├── tsd.c
│ ├── uaf.c
│ ├── witness.c
│ ├── zero.c
│ ├── zero.sh
│ ├── zero_realloc_abort.c
│ ├── zero_realloc_abort.sh
│ ├── zero_realloc_alloc.c
│ ├── zero_realloc_alloc.sh
│ ├── zero_realloc_free.c
│ ├── zero_realloc_free.sh
│ ├── zero_reallocs.c
│ └── zero_reallocs.sh
├── json
└── json.hpp
├── kcp
├── ikcp.c
└── ikcp.h
├── openssl
├── __DECC_INCLUDE_EPILOGUE.H
├── __DECC_INCLUDE_PROLOGUE.H
├── aes.h
├── applink.c
├── asn1.h
├── asn1_mac.h
├── asn1err.h
├── asn1t.h
├── async.h
├── asyncerr.h
├── bio.h
├── bioerr.h
├── blowfish.h
├── bn.h
├── bnerr.h
├── buffer.h
├── buffererr.h
├── camellia.h
├── cast.h
├── cmac.h
├── cms.h
├── cmserr.h
├── comp.h
├── comperr.h
├── conf.h
├── conf_api.h
├── conferr.h
├── crypto.h
├── cryptoerr.h
├── ct.h
├── cterr.h
├── des.h
├── dh.h
├── dherr.h
├── dsa.h
├── dsaerr.h
├── dtls1.h
├── e_os2.h
├── ebcdic.h
├── ec.h
├── ecdh.h
├── ecdsa.h
├── ecerr.h
├── engine.h
├── engineerr.h
├── err.h
├── evp.h
├── evperr.h
├── hmac.h
├── idea.h
├── kdf.h
├── kdferr.h
├── lhash.h
├── md2.h
├── md4.h
├── md5.h
├── mdc2.h
├── modes.h
├── obj_mac.h
├── objects.h
├── objectserr.h
├── ocsp.h
├── ocsperr.h
├── opensslconf.h
├── opensslv.h
├── ossl_typ.h
├── pem.h
├── pem2.h
├── pemerr.h
├── pkcs12.h
├── pkcs12err.h
├── pkcs7.h
├── pkcs7err.h
├── rand.h
├── rand_drbg.h
├── randerr.h
├── rc2.h
├── rc4.h
├── rc5.h
├── ripemd.h
├── rsa.h
├── rsaerr.h
├── safestack.h
├── seed.h
├── sha.h
├── srp.h
├── srtp.h
├── ssl.h
├── ssl2.h
├── ssl3.h
├── sslerr.h
├── stack.h
├── store.h
├── storeerr.h
├── symhacks.h
├── tls1.h
├── ts.h
├── tserr.h
├── txt_db.h
├── ui.h
├── uierr.h
├── whrlpool.h
├── x509.h
├── x509_vfy.h
├── x509err.h
├── x509v3.h
└── x509v3err.h
├── shm_queue
├── shm_common.hpp
├── shm_queue.hpp
├── shm_queue_Linux.hpp
└── shm_queue_Windows.hpp
└── spdlog
├── async.h
├── async_logger-inl.h
├── async_logger.h
├── cfg
├── argv.h
├── env.h
├── helpers-inl.h
└── helpers.h
├── common-inl.h
├── common.h
├── details
├── backtracer-inl.h
├── backtracer.h
├── circular_q.h
├── console_globals.h
├── file_helper-inl.h
├── file_helper.h
├── fmt_helper.h
├── log_msg-inl.h
├── log_msg.h
├── log_msg_buffer-inl.h
├── log_msg_buffer.h
├── mpmc_blocking_q.h
├── null_mutex.h
├── os-inl.h
├── os.h
├── periodic_worker-inl.h
├── periodic_worker.h
├── registry-inl.h
├── registry.h
├── synchronous_factory.h
├── tcp_client-windows.h
├── tcp_client.h
├── thread_pool-inl.h
├── thread_pool.h
├── udp_client-windows.h
├── udp_client.h
└── windows_include.h
├── fmt
├── bin_to_hex.h
├── bundled
│ ├── args.h
│ ├── chrono.h
│ ├── color.h
│ ├── compile.h
│ ├── core.h
│ ├── fmt.license.rst
│ ├── format-inl.h
│ ├── format.h
│ ├── locale.h
│ ├── os.h
│ ├── ostream.h
│ ├── printf.h
│ ├── ranges.h
│ ├── std.h
│ └── xchar.h
├── chrono.h
├── compile.h
├── fmt.h
├── ostr.h
├── ranges.h
├── std.h
└── xchar.h
├── formatter.h
├── fwd.h
├── logger-inl.h
├── logger.h
├── pattern_formatter-inl.h
├── pattern_formatter.h
├── sinks
├── android_sink.h
├── ansicolor_sink-inl.h
├── ansicolor_sink.h
├── base_sink-inl.h
├── base_sink.h
├── basic_file_sink-inl.h
├── basic_file_sink.h
├── callback_sink.h
├── daily_file_sink.h
├── dist_sink.h
├── dup_filter_sink.h
├── hourly_file_sink.h
├── kafka_sink.h
├── mongo_sink.h
├── msvc_sink.h
├── null_sink.h
├── ostream_sink.h
├── qt_sinks.h
├── ringbuffer_sink.h
├── rotating_file_sink-inl.h
├── rotating_file_sink.h
├── sink-inl.h
├── sink.h
├── stdout_color_sinks-inl.h
├── stdout_color_sinks.h
├── stdout_sinks-inl.h
├── stdout_sinks.h
├── syslog_sink.h
├── systemd_sink.h
├── tcp_sink.h
├── udp_sink.h
├── win_eventlog_sink.h
├── wincolor_sink-inl.h
└── wincolor_sink.h
├── spdlog-inl.h
├── spdlog.h
├── stopwatch.h
├── tweakme.h
└── version.h
/Build/Windows/dh2048.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN DH PARAMETERS-----
2 | MIIBCAKCAQEAsC7/ndo7w6BbWoMgop5Ga8q7kkZA5mQYrfPyhKuxEvYj92KAFWyH
3 | DnBaAIGuu7vSkgZeBj2v/ywobf2BtrrzG9IXAWKb/00/5+OUCunD8BJqMblBIUs6
4 | ag+MdMm6FhAvz8lKiVwYkN8eMNbliBXlj0VRtHDtMNig5cEvr3KD4qcN7GZg6udo
5 | szKvLyzC1y7zXpG/QJ4hWJxw0YiPvzy21v/jIJMEeWfhI4hkuDaU3+rePftQwLm7
6 | 3/ZKc6K4tECkfW8rBucV9eYbzPcncsMwfmp7e0pR36zO0cFiza4Mtfs0eg6aCn5L
7 | FzeHa/qz/YxIUqk/OikCiFG8dEE2Kw+lswIBAg==
8 | -----END DH PARAMETERS-----
9 |
--------------------------------------------------------------------------------
/Build/Windows/libcrypto.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Build/Windows/libcrypto.dll
--------------------------------------------------------------------------------
/Build/Windows/libssl.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Build/Windows/libssl.dll
--------------------------------------------------------------------------------
/Common/IFrameObject.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "define.h"
4 | #include "ISessionService.h"
5 |
6 | //插件内需要框架需要使用的对象
7 |
8 | //同步异步执行逻辑标记
9 | enum class EM_LOGIC_RUN_STATE
10 | {
11 | LOGIC_RUN_SYNCHRONOUS = 0, //同步执行
12 | LOGIC_RUN_ASYNHRONOUS, //异步执行
13 | };
14 |
15 | class IFrame_Object
16 | {
17 | public:
18 | virtual bool Regedit_command(uint16 command_id, EM_LOGIC_RUN_STATE em_logic_state = EM_LOGIC_RUN_STATE::LOGIC_RUN_ASYNHRONOUS) = 0;
19 | virtual bool Regedit_command(uint16 command_id, Logic_message_dispose_fn logic_fn, EM_LOGIC_RUN_STATE em_logic_state = EM_LOGIC_RUN_STATE::LOGIC_RUN_ASYNHRONOUS) = 0;
20 | virtual ISessionService* get_session_service() = 0;
21 | };
--------------------------------------------------------------------------------
/Common/IIoBridge.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "define.h"
4 |
5 | //add by freeeyes
6 | //这里我想了良久,最后决定对IO桥接的效率放在第一位。
7 | //那么这个接口应该交付给PacketParse去处理,connect和disconnect
8 |
9 | //实现IO桥接的虚类
10 | class IIoBridge
11 | {
12 | public:
13 | virtual bool add_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type, const _ClientIPInfo& to_io, EM_CONNECT_IO_TYPE to_io_type, ENUM_IO_BRIDGE_TYPE bridge_type = ENUM_IO_BRIDGE_TYPE::IO_BRIDGE_BATH) = 0;
14 | virtual bool delete_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type) = 0;
15 | };
16 |
--------------------------------------------------------------------------------
/Common/VersionConfig.h:
--------------------------------------------------------------------------------
1 | //VersionConfig.h.in
2 | #define V_BUILD_TIME "2023-09-07_12:37:27"
3 | #define V_GIT_INFO "master_v3.0.0-195-gafd6e625"
4 |
--------------------------------------------------------------------------------
/Common/VersionConfig.h.in:
--------------------------------------------------------------------------------
1 | //VersionConfig.h.in
2 | #define V_BUILD_TIME "@build_time@"
3 | #define V_GIT_INFO "@GIT_BRANCH@_@GIT_HASH@"
4 |
--------------------------------------------------------------------------------
/Icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Icon.jpg
--------------------------------------------------------------------------------
/Module_Logic/Test_Logic/BaseCommand.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Module_Logic/Test_Logic/BaseCommand.cpp
--------------------------------------------------------------------------------
/Module_Logic/Test_Logic/BaseCommand.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Module_Logic/Test_Logic/BaseCommand.h
--------------------------------------------------------------------------------
/Module_Logic/Test_Logic/Test_Logic.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ..\..\Build\Windows
5 | WindowsLocalDebugger
6 |
7 |
8 | ..\..\Build\Windows
9 | WindowsLocalDebugger
10 |
11 |
--------------------------------------------------------------------------------
/NOTES-LINUX.md:
--------------------------------------------------------------------------------
1 | Notes for Linux platforms
2 | ===========================
3 |
4 | First enter the path:
5 | cd \Build\Linux
6 | cmake ../../
7 | make
8 |
--------------------------------------------------------------------------------
/NOTES-WINDOWS.md:
--------------------------------------------------------------------------------
1 | Notes for Windows platforms
2 | ===========================
3 |
4 | You can use VS2019 to complete the compilation on windows.
5 |
6 | Main server compilation path:
7 | \PSS_ASIO\PSS_ASIO.sln
8 |
9 | Packet parsing plugin compilation:
10 | PacketParse_Inferface\PacketParse_Interface.sln
11 |
12 | Logic plugin compilation path:
13 | Module_Logic\Test_Logic\Test_Logic.sln
14 |
--------------------------------------------------------------------------------
/PSS_ASIO/Common/ConnectCounter.cpp:
--------------------------------------------------------------------------------
1 | #include "ConnectCounter.h"
2 |
3 | uint32 CConnectCounter::CreateCounter()
4 | {
5 | return ++count_index;
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/PSS_ASIO/Common/ConnectCounter.h:
--------------------------------------------------------------------------------
1 | #ifndef _PSS_CCONNECT_COUNTER_H
2 | #define _PSS_CCONNECT_COUNTER_H
3 |
4 | #include "define.h"
5 | #include "singleton.h"
6 | #include
7 |
8 | //全局计数器
9 | //用于所有不同类型的Connect的id生成,保证唯一。
10 | //add by freeeyes
11 |
12 | class CConnectCounter
13 | {
14 | public:
15 | uint32 CreateCounter(); //得到唯一的新ID
16 |
17 | private:
18 | std::atomic count_index{0};
19 | };
20 |
21 | using App_ConnectCounter = PSS_singleton;
22 |
23 | #endif
24 |
--------------------------------------------------------------------------------
/PSS_ASIO/Common/CoreTimer.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "define.h"
4 | #include "TimerManager.hpp"
5 | #include "singleton.h"
6 |
7 | class PSS_Timer_Manager
8 | {
9 | public:
10 | void Start()
11 | {
12 | m_timerMgr = std::make_shared();
13 |
14 | m_ttTimerThread = std::thread([this]()
15 | {
16 | m_timerMgr->schedule();
17 | PSS_LOGGER_DEBUG("[PSS_Timer_Manager::start]End.");
18 | });
19 | }
20 |
21 | void Close()
22 | {
23 | if (nullptr != m_timerMgr)
24 | {
25 | m_timerMgr->Close();
26 | m_ttTimerThread.join();
27 | }
28 | }
29 |
30 | brynet::TimerMgr::Ptr GetTimerPtr() const
31 | {
32 | return m_timerMgr;
33 | }
34 |
35 | private:
36 | brynet::TimerMgr::Ptr m_timerMgr;
37 | std::thread m_ttTimerThread;
38 | };
39 |
40 | using App_TimerManager = PSS_singleton;
41 |
--------------------------------------------------------------------------------
/PSS_ASIO/Common/ICommunicationService.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "define.h"
4 | #include "asio.hpp"
5 | #include "IoContextPool.h"
6 |
7 | //服务器间链接接口虚类
8 | //add by freeyes
9 |
10 | class ICommunicationInterface
11 | {
12 | public:
13 | virtual ~ICommunicationInterface() = default;
14 |
15 | virtual void init_communication_service(CreateIoContextCallbackFunc callback, uint16 timeout_seconds) = 0;
16 |
17 | virtual bool add_connect(const CConnect_IO_Info& io_info, EM_CONNECT_IO_TYPE io_type) = 0;
18 |
19 | virtual void set_connect_id(uint32 server_id, uint32 connect_id) = 0;
20 |
21 | virtual void reset_connect(uint32 server_id) = 0;
22 |
23 | virtual void close_connect(uint32 server_id) = 0;
24 |
25 | virtual bool is_exist(uint32 server_id) = 0;
26 |
27 | virtual void close() = 0;
28 |
29 | virtual uint32 get_server_id(uint32 connect_id) = 0;
30 |
31 | virtual uint32 get_connect_id(uint32 server_id) = 0;
32 | };
33 |
--------------------------------------------------------------------------------
/PSS_ASIO/Common/IoContextPool.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Common/IoContextPool.cpp
--------------------------------------------------------------------------------
/PSS_ASIO/Common/IoContextPool.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Common/IoContextPool.h
--------------------------------------------------------------------------------
/PSS_ASIO/Common/IoListManager.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //规范化接口服务器指针
4 | //add by freeeyes
5 |
6 | #include "define.h"
7 | #include "IoNetServer.h"
8 |
9 | class CIo_List_Manager
10 | {
11 | public:
12 | virtual void add_accept_net_io_event(string io_ip, io_port_type io_port, EM_CONNECT_IO_TYPE em_io_net_type, shared_ptr Io_Net_server) = 0;
13 | virtual void del_accept_net_io_event(string io_ip, io_port_type io_port, EM_CONNECT_IO_TYPE em_io_net_type) = 0;
14 | };
--------------------------------------------------------------------------------
/PSS_ASIO/Common/IoNetServer.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Common/IoNetServer.h
--------------------------------------------------------------------------------
/PSS_ASIO/Common/SendBuffer.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 |
5 | class CSendBuffer
6 | {
7 | public:
8 | std::string data_;
9 | std::size_t buffer_length_ = 0;
10 |
11 | void set(const char* _buffer, std::size_t _buffer_length)
12 | {
13 | data_.append(_buffer, _buffer_length);
14 | buffer_length_ = _buffer_length;
15 | }
16 | };
--------------------------------------------------------------------------------
/PSS_ASIO/Common/ServerService.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //服务主入口
4 | //add by freeeyes
5 | #include "QueueService.h"
6 | #include "serverconfig.h"
7 | #include "CommunicationService.h"
8 | #include "SessionService.h"
9 | #include "NetSvrManager.h"
10 |
11 | #if PSS_PLATFORM == PLATFORM_WIN
12 | #include
13 | #endif
14 |
15 | class CServerService
16 | {
17 | public:
18 | bool init_service(const std::string& pss_config_file_name = config_file_name);
19 | void close_service();
20 | void stop_service();
21 | };
22 |
23 | using App_ServerService = PSS_singleton;
24 |
--------------------------------------------------------------------------------
/PSS_ASIO/Message/Iobridge.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Message/Iobridge.cpp
--------------------------------------------------------------------------------
/PSS_ASIO/Message/Iobridge.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //提供IO桥接服务注册
4 | //add by freeeyes
5 |
6 | #include "IotoIo.h"
7 | #include "SessionAddrList.h"
8 |
9 | class CIoBridge : public IIoBridge
10 | {
11 | public:
12 | virtual ~CIoBridge() = default;
13 |
14 | bool add_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type, const _ClientIPInfo& to_io, EM_CONNECT_IO_TYPE to_io_type, ENUM_IO_BRIDGE_TYPE bridge_type = ENUM_IO_BRIDGE_TYPE::IO_BRIDGE_BATH) final;
15 | bool delete_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type) final;
16 |
17 | void regedit_bridge_session_info(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE io_type, uint32 session_id, std::shared_ptr from_session);
18 | void unregedit_bridge_session_info(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE io_type, uint32 session_id);
19 | private:
20 | CIotoIo iotoio_;
21 | CSessionAddrList sesion_addr_list_;
22 | };
23 |
24 | using App_IoBridge = PSS_singleton;
25 |
--------------------------------------------------------------------------------
/PSS_ASIO/Message/ModuleInterfalce.cpp:
--------------------------------------------------------------------------------
1 | #include "ModuleInterfalce.h"
2 |
3 | void CModuleInterface::copy_from_module_list(const command_to_module_function& command_to_module_function)
4 | {
5 | command_to_module_function_.clear();
6 | command_to_module_function_ = command_to_module_function;
7 | }
8 |
9 | int CModuleInterface::do_module_message(const CMessage_Source& source, std::shared_ptr recv_packet, std::shared_ptr send_packet)
10 | {
11 | auto f = command_to_module_function_.find(recv_packet->command_id_);
12 | if (f != command_to_module_function_.end())
13 | {
14 | //执行插件函数
15 | return f->second(source, recv_packet, send_packet);
16 | }
17 | else
18 | {
19 | PSS_LOGGER_WARN("[CModuleInterface::do_module_message]no find command_id({0}-->{1})", source.connect_id_, recv_packet->command_id_);
20 | return -1;
21 | }
22 | }
23 |
24 | void CModuleInterface::close()
25 | {
26 | command_to_module_function_.clear();
27 | }
28 |
--------------------------------------------------------------------------------
/PSS_ASIO/Message/ModuleInterfalce.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //处理消息和投递的类
4 |
5 | #include "define.h"
6 | #include "ISession.h"
7 | #include "LoadModule.h"
8 |
9 | class CModuleInterface
10 | {
11 | public:
12 | CModuleInterface() = default;
13 |
14 | void copy_from_module_list(const command_to_module_function& command_to_module_function);
15 |
16 | int do_module_message(const CMessage_Source& source, std::shared_ptr recv_packet, std::shared_ptr send_packet);
17 |
18 | void close();
19 |
20 | private:
21 | command_to_module_function command_to_module_function_;
22 | };
--------------------------------------------------------------------------------
/PSS_ASIO/Message/SessionAddrList.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Message/SessionAddrList.h
--------------------------------------------------------------------------------
/PSS_ASIO/Message/SyncLogic.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 | #include "ISession.h"
6 | #include "LoadModule.h"
7 |
8 | //同步在执行逻辑模块
9 | //add by freeeyes
10 |
11 | class CSyncLogic
12 | {
13 | public:
14 | CSyncLogic(void) = default;
15 |
16 | void Close();
17 |
18 | void Init(const command_to_module_function& command_to_module_function);
19 |
20 | void do_sync_message_list(CMessage_Source& source, vector>& message_list, std::shared_ptr send_packet) const;
21 |
22 | bool do_sync_message(const uint16 command_id, const CMessage_Source& source, std::shared_ptr recv_packet, std::shared_ptr send_packet);
23 |
24 | private:
25 | command_to_module_function command_to_session_function_; //同步线程执行列表
26 | };
27 |
28 | using App_SyncLogic = PSS_singleton;
--------------------------------------------------------------------------------
/PSS_ASIO/PSS_ASIO.cpp:
--------------------------------------------------------------------------------
1 | // PSS_ASIO.cpp : 主工程
2 | //
3 |
4 | #include "ServerService.h"
5 | #include
6 | #include
7 | #include
8 | #if PSS_PLATFORM != PLATFORM_WIN
9 | #include
10 | #include
11 | #endif
12 |
13 | int main(int argc, char* argv[])
14 | {
15 | //读取配置文件参数
16 | if (argc > 2)
17 | {
18 | log_screen("pass asio config file param error.");
19 | return 0;
20 | }
21 |
22 | //如果存在配置文件名称,则读取指定的配置文件
23 | if (argc == 2)
24 | {
25 | App_ServerService::instance()->init_service(argv[1]);
26 | }
27 | else
28 | {
29 | App_ServerService::instance()->init_service("server_config.json");
30 | }
31 | return 0;
32 | }
33 |
--------------------------------------------------------------------------------
/PSS_ASIO/PSS_ASIO.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ..\Build\Windows\
5 | WindowsLocalDebugger
6 |
7 |
8 |
9 |
10 | ..\Build\Windows\
11 | WindowsLocalDebugger
12 |
13 |
--------------------------------------------------------------------------------
/PSS_ASIO/QueueSession/QueueService.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "define.h"
4 | #include "shm_queue/shm_queue.hpp"
5 | #include