Full Code of zaphoyd/websocketpp for AI

master 4dfe1be74e68 cached
268 files
1.6 MB
409.5k tokens
1624 symbols
1 requests
Download .txt
Showing preview only (1,742K chars total). Download the full file or copy to clipboard to get everything.
Repository: zaphoyd/websocketpp
Branch: master
Commit: 4dfe1be74e68
Files: 268
Total size: 1.6 MB

Directory structure:
gitextract_ab40ebgr/

├── .gitattributes
├── .github/
│   └── FUNDING.yml
├── .gitignore
├── .travis.yml
├── CMakeLists.txt
├── COPYING
├── Doxyfile
├── SConstruct
├── changelog.md
├── docs/
│   ├── config.dox
│   ├── faq.dox
│   ├── getting_started.dox
│   ├── handlers.dox
│   ├── logging.dox
│   ├── manual.css
│   ├── manual.dox
│   ├── simple_broadcast_server.cpp
│   ├── simple_count_server_thread.cpp
│   └── tutorials.dox
├── examples/
│   ├── associative_storage/
│   │   ├── CMakeLists.txt
│   │   └── associative_storage.cpp
│   ├── broadcast_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── broadcast_server.cpp
│   ├── debug_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── debug_client.cpp
│   ├── debug_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── debug_server.cpp
│   ├── dev/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── main.cpp
│   ├── echo_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── echo_client.cpp
│   ├── echo_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── echo_handler.hpp
│   │   └── echo_server.cpp
│   ├── echo_server_both/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── echo_server_both.cpp
│   │   └── server.pem
│   ├── echo_server_tls/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── dh.pem
│   │   ├── echo_server_tls.cpp
│   │   └── server.pem
│   ├── enriched_storage/
│   │   ├── CMakeLists.txt
│   │   └── enriched_storage.cpp
│   ├── external_io_service/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── external_io_service.cpp
│   │   └── tcp_echo_server.hpp
│   ├── handler_switch/
│   │   ├── CMakeLists.txt
│   │   └── handler_switch.cpp
│   ├── iostream_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── iostream_server.cpp
│   ├── print_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── print_client.cpp
│   ├── print_client_tls/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── ca-chain.cert.pem
│   │   └── print_client_tls.cpp
│   ├── print_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── print_server.cpp
│   ├── scratch_client/
│   │   ├── SConscript
│   │   └── scratch_client.cpp
│   ├── scratch_server/
│   │   ├── SConscript
│   │   └── scratch_server.cpp
│   ├── simple_broadcast_server/
│   │   ├── CMakeLists.txt
│   │   └── simple_broadcast_server.cpp
│   ├── sip_client/
│   │   ├── CMakeLists.txt
│   │   ├── README.txt
│   │   ├── SConscript
│   │   └── sip_client.cpp
│   ├── subprotocol_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── subprotocol_server.cpp
│   ├── telemetry_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── telemetry_client.cpp
│   ├── telemetry_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── index.html
│   │   └── telemetry_server.cpp
│   ├── testee_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── testee_client.cpp
│   ├── testee_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── testee_server.cpp
│   └── utility_client/
│       ├── CMakeLists.txt
│       ├── SConscript
│       └── utility_client.cpp
├── readme.md
├── roadmap.md
├── test/
│   ├── connection/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── connection.cpp
│   │   ├── connection_tu2.cpp
│   │   └── connection_tu2.hpp
│   ├── endpoint/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── endpoint.cpp
│   ├── extension/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── extension.cpp
│   │   └── permessage_deflate.cpp
│   ├── http/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── parser.cpp
│   │   └── parser_perf.cpp
│   ├── logger/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── basic.cpp
│   ├── message_buffer/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── alloc.cpp
│   │   ├── message.cpp
│   │   └── pool.cpp
│   ├── processors/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── extension_permessage_compress.cpp
│   │   ├── hybi00.cpp
│   │   ├── hybi07.cpp
│   │   ├── hybi08.cpp
│   │   ├── hybi13.cpp
│   │   └── processor.cpp
│   ├── random/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── none.cpp
│   │   └── random_device.cpp
│   ├── roles/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── client.cpp
│   │   └── server.cpp
│   ├── transport/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── asio/
│   │   │   ├── SConscript
│   │   │   ├── base.cpp
│   │   │   ├── security.cpp
│   │   │   └── timers.cpp
│   │   ├── hybi_util.cpp
│   │   ├── integration.cpp
│   │   └── iostream/
│   │       ├── SConscript
│   │       ├── base.cpp
│   │       ├── connection.cpp
│   │       └── endpoint.cpp
│   └── utility/
│       ├── CMakeLists.txt
│       ├── SConscript
│       ├── close.cpp
│       ├── error.cpp
│       ├── frame.cpp
│       ├── sha1.cpp
│       ├── uri.cpp
│       └── utilities.cpp
├── tutorials/
│   ├── broadcast_tutorial/
│   │   └── broadcast_tutorial.md
│   ├── chat_tutorial/
│   │   └── chat_tutorial.md
│   ├── utility_client/
│   │   ├── step1.cpp
│   │   ├── step2.cpp
│   │   ├── step3.cpp
│   │   ├── step4.cpp
│   │   ├── step5.cpp
│   │   ├── step6.cpp
│   │   └── utility_client.md
│   └── utility_server/
│       ├── step1.cpp
│       ├── step2.cpp
│       └── utility_server.md
├── websocketpp/
│   ├── CMakeLists.txt
│   ├── base64/
│   │   └── base64.hpp
│   ├── client.hpp
│   ├── close.hpp
│   ├── common/
│   │   ├── asio.hpp
│   │   ├── asio_ssl.hpp
│   │   ├── chrono.hpp
│   │   ├── connection_hdl.hpp
│   │   ├── cpp11.hpp
│   │   ├── functional.hpp
│   │   ├── md5.hpp
│   │   ├── memory.hpp
│   │   ├── network.hpp
│   │   ├── platforms.hpp
│   │   ├── random.hpp
│   │   ├── regex.hpp
│   │   ├── stdint.hpp
│   │   ├── system_error.hpp
│   │   ├── thread.hpp
│   │   ├── time.hpp
│   │   └── type_traits.hpp
│   ├── concurrency/
│   │   ├── basic.hpp
│   │   └── none.hpp
│   ├── config/
│   │   ├── asio.hpp
│   │   ├── asio_client.hpp
│   │   ├── asio_no_tls.hpp
│   │   ├── asio_no_tls_client.hpp
│   │   ├── boost_config.hpp
│   │   ├── core.hpp
│   │   ├── core_client.hpp
│   │   ├── debug.hpp
│   │   ├── debug_asio.hpp
│   │   ├── debug_asio_no_tls.hpp
│   │   ├── minimal_client.hpp
│   │   └── minimal_server.hpp
│   ├── connection.hpp
│   ├── connection_base.hpp
│   ├── endpoint.hpp
│   ├── endpoint_base.hpp
│   ├── error.hpp
│   ├── extensions/
│   │   ├── extension.hpp
│   │   └── permessage_deflate/
│   │       ├── disabled.hpp
│   │       └── enabled.hpp
│   ├── frame.hpp
│   ├── http/
│   │   ├── constants.hpp
│   │   ├── impl/
│   │   │   ├── parser.hpp
│   │   │   ├── request.hpp
│   │   │   └── response.hpp
│   │   ├── parser.hpp
│   │   ├── request.hpp
│   │   └── response.hpp
│   ├── impl/
│   │   ├── connection_impl.hpp
│   │   ├── endpoint_impl.hpp
│   │   └── utilities_impl.hpp
│   ├── logger/
│   │   ├── basic.hpp
│   │   ├── levels.hpp
│   │   ├── stub.hpp
│   │   └── syslog.hpp
│   ├── message_buffer/
│   │   ├── alloc.hpp
│   │   ├── message.hpp
│   │   └── pool.hpp
│   ├── processors/
│   │   ├── base.hpp
│   │   ├── hybi00.hpp
│   │   ├── hybi07.hpp
│   │   ├── hybi08.hpp
│   │   ├── hybi13.hpp
│   │   └── processor.hpp
│   ├── random/
│   │   ├── none.hpp
│   │   └── random_device.hpp
│   ├── roles/
│   │   ├── client_endpoint.hpp
│   │   └── server_endpoint.hpp
│   ├── server.hpp
│   ├── sha1/
│   │   └── sha1.hpp
│   ├── transport/
│   │   ├── asio/
│   │   │   ├── base.hpp
│   │   │   ├── connection.hpp
│   │   │   ├── endpoint.hpp
│   │   │   └── security/
│   │   │       ├── base.hpp
│   │   │       ├── none.hpp
│   │   │       └── tls.hpp
│   │   ├── base/
│   │   │   ├── connection.hpp
│   │   │   └── endpoint.hpp
│   │   ├── debug/
│   │   │   ├── base.hpp
│   │   │   ├── connection.hpp
│   │   │   └── endpoint.hpp
│   │   ├── iostream/
│   │   │   ├── base.hpp
│   │   │   ├── connection.hpp
│   │   │   └── endpoint.hpp
│   │   └── stub/
│   │       ├── base.hpp
│   │       ├── connection.hpp
│   │       └── endpoint.hpp
│   ├── uri.hpp
│   ├── utf8_validator.hpp
│   ├── utilities.hpp
│   └── version.hpp
└── websocketpp-config.cmake.in

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Lineendings
*.sln       eol=crlf
*.vcproj    eol=crlf
*.vcxproj*  eol=crlf

# Whitespace rules
# strict (no trailing, no tabs)
*.cpp       whitespace=trailing-space,space-before-tab,tab-in-indent,cr-at-eol
*.hpp       whitespace=trailing-space,space-before-tab,tab-in-indent,cr-at-eol
*.c         whitespace=trailing-space,space-before-tab,tab-in-indent,cr-at-eol
*.h         whitespace=trailing-space,space-before-tab,tab-in-indent,cr-at-eol

# normal (no trailing)
*.sql       whitespace=trailing-space,space-before-tab,cr-at-eol
*.txt       whitespace=trailing-space,space-before-tab,cr-at-eol

# special files which must ignore whitespace
*.patch     whitespace=-trailing-space


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: [zaphoyd]


================================================
FILE: .gitignore
================================================
# make .git* files visible to git
!.gitignore
!.gitattributes

.DS_Store

#vim stuff
*~
*.swp

*.o
*.so
*.so.?
*.so.?.?.?
*.a
*.dylib
lib/*

# CMake
*.cmake
*.dir
CMakeFiles
INSTALL.*
ZERO_CHECK.*
CMakeCache.txt
install_manifest.txt

# Windows/Visual Studio
*.vcproj*
*.sln
*.suo
*.ncb
*/Debug/*
*/*/Debug/*
bin/Debug
*/Release/*
*/*/Release/*
*/RelWithDebInfo/*
*/*/RelWithDebInfo/*

# explicitly allow this path with /debug/ in it
!websocketpp/transport/debug/*

objs_shared/
objs_static/

examples/chat_server/chat_server
examples/echo_server/echo_server
examples/chat_client/chat_client
examples/echo_client/echo_client
test/basic/tests
libwebsocketpp.dylib.0.1.0

websocketpp.xcodeproj/xcuserdata/*
websocketpp.xcodeproj/project.xcworkspace/xcuserdata/*
policy_based_notes.hpp

examples/echo_server_tls/echo_server_tls

examples/fuzzing_client/fuzzing_client

examples/stress_client/stress_client

examples/broadcast_server_tls/broadcast_server

test/basic/perf

examples/echo_server_tls/echo_server_tls

examples/concurrent_server/concurrent_server

examples/fuzzing_server_tls/fuzzing_server

examples/wsperf/wsperf

.sconsign.dblite

build/
doxygen/
examples/wsperf/wsperf_client

*.out

*.log
*.opensdf
*.sdf
*.vcxproj
*.vcxproj.filters
*.user
install
Makefile
bin

Testing/Temporary/CTestCostData.txt


================================================
FILE: .travis.yml
================================================
language: cpp
compiler:
  - gcc
before_install:
 #- sudo apt-get install libboost-chrono1.48-dev libboost-regex1.48-dev libboost-system1.48-dev libboost-thread1.48-dev libboost-test1.48-dev libboost-random1.48-dev -y
 - sudo add-apt-repository -y ppa:boost-latest/ppa && sudo apt-get update -q && sudo apt-get install -y libboost-chrono1.55-dev libboost-random1.55-dev libboost-regex1.55-dev libboost-system1.55-dev libboost-thread1.55-dev libboost-test1.55-dev
env:
  global:
    - BOOST_INCLUDES=/usr/include
    - BOOST_LIBS=/usr/lib/x86_64-linux-gnu
script: scons -j 2 && scons test
branches:
  only:
    - master
    - develop
notifications:
  recipients:
    - travis@zaphoyd.com
  email:
    on_success: change
    on_failure: always


================================================
FILE: CMakeLists.txt
================================================

############ Setup project and cmake
# Minimum cmake requirement. We should require a quite recent
# cmake for the dependency find macros etc. to be up to date.
cmake_minimum_required (VERSION 3.10)

############ Paths

set (WEBSOCKETPP_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
set (WEBSOCKETPP_INCLUDE ${WEBSOCKETPP_ROOT}/websocketpp)
set (WEBSOCKETPP_BUILD_ROOT ${CMAKE_CURRENT_BINARY_DIR})
set (WEBSOCKETPP_BIN ${WEBSOCKETPP_BUILD_ROOT}/bin)
set (WEBSOCKETPP_LIB ${WEBSOCKETPP_BUILD_ROOT}/lib)

# CMake install step prefix. I assume linux users want the prefix to
# be the default /usr or /usr/local so this is only adjusted on Windows.
# This must be set prior to any call to project or it will not be read correctly.
# - Windows: Build the INSTALL project in your solution file.
# - Linux/OSX: make install.
if (WIN32)
    set (CMAKE_INSTALL_PREFIX "${WEBSOCKETPP_ROOT}/install" CACHE PATH "")
endif ()

############ Project name and version
set (WEBSOCKETPP_MAJOR_VERSION 0)
set (WEBSOCKETPP_MINOR_VERSION 8)
set (WEBSOCKETPP_PATCH_VERSION 2)
set (WEBSOCKETPP_VERSION ${WEBSOCKETPP_MAJOR_VERSION}.${WEBSOCKETPP_MINOR_VERSION}.${WEBSOCKETPP_PATCH_VERSION})

if(POLICY CMP0048)
  cmake_policy(GET CMP0048 _version_policy)
endif()

if(_version_allowed STREQUAL NEW)
  project (websocketpp VERSION ${WEBSOCKETPP_VERSION})
else()
  project (websocketpp)
endif()

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files")
if (WIN32 AND NOT CYGWIN)
  set (DEF_INSTALL_CMAKE_DIR cmake)
else ()
  set (DEF_INSTALL_CMAKE_DIR lib/cmake/websocketpp)
endif ()
set (INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")

# Make relative paths absolute (needed later on)
foreach (p INCLUDE CMAKE)
  set (var INSTALL_${p}_DIR)
  if (NOT IS_ABSOLUTE "${${var}}")
    set (${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
  endif ()
endforeach ()

# Set CMake library search policy
if (COMMAND cmake_policy)
    cmake_policy (SET CMP0003 NEW)
    cmake_policy (SET CMP0005 NEW)
endif ()

# Disable unnecessary build types
set (CMAKE_CONFIGURATION_TYPES "Release;RelWithDebInfo;Debug" CACHE STRING "Configurations" FORCE)

# Include our cmake macros
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include (CMakeHelpers)


############  Build customization

# Override from command line "CMake -D<OPTION>=TRUE/FALSE/0/1/ON/OFF"
option (ENABLE_CPP11 "Build websocketpp with CPP11 features enabled." TRUE)
option (BUILD_EXAMPLES "Build websocketpp examples." FALSE)
option (BUILD_TESTS "Build websocketpp tests." FALSE)

if (BUILD_TESTS OR BUILD_EXAMPLES)

    enable_testing ()

    ############ Compiler specific setup

    set (WEBSOCKETPP_PLATFORM_LIBS "")
    set (WEBSOCKETPP_PLATFORM_TLS_LIBS "")
    set (WEBSOCKETPP_BOOST_LIBS "")

    # VC9 and C++11 reasoning
    if (ENABLE_CPP11 AND MSVC AND MSVC90)
        message("* Detected Visual Studio 9 2008, disabling C++11 support.")
        set (ENABLE_CPP11 FALSE)
    endif ()

    # Detect clang. Not officially reported by cmake.
    execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-v" ERROR_VARIABLE CXX_VER_STDERR)
    if ("${CXX_VER_STDERR}" MATCHES ".*clang.*")
        set (CMAKE_COMPILER_IS_CLANGXX 1)
    endif ()

    # C++11 defines
    if (ENABLE_CPP11)
        if (MSVC)
            add_definitions (-D_WEBSOCKETPP_CPP11_FUNCTIONAL_)
            add_definitions (-D_WEBSOCKETPP_CPP11_SYSTEM_ERROR_)
            add_definitions (-D_WEBSOCKETPP_CPP11_RANDOM_DEVICE_)
            add_definitions (-D_WEBSOCKETPP_CPP11_MEMORY_)
        else()
            add_definitions (-D_WEBSOCKETPP_CPP11_STL_)
        endif()
    endif ()

    # Visual studio
    if (MSVC)
        set (WEBSOCKETPP_BOOST_LIBS system thread)
        set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL /Gy /GF /Ox /Ob2 /Ot /Oi /MP /arch:SSE2 /fp:fast")
        set (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG /INCREMENTAL:NO /OPT:REF /OPT:ICF")
        add_definitions (/W3 /wd4996 /wd4995 /wd4355)
        add_definitions (-DUNICODE -D_UNICODE)
        add_definitions (-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS)
        add_definitions (-DNOMINMAX)
    endif ()

    # g++
    if (CMAKE_COMPILER_IS_GNUCXX)
        if (NOT APPLE)
            set (WEBSOCKETPP_PLATFORM_LIBS pthread rt)
        else()
            set (WEBSOCKETPP_PLATFORM_LIBS pthread)
        endif()
        set (WEBSOCKETPP_PLATFORM_TLS_LIBS ssl crypto)
        set (WEBSOCKETPP_BOOST_LIBS system thread)
        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
        if (NOT APPLE)
            add_definitions (-DNDEBUG -Wall -Wcast-align) # todo: should we use CMAKE_C_FLAGS for these?
        endif ()

        # Try to detect version. Note: Not tested!
        execute_process (COMMAND ${CMAKE_CXX_COMPILER} "-dumpversion" OUTPUT_VARIABLE GCC_VERSION)
        if ("${GCC_VERSION}" STRGREATER "4.4.0")
            message("* C++11 support partially enabled due to GCC version ${GCC_VERSION}")
            set (WEBSOCKETPP_BOOST_LIBS system thread)
        endif ()
    endif ()

    # clang
    if (CMAKE_COMPILER_IS_CLANGXX)
        if (NOT APPLE)
            set (WEBSOCKETPP_PLATFORM_LIBS pthread rt)
        else()
            set (WEBSOCKETPP_PLATFORM_LIBS pthread)
        endif()
        set (WEBSOCKETPP_PLATFORM_TLS_LIBS ssl crypto)
        set (WEBSOCKETPP_BOOST_LIBS system thread)
        set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++0x -stdlib=libc++") # todo: is libc++ really needed here?
        if (NOT APPLE)
            add_definitions (-DNDEBUG -Wall -Wno-padded) # todo: should we use CMAKE_C_FLAGS for these?
        endif ()
    endif ()

    # OSX, can override above.
    if (APPLE)
        add_definitions (-DNDEBUG -Wall)
    endif ()

    if (BUILD_EXAMPLES)
        list (APPEND WEBSOCKETPP_BOOST_LIBS random)
    endif()

    if (BUILD_TESTS)
        list (APPEND WEBSOCKETPP_BOOST_LIBS unit_test_framework)
    endif()

    ############ Dependencies

    # Set BOOST_ROOT env variable or pass with cmake -DBOOST_ROOT=path.
    # BOOST_ROOT can also be defined by a previous run from cmake cache.
    if (NOT "$ENV{BOOST_ROOT_CPP11}" STREQUAL "")
        # Scons documentation for BOOST_ROOT_CPP11:
        # "look for optional second boostroot compiled with clang's libc++ STL library
        # this prevents warnings/errors when linking code built with two different
        # incompatible STL libraries."
        file (TO_CMAKE_PATH "$ENV{BOOST_ROOT_CPP11}" BOOST_ROOT)
        set (BOOST_ROOT ${BOOST_ROOT} CACHE PATH "BOOST_ROOT dependency path" FORCE)
    endif ()
    if ("${BOOST_ROOT}" STREQUAL "")
        file (TO_CMAKE_PATH "$ENV{BOOST_ROOT}" BOOST_ROOT)
        # Cache BOOST_ROOT for runs that do not define $ENV{BOOST_ROOT}.
        set (BOOST_ROOT ${BOOST_ROOT} CACHE PATH "BOOST_ROOT dependency path" FORCE)
    endif ()

    message ("* Configuring Boost")
    message (STATUS "-- Using BOOST_ROOT")
    message (STATUS "       " ${BOOST_ROOT})

    if (MSVC)
        set (Boost_USE_MULTITHREADED TRUE)
        set (Boost_USE_STATIC_LIBS TRUE)
    else ()
        set (Boost_USE_MULTITHREADED FALSE)
        set (Boost_USE_STATIC_LIBS FALSE)
    endif ()

	if (BOOST_STATIC)
		set (Boost_USE_STATIC_LIBS TRUE)
	endif ()

    if (NOT Boost_USE_STATIC_LIBS)
        add_definitions (-DBOOST_TEST_DYN_LINK)
    endif ()

    set (Boost_FIND_REQUIRED TRUE)
    set (Boost_FIND_QUIETLY TRUE)
    set (Boost_DEBUG FALSE)
    set (Boost_USE_MULTITHREADED TRUE)
    set (Boost_ADDITIONAL_VERSIONS "1.39.0" "1.40.0" "1.41.0" "1.42.0" "1.43.0" "1.44.0" "1.46.1") # todo: someone who knows better spesify these!

    find_package (Boost 1.39.0 COMPONENTS "${WEBSOCKETPP_BOOST_LIBS}")

    if (Boost_FOUND)
        # Boost is a project wide global dependency.
        include_directories (${Boost_INCLUDE_DIRS})
        link_directories (${Boost_LIBRARY_DIRS})

        # Pretty print status
        message (STATUS "-- Include Directories")
        foreach (include_dir ${Boost_INCLUDE_DIRS})
            message (STATUS "       " ${include_dir})
        endforeach ()
        message (STATUS "-- Library Directories")
        foreach (library_dir ${Boost_LIBRARY_DIRS})
            message (STATUS "       " ${library_dir})
        endforeach ()
        message (STATUS "-- Libraries")
        foreach (boost_lib ${Boost_LIBRARIES})
            message (STATUS "       " ${boost_lib})
        endforeach ()
        message ("")
    else ()
        message (FATAL_ERROR "Failed to find required dependency: boost")
    endif ()

    find_package(OpenSSL)
    find_package(ZLIB)
endif()

############ Add projects

# Add main library
add_subdirectory (websocketpp)

# Add examples
if (BUILD_EXAMPLES)
    include_subdirs ("examples")
endif ()

# Add tests
if (BUILD_TESTS)
    include_subdirs ("test")
endif ()

print_used_build_config()

export (PACKAGE websocketpp)

include(CMakePackageConfigHelpers)
configure_package_config_file(websocketpp-config.cmake.in
  "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/websocketpp-config.cmake"
  PATH_VARS INSTALL_INCLUDE_DIR
  INSTALL_DESTINATION "${INSTALL_CMAKE_DIR}"
  NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
write_basic_package_version_file("${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/websocketpp-configVersion.cmake"
  VERSION ${WEBSOCKETPP_VERSION}
  COMPATIBILITY ExactVersion)

# Install the websocketpp-config.cmake and websocketpp-configVersion.cmake
install (FILES
  "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/websocketpp-config.cmake"
  "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/websocketpp-configVersion.cmake"
  DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev)



================================================
FILE: COPYING
================================================
Main Library:

Copyright (c) 2014, Peter Thorson. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of the WebSocket++ Project nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Bundled Libraries:

****** Base 64 Library (base64/base64.hpp) ******
base64.hpp is a repackaging of the base64.cpp and base64.h files into a
single header suitable for use as a header only library. This conversion was
done by Peter Thorson (webmaster@zaphoyd.com) in 2012. All modifications to
the code are redistributed under the same license as the original, which is
listed below.

base64.cpp and base64.h

Copyright (C) 2004-2008 René Nyffenegger

This source code is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this source code must not be misrepresented; you must not
  claim that you wrote the original source code. If you use this source code
  in a product, an acknowledgment in the product documentation would be
  appreciated but is not required.

2. Altered source versions must be plainly marked as such, and must not be
  misrepresented as being the original source code.

3. This notice may not be removed or altered from any source distribution.

René Nyffenegger rene.nyffenegger@adp-gmbh.ch

****** SHA1 Library (sha1/sha1.hpp) ******
sha1.hpp is a repackaging of the sha1.cpp and sha1.h files from the shallsha1
library (http://code.google.com/p/smallsha1/) into a single header suitable for
use as a header only library. This conversion was done by Peter Thorson
(webmaster@zaphoyd.com) in 2013. All modifications to the code are redistributed
under the same license as the original, which is listed below.

 Copyright (c) 2011, Micael Hildenborg
 All rights reserved.

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of Micael Hildenborg nor the
      names of its contributors may be used to endorse or promote products
      derived from this software without specific prior written permission.

 THIS SOFTWARE IS PROVIDED BY Micael Hildenborg ''AS IS'' AND ANY
 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 DISCLAIMED. IN NO EVENT SHALL Micael Hildenborg BE LIABLE FOR ANY
 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

****** MD5 Library (common/md5.hpp) ******
md5.hpp is a reformulation of the md5.h and md5.c code from
http://www.opensource.apple.com/source/cups/cups-59/cups/md5.c to allow it to
function as a component of a header only library. This conversion was done by
Peter Thorson (webmaster@zaphoyd.com) in 2012 for the WebSocket++ project. The
changes are released under the same license as the original (listed below)

Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.

This software is provided 'as-is', without any express or implied
warranty.  In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
 claim that you wrote the original software. If you use this software
 in a product, an acknowledgment in the product documentation would be
 appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
 misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

L. Peter Deutsch
ghost@aladdin.com

****** UTF8 Validation logic (utf8_validation.hpp) ******
utf8_validation.hpp is adapted from code originally written by Bjoern Hoehrmann
<bjoern@hoehrmann.de>. See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for
details.

The original license:

Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Doxyfile
================================================
# Doxyfile 1.8.8

# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------

# This tag specifies the encoding used for all characters in the config file
# that follow. The default is UTF-8 which is also the encoding used for all text
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
# for the list of possible encodings.
# The default value is: UTF-8.

DOXYFILE_ENCODING      = UTF-8

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.

PROJECT_NAME           = WebSocket++

# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER         = 0.8.2

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.

PROJECT_BRIEF          = "C++ websocket client/server library"

# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
# the documentation. The maximum height of the logo should not exceed 55 pixels
# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
# to the output directory.

PROJECT_LOGO           = 

# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.

OUTPUT_DIRECTORY       = doxygen

# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
# will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system.
# The default value is: NO.

CREATE_SUBDIRS         = NO

# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.

ALLOW_UNICODE_NAMES    = NO

# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
# Ukrainian and Vietnamese.
# The default value is: English.

OUTPUT_LANGUAGE        = English

# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.

BRIEF_MEMBER_DESC      = YES

# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.

REPEAT_BRIEF           = YES

# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.

ABBREVIATE_BRIEF       = 

# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.

ALWAYS_DETAILED_SEC    = NO

# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.

INLINE_INHERITED_MEMB  = NO

# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.

FULL_PATH_NAMES        = YES

# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.

STRIP_FROM_PATH        = 

# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.

STRIP_FROM_INC_PATH    = 

# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.

SHORT_NAMES            = NO

# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.

JAVADOC_AUTOBRIEF      = NO

# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.

QT_AUTOBRIEF           = NO

# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.

MULTILINE_CPP_IS_BRIEF = NO

# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.

INHERIT_DOCS           = YES

# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
# new page for each member. If set to NO, the documentation of a member will be
# part of the file/class/namespace that contains it.
# The default value is: NO.

SEPARATE_MEMBER_PAGES  = NO

# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.

TAB_SIZE               = 4

# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:\n"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert
# newlines.

ALIASES                = 

# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.

TCL_SUBST              = 

# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_FOR_C  = NO

# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_JAVA   = NO

# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.

OPTIMIZE_FOR_FORTRAN   = NO

# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.

OPTIMIZE_OUTPUT_VHDL   = NO

# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
# Fortran. In the later case the parser tries to guess whether the code is fixed
# or free formatted code, this is the default for Fortran type files), VHDL. For
# instance to make doxygen treat .inc files as Fortran files (default is PHP),
# and .f files as C (default is Fortran), use: inc=Fortran f=C.
#
# Note For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen.

EXTENSION_MAPPING      = 

# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See http://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.

MARKDOWN_SUPPORT       = YES

# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by by putting a % sign in front of the word
# or globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.

AUTOLINK_SUPPORT       = YES

# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.

BUILTIN_STL_SUPPORT    = YES

# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.

CPP_CLI_SUPPORT        = NO

# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.

SIP_SUPPORT            = NO

# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.

IDL_PROPERTY_SUPPORT   = YES

# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.

DISTRIBUTE_GROUP_DOC   = NO

# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.

SUBGROUPING            = YES

# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.

INLINE_GROUPED_CLASSES = NO

# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.

INLINE_SIMPLE_STRUCTS  = NO

# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.

TYPEDEF_HIDES_STRUCT   = NO

# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.

LOOKUP_CACHE_SIZE      = 0

#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------

# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.

EXTRACT_ALL            = NO

# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
# be included in the documentation.
# The default value is: NO.

EXTRACT_PRIVATE        = NO

# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.

EXTRACT_PACKAGE        = NO

# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
# included in the documentation.
# The default value is: NO.

EXTRACT_STATIC         = YES

# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.

EXTRACT_LOCAL_CLASSES  = YES

# This flag is only useful for Objective-C code. When set to YES local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO only methods in the interface are
# included.
# The default value is: NO.

EXTRACT_LOCAL_METHODS  = NO

# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.

EXTRACT_ANON_NSPACES   = NO

# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_MEMBERS     = NO

# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO these classes will be included in the various overviews. This option has
# no effect if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_CLASSES     = NO

# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO these declarations will be
# included in the documentation.
# The default value is: NO.

HIDE_FRIEND_COMPOUNDS  = NO

# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.

HIDE_IN_BODY_DOCS      = NO

# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.

INTERNAL_DOCS          = NO

# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
# names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
# The default value is: system dependent.

CASE_SENSE_NAMES       = NO

# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES the
# scope will be hidden.
# The default value is: NO.

HIDE_SCOPE_NAMES       = NO

# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.

SHOW_INCLUDE_FILES     = YES

# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.

SHOW_GROUPED_MEMB_INC  = NO

# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.

FORCE_LOCAL_INCLUDES   = NO

# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.

INLINE_INFO            = YES

# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO the members will appear in declaration order.
# The default value is: YES.

SORT_MEMBER_DOCS       = YES

# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.

SORT_BRIEF_DOCS        = NO

# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.

SORT_MEMBERS_CTORS_1ST = NO

# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.

SORT_GROUP_NAMES       = NO

# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.

SORT_BY_SCOPE_NAME     = NO

# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.

STRICT_PROTO_MATCHING  = NO

# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
# todo list. This list is created by putting \todo commands in the
# documentation.
# The default value is: YES.

GENERATE_TODOLIST      = YES

# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
# test list. This list is created by putting \test commands in the
# documentation.
# The default value is: YES.

GENERATE_TESTLIST      = YES

# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.

GENERATE_BUGLIST       = YES

# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.

GENERATE_DEPRECATEDLIST= YES

# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks.

ENABLED_SECTIONS       = 

# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.

MAX_INITIALIZER_LINES  = 30

# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES the list
# will mention the files that were used to generate the documentation.
# The default value is: YES.

SHOW_USED_FILES        = YES

# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.

SHOW_FILES             = YES

# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.

SHOW_NAMESPACES        = YES

# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.

FILE_VERSION_FILTER    = 

# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.

LAYOUT_FILE            = 

# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.

CITE_BIB_FILES         = 

#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------

# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.

QUIET                  = NO

# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.

WARNINGS               = YES

# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.

WARN_IF_UNDOCUMENTED   = YES

# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters
# in a documented function, or documenting parameters that don't exist or using
# markup commands wrongly.
# The default value is: YES.

WARN_IF_DOC_ERROR      = YES

# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO doxygen will only warn about wrong or incomplete parameter
# documentation, but not about the absence of documentation.
# The default value is: NO.

WARN_NO_PARAMDOC       = NO

# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# The default value is: $file:$line: $text.

WARN_FORMAT            = "$file:$line: $text"

# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr).

WARN_LOGFILE           = 

#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------

# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces.
# Note: If this tag is empty the current directory is searched.

INPUT                  = readme.md \
                         changelog.md \
                         roadmap.md \
                         websocketpp \
                         tutorials \
                         docs

# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: http://www.gnu.org/software/libiconv) for the list of
# possible encodings.
# The default value is: UTF-8.

INPUT_ENCODING         = UTF-8

# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank the
# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
# *.qsf, *.as and *.js.

FILE_PATTERNS          = 

# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.

RECURSIVE              = YES

# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
#
# Note that relative paths are relative to the directory from which doxygen is
# run.

EXCLUDE                = build

# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.

EXCLUDE_SYMLINKS       = NO

# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*

EXCLUDE_PATTERNS       = 

# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*

EXCLUDE_SYMBOLS        = 

# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
# command).

EXAMPLE_PATH           = 

# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.

EXAMPLE_PATTERNS       = 

# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.

EXAMPLE_RECURSIVE      = NO

# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
# \image command).

IMAGE_PATH             = 

# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command:
#
# <filter> <input-file>
#
# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
# name of an input file. Doxygen will then use the output that the filter
# program writes to standard output. If FILTER_PATTERNS is specified, this tag
# will be ignored.
#
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.

INPUT_FILTER           = 

# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form: pattern=filter
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.

FILTER_PATTERNS        = 

# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER ) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.

FILTER_SOURCE_FILES    = NO

# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
# it is also possible to disable source filtering for a specific pattern using
# *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.

FILTER_SOURCE_PATTERNS = 

# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.

USE_MDFILE_AS_MAINPAGE = 

#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------

# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
# generated. Documented entities will be cross-referenced with these sources.
#
# Note: To get rid of all source code in the generated output, make sure that
# also VERBATIM_HEADERS is set to NO.
# The default value is: NO.

SOURCE_BROWSER         = YES

# Setting the INLINE_SOURCES tag to YES will include the body of functions,
# classes and enums directly into the documentation.
# The default value is: NO.

INLINE_SOURCES         = NO

# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
# special comment blocks from generated source code fragments. Normal C, C++ and
# Fortran comments will always remain visible.
# The default value is: YES.

STRIP_CODE_COMMENTS    = YES

# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# function all documented functions referencing it will be listed.
# The default value is: NO.

REFERENCED_BY_RELATION = NO

# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.

REFERENCES_RELATION    = NO

# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.

REFERENCES_LINK_SOURCE = YES

# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
# source code will show a tooltip with additional information such as prototype,
# brief description and links to the definition and documentation. Since this
# will make the HTML file larger and loading of large files a bit slower, you
# can opt to disable this feature.
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.

SOURCE_TOOLTIPS        = YES

# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see http://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
# Doxygen will invoke htags (and that will in turn invoke gtags), so these
# tools must be available from the command line (i.e. in the search path).
#
# The result: instead of the source browser generated by doxygen, the links to
# source code will now point to the output of htags.
# The default value is: NO.
# This tag requires that the tag SOURCE_BROWSER is set to YES.

USE_HTAGS              = NO

# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.

VERBATIM_HEADERS       = YES

# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
# cost of reduced performance. This can be particularly helpful with template
# rich C++ code for which doxygen's built-in parser lacks the necessary type
# information.
# Note: The availability of this option depends on whether or not doxygen was
# compiled with the --with-libclang option.
# The default value is: NO.

CLANG_ASSISTED_PARSING = YES

# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.

CLANG_OPTIONS          = 

#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------

# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.

ALPHABETICAL_INDEX     = YES

# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
# which the alphabetical index list will be split.
# Minimum value: 1, maximum value: 20, default value: 5.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.

COLS_IN_ALPHA_INDEX    = 5

# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
# while generating the index headers.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.

IGNORE_PREFIX          = 

#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------

# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
# The default value is: YES.

GENERATE_HTML          = YES

# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_OUTPUT            = html

# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
# The default value is: .html.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FILE_EXTENSION    = .html

# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_HEADER            = 

# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FOOTER            = 

# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_STYLESHEET        = 

# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefor more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra stylesheet files is of importance (e.g. the last
# stylesheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_EXTRA_STYLESHEET  = docs/manual.css

# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
# files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_EXTRA_FILES       = 

# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the stylesheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_HUE    = 236

# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use grayscales only. A
# value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_SAT    = 0

# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
# luminance component of the colors in the HTML output. Values below 100
# gradually make the output lighter, whereas values above 100 make the output
# darker. The value divided by 100 is the actual gamma applied, so 80 represents
# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
# change the gamma.
# Minimum value: 40, maximum value: 240, default value: 80.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_GAMMA  = 148

# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
# to NO can help when comparing the output of multiple runs.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_TIMESTAMP         = NO

# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_DYNAMIC_SECTIONS  = NO

# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to
# such a level that at most the specified number of entries are visible (unless
# a fully collapsed tree already exceeds this amount). So setting the number of
# entries 1 will produce a full collapsed tree by default. 0 is a special value
# representing an infinite number of entries and will result in a full expanded
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_INDEX_NUM_ENTRIES = 100

# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: http://developer.apple.com/tools/xcode/), introduced with
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
# Makefile in the HTML output directory. Running make will produce the docset in
# that directory and running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_DOCSET        = NO

# This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# The default value is: Doxygen generated docs.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_FEEDNAME        = "Doxygen generated docs"

# This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_BUNDLE_ID       = org.doxygen.Project

# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
# The default value is: org.doxygen.Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_PUBLISHER_ID    = org.doxygen.Publisher

# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_PUBLISHER_NAME  = Publisher

# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# Windows.
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
# files are now used as the Windows 98 help format, and will replace the old
# Windows help format (.hlp) on all Windows platforms in the future. Compressed
# HTML files also contain an index, a table of contents, and you can search for
# words in the documentation. The HTML workshop also contains a viewer for
# compressed HTML files.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_HTMLHELP      = NO

# The CHM_FILE tag can be used to specify the file name of the resulting .chm
# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

CHM_FILE               = 

# The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler ( hhc.exe). If non-empty
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

HHC_LOCATION           = 

# The GENERATE_CHI flag controls if a separate .chi index file is generated (
# YES) or that it should be included in the master .chm file ( NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

GENERATE_CHI           = NO

# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

CHM_INDEX_ENCODING     = 

# The BINARY_TOC flag controls whether a binary table of contents is generated (
# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

BINARY_TOC             = NO

# The TOC_EXPAND flag can be set to YES to add extra items for group members to
# the table of contents of the HTML help documentation and to the tree view.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

TOC_EXPAND             = NO

# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
# (.qch) of the generated HTML documentation.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_QHP           = NO

# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
# the file name of the resulting .qch file. The path specified is relative to
# the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES.

QCH_FILE               = 

# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_NAMESPACE          = org.doxygen.Project

# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
# folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_VIRTUAL_FOLDER     = doc

# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_CUST_FILTER_NAME   = 

# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_CUST_FILTER_ATTRS  = 

# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_SECT_FILTER_ATTRS  = 

# The QHG_LOCATION tag can be used to specify the location of Qt's
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
# generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHG_LOCATION           = 

# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To
# install this plugin and make it available under the help contents menu in
# Eclipse, the contents of the directory containing the HTML and XML files needs
# to be copied into the plugins directory of eclipse. The name of the directory
# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
# After copying Eclipse needs to be restarted before the help appears.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_ECLIPSEHELP   = NO

# A unique identifier for the Eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have this
# name. Each documentation set should have its own identifier.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.

ECLIPSE_DOC_ID         = org.doxygen.Project

# If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

DISABLE_INDEX          = NO

# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
# further fine-tune the look of the index. As an example, the default style
# sheet generated by doxygen has an example that shows how to put an image at
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
# the same information as the tab index, you could consider setting
# DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_TREEVIEW      = NO

# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation.
#
# Note that a value of 0 will completely suppress the enum values from appearing
# in the overview section.
# Minimum value: 0, maximum value: 20, default value: 4.
# This tag requires that the tag GENERATE_HTML is set to YES.

ENUM_VALUES_PER_LINE   = 4

# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
# to set the initial width (in pixels) of the frame in which the tree is shown.
# Minimum value: 0, maximum value: 1500, default value: 250.
# This tag requires that the tag GENERATE_HTML is set to YES.

TREEVIEW_WIDTH         = 250

# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

EXT_LINKS_IN_WINDOW    = NO

# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
# output directory to force them to be regenerated.
# Minimum value: 8, maximum value: 50, default value: 10.
# This tag requires that the tag GENERATE_HTML is set to YES.

FORMULA_FONTSIZE       = 10

# Use the FORMULA_TRANPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
# Note that when changing this option you need to delete any form_*.png files in
# the HTML output directory before the changes have effect.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

FORMULA_TRANSPARENT    = YES

# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
# instead of using prerendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

USE_MATHJAX            = NO

# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_FORMAT         = HTML-CSS

# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from http://www.mathjax.org before deployment.
# The default value is: http://cdn.mathjax.org/mathjax/latest.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest

# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_EXTENSIONS     = 

# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_CODEFILE       = 

# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use <access key> + S
# (what the <access key> is depends on the OS and browser, but it is typically
# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
# key> to jump into the search results window, the results can be navigated
# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
# the search. The filter options can be selected when the cursor is inside the
# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
# to select a filter and <Enter> or <escape> to activate or cancel the filter
# option.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

SEARCHENGINE           = YES

# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using Javascript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
# and searching needs to be provided by external tools. See the section
# "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.

SERVER_BASED_SEARCH    = NO

# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
# script for searching. Instead the search results are written to an XML file
# which needs to be processed by an external indexer. Doxygen will invoke an
# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
# search results.
#
# Doxygen ships with an example indexer ( doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTERNAL_SEARCH        = NO

# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
#
# Doxygen ships with an example indexer ( doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and
# Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES.

SEARCHENGINE_URL       = 

# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the
# SEARCHDATA_FILE tag the name of this file can be specified.
# The default file is: searchdata.xml.
# This tag requires that the tag SEARCHENGINE is set to YES.

SEARCHDATA_FILE        = searchdata.xml

# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
# projects and redirect the results back to the right project.
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTERNAL_SEARCH_ID     = 

# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are
# all added to the same external search index. Each project needs to have a
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
# to a relative location where the documentation can be found. The format is:
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTRA_SEARCH_MAPPINGS  = 

#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------

# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
# The default value is: YES.

GENERATE_LATEX         = YES

# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_OUTPUT           = latex

# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when enabling USE_PDFLATEX this option is only used for generating
# bitmaps for formulas in the HTML output, but not in the Makefile that is
# written to the output directory.
# The default file is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_CMD_NAME         = latex

# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

MAKEINDEX_CMD_NAME     = makeindex

# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

COMPACT_LATEX          = NO

# The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer.
# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
# 14 inches) and executive (7.25 x 10.5 inches).
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.

PAPER_TYPE             = a4

# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. To get the times font for
# instance you can specify
# EXTRA_PACKAGES=times
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.

EXTRA_PACKAGES         = 

# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
# generated LaTeX document. The header should contain everything until the first
# chapter. If it is left blank doxygen will generate a standard header. See
# section "Doxygen usage" for information on how to let doxygen write the
# default header to a separate file.
#
# Note: Only use a user-defined header if you know what you are doing! The
# following commands have a special meaning inside the header: $title,
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string,
# for the replacement values of the other commands the user is refered to
# HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_HEADER           = 

# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
# generated LaTeX document. The footer should contain everything after the last
# chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer.
#
# Note: Only use a user-defined footer if you know what you are doing!
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_FOOTER           = 

# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
# markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_EXTRA_FILES      = 

# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
# contain links (just like the HTML output) instead of page references. This
# makes the output suitable for online browsing using a PDF viewer.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.

PDF_HYPERLINKS         = YES

# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
# the PDF file directly from the LaTeX files. Set this option to YES to get a
# higher quality PDF documentation.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.

USE_PDFLATEX           = YES

# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
# command to the generated LaTeX files. This will instruct LaTeX to keep running
# if errors occur, instead of asking the user for help. This option is also used
# when generating formulas in HTML.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_BATCHMODE        = NO

# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
# index chapters (such as File Index, Compound Index, etc.) in the output.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_HIDE_INDICES     = NO

# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
# code with syntax highlighting in the LaTeX output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_SOURCE_CODE      = NO

# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_BIB_STYLE        = plain

#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------

# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
# RTF output is optimized for Word 97 and may not look too pretty with other RTF
# readers/editors.
# The default value is: NO.

GENERATE_RTF           = NO

# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_OUTPUT             = rtf

# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.

COMPACT_RTF            = NO

# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
# contain hyperlink fields. The RTF file will contain links (just like the HTML
# output) instead of page references. This makes the output suitable for online
# browsing using Word or some other Word compatible readers that support those
# fields.
#
# Note: WordPad (write) and others do not support links.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_HYPERLINKS         = NO

# Load stylesheet definitions from file. Syntax is similar to doxygen's config
# file, i.e. a series of assignments. You only have to provide replacements,
# missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_STYLESHEET_FILE    = 

# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's config file. A template extensions file can be generated
# using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_EXTENSIONS_FILE    = 

#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------

# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
# classes and files.
# The default value is: NO.

GENERATE_MAN           = NO

# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. A directory man3 will be created inside the directory specified by
# MAN_OUTPUT.
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_OUTPUT             = man

# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
# optional.
# The default value is: .3.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_EXTENSION          = .3

# The MAN_SUBDIR tag determines the name of the directory created within
# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
# MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_SUBDIR             = 

# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real
# man page(s). These additional files only source the real man page, but without
# them the man command would be unable to find the correct page.
# The default value is: NO.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_LINKS              = NO

#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------

# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
# captures the structure of the code including all documentation.
# The default value is: NO.

GENERATE_XML           = NO

# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: xml.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_OUTPUT             = xml

# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_PROGRAMLISTING     = YES

#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------

# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
# that can be used to generate PDF.
# The default value is: NO.

GENERATE_DOCBOOK       = NO

# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
# front of it.
# The default directory is: docbook.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.

DOCBOOK_OUTPUT         = docbook

# If the DOCBOOK_PROGRAMLISTING tag is set to YES doxygen will include the
# program listings (including syntax highlighting and cross-referencing
# information) to the DOCBOOK output. Note that enabling this will significantly
# increase the size of the DOCBOOK output.
# The default value is: NO.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.

DOCBOOK_PROGRAMLISTING = NO

#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------

# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
# Definitions (see http://autogen.sf.net) file that captures the structure of
# the code including all documentation. Note that this feature is still
# experimental and incomplete at the moment.
# The default value is: NO.

GENERATE_AUTOGEN_DEF   = NO

#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------

# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
# file that captures the structure of the code including all documentation.
#
# Note that this feature is still experimental and incomplete at the moment.
# The default value is: NO.

GENERATE_PERLMOD       = NO

# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_LATEX          = NO

# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
# understand what is going on. On the other hand, if this tag is set to NO the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_PRETTY         = YES

# The names of the make variables in the generated doxyrules.make file are
# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
# so different doxyrules.make files included by the same Makefile don't
# overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_MAKEVAR_PREFIX = 

#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------

# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.

ENABLE_PREPROCESSING   = YES

# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
# in the source code. If set to NO only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

MACRO_EXPANSION        = NO

# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

EXPAND_ONLY_PREDEF     = NO

# If the SEARCH_INCLUDES tag is set to YES the includes files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

SEARCH_INCLUDES        = YES

# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the
# preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.

INCLUDE_PATH           = 

# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will be
# used.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

INCLUDE_FILE_PATTERNS  = 

# The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g.
# gcc). The argument of the tag is a list of macros of the form: name or
# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

PREDEFINED             = 

# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
# macro definition that is found in the sources will be used. Use the PREDEFINED
# tag if you want to use a different macro definition that overrules the
# definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

EXPAND_AS_DEFINED      = 

# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
# remove all references to function-like macros that are alone on a line, have
# an all uppercase name, and do not end with a semicolon. Such function macros
# are typically used for boiler-plate code, and will confuse the parser if not
# removed.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

SKIP_FUNCTION_MACROS   = YES

#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------

# The TAGFILES tag can be used to specify one or more tag files. For each tag
# file the location of the external documentation should be added. The format of
# a tag file without this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where loc1 and loc2 can be relative or absolute paths or URLs. See the
# section "Linking to external documentation" for more information about the use
# of tag files.
# Note: Each tag file must have a unique name (where the name does NOT include
# the path). If a tag file is not located in the directory in which doxygen is
# run, you must also specify the path to the tagfile here.

TAGFILES               = 

# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
# tag file that is based on the input files it reads. See section "Linking to
# external documentation" for more information about the usage of tag files.

GENERATE_TAGFILE       = 

# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
# class index. If set to NO only the inherited external classes will be listed.
# The default value is: NO.

ALLEXTERNALS           = NO

# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
# the modules index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.

EXTERNAL_GROUPS        = YES

# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
# the related pages index. If set to NO, only the current project's pages will
# be listed.
# The default value is: YES.

EXTERNAL_PAGES         = YES

# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of 'which perl').
# The default file (with absolute path) is: /usr/bin/perl.

PERL_PATH              = /usr/bin/perl

#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------

# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
# NO turns the diagrams off. Note that this option also works with HAVE_DOT
# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
# The default value is: YES.

CLASS_DIAGRAMS         = YES

# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.

MSCGEN_PATH            = 

# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.

DIA_PATH               = 

# If set to YES, the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class.
# The default value is: YES.

HIDE_UNDOC_RELATIONS   = YES

# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see:
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is
# set to NO
# The default value is: NO.

HAVE_DOT               = NO

# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
# to run in parallel. When set to 0 doxygen will base this on the number of
# processors available in the system. You can set it explicitly to a value
# larger than 0 to get control over the balance between CPU load and processing
# speed.
# Minimum value: 0, maximum value: 32, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_NUM_THREADS        = 0

# When you want a differently looking font in the dot files that doxygen
# generates you can specify the font name using DOT_FONTNAME. You need to make
# sure dot is able to find the font, which can be done by putting it in a
# standard location or by setting the DOTFONTPATH environment variable or by
# setting DOT_FONTPATH to the directory containing the font.
# The default value is: Helvetica.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_FONTNAME           = Helvetica

# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
# dot graphs.
# Minimum value: 4, maximum value: 24, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_FONTSIZE           = 10

# By default doxygen will tell dot to use the default font as specified with
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
# the path where dot can find it using this tag.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_FONTPATH           = 

# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
# each documented class showing the direct and indirect inheritance relations.
# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

CLASS_GRAPH            = YES

# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
# dependencies (inheritance, containment, and class references variables) of the
# class with other documented classes.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

COLLABORATION_GRAPH    = YES

# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

GROUP_GRAPHS           = YES

# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

UML_LOOK               = NO

# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
# class node. If there are many fields or methods and many nodes the graph may
# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
# number of items for each type to make the size more manageable. Set this to 0
# for no limit. Note that the threshold may be exceeded by 50% before the limit
# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
# but if the number exceeds 15, the total amount of fields shown is limited to
# 10.
# Minimum value: 0, maximum value: 100, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.

UML_LIMIT_NUM_FIELDS   = 10

# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their
# instances.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

TEMPLATE_RELATIONS     = NO

# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the
# direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

INCLUDE_GRAPH          = YES

# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

INCLUDED_BY_GRAPH      = YES

# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

CALL_GRAPH             = NO

# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

CALLER_GRAPH           = NO

# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

GRAPHICAL_HIERARCHY    = YES

# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
# dependencies a directory has on other directories in a graphical way. The
# dependency relations are determined by the #include relations between the
# files in the directories.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

DIRECTORY_GRAPH        = YES

# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot.
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement).
# Possible values are: png, jpg, gif and svg.
# The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_IMAGE_FORMAT       = png

# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
# enable generation of interactive SVG images that allow zooming and panning.
#
# Note that this requires a modern browser other than Internet Explorer. Tested
# and working are Firefox, Chrome, Safari, and Opera.
# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
# the SVG files visible. Older versions of IE do not have SVG support.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

INTERACTIVE_SVG        = NO

# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_PATH               = 

# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the \dotfile
# command).
# This tag requires that the tag HAVE_DOT is set to YES.

DOTFILE_DIRS           = 

# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile
# command).

MSCFILE_DIRS           = 

# The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile
# command).

DIAFILE_DIRS           = 

# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
# path where java can find the plantuml.jar file. If left blank, it is assumed
# PlantUML is not used or called during a preprocessing step. Doxygen will
# generate a warning when it encounters a \startuml command in this case and
# will not generate output for the diagram.
# This tag requires that the tag HAVE_DOT is set to YES.

PLANTUML_JAR_PATH      = 

# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
# that will be shown in the graph. If the number of nodes in a graph becomes
# larger than this value, doxygen will truncate the graph, which is visualized
# by representing a node as a red box. Note that doxygen if the number of direct
# children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
# Minimum value: 0, maximum value: 10000, default value: 50.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_GRAPH_MAX_NODES    = 50

# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
# generated by dot. A depth value of 3 means that only nodes reachable from the
# root by following a path via at most 3 edges will be shown. Nodes that lay
# further from the root node will be omitted. Note that setting this option to 1
# or 2 may greatly reduce the computation time needed for large code bases. Also
# note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
# Minimum value: 0, maximum value: 1000, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.

MAX_DOT_GRAPH_DEPTH    = 0

# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not seem
# to support this out of the box.
#
# Warning: Depending on the platform used, enabling this option may lead to
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_TRANSPARENT        = NO

# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
# this, this feature is disabled by default.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_MULTI_TARGETS      = NO

# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
# explaining the meaning of the various boxes and arrows in the dot generated
# graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

GENERATE_LEGEND        = YES

# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
# files that are used to generate the various graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_CLEANUP            = YES


================================================
FILE: SConstruct
================================================
import os, sys, commands
env = Environment(ENV = os.environ)

# figure out a better way to configure this
if os.environ.has_key('CXX'):
    env['CXX'] = os.environ['CXX']

if os.environ.has_key('DEBUG'):
    env['DEBUG'] = os.environ['DEBUG']

if os.environ.has_key('CXXFLAGS'):
    #env['CXXFLAGS'] = os.environ['CXXFLAGS']
    env.Append(CXXFLAGS = os.environ['CXXFLAGS'])

if os.environ.has_key('LINKFLAGS'):
    #env['LDFLAGS'] = os.environ['LDFLAGS']
    env.Append(LINKFLAGS = os.environ['LINKFLAGS'])

## Boost
##
## Note: You need to either set BOOSTROOT to the root of a stock Boost distribution
## or set BOOST_INCLUDES and BOOST_LIBS if Boost comes with your OS distro e.g. and
## needs BOOST_INCLUDES=/usr/include/boost and BOOST_LIBS=/usr/lib like Ubuntu.
##
if os.environ.has_key('BOOSTROOT'):
    os.environ['BOOST_ROOT'] = os.environ['BOOSTROOT']

if os.environ.has_key('BOOST_ROOT'):
   env['BOOST_INCLUDES'] = os.environ['BOOST_ROOT']
   env['BOOST_LIBS'] = os.path.join(os.environ['BOOST_ROOT'], 'stage', 'lib')
elif os.environ.has_key('BOOST_INCLUDES') and os.environ.has_key('BOOST_LIBS'):
   env['BOOST_INCLUDES'] = os.environ['BOOST_INCLUDES']
   env['BOOST_LIBS'] = os.environ['BOOST_LIBS']
else:
   raise SCons.Errors.UserError, "Neither BOOST_ROOT, nor BOOST_INCLUDES + BOOST_LIBS was set!"

## Custom OpenSSL
if os.environ.has_key('OPENSSL_PATH'):
   env.Append(CPPPATH = os.path.join(os.environ['OPENSSL_PATH'], 'include'))
   env.Append(LIBPATH = os.environ['OPENSSL_PATH'])

if os.environ.has_key('WSPP_ENABLE_CPP11'):
   env['WSPP_ENABLE_CPP11'] = True
else:
   env['WSPP_ENABLE_CPP11'] = False

boost_linkshared = False

def boostlibs(libnames,localenv):
   if localenv['PLATFORM'].startswith('win'):
      # Win/VC++ supports autolinking. nothing to do.
      # http://www.boost.org/doc/libs/1_49_0/more/getting_started/windows.html#auto-linking
      return []
   else:
      libs = []
      prefix = localenv['SHLIBPREFIX'] if boost_linkshared else localenv['LIBPREFIX']
      suffix = localenv['SHLIBSUFFIX'] if boost_linkshared else localenv['LIBSUFFIX']
      for name in libnames:
         lib = File(os.path.join(localenv['BOOST_LIBS'], '%sboost_%s%s' % (prefix, name, suffix)))
         libs.append(lib)
      return libs

if env['PLATFORM'].startswith('win'):
   env.Append(CPPDEFINES = ['WIN32',
                            'NDEBUG',
                            'WIN32_LEAN_AND_MEAN',
                            '_WIN32_WINNT=0x0600',
                            '_CONSOLE',
                            'BOOST_TEST_DYN_LINK',
                            'NOMINMAX',
                            '_WEBSOCKETPP_CPP11_MEMORY_',
                            '_WEBSOCKETPP_CPP11_FUNCTIONAL_'])
   arch_flags  = '/arch:SSE2'
   opt_flags   = '/Ox /Oi /fp:fast'
   warn_flags  = '/W3 /wd4996 /wd4995 /wd4355'
   env['CCFLAGS'] = '%s /EHsc /GR /GS- /MD /nologo %s %s' % (warn_flags, arch_flags, opt_flags)
   env['LINKFLAGS'] = '/INCREMENTAL:NO /MANIFEST /NOLOGO /OPT:REF /OPT:ICF /MACHINE:X86'
elif env['PLATFORM'] == 'posix':
   if env.has_key('DEBUG'):
      env.Append(CCFLAGS = ['-g', '-O0'])
   else:
      env.Append(CPPDEFINES = ['NDEBUG'])
      env.Append(CCFLAGS = ['-O1', '-fomit-frame-pointer'])
   env.Append(CCFLAGS = ['-Wall'])
   #env['LINKFLAGS'] = ''
elif env['PLATFORM'] == 'darwin':
   if not os.environ.has_key('CXX'):
      env['CXX'] = "clang++"
   if env.has_key('DEBUG'):
      env.Append(CCFLAGS = ['-g', '-O0'])
   else:
      env.Append(CPPDEFINES = ['NDEBUG'])
      env.Append(CCFLAGS = ['-O1', '-fomit-frame-pointer'])
   env.Append(CCFLAGS = ['-Wall'])
   #env['LINKFLAGS'] = ''

if env['PLATFORM'].startswith('win'):
   #env['LIBPATH'] = env['BOOST_LIBS']
   pass
else:
   env.Append(LIBPATH = ['/usr/lib', '/usr/local/lib'])

# Compiler specific warning flags
if env['CXX'].startswith('g++'):
   #env.Append(CCFLAGS = ['-Wconversion'])
   env.Append(CCFLAGS = ['-Wcast-align'])
   env.Append(CCFLAGS = ['-Wshadow'])
   env.Append(CCFLAGS = ['-Wunused-parameter'])
elif env['CXX'].startswith('clang++'):
   #env.Append(CCFLAGS = ['-Wcast-align'])
   #env.Append(CCFLAGS = ['-Wglobal-constructors'])
   #env.Append(CCFLAGS = ['-Wconversion'])
   env.Append(CCFLAGS = ['-Wno-padded'])
   env.Append(CCFLAGS = ['-Wshadow'])
   env.Append(CCFLAGS = ['-Wunused-parameter'])

   env.Append(CCFLAGS = ['-Wsometimes-uninitialized'])
   env.Append(CCFLAGS = ['-Wuninitialized'])

   #env.Append(CCFLAGS = ['-Weverything'])
   #env.Append(CCFLAGS = ['-Wno-documentation'])
   #env.Append(CCFLAGS = ['-Wno-weak-vtables'])
   #env.Append(CCFLAGS = ['-Wno-global-constructors'])
   #env.Append(CCFLAGS = ['-Wno-sign-conversion'])
   #env.Append(CCFLAGS = ['-Wno-exit-time-destructors'])




   # Wpadded
   # Wsign-conversion
   #

platform_libs = []
tls_libs = []

tls_build = False

if env['PLATFORM'] == 'posix':
   platform_libs = ['pthread', 'rt']
   tls_libs = ['ssl', 'crypto']
   tls_build = True
elif env['PLATFORM'] == 'darwin':
   tls_libs = ['ssl', 'crypto']
   tls_build = True
elif env['PLATFORM'].startswith('win'):
   # Win/VC++ supports autolinking. nothing to do.
   pass

## Append WebSocket++ path
env.Append(CPPPATH = ['#'])

##### Set up C++11 environment
polyfill_libs = [] # boost libraries used as drop in replacements for incomplete
                   # C++11 STL implementations
env_cpp11 = env.Clone ()

if env_cpp11['CXX'].startswith('g++'):
   # TODO: check g++ version
   GCC_VERSION = commands.getoutput(env_cpp11['CXX'] + ' -dumpversion')

   if GCC_VERSION > "4.4.0":
      print "C++11 build environment partially enabled"
      env_cpp11.Append(WSPP_CPP11_ENABLED = "true",CXXFLAGS = ['-std=c++0x'],TOOLSET = ['g++'],CPPDEFINES = ['_WEBSOCKETPP_CPP11_STL_'])
   else:
      print "C++11 build environment is not supported on this version of G++"
elif env_cpp11['CXX'].startswith('clang++'):
   print "C++11 build environment enabled"
   env.Append(CXXFLANGS = ['-stdlib=libc++'],LINKFLAGS=['-stdlib=libc++'])
   env_cpp11.Append(WSPP_CPP11_ENABLED = "true",CXXFLAGS = ['-std=c++0x','-stdlib=libc++'],LINKFLAGS = ['-stdlib=libc++'],TOOLSET = ['clang++'],CPPDEFINES = ['_WEBSOCKETPP_CPP11_STL_'])

   # look for optional second boostroot compiled with clang's libc++ STL library
   # this prevents warnings/errors when linking code built with two different
   # incompatible STL libraries.
   if os.environ.has_key('BOOST_ROOT_CPP11'):
      env_cpp11['BOOST_INCLUDES'] = os.environ['BOOST_ROOT_CPP11']
      env_cpp11['BOOST_LIBS'] = os.path.join(os.environ['BOOST_ROOT_CPP11'], 'stage', 'lib')
   elif os.environ.has_key('BOOST_INCLUDES_CPP11') and os.environ.has_key('BOOST_LIBS_CPP11'):
      env_cpp11['BOOST_INCLUDES'] = os.environ['BOOST_INCLUDES_CPP11']
      env_cpp11['BOOST_LIBS'] = os.environ['BOOST_LIBS_CPP11']
else:
   print "C++11 build environment disabled"

# if the build system is known to allow the isystem modifier for library include
# values then use it for the boost libraries. Otherwise just add them to the
# regular CPPPATH values.
if env['CXX'].startswith('g++') or env['CXX'].startswith('clang'):
    env.Append(CPPFLAGS = '-isystem ' + env['BOOST_INCLUDES'])
else:
    env.Append(CPPPATH = [env['BOOST_INCLUDES']])
env.Append(LIBPATH = [env['BOOST_LIBS']])

# if the build system is known to allow the isystem modifier for library include
# values then use it for the boost libraries. Otherwise just add them to the
# regular CPPPATH values.
if env_cpp11['CXX'].startswith('g++') or env_cpp11['CXX'].startswith('clang'):
    env_cpp11.Append(CPPFLAGS = '-isystem ' + env_cpp11['BOOST_INCLUDES'])
else:
    env_cpp11.Append(CPPPATH = [env_cpp11['BOOST_INCLUDES']])
env_cpp11.Append(LIBPATH = [env_cpp11['BOOST_LIBS']])

releasedir = 'build/release/'
debugdir = 'build/debug/'
testdir = 'build/test/'
builddir = releasedir

Export('env')
Export('env_cpp11')
Export('platform_libs')
Export('boostlibs')
Export('tls_libs')
Export('polyfill_libs')

## END OF CONFIG !!

## TARGETS:

if not env['PLATFORM'].startswith('win'):
    # Unit tests, add test folders with SConscript files to to_test list.
    to_test = ['utility','http','logger','random','processors','message_buffer','extension','transport/iostream','transport/asio','roles','endpoint','connection','transport'] #,'http','processors','connection'

    for t in to_test:
       new_tests = SConscript('#/test/'+t+'/SConscript',variant_dir = testdir + t, duplicate = 0)
       for a in new_tests:
          new_alias = Alias('test', [a], a.abspath)
          AlwaysBuild(new_alias)

# Main test application
#main = SConscript('#/examples/dev/SConscript',variant_dir = builddir + 'dev',duplicate = 0)

# echo_server
echo_server = SConscript('#/examples/echo_server/SConscript',variant_dir = builddir + 'echo_server',duplicate = 0)

# echo_client
echo_client = SConscript('#/examples/echo_client/SConscript',variant_dir = builddir + 'echo_client',duplicate = 0)

# print_client
print_client = SConscript('#/examples/print_client/SConscript',variant_dir = builddir + 'print_client',duplicate = 0)

# echo_server_tls
if tls_build:
    echo_server_tls = SConscript('#/examples/echo_server_tls/SConscript',variant_dir = builddir + 'echo_server_tls',duplicate = 0)
    echo_server_both = SConscript('#/examples/echo_server_both/SConscript',variant_dir = builddir + 'echo_server_both',duplicate = 0)
    print_client_tls = SConscript('#/examples/print_client_tls/SConscript',variant_dir = builddir + 'print_client_tls',duplicate = 0)

# broadcast_server
broadcast_server = SConscript('#/examples/broadcast_server/SConscript',variant_dir = builddir + 'broadcast_server',duplicate = 0)

# testee_server
testee_server = SConscript('#/examples/testee_server/SConscript',variant_dir = builddir + 'testee_server',duplicate = 0)

# testee_client
testee_client = SConscript('#/examples/testee_client/SConscript',variant_dir = builddir + 'testee_client',duplicate = 0)

# scratch_client
scratch_client = SConscript('#/examples/scratch_client/SConscript',variant_dir = builddir + 'scratch_client',duplicate = 0)

# scratch_server
scratch_server = SConscript('#/examples/scratch_server/SConscript',variant_dir = builddir + 'scratch_server',duplicate = 0)


# debug_client
debug_client = SConscript('#/examples/debug_client/SConscript',variant_dir = builddir + 'debug_client',duplicate = 0)

# debug_server
debug_server = SConscript('#/examples/debug_server/SConscript',variant_dir = builddir + 'debug_server',duplicate = 0)

# subprotocol_server
subprotocol_server = SConscript('#/examples/subprotocol_server/SConscript',variant_dir = builddir + 'subprotocol_server',duplicate = 0)

# telemetry_server
telemetry_server = SConscript('#/examples/telemetry_server/SConscript',variant_dir = builddir + 'telemetry_server',duplicate = 0)

# external_io_service
external_io_service = SConscript('#/examples/external_io_service/SConscript',variant_dir = builddir + 'external_io_service',duplicate = 0)

if not env['PLATFORM'].startswith('win'):
    # iostream_server
    iostream_server = SConscript('#/examples/iostream_server/SConscript',variant_dir = builddir + 'iostream_server',duplicate = 0)

    # telemetry_client
    telemetry_client = SConscript('#/examples/telemetry_client/SConscript',variant_dir = builddir + 'telemetry_client',duplicate = 0)

    # print_server
    print_server = SConscript('#/examples/print_server/SConscript',variant_dir = builddir + 'print_server',duplicate = 0)


================================================
FILE: changelog.md
================================================
HEAD

0.8.2 - 2020-04-19
- Examples: Update print_client_tls example to remove use of deprecated
  OpenSSL functions.
- Compatibility: Removes the use of make_shared in a number of cases where
  it would be incompatible with newer versions of ASIO. Thank you Stefan
  Floeren for the patch. #810 #814 #862 #843 #794 #808
- CMake: Update cmake installer to better handle dependencies when using
  g++ on MacOS. Thank you Luca Palano for reporting and a patch. #831
- CMake: Update cmake installer to use a variable for the include directory
  improving the ability of the install to be customized. THank you Schrijvers
  Luc and Gianfranco Costamanga for reporting and a patch. #842

0.8.1 - 2018-07-16
Note: This release does not change library behavior. It only corrects issues
in the installer and test system.
- Test Suite: Adjust test suite to match behavior introduced in 0.8.0. Thank
  you Gianfranco Costamagna for reporting and a patch. #731
- CMake: Update cmake installer to only install library files globally.
  Thank you Gianfraco Costamanga for reporting and a patch. #732

0.8.0 - 2018-07-12
- Examples: Add `print_client` example. This demonstrates a minimal non-TLS
  client that connects to a server and prints out the messages it receives.
- Examples: Add `print_client_tls` example. This demonstrates a minimal TLS
  client, including basic support via Asio+OpenSSL for certificate chain
  and hostname verification.
- Feature: Add getter for all headers to the HTTP parsers. This allows a
  wrapping library to enumerate all headers to send upstream. Thank you Jupp
  Müller for reporting and an initial pull request.
- Improvement: Move the `socket_init_handler` to execute as a part of `init_asio`
  rather than connection `pre_init`. This allows setting of socket options prior
  to the bind/listen/accept system calls. Thank you ChristianRobl3D for
  reporting #530.
- Improvement: Timers in transport integration tests should only fail if their
  own test times out, rather than any test. #643 Thank you Alex Korotkin for
  reporting and a patch.
- Improvement: Preserve transport layer error codes in more cases, particularly
  during calls to `endpoint::listen`. #652 Thank you vadz for reporting and
  patches.
- Compatibility: Make sure the chrono library used by Boost/Asio is in sync
  with what the websocketpp is using. Thank you Flow86 for reporting and a
  patch.
- Compatibility: Update `telemetry_client` to use a slightly more cross platform
  method of sleeping. Should work on windows now. Thank you Meir Yanovich for
  reporting.
- Compatibility: Updated permessage-deflate support to reflect that the zlib
  library does not actually support a sliding window size of 256 bits. 
  WebSocket++ will no longer negotiate 256 bit deflate windows. If the user
  of the library tries to request a 256 bit window a 512 bit window will be
  specified instead (This was the previous behavior). #596 #653 Thank you 
  Vinnie Falco and Gianfranco Costamagna for reporting.
- Compatibility: Better error handling and logging in cases where extension
  requests parse correctly but negotiation fails.
- Compatibility: Removed custom handling of `SSL_R_SHORT_READ` error condition.
  This error code no longer exists in modern versions of OpenSSL and causes
  a build error. It wasn't being used for anything particularly important
  (slightly improving error reporting) and there isn't a great replacement.
  #599 Thank you Gianfranco Costamagna for reporting.
- Compatibility: Add missing `<stdint>` headers. Fixes issues with g++ 5.4.0.
  #638 Thank you Alex Korotkin for reporting and a patch.
- Compatibility: Remove the use of `std::auto_ptr` and `std::binary_function`
  from builds with C++11 or later. These features are deprecated and were
  removed entirely in C++17. This change allows building WebSocket++ on
  C++17 compilers. #592 Thank you Michal Fojtak for reporting and a patch
- Compatibility: Add 1014 close code and adds missing descriptions for codes
  1012 and 1013. #589 Thank you jbwdevries and ronneke1996 for reporting and
  patches.
- Compatibility: Add hooks to support `mingw-std-threads` C++11 thread and mutex
  polyfill library as an alternative to Boost. #608 Thank you Peter Taylor for
  reporting and an initial patch.
- Compatibility: Changed the handshake connection token to 'Upgrade' from
  'upgrade'. Technically this header is supposed to be processed case
  insensitively. In practice, there are browsers (such as Edge) that don't do
  this and they tend to use the uppercase value used as an example in RFC6455.
  Thank you Johann Bauer for reporting and a patch. #727
- Bug: Store loggers in shared pointers to avoid crashes related to connections
  trying to write logs entries after their respective endpoint has been
  deallocated. Thank you Thalhammer for reporting and Jupp Müller for the 
  patch. #539 #501
- Bug: Change default listen backlog from 0 to `socket_base::max_connections`.
  #549. Thank you derwassi and zwelab for reporting and na1pir for providing
  access to hardware to debug the issue.
- Bug: Fix a crash in the accept loop when `get_connection` fails. #551 Thank you
  Walter Gray for a patch.
- Bug/Documentation: Fix incorrect example code that used 
  `websocketpp::lib::error_code` instead of `websocketpp::exception`. Thank you
  heretic13 for reporting
- Bug: Fix uninitialized shared pointer in Asio transport test suite. #647
  Thank you Alex Korotkin for reporting and a patch.
- Bug: Fix a thread safety issue in the permessage-deflate extension that
  caused message corruption when sending compressed messages from a different
  thread than the main I/O thread. #615 Thank you KyleNyenhuis and Pieter De 
  Gendt for reporting and a patch.
- Bug: Fix an undefined behavior issue performing a 64 bit wide shift on a 64
  bit value. #636 Thank you Gregor Jasny for reporting and a patch
- Bug: Fix some compile issues with ASIO_STANDALONE. #662 #665 Thank you
  chronoxor and Guillaume Egles for reporting and patches.

0.7.0 - 2016-02-22
- MINOR BREAKING SOCKET POLICY CHANGE: Asio transport socket policy method 
  `cancel_socket` will now return `lib::asio::error_code` instead of `void`.
  Custom Asio transport socket policies will need to be updated accordingly.
  This does not affect anyone using the bundled socket policies.
- Feature: Basic support for the permessage-deflate extension. #344
- Feature: Allow accessing the local endpoint when using the Asio transport.
  This allows inspection of the address and port in cases where they are chosen
  by the operating system rather than the user. Thank you Andreas Weis and 
  Muzahid Hussain for reporting and related code. #458
- Feature: Add support for subprotocols in Hybi00. Thank you Lukas Obermann
  for reporting and a patch. #518
- Feature: Adds `tcp_pre_bind handler` to Asio transport. This allows setting
  arbitrary socket options after the listen acceptor has been created but before
  the socket bind has been performed. #634 #439 Thank you Gregor Jasny for
  the patch.
- Improvement: Better automatic std::chrono feature detection for Visual Studio
- Improvement: Major refactoring to bundled CMake build system. CMake can now be
  used to build all of the examples and the test suite. Thank you Thijs Wenker
  for a significant portion of this code. #378, #435, #449
- Improvement: In build environments where `lib::error_code` and 
  `lib::asio::error_code` match (such as using `boost::asio` with 
  `boost::system_error` or standalone asio with `std::system_error`, transport
  errors are passed through natively rather than being reported as a translated 
  `pass_through` error type.
- Improvement: Add a `get_transport_error` method to Asio transport connections
  to allow retrieving a machine readable native transport error.
- Improvement: Add `connection::get_response`, `connection::get_response_code`,
  and `connection::get_response_msg` methods to allow accessing additional
  information about the HTTP responses that WebSocket++ sends. #465 Thank you
  Flow86 for reporting.
- Improvement: Removes use of empty strings ("") in favor of `string::clear()`
  and `string::empty()`. This avoids generating unnecessary temporary objects.
  #468 Thank you Vladislav Yaroslavlev for reporting and a patch.
- Documentation: Adds an example demonstrating the use of external `io_service`
- Documentation: Adds a simple `echo_client` example.
- Documentation: Begins migration of the web based user manual into Doxygen.
- Bug: Fix memory leak when `init_asio` produces an error. #454 Thank you Mark 
  Grimes for reporting and fixing.
- Bug: Fix crash when processing a specially crafted HTTP header. Thank you Eli 
  Fidler for reporting, test cases, and a patch. #456
- Bug: Fix an issue where standalone Asio builds that use TLS would not compile
  due to lingering boost code. #448 Thank you mjsp for reporting
- Bug: Fix an issue where canceling a socket could throw an exception on some
  older Windows XP platforms. It now prints an appropriate set of log messages
  instead. Thank you Thijs Wenker for reporting and researching solutions. #460
- Bug: Fix an issue where deferred HTTP connections that start sending a very 
  long response before their HTTP handler ends would result in a second set of
  HTTP headers being injected into the output. Thank you Kevin Smith for
  reporting and providing test case details. #443
- Bug: Fix an issue where the wrong type of strand was being created. Thank you 
  Bastien Brunnenstein for reporting and a patch. #462
- Bug: Fix an issue where TLS includes were broken for Asio Standalone builds.
  Thank you giachi and Bastien Brunnenstein for reporting. #491
- Bug: Remove the use of cached read and write handlers in the Asio transport.
  This feature caused memory leaks when the `io_service` the connection was
  running on was abruptly stopped. There isn't a clean and safe way of using
  this optimization without global state and the associated locks. The locks
  perform worse. Thank you Xavier Gibert for reporting, test cases, and code.
  Fixes #490.
- Bug: Fix a heap buffer overflow when checking very short URIs. Thank you 
  Xavier Gibert for reporting and a patch #524
- Compatibility: Fixes a number of build & config issues on Visual Studio 2015
- Compatibility: Removes non-standards compliant masking behavior. #395, #469
- Compatibility: Replace deprecated use of `auto_ptr` on systems where 
  `unique_ptr` is available.

0.6.0 - 2015-06-02
- MINOR BREAKING TRANSPORT POLICY CHANGE: Custom transport policies will now be
  required to include a new method `void set_uri(uri_ptr u)`. An implementation
  is not required. The stub transport policy includes an example stub method
  that can be added to any existing custom transport policy to fulfill this
  requirement. This does not affect anyone using the bundled transports or
  configs.
- MINOR BREAKING SOCKET POLICY CHANGE: Custom asio transport socket policies 
  will now be required to include a new method `void set_uri(uri_ptr u)`. Like
  with the transport layer, an implementation is not required. This does not 
  affect anyone using the bundled socket policies.
- MINOR BREAKING DEPENDENCY CHANGE: When using Boost versions greater than or 
  equal to 1.49 in C++03 mode, `libboost-chrono` is needed now instead of 
  `libboost-date_time`. Users with C++11 compilers or using Boost versions 1.48
  and earlier are not affected. Note: This change affects the bundled unit test
  suite.
- Feature: WebSocket++ Asio transport policy can now be used with the standalone
  version of Asio (1.8.0+) when a C++11 compiler and standard library are 
  present. This means that it is possible now to use WebSocket++'s Asio
  transport entirely without Boost. Thank you Robert Seiler for proof of concept
  code that was used as a guide for this implementation. Fixes #324 
- Feature: Adds a vectored/scatter-gather write handler to the iostream
  transport.
- Feature: Adds the ability to defer sending an HTTP response until sometime
  after the `http_handler` is run. This allows processing of long running http
  handlers to defer their response until it is ready without blocking the
  network thread. references #425
- Improvement: `echo_server_tls` has been update to demonstrate how to configure
  it for Mozilla's recommended intermediate and modern TLS security profiles.
- Improvement: `endpoint::set_timer` now uses a steady clock provided by 
  `boost::chrono` or `std::chrono` where available instead of the non-monotonic
  system clock. Thank you breyed for reporting. fixes #241
- Improvement: Outgoing TLS connections to servers using the SNI extension to
  choose a certificate will now work. Thank you moozzyk for reporting. 
  Fixes #400
- Improvement: Removes an unnecessary mutex lock in `get_con_from_hdl`.
- Cleanup: Asio transport policy has been refactored to remove many Boost
  dependencies. On C++03 compilers the `boost::noncopyable` dependency has been
  removed and the `boost::date_time` dependency has been replaced with the newer
  `boost::chrono` when possible. On C++11 compilers the `boost::aligned_storage`
  and `boost::date_time` dependencies are gone, replaced with equivalent C++11
  standard library features.
- Bug: Fixes a potential dangling pointer and inconsistent error message
  handling in `websocketpp::exception`. #432 Thank you Tom Swirly for the fix.

0.5.1 - 2015-02-27
- Bug: Fixes an issue where some frame data was counted against the max header
  size limit, resulting in connections that included a lot of frame data
  immediately after the opening handshake to fail.
- Bug: Fix a typo in the name of the set method for `max_http_body_size`. #406
  Thank you jplatte for reporting.

0.5.0 - 2015-01-22
- BREAKING UTILITY CHANGE: Deprecated methods `http::parser::parse_headers`,
  `http::response::parse_complete`, and `http::request::parse_complete` have
  been removed.
- Security: Disabled SSLv3 in example servers.
- Feature: Adds basic support for accessing HTTP request bodies in the http
  handler. #181
- Feature: Adds the ability to register a shutdown handler when using the
  iostream transport. This provides a clean interface for triggering the shut
  down of external sockets and other cleanup without hooking in to higher level
  WebSocket handlers.
- Feature: Adds the ability to register a write handler when using the iostream
  transport. This handler can be used to handle transport output in place of
  registering an ostream to write to.
- Feature: Adds a new logging policy that outputs to syslog. #386 Thank you Tom
  Hughes for submitting the initial version of this policy.
- Improvement: Message payload logging now prints text for text messages rather
  than binary.
- Improvement: Overhaul of handshake state machine. Should make it impossible
  for exceptions to bubble out of transport methods like `io_service::run`.
- Improvement: Overhaul of handshake error reporting. Fail handler error codes
  will be more detailed and precise. Adds new [fail] and [http] logging channels
  that log failed websocket connections and successful HTTP connections
  respectively. A new aggregate channel package, `alevel::access_core`, allows
  enabling connect, disconnect, fail, and http together. Successful HTTP
  connections will no longer trigger a fail handler.
- Improvement: Ability to terminate connection during an http handler to cleanly
  suppress the default outgoing HTTP response.
- Documentation: Add Sending & Receiving Messages step to chapter one of the
  `utility_client` tutorial. Update `utility_client` example to match.
- Cleanup: Removes unused files & STL includes. Adds required STL includes.
  Normalizes include order.
- Bug: Fixes a fatal state error when a handshake response is completed
  immediately after that handshake times out. #389
- Bug: MinGW fixes; C++11 feature detection, localtime use. #393 Thank you
  Schebb for reporting, code, and testing.
- Bug: Fixes an issue where `websocketpp::exception::what()` could return an out
  of scope pointer. #397 Thank you fabioang for reporting.
- Bug: Fixes an issue where endpoints were not reset properly after a call to
  `endpoint::listen` failed. #390 Thank you wyyqyl for reporting.

0.4.0 - 2014-11-04
- BREAKING API CHANGE: All WebSocket++ methods now throw an exception of type
  `websocketpp::exception` which derives from `std::exception`. This normalizes
  all exception types under the standard exception hierarchy and allows
  WebSocket++ exceptions to be caught in the same statement as others. The error
  code that was previously thrown is wrapped in the exception object and can be
  accessed via the `websocketpp::exception::code()` method.
- BREAKING API CHANGE: Custom logging policies have some new required
  constructors that take generic config settings rather than pointers to
  std::ostreams. This allows writing logging policies that do not involve the
  use of std::ostream. This does not affect anyone using the built in logging
  policies.
- BREAKING UTILITY CHANGE: `websocketpp::lib::net::htonll` and
  `websocketpp::lib::net::ntohll` have been prefixed with an underscore to avoid
  conflicts with similarly named macros in some operating systems. If you are
  using the WebSocket++ provided 64 bit host/network byte order functions you
  will need to switch to the prefixed versions.
- BREAKING UTILITY CHANGE: The signature of `base64_encode` has changed from
  `websocketpp::base64_encode(unsigned char const *, unsigned int)` to
  `websocketpp::base64_encode(unsigned char const *, size_t)`.
- BREAKING UTILITY CHANGE: The signature of `sha1::calc` has changed from
  `websocketpp::sha1::calc(void const *, int, unsigned char *)` to
  `websocketpp::sha1::calc(void const *, size_t, unsigned char *)`
- Feature: Adds incomplete `minimal_server` and `minimal_client` configs that
  can be used to build custom configs without pulling in the dependencies of
  `core` or `core_client`. These configs will offer a stable base config to
  future-proof custom configs.
- Improvement: Core library no longer has std::iostream as a dependency.
  std::iostream is still required for the optional iostream logging policy and
  iostream transport.
- Bug: C++11 Chrono support was being incorrectly detected by the `boost_config`
  header. Thank you Max Dmitrichenko for reporting and a patch.
- Bug: use of `std::put_time` is now guarded by a unique flag rather than a
  chrono library flag. Thank you Max Dmitrichenko for reporting.
- Bug: Fixes non-thread safe use of std::localtime. #347 #383
- Compatibility: Adjust usage of std::min to be more compatible with systems
  that define a min(...) macro.
- Compatibility: Removes unused parameters from all library, test, and example
  code. This assists with those developing with -Werror and -Wunused-parameter
  #376
- Compatibility: Renames ntohll and htonll methods to avoid conflicts with
  platform specific macros. #358 #381, #382 Thank you logotype, unphased,
  svendjo
- Cleanup: Removes unused functions, fixes variable shadow warnings, normalizes
  all whitespace in library, examples, and tests to 4 spaces. #376

0.3.0 - 2014-08-10
- Feature: Adds `start_perpetual` and `stop_perpetual` methods to asio transport
  These may be used to replace manually managed `asio::io_service::work` objects
- Feature: Allow setting pong and handshake timeouts at runtime.
- Feature: Allows changing the listen backlog queue length.
- Feature: Split tcp init into pre and post init.
- Feature: Adds URI method to extract query string from URI. Thank you Banaan
  for code. #298
- Feature: Adds a compile time switch to asio transport config to disable
  certain multithreading features (some locks, asio strands)
- Feature: Adds the ability to pause reading on a connection. Paused connections
  will not read more data from their socket, allowing TCP flow control to work
  without blocking the main thread.
- Feature: Adds the ability to specify whether or not to use the `SO_REUSEADDR`
  TCP socket option. The default for this value has been changed from `true` to
  `false`.
- Feature: Adds the ability to specify a maximum message size.
- Feature: Adds `close::status::get_string(...)` method to look up a human
  readable string given a close code value.
- Feature: Adds `connection::read_all(...)` method to iostream transport as a
  convenience method for reading all data into the connection buffer without the
  end user needing to manually loop on `read_some`.
- Improvement: Open, close, and pong timeouts can be disabled entirely by
  setting their duration to 0.
- Improvement: Numerous performance improvements. Including: tuned default
  buffer sizes based on profiling, caching of handler binding for async
  reads/writes, non-malloc allocators for read/write handlers, disabling of a
  number of questionably useful range sanity checks in tight inner loops.
- Improvement: Cleaned up the handling of TLS related errors. TLS errors will
  now be reported with more detail on the info channel rather than all being
  `tls_short_read` or `pass_through`. In addition, many cases where a TLS short
  read was in fact expected are no longer classified as errors. Expected TLS
  short reads and quasi-expected socket shutdown related errors will no longer
  be reported as unclean WebSocket shutdowns to the application. Information
  about them will remain in the info error channel for debugging purposes.
- Improvement: `start_accept` and `listen` errors are now reported to the caller
  either via an exception or an ec parameter.
- Improvement: Outgoing writes are now batched for improved message throughput
  and reduced system call and TCP frame overhead.
- Bug: Fix some cases of calls to empty lib::function objects.
- Bug: Fix memory leak of connection objects due to cached handlers holding on to
  reference counted pointers. #310 Thank you otaras for reporting.
- Bug: Fix issue with const endpoint accessors (such as `get_user_agent`) not
  compiling due to non-const mutex use. #292 Thank you logofive for reporting.
- Bug: Fix handler allocation crash with multithreaded `io_service`.
- Bug: Fixes incorrect whitespace handling in header parsing. #301 Thank you
  Wolfram Schroers for reporting
- Bug: Fix a crash when parsing empty HTTP headers. Thank you Thingol for
  reporting.
- Bug: Fix a crash following use of the `stop_listening` function. Thank you
  Thingol for reporting.
- Bug: Fix use of variable names that shadow function parameters. The library
  should compile cleanly with -Wshadow now. Thank you giszo for reporting. #318
- Bug: Fix an issue where `set_open_handshake_timeout` was ignored by server
  code. Thank you Robin Rowe for reporting.
- Bug: Fix an issue where custom timeout values weren't being propagated from
  endpoints to new connections.
- Bug: Fix a number of memory leaks related to server connection failures. #323
  #333 #334 #335 Thank you droppy and aydany for reporting and patches.
  reporting.
- Compatibility: Fix compile time conflict with Visual Studio's MIN/MAX macros.
  Thank you Robin Rowe for reporting.
- Documentation: Examples and test suite build system now defaults to clang on
  OS X

0.3.0-alpha4 - 2013-10-11
- HTTP requests ending normally are no longer logged as errors. Thank you Banaan
  for reporting. #294
- Eliminates spurious expired timers in certain error conditions. Thank you
  Banaan for reporting. #295
- Consolidates all bundled library licenses into the COPYING file. #294
- Updates bundled sha1 library to one with a cleaner interface and more
  straight-forward license. Thank you lotodore for reporting and Evgeni Golov
  for reviewing. #294
- Re-introduces strands to asio transport, allowing `io_service` thread pools to
  be used (with some limitations).
- Removes endpoint code that kept track of a connection list that was never used
  anywhere. Removes a lock and reduces connection creation/deletion complexity
  from O(log n) to O(1) in the number of connections.
- A number of internal changes to transport APIs
- Deprecates iostream transport `readsome` in favor of `read_some` which is more
  consistent with the naming of the rest of the library.
- Adds preliminary signaling to iostream transport of eof and fatal transport
  errors
- Updates transport code to use shared pointers rather than raw pointers to
  prevent asio from retaining pointers to connection methods after the
  connection goes out of scope. #293 Thank you otaras for reporting.
- Fixes an issue where custom headers couldn't be set for client connections
  Thank you Jerry Win and Wolfram Schroers for reporting.
- Fixes a compile error on visual studio when using interrupts. Thank you Javier
  Rey Neira for reporting this.
- Adds new 1012 and 1013 close codes per IANA registry
- Add `set_remote_endpoint` method to iostream transport.
- Add `set_secure` method to iostream transport.
- Fix typo in .gitattributes file. Thank you jstarasov for reporting this. #280
- Add missing locale include. Thank you Toninoso for reporting this. #281
- Refactors `asio_transport` endpoint and adds full documentation and exception
  free varients of all methods.
- Removes `asio_transport` endpoint method cancel(). Use `stop_listen()` instead
- Wrap internal `io_service` `run_one()` method
- Suppress error when trying to shut down a connection that was already closed

0.3.0-alpha3 - 2013-07-16
- Minor refactor to bundled sha1 library
- HTTP header comparisons are now case insensitive. #220, #275
- Refactors URI to be exception free and not use regular expressions. This
  eliminates the dependency on boost or C++11 regex libraries allowing native
  C++11 usage on GCC 4.4 and higher and significantly reduces staticly built
  binary sizes.
- Updates handling of Server and User-Agent headers to better handle custom
  settings and allow suppression of these headers for security purposes.
- Fix issue where pong timeout handler always fired. Thank you Steven Klassen
  for reporting this bug.
- Add ping and pong endpoint wrapper methods
- Add `get_request()` pass through method to connection to allow calling methods
  specific to the HTTP policy in use.
- Fix issue compile error with `WEBSOCKETPP_STRICT_MASKING` enabled and another
  issue where `WEBSOCKETPP_STRICT_MASKING` was not applied to incoming messages.
  Thank you Petter Norby for reporting and testing these bugs. #264
- Add additional macro guards for use with boost_config. Thank you breyed
  for testing and code. #261

0.3.0-alpha2 - 2013-06-09
- Fix a regression that caused servers being sent two close frames in a row
  to end a connection uncleanly. #259
- Fix a regression that caused spurious frames following a legitimate close
  frames to erroneously trigger handlers. #258
- Change default HTTP response error code when no http_handler is defined from
  500/Internal Server Error to 426/Upgrade Required
- Remove timezone from logger timestamp to work around issues with the Windows
  implementation of strftime. Thank you breyed for testing and code. #257
- Switch integer literals to char literals to improve VCPP compatibility.
  Thank you breyed for testing and code. #257
- Add MSVCPP warning suppression for the bundled SHA1 library. Thank you breyed
  for testing and code. #257

0.3.0-alpha1 - 2013-06-09
- Initial Release


================================================
FILE: docs/config.dox
================================================
/** \page reference.config Config Reference

WebSocket++ uses a config template parameter to supply a number of compile type policy types and default numerical values for buffer sizes, timeouts, security behavior, etc. Swapping policies allows changing certain core library behavior designed to be pluggable.

A custom config can be made standalone or can subclass one of the bundled configs and just override a few things.

__Example__
```
// some config options may require additional includes or dependencies.
// syslog logging policy, for example, requires <syslog.h>, 
// the permessage deflate settings require zlib.
#include <websocketpp/logger/syslog.hpp>
#include <websocketpp/extensions/permessage_deflate/enabled.hpp>

// Custom server config based on bundled asio config
struct custom_server_config : public websocketpp::config::asio {
	// Replace default stream logger with a syslog logger
	typedef websocketpp::log::syslog<concurrency_type, websocketpp::log::elevel> elog_type;
	typedef websocketpp::log::syslog<concurrency_type, websocketpp::log::alevel> alog_type;

	// Reduce read buffer size to optimize for small messages
	static const size_t connection_read_buffer_size = 1024;

	// enable permessage_compress extension
    struct permessage_deflate_config {};

    typedef websocketpp::extensions::permessage_deflate::enabled
        <permessage_deflate_config> permessage_deflate_type;
};

typedef websocketpp::server<custom_server_config> server_endpoint_type;
```

Core Config Options
-------------------

### Policies

Policies are classes used to allow clean swapping of behavior without changing the core library

| Typedef Name              | Effect                                 |
| ------------------------- | -------------------------------------- |
| concurrency_type          | Concurrency policy                     |
| elog_type                 | Error logger type                      |
| alog_type                 | Access logger type                     |
| request_type              | HTTP request type                      |
| response_type             | HTTP response type                     |
| message_type              | Type to deliver recieved messages      |
| con_msg_manager_type      | Connection level message manager       |
| endpoint_msg_manager_type | Endpoint level message manager         |
| rng_type                  | Random Number Generation policy        |
| transport_type            | Transport policy to use                |
| endpoint_base             | User overridable Endpoint base class   |
| connection_base           | User overridable Connection base class |

### Timeouts Values

These represent the length of time (in ms) before the given operation is aborted

| Field                   | Type | Default | Operation                   |
| ----------------------- | ---- | ------- | --------------------------- |
| timeout_open_handshake  | long | 5000    | Opening handshake           |
| timeout_close_handshake | long | 5000    | Closing handshake           |
| timeout_pong            | long | 5000    | No pong recieved after ping |

### Performance tuning

| Field                       | Type   | Default  | Meaning                                                            |
| --------------------------- | ------ | -------- | ------------------------------------------------------------------ |
| connection_read_buffer_size | size_t | 16384    | Size of the per-connection read buffer                             |
| enable_multithreading       | bool   | true     | Disabling may reduce locking overhead for single threaded programs |

#### Connection Read Buffer

Each connection has an internal buffer of this size. A larger value will result in fewer trips through the library and less CPU overhead at the expense of increased memory usage per connection.

If your application primarily deals in very large messages you may want to try setting this value higher.

If your application has a lot of connections or primarily deals in small messages you may want to try setting this smaller.

### Security settings

| Field                  | Type   | Default | Effect                                 |
| ---------------------- | ------ | ------- | -------------------------------------- |
| drop_on_protocol_error | bool   | false   | Omit close handshake on protocol error |
| silent_close           | bool   | false   | Don't return close codes or reasons    |
| max_message_size       | size_t | 32MB    | WebSocket max message size limit       |
| max_http_body_size     | size_t | 32MB    | HTTP Parser's max body size limit      |

#### Drop on protocol error
Drop connections on protocol error rather than sending a close frame. Off by default. This may result in legitimate messages near the error being dropped as well. It may free up resources otherwise spent dealing with misbehaving clients.

#### Silent Close
Silence close suppresses the return of detailed connection close information during the closing handshake. This information is useful for debugging and presenting useful errors to end users but may be undesirable for security reasons in some production environments. Close reasons could be used by an attacker to confirm that the endpoint is out of resources or be used to identify the WebSocket implementation in use.

Note: this will suppress *all* close codes, including those explicitly sent by local applications.

#### Max message size
Default value for the processor's maximum message size. Maximum message size determines the point at which the library will drop a connection with the message_too_big protocol error.

#### Max HTTP header size
Maximum body size determines the point at which the library will abort reading an HTTP message body and return the 413/request entity too large error.

Transport Config Options
------------------------

### Policies

Policies are classes used to allow clean swapping of behavior without changing the core library

| Typedef Name     | Effect             |
| ---------------- | ------------------ |
| concurrency_type | Concurrency Policy |
| elog_type        | Error logger type  |
| alog_type        | Access logger type |
| request_type     | HTTP request type  |
| response_type    | HTTP response type |

### Timeouts Values

These represent the length of time (in ms) before the given operation is aborted

| Field                    | Type | Default | Operation                                     |
| ------------------------ | ---- | ------- | --------------------------------------------- |
| timeout_socket_pre_init  | long | 5000    | Transport dependent                           |
| timeout_proxy            | long | 5000    | Proxy handshake                               |
| timeout_socket_post_init | long | 5000    | Transport dependent (commonly: TLS handshake) |
| timeout_dns_resolve      | long | 5000    | DNS resolution                                |
| timeout_connect          | long | 5000    | TCP Connect                                   |
| timeout_socket_shutdown  | long | 5000    | Socket shutdown                               |

### Performance tuning

| Field                       | Type   | Default  | Meaning                                                            |
| --------------------------- | ------ | -------- | ------------------------------------------------------------------ |
| enable_multithreading       | bool   | true     | Disabling may reduce locking overhead for single threaded programs |

*/


================================================
FILE: docs/faq.dox
================================================
/** \page faq FAQ

## General Library Usage

### Can a handler be changed after a connection is established? Can one be removed?
Yes, but not globally.

Handlers assigned to endpoints will be automatically copied to the connections created by that endpoint. Changing a handler on an endpoint will only affect future connections.

Once a particular connection is created, it's handlers can be changed individually by calling the `set_*_handler` methods. Once changed, all future events of that type for that connection will use the new handler.

To remove a handler that was previously set, call the set method with `nullptr` or `NULL`.

### Can I reject or conditionally accept a connection
Yes. The `validate` handler is called after the initial handshake has been recieved but before WebSocket++ has responded. This gives you the opportunity to inspect the incoming connection request, its headers, origin, subprotocols, and the remote endpoint IP. Return `true` from the validate handler to accept the connection and `false` to reject it.

To set a custom HTTP error message for your rejection, use `websocketpp::connection::set_status` and (optionally) `websocketpp::connection::set_body()` to set the HTTP status code and error message body text. If you do not set body text a message will be generated automatically based on the status code.

### How do I negotiate subprotocols?
WebSocket connections may offer a particular subprotocol they want to use. The WebSocket protocol does not define the meaning or interpretation of the subprotocol. This interpretation is left up to the individual application endpoints.

WebSocket++ servers can read the requested subprotocols during the `validate` handler by calling `websocketpp::connection::get_requested_subprotocols`. The list is ordered by client priority. You may optionally choose one of these subprotocols with `websocketpp::connection::select_subprotocol`. The handshake will then complete and let the client know which one was chosen. If you do not choose any, the "blank"/empty/none subprotocol will be used.

WebSocket++ clients can add a subprotocol to an outgoing connection by calling `websocketpp::connection::add_subprotocol` before calling `websocketpp::client::connect`. The order of adding will be interpreted as the order of preference.

In both caases, after the connection has been established, the selected subprotocol is available via the `websocketpp::connection::get_subprotocol` method.

Note: some browsers will allow the connection to continue if they requested a subprotocol and your server doesn't select one. Others will reject the connection. 

### How do I cleanly exit an Asio transport based program

The Asio transport based clients and servers use the Asio library's underlying `io_service` to handle asyncronous networking operations. The standard behavior of the io_service is to run until there are no async operations left and then return. WebSocket++, when using the Asio transport, behaves like a standard Asio application. If you want your WebSocket++/Asio based program to stop network operations and cleanly close all sockets you will want to do the following:

- For servers, call `websocketpp::transport::asio::endpoint::stop_listening` to initiate the closing of the server listening socket.
- For clients, if you have engaged perpetual mode with `websocketpp::transport::asio::endpoint::start_perpetual`, disable it with `websocketpp::transport::asio::endpoint::stop_perpetual`.
- For both, run `websocketpp::endpoint::close` or `websocketpp::connection::close` on all currently outstanding connections. This will initiate the WebSocket closing handshake for these connections
- Wait. Asio is asyncronous. When the calls to the above methods (stop_listening, close, etc) complete the server *will still be listening*, the connections *will still be active* until the io_service gets around to asyncronously processing the socket and WebSocket protocol closing handshakes. The `io_service::run` method will exit cleanly and automatically when all operations are complete.

__WARNING__: Asio's `io_service` has a method called `stop`. WebSocket++ wraps this method as `websocketpp::transport::asio::endpoint::stop`. While this operation has a benign sounding name, it is a powerful and destructive operation that should only be used in special cases. If you are using `io_service::stop` or `endpoint::stop` without a very good reason your program is likely broken and may exhibit erratic behavior. Specifically, `io_service::stop` stops the processing of events entirely. This does not give current operations (such as socket closing handshakes) the opportunity to finish. It will leave your sockets in a dangling state that may invoke operating system level timeouts or other errors.

__Special cases__:
- If your client uses the `start_perpetual` method it will prevent the io_service from exiting even if it has nothing to do. This is useful if you want a client endpoint to idle in the background to allow new connections to be formed on demand rather than generating a new endpoint for each.
- If you are using an external io_service and/or are placing non-WebSocket++ operations on the `io_service` those operations may keep the `io_service` open even after all WebSocket++ operations have completed.
- If you are using `poll`/`poll_one`/`run_one` or otherwise manually driving the `io_service` event loop you may need to adjust usage to make sure you are correctly recognizing the "done with work" and "not done but idling / `io_service::work`" cases.

### Is there a way to check the validity of a `connection_hdl`?

Sometimes, not generally though, because there isn’t a way to check if a TCP connection is valid.

You can try upgrading your hdl to a full connection_ptr using `websocketpp::endpoint::get_con_from_hdl`. If this fails, the hdl is definitely invalid. If it succeeds it may or may not be. The only way to tell definitively is to try and send something (either a message or a ping).

If you handle errors from methods like send, ping, close, etc correctly then you shouldn’t have to worry about accidentally sending to dead connections. The send/ping/pong/close methods will set or throw a specific error in the case that you tried to send something but the connection was closed/gone/etc.

### How do I fix the "address is in use" error when trying to restart my server?

Normally, for security purposes, operating systems prevent programs from listening on sockets created by other programs. When your program crashes and restarts, the new instance is a different program from the perspective of the operating system. As such it can’t listen on the socket address/port that the previous program was using until after a timeout occurs to make sure the old program was done with it.

The first step for handling this is to make sure that you provide a method (signal handler, admin websocket message, etc) to perform a clean server shutdown. There is a question elsewhere in this FAQ that describes the steps necessary for this.

The clean close strategy won't help in the case of crashes or other abnormal closures. An option to consider for these cases is the use of the SO_REUSEADDR socket option. This instructs the OS to not request an exclusive lock on the socket. This means that after your program crashes the replacement you start can immediately listen on that address/port combo again.

__Please note__: how this works exactly depends on your operating system. Additionally, not exclusively locking your listening socket could allow hijacking by other programs if you are running in a shared resource environment. For development this is generally no problem. For a production environment, think carefully about the security model. `websocketpp::transport::asio::endpoint::set_reuse_addr` is the method to do this. You must specify this setting before calling `websocketpp::transport::asio::endpoint::listen`.

### How do I send and recieve binary messages?

When supported by the remote endpoint, WebSocket++ allows reading and sending messages in the two formats specified in RFC6455, UTF8 text and binary. WebSocket++ performs UTF8 validation on all outgoing text messages to ensure that they meet the specification. Binary messages do not have any additional processing and their interpretation is left entirely to the library user.

To determine the type of an incoming message, use `websocketpp::message_buffer::message::get_opcode`. The relevant return values are `websocketpp::frame::opcode::text` and `websocketpp::frame::opcode::binary`. There is no difference in how payloads are retrieved between these modes, only in how WebSocket++ validated the contents and how the library user is to interpret the data.

To specify the type of an outgoing message, use the frame opcode values listed above as the second op parameter for `websocketpp::connection::send`. There are two relevant overloads of send. One that takes a `std::string` and defaults to op=text. The other that takes a `void const *` and a `size_t` length and defaults to op=binary. Note: You can send binary messages via the string overload and text messages via the void * overload. In the case that you are manually building a message buffer rather than using the automatic send member functions, you can pass the opcode in as a parameter to the message buffer constructor or user the `websocketpp::message_buffer::message::set_opcode` member function to set or re-set it later.

## Dependency Management

### Can WebSocket++ be used without Boost?
Yes. WebSocket++ only uses Boost features as polyfills for C++11 language features and libraries. If you have a C++11 compiler and standard library you can use WebSocket++ without Boost. In most cases setting your build environment to use the C++11 (or later) language dialect is sufficient to enable this mode of use.

With less common compilers (and sometimes very recently release compilers) there may be specific issues with certain libraries that aren't automatically detected by the library. For these situations there are additional defines available to fine tune which C++11 libraries and features are used. TODO: more details about them.

For the iostream/raw transport the C++11 standard library is sufficient. For the Asio based transports, there is no C++11 library that provides the networking capabilaties that Asio does. As such even with a C++11 build system, you will need a standalone copy of Asio to use if Boost Asio is not available.

MinGW users who want to avoid Boost should also consult the nearby question about MinGW compatibility.

### Can WebSocket++ be used with standalone Asio
Yes. The process is the same as used with standalone Asio itself. Define `ASIO_STANDALONE` before including Asio or WebSocket++ headers. You will need to download a copy of the Asio headers separately (http://www.think-async.com) and make sure they are in your build system's include path.

### Can WebSocket++ be used without TLS or OpenSSL?
Yes. When using the iostream/raw transport, there are no TLS features and OpenSSL is not required. When using the Asio transport TLS features are optional. You only need OpenSSL if you want to use TLS. You can only make or recieve encrypted connections (https/wss) if you have enabled TLS features.

Whether an Asio endpoint uses TLS or not is determined by its config template parameter. The default bundled `websocketpp::config::asio` and `websocketpp::config::asio_client` configs do not support TLS, the `websocketpp::config::asio_tls` and `websocketpp::config::asio_tls_client` do.

The `<websocketpp/config/asio.hpp>` and `<websocketpp/config/asio_client.hpp>` headers will include both the TLS and non-TLS varients of their respective configs and require the presence of OpenSSL. The `<websocketpp/config/asio_no_tls.hpp>` and `<websocketpp/config/asio_no_tls_client.hpp>` headers will include only the non-TLS configs and do not require OpenSSL.

### Build issues with TLS on recent versions of OS X
Mac OS X ships a severely outdated version of the OpenSSL library. To securely use TLS with WebSocket++ on OS X you will need to install a modern version of OpenSSL via homebrew or compiling from source.

### Can WebSocket++ be used with MinGW
Generally, yes. Note that in C++11 mode MinGW does not currently support the C++11 STL `<thread>` library. WebSocket++ requires a thread/mutex library. Options include Boost thread (the default when a compatible C++11 `<thread>` can't be found) or `mingw-std-threads` (https://github.com/meganz/mingw-std-threads) by including those headers and defining `_WEBSOCKETPP_MINGW_THREAD_`.

## Compression

### How do I use permessage-deflate in version 0.6.0-permessagedeflate and 0.7.0?

These versions of the library require a custom config to use the permessage-deflate extension. Here is a minimal example of such a custom config. You can also integrate these lines into an existing custom config.

Note that in these versions there is no fine grained control over which connections are compressed or not. Clients will request compression with the default settings and use it if the server supports it. Servers will accept whatever parameters clients request.

Outgoing messages by default will be compressed if compression was auto-negotiated during the handshake. There is an option to force a specific message to be sent uncompressed even if compression was negotiated. This may be useful for sending data that you know to be compressed already (images, zip files, etc).


__Server Example__
```
#include <websocketpp/extensions/permessage_deflate/enabled.hpp>

struct deflate_server_config : public websocketpp::config::asio {
	// ... additional custom config if you need it for other things

	/// permessage_compress extension
    struct permessage_deflate_config {};

    typedef websocketpp::extensions::permessage_deflate::enabled
        <permessage_deflate_config> permessage_deflate_type;
};

typedef websocketpp::server<deflate_server_config> server_endpoint_type;
```

__Client Example__
```
#include <websocketpp/extensions/permessage_deflate/enabled.hpp>

struct deflate_client_config : public websocketpp::config::asio_client {
	// ... additional custom config if you need it for other things

	/// permessage_compress extension
    struct permessage_deflate_config {};

    typedef websocketpp::extensions::permessage_deflate::enabled
        <permessage_deflate_config> permessage_deflate_type;
};

typedef websocketpp::client<deflate_client_config> client_endpoint_type;
```

## Security

### Is it possible to terminate a malicious connection quickly, without tying up resources performing clean close steps, 

Yes. The library will automatically detect and terminate connections that violate the WebSocket protocol. In cases where the library believes the remote endpoint to be malicious or sufficiently broken to be unlikely to understand or process the closing handshake, it will be omited.

If your application detects conditions above the protocol level that you believe to be malicious, for example, if you recognize an IP from a known denial of service attack, you can close the connection with two different levels of urgency. Use the standard `websocketpp::endpoint::close` or `websocketpp::connection::close` methods with one of the following special close codes:
- `websocketpp::close::status::omit_handshake`: Omits the closing handshake, but cleanly closes the TCP connection.
- `websocketpp::close::status::force_tcp_drop`: Forcibly drop the TCP connection.

Please note that usage of these disconnect methods results in a violation of the WebSocket protocol and may have negative reprocusions for the remote endpoint with respect to network timeouts. Please use caution when using them.

## Build Issues

### Getting compile errors related to `std::chrono`, `boost::chrono`, `waitable_timer`, or `steady_clock`

Your build system may be confused about whether it is supposed to be using `boost::chrono` or `std::chrono`. Boost automatically detects this setup on some compilers but not others. Defining `BOOST_ASIO_HAS_STD_CHRONO` can help. See http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/overview/cpp2011/chrono.html for more details.

*/


================================================
FILE: docs/getting_started.dox
================================================
/** \page getting_started Getting Started

WebSocket++ code is available on github at https://github.com/zaphoyd/websocketpp
The official project homepage lives at http://www.zaphoyd.com/websocketpp

The git repository is organized into several directories:

- **docs**: This documentation
- **examples**: Example programs that demonstrate how to build basic versions of some commonly used patterns for WebSocket clients and servers.
- **test**: Unit tests that confirm that the code you have works properly and help detect platform specific issues.
- **tutorials**: Detailed walkthroughs of a select set of the example programs.
- **websocketpp**: All of the library code and default configuration files.

WebSocket++ is a header only library. You can start using it by including the websocketpp source directory in your project's include path and including the appropriate WebSocket++ headers in your program. You may also need to include and/or link to appropriate Boost/system libraries. TODO: More information: Building a program with WebSocket++, Walkthroughs of the example programs

WebSocket++ includes cmake and scons scripts for building the examples and unit tests. Neither system is needed unless you want to build tests or examples in an automated fashion.

__Usage questions__ should be posted to the project mailing list at http://groups.google.com/group/websocketpp/ or the IRC channel (\#websocketpp on freenode).

__Bugs and issues__ should be posted to the project GitHub issues queue: https://github.com/zaphoyd/websocketpp/issues.

__Pull requests__ on GitHub are welcome. Please make them against the `develop` branch.

WebSocket++ is written and maintained by Peter Thorson. You can contact me via GitHub messaging, IRC, or via email at websocket@zaphoyd.com.

*/



================================================
FILE: docs/handlers.dox
================================================
/** \page reference.handlers Handler Reference

Handlers allow WebSocket++ programs to receive notifications about events
that happen in relation to their connections. Some handlers also behave as
hooks that give the program a chance to modify state or adjust settings before
the connection continues.

Handlers are registered by calling the appropriate `set_*_handler` method on either an
endpoint or connection. The * refers to the name of the handler (as 
specified in the signature field below). For example, to set the open handler,
call `set_open_handler(...)`.

Setting handlers on an endpoint will result in them being copied as the default
handler to all new connections created by that endpoint. Changing an endpoint's
handlers will not affect connections that are already in progress. This includes
connections that are in the listening state. As such, it is important to set any
endpoint handlers before you call `endpoint::start_accept` or else the handlers
will not be attached to your first connection.

Setting handlers on a connection will result in the handler being changed for
that connection only, starting at the next time that handler is called. This can
be used to change the handler during a connection.

Connection Handlers
-------------------

These handlers will be called at most once per connection in the order specified below.

### Socket Init Handler

| Event                 | Signature                                             | Availability         |
| --------------------- | ----------------------------------------------------- | -------------------- |
| Socket initialization | `socket_init(connection_hdl, asio::ip::tcp::socket&)` | 0.3.0 Asio Transport |

This hook is triggered after the socket has been initialized but before a connection is established. 
It allows setting arbitrary socket options before connections are sent/recieved.

### TCP Pre-init Handler

| Event                         | Signature                      | Availability         |
| ----------------------------- | ------------------------------ | -------------------- |
| TCP established, no data sent | `tcp_pre_init(connection_hdl)` | 0.3.0 Asio Transport |

This hook is triggered after the TCP connection is established, but before any pre-WebSocket-handshake 
operations have been run. Common pre-handshake operations include TLS handshakes and proxy connections.

### TCP Post-init Handler

| Event                   | Signature                                  | Availability                  |
| ----------------------- | ------------------------------------------ | ----------------------------- |
| Request for TLS context | `tls_context_ptr tls_init(connection_hdl)` | 0.3.0 Asio Transport with TLS |

This hook is triggered before the TLS handshake to request the TLS context to use. You must 
return a pointer to a configured TLS conext to continue. This provides the opportuinity to 
set up the TLS settings, certificates, etc.

### Validate Handler

| Event                                 | Signature                       | Availability                 |
| ------------------------------------- | ------------------------------- | ---------------------------- |
| Hook to accept or reject a connection | `bool validate(connection_hdl)` | 0.3.0 Core, Server role only |

This hook is triggered for servers during the opening handshake after the request has been 
processed but before the response has been sent. It gives a program the opportunity to inspect
headers and other connection details and either accept or reject the connection. Validate happens
before the open or fail handler.

Return true to accept the connection, false to reject. If no validate handler is registered, 
all connections will be accepted.

### Open Connection Handler

| Event                     | Signature              | Availability |
| ------------------------- | ---------------------- | ------------ |
| Successful new connection | `open(connection_hdl)` | 0.3.0 Core   |

Either open or fail will be called for each connection. Never both. All
connections that begin with an open handler call will also have a matching
close handler call when the connection ends.

### Fail Connection Handler

| Event                               | Signature              | Availability |
| ----------------------------------- | ---------------------- | ------------ |
| Connection failed (before opening)  | `fail(connection_hdl)` | 0.3.0 Core   |

Either open or fail will be called for each connection. Never both. Connections
that fail will never have a close handler called.

### Close Connection Handler

| Event                             | Signature               | Availability |
| --------------------------------- | ----------------------- | ------------ |
| Connection closed (after opening) | `close(connection_hdl)` | 0.3.0 Core   |

Close will be called exactly once for every connection that open was called for.
Close is not called for failed connections.

Message Handlers
----------------

These handers are called in response to incoming messages or message like events. They only will be called while the connection is in the open state.

### Message Handler

| Event                 | Signature                              | Availability |
| --------------------- | -------------------------------------- | ------------ |
| Data message recieved | `message(connection_hdl, message_ptr)` | 0.3.0 Core   |

Applies to all non-control messages, including both text and binary opcodes. The
`message_ptr` type and its API depends on your endpoint type and its config.

### Ping Handler

| Event         | Signature                                | Availability |
| ------------- | ---------------------------------------- | ------------ |
| Ping recieved | `bool ping(connection_hdl, std::string)` | 0.3.0 Core   |

Second (string) argument is the binary ping payload. Handler return value
indicates whether or not to respond to the ping with a pong. If no ping handler
is set, WebSocket++ will respond with a pong containing the same binary data as
the ping (Per requirements in RFC6455).

### Pong Handler

| Event         | Signature                           | Availability |
| ------------- | ----------------------------------- | ------------ |
| Pong recieved | `pong(connection_hdl, std::string)` | 0.3.0 Core   |

Second (string) argument is the binary pong payload.

### Pong Timeout Handler

| Event                              | Signature                                   | Availability                             |
| ---------------------------------- | ------------------------------------------- | ---------------------------------------- |
| Timed out while waiting for a pong | `pong_timeout(connection_hdl, std::string)` | 0.3.0 Core, transport with timer support |

Triggered if there is no response to a ping after the configured duration. The second
(string) argument is the binary payload of the unanswered ping.

### HTTP Handler

| Event                 | Signature             | Availability                 |
| --------------------- | --------------------- | ---------------------------- |
| HTTP request recieved | `http(connection_hdl` | 0.3.0 Core, Server role only |

Called when HTTP requests that are not WebSocket handshake upgrade requests are
recieved. Allows responding to regular HTTP requests. If no handler is registered
a 426/Upgrade Required error is returned.

### Interrupt Handler

| Event                               | Signature                   | Availability |
| ----------------------------------- | --------------------------- | ------------ |
| Connection was manually interrupted | `interrupt(connection_hdl)` | 0.3.0 Core   |

Interrupt events can be triggered by calling `endpoint::interrupt` or `connection::interrupt`. 
Interrupt is similar to a timer event with duration zero but with lower overhead. It is useful
for single threaded programs to allow breaking up a very long handler into multiple parts and 
for multi threaded programs as a way for worker threads to signale to the main/network thread 
that an event is ready.

todo: write low and high watermark handlers

*/


================================================
FILE: docs/logging.dox
================================================
/** \page reference.logging Logging Reference

WebSocket++ has the capability of logging events during the lifetime of the connections that it processes. Each endpoint has two independent logging interfaces that are used by all connections created by that endpoint. The first is an access interface that allows logging routine events in the life of a connection (such as connect/disconnect and receipt of messages). The other is an error interface that allows logging non-routine problems or errors. Each interface has a number of different named channels that can be toggled on and off independently.

Exactly how these logs are processed and where they are written to depends on which logging policy is in use. Several logging policies are included by default and you can write your own policy if you need something more specialized. Selecting a policy is done via the  \subpage reference.config "endpoint config".

Common functionality (all policies)
-----------------------------------

### Logging Channels

Each logging interface is divided into 32 named channels. Log messages are written to a specific interface on a specific channel. Which log messages are actually printed is determined by which channels are enabled or not. Channels can be enabled or disabled either at compile time or at runtime.

### Enabling and Disabling Channels

Channels disabled at compile time are removed from the code entirely (assuming correct compiler optimization settings) and are not available for runtime enabling or disabling. To disable channels at compile time, use the `alog_level` and `elog_level` values within your \subpage reference.config "endpoint config". Channels not disabled at compile time can be enabled or disabled at runtime using the `websocketpp::endpoint::set_access_channels()`, `websocketpp::endpoint::clear_access_channels()`, `websocketpp::endpoint::set_error_channels()`, and `websocketpp::endpoint::clear_error_channels()` methods.

The set and clear functions act only on the channels specified. `set_access_channels(log::alevel::connect)` will enable logging of new connections. Following this with `set_access_channels(log::alevel::disconnect)` will enable logging of disconnections in addition to connections. Use `clear*` functions to disable a specific channel. Channels may be combined using bitwise operations to create aggregate packages of channels that may be set or cleared at once. Default packages include `websocketpp::log::alevel::all`, `websocketpp::log::elevel::all`, `websocketpp::log::alevel::none`, `websocketpp::log::elevel::none`. These represent all possible access/error channels and no access/error channels respectively. For convenience, setting none is aliased to clearing all.

### Examples

__Disable all__

`clear_access_channels(log::alevel::all)`

__Disable all (alternative method)__

`set_access_channels(log::alevel::none)`

__Multiple cha
Download .txt
gitextract_ab40ebgr/

├── .gitattributes
├── .github/
│   └── FUNDING.yml
├── .gitignore
├── .travis.yml
├── CMakeLists.txt
├── COPYING
├── Doxyfile
├── SConstruct
├── changelog.md
├── docs/
│   ├── config.dox
│   ├── faq.dox
│   ├── getting_started.dox
│   ├── handlers.dox
│   ├── logging.dox
│   ├── manual.css
│   ├── manual.dox
│   ├── simple_broadcast_server.cpp
│   ├── simple_count_server_thread.cpp
│   └── tutorials.dox
├── examples/
│   ├── associative_storage/
│   │   ├── CMakeLists.txt
│   │   └── associative_storage.cpp
│   ├── broadcast_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── broadcast_server.cpp
│   ├── debug_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── debug_client.cpp
│   ├── debug_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── debug_server.cpp
│   ├── dev/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── main.cpp
│   ├── echo_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── echo_client.cpp
│   ├── echo_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── echo_handler.hpp
│   │   └── echo_server.cpp
│   ├── echo_server_both/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── echo_server_both.cpp
│   │   └── server.pem
│   ├── echo_server_tls/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── dh.pem
│   │   ├── echo_server_tls.cpp
│   │   └── server.pem
│   ├── enriched_storage/
│   │   ├── CMakeLists.txt
│   │   └── enriched_storage.cpp
│   ├── external_io_service/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── external_io_service.cpp
│   │   └── tcp_echo_server.hpp
│   ├── handler_switch/
│   │   ├── CMakeLists.txt
│   │   └── handler_switch.cpp
│   ├── iostream_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── iostream_server.cpp
│   ├── print_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── print_client.cpp
│   ├── print_client_tls/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── ca-chain.cert.pem
│   │   └── print_client_tls.cpp
│   ├── print_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── print_server.cpp
│   ├── scratch_client/
│   │   ├── SConscript
│   │   └── scratch_client.cpp
│   ├── scratch_server/
│   │   ├── SConscript
│   │   └── scratch_server.cpp
│   ├── simple_broadcast_server/
│   │   ├── CMakeLists.txt
│   │   └── simple_broadcast_server.cpp
│   ├── sip_client/
│   │   ├── CMakeLists.txt
│   │   ├── README.txt
│   │   ├── SConscript
│   │   └── sip_client.cpp
│   ├── subprotocol_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── subprotocol_server.cpp
│   ├── telemetry_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── telemetry_client.cpp
│   ├── telemetry_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── index.html
│   │   └── telemetry_server.cpp
│   ├── testee_client/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── testee_client.cpp
│   ├── testee_server/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── testee_server.cpp
│   └── utility_client/
│       ├── CMakeLists.txt
│       ├── SConscript
│       └── utility_client.cpp
├── readme.md
├── roadmap.md
├── test/
│   ├── connection/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── connection.cpp
│   │   ├── connection_tu2.cpp
│   │   └── connection_tu2.hpp
│   ├── endpoint/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── endpoint.cpp
│   ├── extension/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── extension.cpp
│   │   └── permessage_deflate.cpp
│   ├── http/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── parser.cpp
│   │   └── parser_perf.cpp
│   ├── logger/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   └── basic.cpp
│   ├── message_buffer/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── alloc.cpp
│   │   ├── message.cpp
│   │   └── pool.cpp
│   ├── processors/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── extension_permessage_compress.cpp
│   │   ├── hybi00.cpp
│   │   ├── hybi07.cpp
│   │   ├── hybi08.cpp
│   │   ├── hybi13.cpp
│   │   └── processor.cpp
│   ├── random/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── none.cpp
│   │   └── random_device.cpp
│   ├── roles/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── client.cpp
│   │   └── server.cpp
│   ├── transport/
│   │   ├── CMakeLists.txt
│   │   ├── SConscript
│   │   ├── asio/
│   │   │   ├── SConscript
│   │   │   ├── base.cpp
│   │   │   ├── security.cpp
│   │   │   └── timers.cpp
│   │   ├── hybi_util.cpp
│   │   ├── integration.cpp
│   │   └── iostream/
│   │       ├── SConscript
│   │       ├── base.cpp
│   │       ├── connection.cpp
│   │       └── endpoint.cpp
│   └── utility/
│       ├── CMakeLists.txt
│       ├── SConscript
│       ├── close.cpp
│       ├── error.cpp
│       ├── frame.cpp
│       ├── sha1.cpp
│       ├── uri.cpp
│       └── utilities.cpp
├── tutorials/
│   ├── broadcast_tutorial/
│   │   └── broadcast_tutorial.md
│   ├── chat_tutorial/
│   │   └── chat_tutorial.md
│   ├── utility_client/
│   │   ├── step1.cpp
│   │   ├── step2.cpp
│   │   ├── step3.cpp
│   │   ├── step4.cpp
│   │   ├── step5.cpp
│   │   ├── step6.cpp
│   │   └── utility_client.md
│   └── utility_server/
│       ├── step1.cpp
│       ├── step2.cpp
│       └── utility_server.md
├── websocketpp/
│   ├── CMakeLists.txt
│   ├── base64/
│   │   └── base64.hpp
│   ├── client.hpp
│   ├── close.hpp
│   ├── common/
│   │   ├── asio.hpp
│   │   ├── asio_ssl.hpp
│   │   ├── chrono.hpp
│   │   ├── connection_hdl.hpp
│   │   ├── cpp11.hpp
│   │   ├── functional.hpp
│   │   ├── md5.hpp
│   │   ├── memory.hpp
│   │   ├── network.hpp
│   │   ├── platforms.hpp
│   │   ├── random.hpp
│   │   ├── regex.hpp
│   │   ├── stdint.hpp
│   │   ├── system_error.hpp
│   │   ├── thread.hpp
│   │   ├── time.hpp
│   │   └── type_traits.hpp
│   ├── concurrency/
│   │   ├── basic.hpp
│   │   └── none.hpp
│   ├── config/
│   │   ├── asio.hpp
│   │   ├── asio_client.hpp
│   │   ├── asio_no_tls.hpp
│   │   ├── asio_no_tls_client.hpp
│   │   ├── boost_config.hpp
│   │   ├── core.hpp
│   │   ├── core_client.hpp
│   │   ├── debug.hpp
│   │   ├── debug_asio.hpp
│   │   ├── debug_asio_no_tls.hpp
│   │   ├── minimal_client.hpp
│   │   └── minimal_server.hpp
│   ├── connection.hpp
│   ├── connection_base.hpp
│   ├── endpoint.hpp
│   ├── endpoint_base.hpp
│   ├── error.hpp
│   ├── extensions/
│   │   ├── extension.hpp
│   │   └── permessage_deflate/
│   │       ├── disabled.hpp
│   │       └── enabled.hpp
│   ├── frame.hpp
│   ├── http/
│   │   ├── constants.hpp
│   │   ├── impl/
│   │   │   ├── parser.hpp
│   │   │   ├── request.hpp
│   │   │   └── response.hpp
│   │   ├── parser.hpp
│   │   ├── request.hpp
│   │   └── response.hpp
│   ├── impl/
│   │   ├── connection_impl.hpp
│   │   ├── endpoint_impl.hpp
│   │   └── utilities_impl.hpp
│   ├── logger/
│   │   ├── basic.hpp
│   │   ├── levels.hpp
│   │   ├── stub.hpp
│   │   └── syslog.hpp
│   ├── message_buffer/
│   │   ├── alloc.hpp
│   │   ├── message.hpp
│   │   └── pool.hpp
│   ├── processors/
│   │   ├── base.hpp
│   │   ├── hybi00.hpp
│   │   ├── hybi07.hpp
│   │   ├── hybi08.hpp
│   │   ├── hybi13.hpp
│   │   └── processor.hpp
│   ├── random/
│   │   ├── none.hpp
│   │   └── random_device.hpp
│   ├── roles/
│   │   ├── client_endpoint.hpp
│   │   └── server_endpoint.hpp
│   ├── server.hpp
│   ├── sha1/
│   │   └── sha1.hpp
│   ├── transport/
│   │   ├── asio/
│   │   │   ├── base.hpp
│   │   │   ├── connection.hpp
│   │   │   ├── endpoint.hpp
│   │   │   └── security/
│   │   │       ├── base.hpp
│   │   │       ├── none.hpp
│   │   │       └── tls.hpp
│   │   ├── base/
│   │   │   ├── connection.hpp
│   │   │   └── endpoint.hpp
│   │   ├── debug/
│   │   │   ├── base.hpp
│   │   │   ├── connection.hpp
│   │   │   └── endpoint.hpp
│   │   ├── iostream/
│   │   │   ├── base.hpp
│   │   │   ├── connection.hpp
│   │   │   └── endpoint.hpp
│   │   └── stub/
│   │       ├── base.hpp
│   │       ├── connection.hpp
│   │       └── endpoint.hpp
│   ├── uri.hpp
│   ├── utf8_validator.hpp
│   ├── utilities.hpp
│   └── version.hpp
└── websocketpp-config.cmake.in
Download .txt
SYMBOL INDEX (1624 symbols across 159 files)

FILE: docs/simple_broadcast_server.cpp
  class broadcast_server (line 13) | class broadcast_server {
    method broadcast_server (line 15) | broadcast_server() {
    method on_open (line 23) | void on_open(connection_hdl hdl) {
    method on_close (line 27) | void on_close(connection_hdl hdl) {
    method on_message (line 31) | void on_message(connection_hdl hdl, server::message_ptr msg) {
    method run (line 37) | void run(uint16_t port) {
  function main (line 49) | int main() {

FILE: docs/simple_count_server_thread.cpp
  class count_server (line 13) | class count_server {
    method count_server (line 15) | count_server() : m_count(0) {
    method on_open (line 22) | void on_open(connection_hdl hdl) {
    method on_close (line 27) | void on_close(connection_hdl hdl) {
    method count (line 32) | void count() {
    method run (line 47) | void run(uint16_t port) {
  function main (line 61) | int main() {

FILE: examples/associative_storage/associative_storage.cpp
  type connection_data (line 14) | struct connection_data {
  class print_server (line 19) | class print_server {
    method print_server (line 21) | print_server() : m_next_sessionid(1) {
    method on_open (line 29) | void on_open(connection_hdl hdl) {
    method on_close (line 38) | void on_close(connection_hdl hdl) {
    method on_message (line 47) | void on_message(connection_hdl hdl, server::message_ptr msg) {
    method connection_data (line 60) | connection_data& get_data_from_hdl(connection_hdl hdl) {
    method run (line 72) | void run(uint16_t port) {
  function main (line 85) | int main() {

FILE: examples/broadcast_server/broadcast_server.cpp
  type action_type (line 31) | enum action_type {
  type action (line 37) | struct action {
    method action (line 38) | action(action_type t, connection_hdl h) : type(t), hdl(h) {}
    method action (line 39) | action(action_type t, connection_hdl h, server::message_ptr m)
  class broadcast_server (line 47) | class broadcast_server {
    method broadcast_server (line 49) | broadcast_server() {
    method run (line 59) | void run(uint16_t port) {
    method on_open (line 74) | void on_open(connection_hdl hdl) {
    method on_close (line 83) | void on_close(connection_hdl hdl) {
    method on_message (line 92) | void on_message(connection_hdl hdl, server::message_ptr msg) {
    method process_messages (line 102) | void process_messages() {
  function main (line 145) | int main() {

FILE: examples/debug_client/debug_client.cpp
  class perftest (line 52) | class perftest {
    method perftest (line 57) | perftest () {
    method start (line 73) | void start(std::string uri) {
    method on_socket_init (line 91) | void on_socket_init(websocketpp::connection_hdl) {
    method context_ptr (line 95) | context_ptr on_tls_init(websocketpp::connection_hdl) {
    method on_fail (line 110) | void on_fail(websocketpp::connection_hdl hdl) {
    method on_open (line 122) | void on_open(websocketpp::connection_hdl hdl) {
    method on_message (line 126) | void on_message(websocketpp::connection_hdl hdl, message_ptr) {
    method on_close (line 130) | void on_close(websocketpp::connection_hdl) {
  function main (line 150) | int main(int argc, char* argv[]) {

FILE: examples/debug_server/debug_server.cpp
  type debug_custom (line 45) | struct debug_custom : public websocketpp::config::debug_asio {
    type transport_config (line 69) | struct transport_config : public base::transport_config {
  function validate (line 96) | bool validate(server *, websocketpp::connection_hdl) {
  function on_http (line 101) | void on_http(server* s, websocketpp::connection_hdl hdl) {
  function on_fail (line 113) | void on_fail(server* s, websocketpp::connection_hdl hdl) {
  function on_close (line 119) | void on_close(websocketpp::connection_hdl) {
  function on_message (line 124) | void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr ...
  function main (line 137) | int main() {

FILE: examples/dev/main.cpp
  function main (line 65) | int main() {

FILE: examples/echo_client/echo_client.cpp
  function on_message (line 44) | void on_message(client* c, websocketpp::connection_hdl hdl, message_ptr ...
  function main (line 58) | int main(int argc, char* argv[]) {

FILE: examples/echo_server/echo_handler.hpp
  class echo_handler (line 31) | class echo_handler : public server::handler {
    method on_message (line 32) | void on_message(connection_ptr con, std::string msg) {

FILE: examples/echo_server/echo_server.cpp
  function on_message (line 17) | void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr ...
  function main (line 37) | int main() {

FILE: examples/echo_server_both/echo_server_both.cpp
  function on_message (line 22) | void on_message(EndpointType* s, websocketpp::connection_hdl hdl,
  function get_password (line 38) | std::string get_password() {
  function context_ptr (line 42) | context_ptr on_tls_init(websocketpp::connection_hdl hdl) {
  function main (line 60) | int main() {

FILE: examples/echo_server_tls/echo_server_tls.cpp
  function on_message (line 53) | void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr ...
  function on_http (line 66) | void on_http(server* s, websocketpp::connection_hdl hdl) {
  function get_password (line 73) | std::string get_password() {
  type tls_mode (line 79) | enum tls_mode {
  function context_ptr (line 84) | context_ptr on_tls_init(tls_mode mode, websocketpp::connection_hdl hdl) {
  function main (line 133) | int main() {

FILE: examples/enriched_storage/enriched_storage.cpp
  type connection_data (line 5) | struct connection_data {
  type custom_config (line 10) | struct custom_config : public websocketpp::config::asio {
  class print_server (line 38) | class print_server {
    method print_server (line 40) | print_server() : m_next_sessionid(1) {
    method on_open (line 48) | void on_open(connection_hdl hdl) {
    method on_close (line 54) | void on_close(connection_hdl hdl) {
    method on_message (line 61) | void on_message(connection_hdl hdl, server::message_ptr msg) {
    method run (line 74) | void run(uint16_t port) {
  function main (line 84) | int main() {

FILE: examples/external_io_service/external_io_service.cpp
  function on_message (line 41) | void on_message(ws_echo_server* s, websocketpp::connection_hdl hdl, ws_e...
  function main (line 61) | int main() {

FILE: examples/external_io_service/tcp_echo_server.hpp
  type tcp_echo_session (line 44) | struct tcp_echo_session : websocketpp::lib::enable_shared_from_this<tcp_...
    method tcp_echo_session (line 47) | tcp_echo_session(asio::io_service & service) : m_socket(service) {}
    method start (line 49) | void start() {
    method handle_read (line 55) | void handle_read(const asio::error_code & ec, size_t transferred) {
    method handle_write (line 63) | void handle_write(const asio::error_code & ec) {
  type tcp_echo_server (line 74) | struct tcp_echo_server {
    method tcp_echo_server (line 75) | tcp_echo_server(asio::io_service & service, short port)
    method start_accept (line 82) | void start_accept() {
    method handle_accept (line 88) | void handle_accept(tcp_echo_session::ptr new_session, const asio::erro...

FILE: examples/handler_switch/handler_switch.cpp
  function custom_on_msg (line 14) | void custom_on_msg(server & s, connection_hdl hdl, server::message_ptr m...
  function default_on_msg (line 18) | void default_on_msg(server & s, connection_hdl hdl, server::message_ptr ...
  function main (line 32) | int main() {

FILE: examples/iostream_server/iostream_server.cpp
  function on_message (line 18) | void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr ...
  function main (line 35) | int main() {

FILE: examples/print_client/print_client.cpp
  function on_message (line 35) | void on_message(websocketpp::connection_hdl, client::message_ptr msg) {
  function main (line 39) | int main(int argc, char* argv[]) {

FILE: examples/print_client_tls/print_client_tls.cpp
  function on_message (line 40) | void on_message(websocketpp::connection_hdl, client::message_ptr msg) {
  function verify_subject_alternative_name (line 45) | bool verify_subject_alternative_name(const char * hostname, X509 * cert) {
  function verify_common_name (line 79) | bool verify_common_name(char const * hostname, X509 * cert) {
  function verify_certificate (line 115) | bool verify_certificate(const char * hostname, bool preverified, boost::...
  function context_ptr (line 178) | context_ptr on_tls_init(const char * hostname, websocketpp::connection_h...
  function main (line 199) | int main(int argc, char* argv[]) {

FILE: examples/print_server/print_server.cpp
  function on_message (line 8) | void on_message(websocketpp::connection_hdl, server::message_ptr msg) {
  function main (line 12) | int main() {

FILE: examples/scratch_client/scratch_client.cpp
  class connection_metadata (line 45) | class connection_metadata {
    method connection_metadata (line 49) | connection_metadata(int id, websocketpp::connection_hdl hdl, std::stri...
    method on_open (line 57) | void on_open(client * c, websocketpp::connection_hdl hdl) {
    method on_fail (line 64) | void on_fail(client * c, websocketpp::connection_hdl hdl) {
    method on_close (line 72) | void on_close(client * c, websocketpp::connection_hdl hdl) {
    method get_hdl (line 82) | websocketpp::connection_hdl get_hdl() const {
    method get_id (line 86) | int get_id() const {
    method get_status (line 90) | std::string get_status() const {
  class websocket_endpoint (line 113) | class websocket_endpoint {
    method websocket_endpoint (line 115) | websocket_endpoint () : m_next_id(0) {
    method connect (line 147) | int connect(std::string const & uri) {
    method close (line 185) | void close(int id, websocketpp::close::status::value code, std::string...
    method get_metadata (line 200) | connection_metadata::ptr get_metadata(int id) const {
  function main (line 218) | int main() {

FILE: examples/scratch_server/scratch_server.cpp
  type deflate_config (line 13) | struct deflate_config : public websocketpp::config::debug_core {
    type transport_config (line 31) | struct transport_config : public base::transport_config {
    type permessage_deflate_config (line 45) | struct permessage_deflate_config {}
  function on_message (line 56) | void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr ...
  function main (line 69) | int main(int argc, char * argv[]) {

FILE: examples/simple_broadcast_server/simple_broadcast_server.cpp
  class broadcast_server (line 12) | class broadcast_server {
    method broadcast_server (line 14) | broadcast_server() {
    method on_open (line 22) | void on_open(connection_hdl hdl) {
    method on_close (line 26) | void on_close(connection_hdl hdl) {
    method on_message (line 30) | void on_message(connection_hdl hdl, server::message_ptr msg) {
    method run (line 36) | void run(uint16_t port) {
  function main (line 48) | int main() {

FILE: examples/sip_client/sip_client.cpp
  function on_open (line 26) | void on_open(client* c, websocketpp::connection_hdl hdl) {
  function on_message (line 36) | void on_message(client* c, websocketpp::connection_hdl hdl, message_ptr ...
  function main (line 44) | int main(int argc, char* argv[]) {

FILE: examples/subprotocol_server/subprotocol_server.cpp
  function validate (line 15) | bool validate(server & s, connection_hdl hdl) {
  function main (line 34) | int main() {

FILE: examples/telemetry_client/telemetry_client.cpp
  function wait_a_bit (line 12) | void wait_a_bit() {
  class telemetry_client (line 26) | class telemetry_client {
    method telemetry_client (line 31) | telemetry_client() : m_open(false),m_done(false) {
    method run (line 50) | void run(const std::string & uri) {
    method on_open (line 79) | void on_open(websocketpp::connection_hdl) {
    method on_close (line 88) | void on_close(websocketpp::connection_hdl) {
    method on_fail (line 97) | void on_fail(websocketpp::connection_hdl) {
    method telemetry_loop (line 105) | void telemetry_loop() {
  function main (line 157) | int main(int argc, char* argv[]) {

FILE: examples/telemetry_server/telemetry_server.cpp
  class telemetry_server (line 31) | class telemetry_server {
    method telemetry_server (line 36) | telemetry_server() : m_count(0) {
    method run (line 53) | void run(std::string docroot, uint16_t port) {
    method set_timer (line 77) | void set_timer() {
    method on_timer (line 88) | void on_timer(websocketpp::lib::error_code const & ec) {
    method on_http (line 109) | void on_http(connection_hdl hdl) {
    method on_open (line 156) | void on_open(connection_hdl hdl) {
    method on_close (line 160) | void on_close(connection_hdl hdl) {
  function main (line 176) | int main(int argc, char* argv[]) {

FILE: examples/testee_client/testee_client.cpp
  type deflate_config (line 34) | struct deflate_config : public websocketpp::config::asio_client {
    type transport_config (line 52) | struct transport_config : public base::transport_config {
    type permessage_deflate_config (line 66) | struct permessage_deflate_config {}
  function on_message (line 83) | void on_message(client* c, websocketpp::connection_hdl hdl, message_ptr ...
  function main (line 95) | int main(int argc, char* argv[]) {

FILE: examples/testee_server/testee_server.cpp
  type testee_config (line 33) | struct testee_config : public websocketpp::config::asio {
    type transport_config (line 51) | struct transport_config : public core::transport_config {
    type permessage_deflate_config (line 70) | struct permessage_deflate_config {}
  function on_message (line 86) | void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr ...
  function on_socket_init (line 90) | void on_socket_init(websocketpp::connection_hdl, boost::asio::ip::tcp::s...
  function main (line 95) | int main(int argc, char * argv[]) {

FILE: examples/utility_client/utility_client.cpp
  class connection_metadata (line 45) | class connection_metadata {
    method connection_metadata (line 49) | connection_metadata(int id, websocketpp::connection_hdl hdl, std::stri...
    method on_open (line 57) | void on_open(client * c, websocketpp::connection_hdl hdl) {
    method on_fail (line 64) | void on_fail(client * c, websocketpp::connection_hdl hdl) {
    method on_close (line 72) | void on_close(client * c, websocketpp::connection_hdl hdl) {
    method on_message (line 82) | void on_message(websocketpp::connection_hdl, client::message_ptr msg) {
    method get_hdl (line 90) | websocketpp::connection_hdl get_hdl() const {
    method get_id (line 94) | int get_id() const {
    method get_status (line 98) | std::string get_status() const {
    method record_sent_message (line 102) | void record_sent_message(std::string message) {
  class websocket_endpoint (line 132) | class websocket_endpoint {
    method websocket_endpoint (line 134) | websocket_endpoint () : m_next_id(0) {
    method connect (line 166) | int connect(std::string const & uri) {
    method close (line 210) | void close(int id, websocketpp::close::status::value code, std::string...
    method send (line 225) | void send(int id, std::string message) {
    method get_metadata (line 243) | connection_metadata::ptr get_metadata(int id) const {
  function main (line 261) | int main() {

FILE: test/connection/connection.cpp
  function BOOST_AUTO_TEST_CASE (line 41) | BOOST_AUTO_TEST_CASE( basic_http_request ) {
  type connection_extension (line 51) | struct connection_extension {
    method connection_extension (line 52) | connection_extension() : extension_value(5) {}
    method extension_method (line 54) | int extension_method() {
    method is_server (line 58) | bool is_server() const {
  type stub_config (line 65) | struct stub_config : public websocketpp::config::core {
  type debug_config_client (line 86) | struct debug_config_client : public websocketpp::config::core {
    type transport_config (line 103) | struct transport_config {
  type connection_setup (line 134) | struct connection_setup {
    method connection_setup (line 135) | connection_setup(bool p_is_server)
  function validate_func (line 154) | void validate_func(server* s, websocketpp::connection_hdl hdl, message_p...
  function validate_set_ua (line 158) | bool validate_set_ua(server* s, websocketpp::connection_hdl hdl) {
  function http_func (line 164) | void http_func(server* s, websocketpp::connection_hdl hdl) {
  function defer_http_func (line 178) | void defer_http_func(server* s, bool * deferred, websocketpp::connection...
  function check_on_fail (line 187) | void check_on_fail(server* s, websocketpp::lib::error_code ec, bool & ca...
  function on_open_print (line 196) | void on_open_print(server* s, websocketpp::connection_hdl hdl)
  function fail_on_open (line 203) | void fail_on_open(websocketpp::connection_hdl) {
  function fail_on_http (line 206) | void fail_on_http(websocketpp::connection_hdl) {
  function BOOST_AUTO_TEST_CASE (line 210) | BOOST_AUTO_TEST_CASE( connection_extensions ) {
  function BOOST_AUTO_TEST_CASE (line 219) | BOOST_AUTO_TEST_CASE( basic_websocket_request ) {
  function BOOST_AUTO_TEST_CASE (line 231) | BOOST_AUTO_TEST_CASE( http_request ) {
  function BOOST_AUTO_TEST_CASE (line 243) | BOOST_AUTO_TEST_CASE( deferred_http_request ) {
  function BOOST_AUTO_TEST_CASE (line 281) | BOOST_AUTO_TEST_CASE( request_no_server_header ) {
  function BOOST_AUTO_TEST_CASE (line 292) | BOOST_AUTO_TEST_CASE( request_no_server_header_override ) {
  function BOOST_AUTO_TEST_CASE (line 304) | BOOST_AUTO_TEST_CASE( basic_client_websocket ) {
  function BOOST_AUTO_TEST_CASE (line 328) | BOOST_AUTO_TEST_CASE( set_max_message_size ) {
  function BOOST_AUTO_TEST_CASE (line 351) | BOOST_AUTO_TEST_CASE( websocket_fail_parse_error ) {
  function BOOST_AUTO_TEST_CASE (line 363) | BOOST_AUTO_TEST_CASE( websocket_fail_invalid_version ) {
  function BOOST_AUTO_TEST_CASE (line 375) | BOOST_AUTO_TEST_CASE( websocket_fail_unsupported_version ) {
  function BOOST_AUTO_TEST_CASE (line 413) | BOOST_AUTO_TEST_CASE( websocket_fail_upgrade_required ) {
  function BOOST_AUTO_TEST_CASE (line 454) | BOOST_AUTO_TEST_CASE( client_handshake_timeout_race1 ) {
  function BOOST_AUTO_TEST_CASE (line 476) | BOOST_AUTO_TEST_CASE( client_handshake_timeout_race2 ) {
  function BOOST_AUTO_TEST_CASE (line 501) | BOOST_AUTO_TEST_CASE( server_handshake_timeout_race1 ) {
  function BOOST_AUTO_TEST_CASE (line 516) | BOOST_AUTO_TEST_CASE( server_handshake_timeout_race2 ) {

FILE: test/connection/connection_tu2.cpp
  function echo_func (line 30) | void echo_func(server* s, websocketpp::connection_hdl hdl, message_ptr m...
  function run_server_test (line 34) | std::string run_server_test(std::string input, bool log) {
  function run_server_test (line 39) | std::string run_server_test(server & s, std::string input, bool log) {

FILE: test/endpoint/endpoint.cpp
  function BOOST_AUTO_TEST_CASE (line 37) | BOOST_AUTO_TEST_CASE( construct_server_iostream ) {
  function BOOST_AUTO_TEST_CASE (line 41) | BOOST_AUTO_TEST_CASE( construct_server_asio_plain ) {
  function BOOST_AUTO_TEST_CASE (line 45) | BOOST_AUTO_TEST_CASE( construct_server_asio_tls ) {
  function BOOST_AUTO_TEST_CASE (line 49) | BOOST_AUTO_TEST_CASE( initialize_server_asio ) {
  function BOOST_AUTO_TEST_CASE (line 54) | BOOST_AUTO_TEST_CASE( initialize_server_asio_external ) {
  function BOOST_AUTO_TEST_CASE (line 61) | BOOST_AUTO_TEST_CASE( move_construct_server_core ) {
  type endpoint_extension (line 89) | struct endpoint_extension {
    method endpoint_extension (line 90) | endpoint_extension() : extension_value(5) {}
    method extension_method (line 92) | int extension_method() {
    method is_server (line 96) | bool is_server() const {
  type stub_config (line 103) | struct stub_config : public websocketpp::config::core {
  function BOOST_AUTO_TEST_CASE (line 123) | BOOST_AUTO_TEST_CASE( endpoint_extensions ) {
  function BOOST_AUTO_TEST_CASE (line 132) | BOOST_AUTO_TEST_CASE( listen_after_listen_failure ) {

FILE: test/extension/extension.cpp
  function BOOST_AUTO_TEST_CASE (line 35) | BOOST_AUTO_TEST_CASE( blank ) {

FILE: test/extension/permessage_deflate.cpp
  class config (line 42) | class config {}
  type ext_vars (line 47) | struct ext_vars {
  function BOOST_AUTO_TEST_CASE (line 59) | BOOST_AUTO_TEST_CASE( disabled_is_disabled ) {
  function BOOST_AUTO_TEST_CASE (line 64) | BOOST_AUTO_TEST_CASE( disabled_is_off ) {
  function BOOST_AUTO_TEST_CASE (line 71) | BOOST_AUTO_TEST_CASE( enabled_is_enabled ) {
  function BOOST_AUTO_TEST_CASE (line 78) | BOOST_AUTO_TEST_CASE( enabled_starts_disabled ) {
  function BOOST_AUTO_TEST_CASE (line 84) | BOOST_AUTO_TEST_CASE( negotiation_empty_attr ) {
  function BOOST_AUTO_TEST_CASE (line 93) | BOOST_AUTO_TEST_CASE( negotiation_invalid_attr ) {
  function BOOST_AUTO_TEST_CASE (line 104) | BOOST_AUTO_TEST_CASE( negotiate_server_no_context_takeover_invalid ) {
  function BOOST_AUTO_TEST_CASE (line 114) | BOOST_AUTO_TEST_CASE( negotiate_server_no_context_takeover ) {
  function BOOST_AUTO_TEST_CASE (line 124) | BOOST_AUTO_TEST_CASE( negotiate_server_no_context_takeover_server_initia...
  function BOOST_AUTO_TEST_CASE (line 135) | BOOST_AUTO_TEST_CASE( negotiate_client_no_context_takeover_invalid ) {
  function BOOST_AUTO_TEST_CASE (line 145) | BOOST_AUTO_TEST_CASE( negotiate_client_no_context_takeover ) {
  function BOOST_AUTO_TEST_CASE (line 155) | BOOST_AUTO_TEST_CASE( negotiate_client_no_context_takeover_server_initia...
  function BOOST_AUTO_TEST_CASE (line 167) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_invalid ) {
  function BOOST_AUTO_TEST_CASE (line 187) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_valid ) {
  function BOOST_AUTO_TEST_CASE (line 211) | BOOST_AUTO_TEST_CASE( invalid_set_server_max_window_bits ) {
  function BOOST_AUTO_TEST_CASE (line 221) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_decline ) {
  function BOOST_AUTO_TEST_CASE (line 233) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_accept_8 ) {
  function BOOST_AUTO_TEST_CASE (line 245) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_accept ) {
  function BOOST_AUTO_TEST_CASE (line 257) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_largest_8 ) {
  function BOOST_AUTO_TEST_CASE (line 269) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_largest ) {
  function BOOST_AUTO_TEST_CASE (line 281) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_smallest_8 ) {
  function BOOST_AUTO_TEST_CASE (line 293) | BOOST_AUTO_TEST_CASE( negotiate_server_max_window_bits_smallest ) {
  function BOOST_AUTO_TEST_CASE (line 306) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_invalid ) {
  function BOOST_AUTO_TEST_CASE (line 325) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_valid ) {
  function BOOST_AUTO_TEST_CASE (line 353) | BOOST_AUTO_TEST_CASE( invalid_set_client_max_window_bits ) {
  function BOOST_AUTO_TEST_CASE (line 363) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_decline_8 ) {
  function BOOST_AUTO_TEST_CASE (line 375) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_decline ) {
  function BOOST_AUTO_TEST_CASE (line 387) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_accept_8 ) {
  function BOOST_AUTO_TEST_CASE (line 399) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_accept ) {
  function BOOST_AUTO_TEST_CASE (line 411) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_largest_8 ) {
  function BOOST_AUTO_TEST_CASE (line 423) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_largest ) {
  function BOOST_AUTO_TEST_CASE (line 435) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_smallest_8 ) {
  function BOOST_AUTO_TEST_CASE (line 447) | BOOST_AUTO_TEST_CASE( negotiate_client_max_window_bits_smallest ) {
  function BOOST_AUTO_TEST_CASE (line 461) | BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated1 ) {
  function BOOST_AUTO_TEST_CASE (line 473) | BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated2 ) {
  function BOOST_AUTO_TEST_CASE (line 485) | BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated3 ) {
  function BOOST_AUTO_TEST_CASE (line 497) | BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated4 ) {
  function BOOST_AUTO_TEST_CASE (line 509) | BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated5 ) {
  function BOOST_AUTO_TEST_CASE (line 521) | BOOST_AUTO_TEST_CASE( negotiate_two_client_initiated6 ) {
  function BOOST_AUTO_TEST_CASE (line 533) | BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated1 ) {
  function BOOST_AUTO_TEST_CASE (line 546) | BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated2 ) {
  function BOOST_AUTO_TEST_CASE (line 559) | BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated3 ) {
  function BOOST_AUTO_TEST_CASE (line 572) | BOOST_AUTO_TEST_CASE( negotiate_three_client_initiated4 ) {
  function BOOST_AUTO_TEST_CASE (line 585) | BOOST_AUTO_TEST_CASE( negotiate_four_client_initiated ) {
  function BOOST_AUTO_TEST_CASE (line 600) | BOOST_AUTO_TEST_CASE( compress_data ) {
  function BOOST_AUTO_TEST_CASE (line 618) | BOOST_AUTO_TEST_CASE( compress_data_multiple ) {
  function BOOST_AUTO_TEST_CASE (line 638) | BOOST_AUTO_TEST_CASE( compress_data_large ) {
  function BOOST_AUTO_TEST_CASE (line 662) | BOOST_AUTO_TEST_CASE( compress_data_no_context_takeover ) {
  function BOOST_AUTO_TEST_CASE (line 706) | BOOST_AUTO_TEST_CASE( compress_empty ) {
  function BOOST_AUTO_TEST_CASE (line 738) | BOOST_AUTO_TEST_CASE( decompress_data ) {

FILE: test/http/parser.cpp
  function BOOST_AUTO_TEST_CASE (line 37) | BOOST_AUTO_TEST_CASE( is_token_char ) {
  function BOOST_AUTO_TEST_CASE (line 107) | BOOST_AUTO_TEST_CASE( extract_token ) {
  function BOOST_AUTO_TEST_CASE (line 126) | BOOST_AUTO_TEST_CASE( extract_quoted_string ) {
  function BOOST_AUTO_TEST_CASE (line 158) | BOOST_AUTO_TEST_CASE( extract_all_lws ) {
  function BOOST_AUTO_TEST_CASE (line 187) | BOOST_AUTO_TEST_CASE( extract_attributes_blank ) {
  function BOOST_AUTO_TEST_CASE (line 198) | BOOST_AUTO_TEST_CASE( extract_attributes_simple ) {
  function BOOST_AUTO_TEST_CASE (line 211) | BOOST_AUTO_TEST_CASE( extract_parameters ) {
  function BOOST_AUTO_TEST_CASE (line 359) | BOOST_AUTO_TEST_CASE( strip_lws ) {
  function BOOST_AUTO_TEST_CASE (line 381) | BOOST_AUTO_TEST_CASE( case_insensitive_headers ) {
  function BOOST_AUTO_TEST_CASE (line 391) | BOOST_AUTO_TEST_CASE( case_insensitive_headers_overwrite ) {
  function BOOST_AUTO_TEST_CASE (line 410) | BOOST_AUTO_TEST_CASE( blank_consume ) {
  function BOOST_AUTO_TEST_CASE (line 427) | BOOST_AUTO_TEST_CASE( blank_request ) {
  function BOOST_AUTO_TEST_CASE (line 444) | BOOST_AUTO_TEST_CASE( bad_request_no_host ) {
  function BOOST_AUTO_TEST_CASE (line 461) | BOOST_AUTO_TEST_CASE( basic_request ) {
  function BOOST_AUTO_TEST_CASE (line 485) | BOOST_AUTO_TEST_CASE( basic_request_with_body ) {
  function BOOST_AUTO_TEST_CASE (line 523) | BOOST_AUTO_TEST_CASE( basic_request_with_body_split ) {
  function BOOST_AUTO_TEST_CASE (line 553) | BOOST_AUTO_TEST_CASE( trailing_body_characters ) {
  function BOOST_AUTO_TEST_CASE (line 576) | BOOST_AUTO_TEST_CASE( trailing_body_characters_beyond_max_lenth ) {
  function BOOST_AUTO_TEST_CASE (line 600) | BOOST_AUTO_TEST_CASE( basic_split1 ) {
  function BOOST_AUTO_TEST_CASE (line 626) | BOOST_AUTO_TEST_CASE( basic_split2 ) {
  function BOOST_AUTO_TEST_CASE (line 652) | BOOST_AUTO_TEST_CASE( max_header_len ) {
  function BOOST_AUTO_TEST_CASE (line 672) | BOOST_AUTO_TEST_CASE( max_header_len_split ) {
  function BOOST_AUTO_TEST_CASE (line 693) | BOOST_AUTO_TEST_CASE( max_body_len ) {
  function BOOST_AUTO_TEST_CASE (line 714) | BOOST_AUTO_TEST_CASE( firefox_full_request ) {
  function BOOST_AUTO_TEST_CASE (line 748) | BOOST_AUTO_TEST_CASE( bad_method ) {
  function BOOST_AUTO_TEST_CASE (line 764) | BOOST_AUTO_TEST_CASE( bad_header_name ) {
  function BOOST_AUTO_TEST_CASE (line 780) | BOOST_AUTO_TEST_CASE( old_http_version ) {
  function BOOST_AUTO_TEST_CASE (line 803) | BOOST_AUTO_TEST_CASE( new_http_version1 ) {
  function BOOST_AUTO_TEST_CASE (line 826) | BOOST_AUTO_TEST_CASE( new_http_version2 ) {
  function BOOST_AUTO_TEST_CASE (line 868) | BOOST_AUTO_TEST_CASE( header_whitespace1 ) {
  function BOOST_AUTO_TEST_CASE (line 891) | BOOST_AUTO_TEST_CASE( header_whitespace2 ) {
  function BOOST_AUTO_TEST_CASE (line 914) | BOOST_AUTO_TEST_CASE( header_aggregation ) {
  function BOOST_AUTO_TEST_CASE (line 937) | BOOST_AUTO_TEST_CASE( wikipedia_example_response ) {
  function BOOST_AUTO_TEST_CASE (line 964) | BOOST_AUTO_TEST_CASE( wikipedia_example_response_trailing ) {
  function BOOST_AUTO_TEST_CASE (line 992) | BOOST_AUTO_TEST_CASE( wikipedia_example_response_trailing_large ) {
  function BOOST_AUTO_TEST_CASE (line 1020) | BOOST_AUTO_TEST_CASE( response_with_non_standard_lws ) {
  function BOOST_AUTO_TEST_CASE (line 1047) | BOOST_AUTO_TEST_CASE( plain_http_response ) {
  function BOOST_AUTO_TEST_CASE (line 1080) | BOOST_AUTO_TEST_CASE( parse_istream ) {
  function BOOST_AUTO_TEST_CASE (line 1103) | BOOST_AUTO_TEST_CASE( write_request_basic ) {
  function BOOST_AUTO_TEST_CASE (line 1115) | BOOST_AUTO_TEST_CASE( write_request_with_header ) {
  function BOOST_AUTO_TEST_CASE (line 1128) | BOOST_AUTO_TEST_CASE( write_request_with_body ) {

FILE: test/http/parser_perf.cpp
  class scoped_timer (line 32) | class scoped_timer {
    method scoped_timer (line 34) | scoped_timer(std::string i) : m_id(i),m_start(std::chrono::steady_cloc...
  function main (line 56) | int main() {

FILE: test/logger/basic.cpp
  function BOOST_AUTO_TEST_CASE (line 39) | BOOST_AUTO_TEST_CASE( is_token_char ) {
  function BOOST_AUTO_TEST_CASE (line 57) | BOOST_AUTO_TEST_CASE( access_clear ) {
  function BOOST_AUTO_TEST_CASE (line 72) | BOOST_AUTO_TEST_CASE( basic_concurrency ) {
  function BOOST_AUTO_TEST_CASE (line 86) | BOOST_AUTO_TEST_CASE( copy_constructor ) {
  function BOOST_AUTO_TEST_CASE (line 98) | BOOST_AUTO_TEST_CASE( move_constructor ) {

FILE: test/message_buffer/alloc.cpp
  type stub (line 37) | struct stub {
    method stub (line 44) | stub(con_msg_man_ptr manager, websocketpp::frame::opcode::value op, si...
    method recycle (line 49) | bool recycle() {
  function BOOST_AUTO_TEST_CASE (line 64) | BOOST_AUTO_TEST_CASE( basic_get_message ) {
  function BOOST_AUTO_TEST_CASE (line 79) | BOOST_AUTO_TEST_CASE( basic_get_manager ) {

FILE: test/message_buffer/message.cpp
  type stub (line 37) | struct stub {
    method stub (line 41) | stub() : recycled(false) {}
    method recycle (line 43) | bool recycle(message *) {
  function BOOST_AUTO_TEST_CASE (line 51) | BOOST_AUTO_TEST_CASE( basic_size_check ) {
  function BOOST_AUTO_TEST_CASE (line 61) | BOOST_AUTO_TEST_CASE( recycle ) {

FILE: test/message_buffer/pool.cpp
  function BOOST_AUTO_TEST_CASE (line 39) | BOOST_AUTO_TEST_CASE( exact_match ) {
  function BOOST_AUTO_TEST_CASE (line 78) | BOOST_AUTO_TEST_CASE( non_get_method ) {
  function BOOST_AUTO_TEST_CASE (line 92) | BOOST_AUTO_TEST_CASE( old_http_version ) {
  function BOOST_AUTO_TEST_CASE (line 106) | BOOST_AUTO_TEST_CASE( missing_handshake_key1 ) {
  function BOOST_AUTO_TEST_CASE (line 120) | BOOST_AUTO_TEST_CASE( missing_handshake_key2 ) {
  function BOOST_AUTO_TEST_CASE (line 134) | BOOST_AUTO_TEST_CASE( bad_host ) {

FILE: test/processors/extension_permessage_compress.cpp
  type config (line 38) | struct config {
  function BOOST_AUTO_TEST_CASE (line 46) | BOOST_AUTO_TEST_CASE( deflate_init ) {

FILE: test/processors/hybi00.cpp
  type stub_config (line 40) | struct stub_config {
  type processor_setup (line 52) | struct processor_setup {
    method processor_setup (line 53) | processor_setup(bool server)
  function BOOST_AUTO_TEST_CASE (line 66) | BOOST_AUTO_TEST_CASE( exact_match ) {
  function BOOST_AUTO_TEST_CASE (line 98) | BOOST_AUTO_TEST_CASE( non_get_method ) {
  function BOOST_AUTO_TEST_CASE (line 111) | BOOST_AUTO_TEST_CASE( old_http_version ) {
  function BOOST_AUTO_TEST_CASE (line 124) | BOOST_AUTO_TEST_CASE( missing_handshake_key1 ) {
  function BOOST_AUTO_TEST_CASE (line 137) | BOOST_AUTO_TEST_CASE( missing_handshake_key2 ) {
  function BOOST_AUTO_TEST_CASE (line 150) | BOOST_AUTO_TEST_CASE( bad_host ) {
  function BOOST_AUTO_TEST_CASE (line 166) | BOOST_AUTO_TEST_CASE( extract_subprotocols ) {
  function BOOST_AUTO_TEST_CASE (line 175) | BOOST_AUTO_TEST_CASE( prepare_data_frame_null ) {
  function BOOST_AUTO_TEST_CASE (line 216) | BOOST_AUTO_TEST_CASE( prepare_data_frame ) {
  function BOOST_AUTO_TEST_CASE (line 236) | BOOST_AUTO_TEST_CASE( empty_consume ) {
  function BOOST_AUTO_TEST_CASE (line 248) | BOOST_AUTO_TEST_CASE( empty_frame ) {
  function BOOST_AUTO_TEST_CASE (line 262) | BOOST_AUTO_TEST_CASE( short_frame ) {

FILE: test/processors/hybi07.cpp
  type stub_config (line 42) | struct stub_config {
    type permessage_deflate_config (line 61) | struct permessage_deflate_config {
  function BOOST_AUTO_TEST_CASE (line 69) | BOOST_AUTO_TEST_CASE( exact_match ) {
  function BOOST_AUTO_TEST_CASE (line 103) | BOOST_AUTO_TEST_CASE( non_get_method ) {
  function BOOST_AUTO_TEST_CASE (line 121) | BOOST_AUTO_TEST_CASE( old_http_version ) {
  function BOOST_AUTO_TEST_CASE (line 139) | BOOST_AUTO_TEST_CASE( missing_handshake_key1 ) {
  function BOOST_AUTO_TEST_CASE (line 157) | BOOST_AUTO_TEST_CASE( missing_handshake_key2 ) {
  function BOOST_AUTO_TEST_CASE (line 175) | BOOST_AUTO_TEST_CASE( bad_host ) {

FILE: test/processors/hybi08.cpp
  type stub_config (line 42) | struct stub_config {
    type permessage_deflate_config (line 61) | struct permessage_deflate_config {
  function BOOST_AUTO_TEST_CASE (line 69) | BOOST_AUTO_TEST_CASE( exact_match ) {
  function BOOST_AUTO_TEST_CASE (line 103) | BOOST_AUTO_TEST_CASE( non_get_method ) {
  function BOOST_AUTO_TEST_CASE (line 121) | BOOST_AUTO_TEST_CASE( old_http_version ) {
  function BOOST_AUTO_TEST_CASE (line 139) | BOOST_AUTO_TEST_CASE( missing_handshake_key1 ) {
  function BOOST_AUTO_TEST_CASE (line 157) | BOOST_AUTO_TEST_CASE( missing_handshake_key2 ) {
  function BOOST_AUTO_TEST_CASE (line 175) | BOOST_AUTO_TEST_CASE( bad_host ) {

FILE: test/processors/hybi13.cpp
  type stub_config (line 45) | struct stub_config {
    type permessage_deflate_config (line 56) | struct permessage_deflate_config {
  type stub_config_ext (line 67) | struct stub_config_ext {
    type permessage_deflate_config (line 78) | struct permessage_deflate_config {
  type processor_setup (line 94) | struct processor_setup {
    method processor_setup (line 95) | processor_setup(bool server)
  type processor_setup_ext (line 107) | struct processor_setup_ext {
    method processor_setup_ext (line 108) | processor_setup_ext(bool server)
  function BOOST_AUTO_TEST_CASE (line 120) | BOOST_AUTO_TEST_CASE( exact_match ) {
  function BOOST_AUTO_TEST_CASE (line 147) | BOOST_AUTO_TEST_CASE( non_get_method ) {
  function BOOST_AUTO_TEST_CASE (line 159) | BOOST_AUTO_TEST_CASE( old_http_version ) {
  function BOOST_AUTO_TEST_CASE (line 171) | BOOST_AUTO_TEST_CASE( missing_handshake_key1 ) {
  function BOOST_AUTO_TEST_CASE (line 183) | BOOST_AUTO_TEST_CASE( missing_handshake_key2 ) {
  function BOOST_AUTO_TEST_CASE (line 195) | BOOST_AUTO_TEST_CASE( bad_host ) {
  function BOOST_AUTO_TEST_CASE (line 222) | BOOST_AUTO_TEST_CASE( frame_empty_binary_unmasked ) {
  function BOOST_AUTO_TEST_CASE (line 246) | BOOST_AUTO_TEST_CASE( frame_small_binary_unmasked ) {
  function BOOST_AUTO_TEST_CASE (line 263) | BOOST_AUTO_TEST_CASE( frame_extended_binary_unmasked ) {
  function BOOST_AUTO_TEST_CASE (line 284) | BOOST_AUTO_TEST_CASE( frame_jumbo_binary_unmasked ) {
  function BOOST_AUTO_TEST_CASE (line 301) | BOOST_AUTO_TEST_CASE( control_frame_too_large ) {
  function BOOST_AUTO_TEST_CASE (line 313) | BOOST_AUTO_TEST_CASE( rsv_bits_used ) {
  function BOOST_AUTO_TEST_CASE (line 329) | BOOST_AUTO_TEST_CASE( reserved_opcode_used ) {
  function BOOST_AUTO_TEST_CASE (line 351) | BOOST_AUTO_TEST_CASE( fragmented_control_message ) {
  function BOOST_AUTO_TEST_CASE (line 362) | BOOST_AUTO_TEST_CASE( fragmented_binary_message ) {
  function BOOST_AUTO_TEST_CASE (line 410) | BOOST_AUTO_TEST_CASE( unmasked_client_frame ) {
  function BOOST_AUTO_TEST_CASE (line 421) | BOOST_AUTO_TEST_CASE( masked_server_frame ) {
  function BOOST_AUTO_TEST_CASE (line 432) | BOOST_AUTO_TEST_CASE( frame_small_binary_masked ) {
  function BOOST_AUTO_TEST_CASE (line 444) | BOOST_AUTO_TEST_CASE( masked_fragmented_binary_message ) {
  function BOOST_AUTO_TEST_CASE (line 458) | BOOST_AUTO_TEST_CASE( prepare_data_frame ) {
  function BOOST_AUTO_TEST_CASE (line 494) | BOOST_AUTO_TEST_CASE( single_frame_message_too_large ) {
  function BOOST_AUTO_TEST_CASE (line 506) | BOOST_AUTO_TEST_CASE( multiple_frame_message_too_large ) {
  function BOOST_AUTO_TEST_CASE (line 525) | BOOST_AUTO_TEST_CASE( client_handshake_request ) {
  function BOOST_AUTO_TEST_CASE (line 557) | BOOST_AUTO_TEST_CASE( client_handshake_response_404 ) {
  function BOOST_AUTO_TEST_CASE (line 566) | BOOST_AUTO_TEST_CASE( client_handshake_response_no_upgrade ) {
  function BOOST_AUTO_TEST_CASE (line 575) | BOOST_AUTO_TEST_CASE( client_handshake_response_no_connection ) {
  function BOOST_AUTO_TEST_CASE (line 584) | BOOST_AUTO_TEST_CASE( client_handshake_response_no_accept ) {
  function BOOST_AUTO_TEST_CASE (line 593) | BOOST_AUTO_TEST_CASE( client_handshake_response ) {
  function BOOST_AUTO_TEST_CASE (line 604) | BOOST_AUTO_TEST_CASE( extensions_disabled ) {
  function BOOST_AUTO_TEST_CASE (line 616) | BOOST_AUTO_TEST_CASE( extension_negotiation_blank ) {
  function BOOST_AUTO_TEST_CASE (line 628) | BOOST_AUTO_TEST_CASE( extension_negotiation_unknown ) {
  function BOOST_AUTO_TEST_CASE (line 640) | BOOST_AUTO_TEST_CASE( extract_subprotocols_empty ) {
  function BOOST_AUTO_TEST_CASE (line 648) | BOOST_AUTO_TEST_CASE( extract_subprotocols_one ) {
  function BOOST_AUTO_TEST_CASE (line 659) | BOOST_AUTO_TEST_CASE( extract_subprotocols_multiple ) {
  function BOOST_AUTO_TEST_CASE (line 671) | BOOST_AUTO_TEST_CASE( extract_subprotocols_invalid) {
  function BOOST_AUTO_TEST_CASE (line 681) | BOOST_AUTO_TEST_CASE( extension_negotiation_permessage_deflate ) {

FILE: test/processors/processor.cpp
  function BOOST_AUTO_TEST_CASE (line 37) | BOOST_AUTO_TEST_CASE( exact_match ) {
  function BOOST_AUTO_TEST_CASE (line 47) | BOOST_AUTO_TEST_CASE( non_match ) {
  function BOOST_AUTO_TEST_CASE (line 57) | BOOST_AUTO_TEST_CASE( ci_exact_match ) {
  function BOOST_AUTO_TEST_CASE (line 67) | BOOST_AUTO_TEST_CASE( non_exact_match1 ) {
  function BOOST_AUTO_TEST_CASE (line 77) | BOOST_AUTO_TEST_CASE( non_exact_match2 ) {
  function BOOST_AUTO_TEST_CASE (line 87) | BOOST_AUTO_TEST_CASE( version_blank ) {
  function BOOST_AUTO_TEST_CASE (line 97) | BOOST_AUTO_TEST_CASE( version_7 ) {
  function BOOST_AUTO_TEST_CASE (line 107) | BOOST_AUTO_TEST_CASE( version_8 ) {
  function BOOST_AUTO_TEST_CASE (line 117) | BOOST_AUTO_TEST_CASE( version_13 ) {
  function BOOST_AUTO_TEST_CASE (line 127) | BOOST_AUTO_TEST_CASE( version_non_numeric ) {

FILE: test/random/none.cpp
  function BOOST_AUTO_TEST_CASE (line 34) | BOOST_AUTO_TEST_CASE( does_it_compile ) {

FILE: test/random/random_device.cpp
  function BOOST_AUTO_TEST_CASE (line 37) | BOOST_AUTO_TEST_CASE( compiles ) {

FILE: test/roles/client.cpp
  type stub_config (line 40) | struct stub_config : public websocketpp::config::core {
  function BOOST_AUTO_TEST_CASE (line 67) | BOOST_AUTO_TEST_CASE( invalid_uri ) {
  function BOOST_AUTO_TEST_CASE (line 76) | BOOST_AUTO_TEST_CASE( unsecure_endpoint ) {
  function BOOST_AUTO_TEST_CASE (line 85) | BOOST_AUTO_TEST_CASE( get_connection ) {
  function BOOST_AUTO_TEST_CASE (line 98) | BOOST_AUTO_TEST_CASE( connect_con ) {
  function BOOST_AUTO_TEST_CASE (line 137) | BOOST_AUTO_TEST_CASE( select_subprotocol ) {
  function BOOST_AUTO_TEST_CASE (line 151) | BOOST_AUTO_TEST_CASE( add_subprotocols_invalid ) {
  function BOOST_AUTO_TEST_CASE (line 168) | BOOST_AUTO_TEST_CASE( add_subprotocols ) {

FILE: test/roles/server.cpp
  function run_server_test (line 66) | std::string run_server_test(server& s, std::string input) {
  function echo_func (line 86) | void echo_func(server* s, websocketpp::connection_hdl hdl, message_ptr m...
  function validate_func_subprotocol (line 90) | bool validate_func_subprotocol(server* s, std::string* out, std::string ...
  function open_func_subprotocol (line 113) | void open_func_subprotocol(server* s, std::string* out, websocketpp::con...
  function BOOST_AUTO_TEST_CASE (line 120) | BOOST_AUTO_TEST_CASE( basic_websocket_request ) {
  function BOOST_AUTO_TEST_CASE (line 130) | BOOST_AUTO_TEST_CASE( invalid_websocket_version ) {
  function BOOST_AUTO_TEST_CASE (line 141) | BOOST_AUTO_TEST_CASE( unimplemented_websocket_version ) {
  function BOOST_AUTO_TEST_CASE (line 152) | BOOST_AUTO_TEST_CASE( list_subprotocol_empty ) {
  function BOOST_AUTO_TEST_CASE (line 167) | BOOST_AUTO_TEST_CASE( list_subprotocol_one ) {
  function BOOST_AUTO_TEST_CASE (line 185) | BOOST_AUTO_TEST_CASE( accept_subprotocol_one ) {
  function BOOST_AUTO_TEST_CASE (line 203) | BOOST_AUTO_TEST_CASE( accept_subprotocol_invalid ) {
  function BOOST_AUTO_TEST_CASE (line 221) | BOOST_AUTO_TEST_CASE( accept_subprotocol_two ) {

FILE: test/transport/asio/base.cpp
  function BOOST_AUTO_TEST_CASE (line 35) | BOOST_AUTO_TEST_CASE( blank_error ) {
  function BOOST_AUTO_TEST_CASE (line 41) | BOOST_AUTO_TEST_CASE( asio_error ) {

FILE: test/transport/asio/security.cpp
  type dummy_con (line 39) | struct dummy_con : public base {
    method test (line 40) | websocketpp::lib::error_code test() {
  function BOOST_AUTO_TEST_CASE (line 45) | BOOST_AUTO_TEST_CASE( translated_ec_none ) {
  function BOOST_AUTO_TEST_CASE (line 58) | BOOST_AUTO_TEST_CASE( translated_ec_tls ) {

FILE: test/transport/asio/timers.cpp
  function run_dummy_server (line 53) | void run_dummy_server(int port) {
  function run_test_timer (line 81) | void run_test_timer(long value) {
  type config (line 89) | struct config {
  function context_ptr (line 110) | context_ptr on_tls_init(websocketpp::connection_hdl) {
  type mock_con (line 115) | struct mock_con: public websocketpp::transport::asio::connection<config> {
    method mock_con (line 118) | mock_con(bool a, const websocketpp::lib::shared_ptr<config::alog_type>...
    method start (line 122) | void start() {
    method handle_start (line 127) | void handle_start(const websocketpp::lib::error_code& ec) {
  type mock_endpoint (line 140) | struct mock_endpoint : public websocketpp::transport::asio::endpoint<con...
    method mock_endpoint (line 143) | mock_endpoint()
    method connect (line 152) | void connect(std::string u) {
    method handle_connect (line 171) | void handle_connect(connection_ptr con, websocketpp::lib::error_code c...
  function BOOST_AUTO_TEST_CASE (line 182) | BOOST_AUTO_TEST_CASE( tls_handshake_timeout ) {

FILE: test/transport/hybi_util.cpp
  function BOOST_AUTO_TEST_CASE (line 36) | BOOST_AUTO_TEST_CASE( circshift_0 ) {
  function BOOST_AUTO_TEST_CASE (line 52) | BOOST_AUTO_TEST_CASE( circshift_1 ) {
  function BOOST_AUTO_TEST_CASE (line 68) | BOOST_AUTO_TEST_CASE( circshift_2 ) {
  function BOOST_AUTO_TEST_CASE (line 84) | BOOST_AUTO_TEST_CASE( circshift_3 ) {

FILE: test/transport/integration.cpp
  type config (line 41) | struct config : public websocketpp::config::asio_client {
    type transport_config (line 59) | struct transport_config : public base::transport_config {
  type config_tls (line 83) | struct config_tls : public websocketpp::config::asio_tls_client {
    type transport_config (line 101) | struct transport_config : public base::transport_config {
  function close_after_timeout (line 139) | void close_after_timeout(T & e, websocketpp::connection_hdl hdl, long ti...
  function run_server (line 147) | void run_server(server * s, int port, bool log = false) {
  function run_client (line 164) | void run_client(client & c, std::string uri, bool log = false) {
  function run_client_and_mark (line 184) | void run_client_and_mark(client * c, bool * flag, websocketpp::lib::mute...
  function run_time_limited_client (line 192) | void run_time_limited_client(client & c, std::string uri, long timeout,
  function run_dummy_server (line 220) | void run_dummy_server(int port) {
  function run_dummy_client (line 247) | void run_dummy_client(std::string port) {
  function on_ping (line 276) | bool on_ping(server * s, websocketpp::connection_hdl, std::string) {
  function cancel_on_open (line 281) | void cancel_on_open(server * s, websocketpp::connection_hdl) {
  function stop_on_close (line 285) | void stop_on_close(server * s, websocketpp::connection_hdl hdl) {
  function ping_on_open (line 293) | void ping_on_open(T * c, std::string payload, websocketpp::connection_hd...
  function fail_on_pong (line 300) | void fail_on_pong(websocketpp::connection_hdl, std::string) {
  function fail_on_pong_timeout (line 304) | void fail_on_pong_timeout(websocketpp::connection_hdl, std::string) {
  function req_pong (line 308) | void req_pong(std::string expected_payload, websocketpp::connection_hdl,
  function fail_on_open (line 314) | void fail_on_open(websocketpp::connection_hdl) {
  function delay (line 318) | void delay(websocketpp::connection_hdl, long duration) {
  function check_ec (line 323) | void check_ec(T * c, websocketpp::lib::error_code ec,
  function check_ec_and_stop (line 333) | void check_ec_and_stop(T * e, websocketpp::lib::error_code ec,
  function req_pong_timeout (line 344) | void req_pong_timeout(T * c, std::string expected_payload,
  function close (line 353) | void close(T * e, websocketpp::connection_hdl hdl) {
  class test_deadline_timer (line 357) | class test_deadline_timer
    method test_deadline_timer (line 360) | test_deadline_timer(int seconds)
    method expired (line 374) | void expired(const boost::system::error_code & ec)
  function BOOST_AUTO_TEST_CASE (line 387) | BOOST_AUTO_TEST_CASE( pong_no_timeout ) {
  function BOOST_AUTO_TEST_CASE (line 410) | BOOST_AUTO_TEST_CASE( pong_timeout ) {
  function BOOST_AUTO_TEST_CASE (line 436) | BOOST_AUTO_TEST_CASE( client_open_handshake_timeout ) {
  function BOOST_AUTO_TEST_CASE (line 455) | BOOST_AUTO_TEST_CASE( server_open_handshake_timeout ) {
  function BOOST_AUTO_TEST_CASE (line 475) | BOOST_AUTO_TEST_CASE( client_self_initiated_close_handshake_timeout ) {
  function BOOST_AUTO_TEST_CASE (line 500) | BOOST_AUTO_TEST_CASE( client_peer_initiated_close_handshake_timeout ) {
  function BOOST_AUTO_TEST_CASE (line 509) | BOOST_AUTO_TEST_CASE( server_self_initiated_close_handshake_timeout ) {
  function BOOST_AUTO_TEST_CASE (line 533) | BOOST_AUTO_TEST_CASE( client_runs_out_of_work ) {
  function BOOST_AUTO_TEST_CASE (line 551) | BOOST_AUTO_TEST_CASE( client_is_perpetual ) {
  function BOOST_AUTO_TEST_CASE (line 585) | BOOST_AUTO_TEST_CASE( client_failed_connection ) {
  function BOOST_AUTO_TEST_CASE (line 591) | BOOST_AUTO_TEST_CASE( stop_listening ) {
  function BOOST_AUTO_TEST_CASE (line 611) | BOOST_AUTO_TEST_CASE( pause_reading ) {
  function BOOST_AUTO_TEST_CASE (line 641) | BOOST_AUTO_TEST_CASE( server_connection_cleanup ) {
  function BOOST_AUTO_TEST_CASE (line 646) | BOOST_AUTO_TEST_CASE( move_construct_transport ) {

FILE: test/transport/iostream/base.cpp
  function BOOST_AUTO_TEST_CASE (line 33) | BOOST_AUTO_TEST_CASE( placeholder ) {}

FILE: test/transport/iostream/connection.cpp
  type config (line 44) | struct config {
  type stub_con (line 56) | struct stub_con : public iostream_con {
    method stub_con (line 61) | stub_con(bool is_server, const websocketpp::lib::shared_ptr<config::al...
    method ptr (line 70) | ptr get_shared() {
    method write (line 74) | void write(std::string msg) {
    method write (line 86) | void write(std::vector<websocketpp::transport::buffer> & bufs) {
    method async_read_at_least (line 97) | void async_read_at_least(size_t num_bytes, char *buf, size_t len)
    method handle_op (line 111) | void handle_op(websocketpp::lib::error_code const & e) {
    method async_read_indef (line 115) | void async_read_indef(size_t num_bytes, char *buf, size_t len)
    method indef_read (line 124) | void indef_read() {
    method handle_indef (line 138) | void handle_indef(websocketpp::lib::error_code const & e, size_t amt_r...
    method shutdown (line 145) | void shutdown() {
    method handle_async_shutdown (line 155) | void handle_async_shutdown(websocketpp::lib::error_code const & e) {
  function BOOST_AUTO_TEST_CASE (line 170) | BOOST_AUTO_TEST_CASE( const_methods ) {
  function BOOST_AUTO_TEST_CASE (line 177) | BOOST_AUTO_TEST_CASE( write_before_output_method_set ) {
  function BOOST_AUTO_TEST_CASE (line 188) | BOOST_AUTO_TEST_CASE( async_write_ostream ) {
  function write_handler (line 201) | websocketpp::lib::error_code write_handler(std::string & o, websocketpp:...
  function vector_write_handler (line 206) | websocketpp::lib::error_code vector_write_handler(std::string & o, webso...
  function write_handler_error (line 215) | websocketpp::lib::error_code write_handler_error(websocketpp::connection...
  function BOOST_AUTO_TEST_CASE (line 219) | BOOST_AUTO_TEST_CASE( async_write_handler ) {
  function BOOST_AUTO_TEST_CASE (line 235) | BOOST_AUTO_TEST_CASE( async_write_handler_error ) {
  function BOOST_AUTO_TEST_CASE (line 243) | BOOST_AUTO_TEST_CASE( async_write_vector_0_ostream ) {
  function BOOST_AUTO_TEST_CASE (line 257) | BOOST_AUTO_TEST_CASE( async_write_vector_0_write_handler ) {
  function BOOST_AUTO_TEST_CASE (line 278) | BOOST_AUTO_TEST_CASE( async_write_vector_1_ostream ) {
  function BOOST_AUTO_TEST_CASE (line 296) | BOOST_AUTO_TEST_CASE( async_write_vector_1_write_handler ) {
  function BOOST_AUTO_TEST_CASE (line 320) | BOOST_AUTO_TEST_CASE( async_write_vector_2_ostream ) {
  function BOOST_AUTO_TEST_CASE (line 340) | BOOST_AUTO_TEST_CASE( async_write_vector_2_write_handler ) {
  function BOOST_AUTO_TEST_CASE (line 366) | BOOST_AUTO_TEST_CASE( async_write_vector_2_vector_write_handler ) {
  function BOOST_AUTO_TEST_CASE (line 391) | BOOST_AUTO_TEST_CASE( async_read_at_least_too_much ) {
  function BOOST_AUTO_TEST_CASE (line 400) | BOOST_AUTO_TEST_CASE( async_read_at_least_double_read ) {
  function BOOST_AUTO_TEST_CASE (line 410) | BOOST_AUTO_TEST_CASE( async_read_at_least ) {
  function BOOST_AUTO_TEST_CASE (line 446) | BOOST_AUTO_TEST_CASE( async_read_at_least2 ) {
  function timer_callback_stub (line 470) | void timer_callback_stub(websocketpp::lib::error_code const &) {}
  function BOOST_AUTO_TEST_CASE (line 472) | BOOST_AUTO_TEST_CASE( set_timer ) {
  function BOOST_AUTO_TEST_CASE (line 480) | BOOST_AUTO_TEST_CASE( async_read_at_least_read_some ) {
  function BOOST_AUTO_TEST_CASE (line 504) | BOOST_AUTO_TEST_CASE( async_read_at_least_read_some_indef ) {
  function BOOST_AUTO_TEST_CASE (line 529) | BOOST_AUTO_TEST_CASE( async_read_at_least_read_all ) {
  function BOOST_AUTO_TEST_CASE (line 545) | BOOST_AUTO_TEST_CASE( eof_flag ) {
  function BOOST_AUTO_TEST_CASE (line 554) | BOOST_AUTO_TEST_CASE( fatal_error_flag ) {
  function BOOST_AUTO_TEST_CASE (line 563) | BOOST_AUTO_TEST_CASE( shutdown ) {
  function sd_handler (line 570) | websocketpp::lib::error_code sd_handler(websocketpp::connection_hdl) {
  function BOOST_AUTO_TEST_CASE (line 574) | BOOST_AUTO_TEST_CASE( shutdown_handler ) {
  function BOOST_AUTO_TEST_CASE (line 583) | BOOST_AUTO_TEST_CASE( clear_handler ) {
  function BOOST_AUTO_TEST_CASE (line 593) | BOOST_AUTO_TEST_CASE( shared_pointer_memory_cleanup ) {

FILE: test/transport/iostream/endpoint.cpp
  function BOOST_AUTO_TEST_CASE (line 35) | BOOST_AUTO_TEST_CASE( placeholder ) {}

FILE: test/utility/close.cpp
  function BOOST_AUTO_TEST_CASE (line 39) | BOOST_AUTO_TEST_CASE( reserved_values ) {
  function BOOST_AUTO_TEST_CASE (line 47) | BOOST_AUTO_TEST_CASE( invalid_values ) {
  function BOOST_AUTO_TEST_CASE (line 59) | BOOST_AUTO_TEST_CASE( value_extraction ) {
  function BOOST_AUTO_TEST_CASE (line 88) | BOOST_AUTO_TEST_CASE( extract_empty ) {
  function BOOST_AUTO_TEST_CASE (line 96) | BOOST_AUTO_TEST_CASE( extract_short ) {
  function BOOST_AUTO_TEST_CASE (line 104) | BOOST_AUTO_TEST_CASE( extract_reason ) {

FILE: test/utility/error.cpp
  function BOOST_AUTO_TEST_CASE (line 33) | BOOST_AUTO_TEST_CASE( constructing_exceptions ) {

FILE: test/utility/frame.cpp
  function BOOST_AUTO_TEST_CASE (line 39) | BOOST_AUTO_TEST_CASE( basic_bits ) {
  function BOOST_AUTO_TEST_CASE (line 73) | BOOST_AUTO_TEST_CASE( basic_constructors ) {
  function BOOST_AUTO_TEST_CASE (line 94) | BOOST_AUTO_TEST_CASE( basic_size ) {
  function BOOST_AUTO_TEST_CASE (line 125) | BOOST_AUTO_TEST_CASE( basic_header_length ) {
  function BOOST_AUTO_TEST_CASE (line 141) | BOOST_AUTO_TEST_CASE( basic_opcode ) {
  function BOOST_AUTO_TEST_CASE (line 154) | BOOST_AUTO_TEST_CASE( extended_header_basics ) {
  function BOOST_AUTO_TEST_CASE (line 182) | BOOST_AUTO_TEST_CASE( extended_header_extractors ) {
  function BOOST_AUTO_TEST_CASE (line 216) | BOOST_AUTO_TEST_CASE( header_preparation ) {
  function BOOST_AUTO_TEST_CASE (line 236) | BOOST_AUTO_TEST_CASE( prepare_masking_key ) {
  function BOOST_AUTO_TEST_CASE (line 250) | BOOST_AUTO_TEST_CASE( prepare_masking_key2 ) {
  function BOOST_AUTO_TEST_CASE (line 266) | BOOST_AUTO_TEST_CASE( circshift ) {
  function BOOST_AUTO_TEST_CASE (line 284) | BOOST_AUTO_TEST_CASE( block_byte_mask ) {
  function BOOST_AUTO_TEST_CASE (line 308) | BOOST_AUTO_TEST_CASE( block_byte_mask_inplace ) {
  function BOOST_AUTO_TEST_CASE (line 330) | BOOST_AUTO_TEST_CASE( block_word_mask ) {
  function BOOST_AUTO_TEST_CASE (line 354) | BOOST_AUTO_TEST_CASE( block_word_mask_inplace ) {
  function BOOST_AUTO_TEST_CASE (line 376) | BOOST_AUTO_TEST_CASE( continuous_word_mask ) {
  function BOOST_AUTO_TEST_CASE (line 413) | BOOST_AUTO_TEST_CASE( continuous_byte_mask ) {
  function BOOST_AUTO_TEST_CASE (line 450) | BOOST_AUTO_TEST_CASE( continuous_word_mask_inplace ) {
  function BOOST_AUTO_TEST_CASE (line 484) | BOOST_AUTO_TEST_CASE( continuous_byte_mask_inplace ) {
  function BOOST_AUTO_TEST_CASE (line 518) | BOOST_AUTO_TEST_CASE( continuous_word_mask2 ) {

FILE: test/utility/sha1.cpp
  function BOOST_AUTO_TEST_CASE (line 39) | BOOST_AUTO_TEST_CASE( sha1_test_a ) {
  function BOOST_AUTO_TEST_CASE (line 51) | BOOST_AUTO_TEST_CASE( sha1_test_b ) {
  function BOOST_AUTO_TEST_CASE (line 64) | BOOST_AUTO_TEST_CASE( sha1_test_c ) {

FILE: test/utility/uri.cpp
  function BOOST_AUTO_TEST_CASE (line 37) | BOOST_AUTO_TEST_CASE( uri_valid ) {
  function BOOST_AUTO_TEST_CASE (line 50) | BOOST_AUTO_TEST_CASE( uri_valid_no_port_unsecure ) {
  function BOOST_AUTO_TEST_CASE (line 62) | BOOST_AUTO_TEST_CASE( uri_valid_no_port_secure ) {
  function BOOST_AUTO_TEST_CASE (line 74) | BOOST_AUTO_TEST_CASE( uri_valid_no_resource ) {
  function BOOST_AUTO_TEST_CASE (line 86) | BOOST_AUTO_TEST_CASE( uri_valid_ipv6_literal ) {
  function BOOST_AUTO_TEST_CASE (line 98) | BOOST_AUTO_TEST_CASE( uri_valid_2 ) {
  function BOOST_AUTO_TEST_CASE (line 111) | BOOST_AUTO_TEST_CASE( uri_invalid_long_port ) {
  function BOOST_AUTO_TEST_CASE (line 118) | BOOST_AUTO_TEST_CASE( uri_invalid_scheme ) {
  function BOOST_AUTO_TEST_CASE (line 125) | BOOST_AUTO_TEST_CASE( uri_http_scheme ) {
  function BOOST_AUTO_TEST_CASE (line 137) | BOOST_AUTO_TEST_CASE( uri_valid_ipv4_literal ) {
  function BOOST_AUTO_TEST_CASE (line 149) | BOOST_AUTO_TEST_CASE( uri_valid_3 ) {
  function BOOST_AUTO_TEST_CASE (line 161) | BOOST_AUTO_TEST_CASE( uri_invalid_method_separator ) {
  function BOOST_AUTO_TEST_CASE (line 168) | BOOST_AUTO_TEST_CASE( uri_invalid_gt_16_bit_port ) {
  function BOOST_AUTO_TEST_CASE (line 175) | BOOST_AUTO_TEST_CASE( uri_invalid_fragment ) {
  function BOOST_AUTO_TEST_CASE (line 182) | BOOST_AUTO_TEST_CASE( uri_invalid_bad_v6_literal_1 ) {
  function BOOST_AUTO_TEST_CASE (line 189) | BOOST_AUTO_TEST_CASE( uri_invalid_bad_v6_literal_2 ) {
  function BOOST_AUTO_TEST_CASE (line 196) | BOOST_AUTO_TEST_CASE( uri_valid_4 ) {
  function BOOST_AUTO_TEST_CASE (line 209) | BOOST_AUTO_TEST_CASE( uri_valid_v4_mapped ) {
  function BOOST_AUTO_TEST_CASE (line 221) | BOOST_AUTO_TEST_CASE( uri_valid_v6_mixed_case ) {
  function BOOST_AUTO_TEST_CASE (line 233) | BOOST_AUTO_TEST_CASE( uri_invalid_no_scheme ) {

FILE: test/utility/utilities.cpp
  function BOOST_AUTO_TEST_CASE (line 38) | BOOST_AUTO_TEST_CASE( substr_found ) {
  function BOOST_AUTO_TEST_CASE (line 45) | BOOST_AUTO_TEST_CASE( substr_found_ci ) {
  function BOOST_AUTO_TEST_CASE (line 52) | BOOST_AUTO_TEST_CASE( substr_not_found ) {
  function BOOST_AUTO_TEST_CASE (line 59) | BOOST_AUTO_TEST_CASE( to_lower ) {
  function BOOST_AUTO_TEST_CASE (line 65) | BOOST_AUTO_TEST_CASE( string_replace_all ) {

FILE: tutorials/utility_client/step1.cpp
  function main (line 34) | int main() {

FILE: tutorials/utility_client/step2.cpp
  function main (line 39) | int main() {

FILE: tutorials/utility_client/step3.cpp
  class websocket_endpoint (line 42) | class websocket_endpoint {
    method websocket_endpoint (line 44) | websocket_endpoint () {
  function main (line 58) | int main() {

FILE: tutorials/utility_client/step4.cpp
  class connection_metadata (line 45) | class connection_metadata {
    method connection_metadata (line 49) | connection_metadata(int id, websocketpp::connection_hdl hdl, std::stri...
    method on_open (line 57) | void on_open(client * c, websocketpp::connection_hdl hdl) {
    method on_fail (line 64) | void on_fail(client * c, websocketpp::connection_hdl hdl) {
  class websocket_endpoint (line 91) | class websocket_endpoint {
    method websocket_endpoint (line 93) | websocket_endpoint () : m_next_id(0) {
    method connect (line 103) | int connect(std::string const & uri) {
    method get_metadata (line 135) | connection_metadata::ptr get_metadata(int id) const {
  function main (line 153) | int main() {

FILE: tutorials/utility_client/step5.cpp
  class connection_metadata (line 45) | class connection_metadata {
    method connection_metadata (line 49) | connection_metadata(int id, websocketpp::connection_hdl hdl, std::stri...
    method on_open (line 57) | void on_open(client * c, websocketpp::connection_hdl hdl) {
    method on_fail (line 64) | void on_fail(client * c, websocketpp::connection_hdl hdl) {
    method on_close (line 72) | void on_close(client * c, websocketpp::connection_hdl hdl) {
    method get_hdl (line 82) | websocketpp::connection_hdl get_hdl() const {
    method get_id (line 86) | int get_id() const {
    method get_status (line 90) | std::string get_status() const {
  class websocket_endpoint (line 113) | class websocket_endpoint {
    method websocket_endpoint (line 115) | websocket_endpoint () : m_next_id(0) {
    method connect (line 147) | int connect(std::string const & uri) {
    method close (line 185) | void close(int id, websocketpp::close::status::value code, std::string...
    method get_metadata (line 200) | connection_metadata::ptr get_metadata(int id) const {
  function main (line 218) | int main() {

FILE: tutorials/utility_client/step6.cpp
  class connection_metadata (line 45) | class connection_metadata {
    method connection_metadata (line 49) | connection_metadata(int id, websocketpp::connection_hdl hdl, std::stri...
    method on_open (line 57) | void on_open(client * c, websocketpp::connection_hdl hdl) {
    method on_fail (line 64) | void on_fail(client * c, websocketpp::connection_hdl hdl) {
    method on_close (line 72) | void on_close(client * c, websocketpp::connection_hdl hdl) {
    method on_message (line 82) | void on_message(websocketpp::connection_hdl, client::message_ptr msg) {
    method get_hdl (line 90) | websocketpp::connection_hdl get_hdl() const {
    method get_id (line 94) | int get_id() const {
    method get_status (line 98) | std::string get_status() const {
    method record_sent_message (line 102) | void record_sent_message(std::string message) {
  class websocket_endpoint (line 132) | class websocket_endpoint {
    method websocket_endpoint (line 134) | websocket_endpoint () : m_next_id(0) {
    method connect (line 166) | int connect(std::string const & uri) {
    method close (line 210) | void close(int id, websocketpp::close::status::value code, std::string...
    method send (line 225) | void send(int id, std::string message) {
    method get_metadata (line 243) | connection_metadata::ptr get_metadata(int id) const {
  function main (line 261) | int main() {

FILE: tutorials/utility_server/step1.cpp
  class utility_server (line 42) | class utility_server {
    method utility_server (line 44) | utility_server() {
    method run (line 53) | void run() {
  function main (line 67) | int main() {

FILE: tutorials/utility_server/step2.cpp
  class utility_server (line 42) | class utility_server {
    method utility_server (line 44) | utility_server() {
    method echo_handler (line 59) | void echo_handler(websocketpp::connection_hdl hdl, server::message_ptr...
    method run (line 64) | void run() {
  function main (line 78) | int main() {

FILE: websocketpp/base64/base64.hpp
  type websocketpp (line 41) | namespace websocketpp {
    function is_base64 (line 53) | static inline bool is_base64(unsigned char c) {
    function base64_encode (line 66) | inline std::string base64_encode(unsigned char const * input, size_t l...
    function base64_encode (line 119) | inline std::string base64_encode(std::string const & input) {
    function base64_decode (line 131) | inline std::string base64_decode(std::string const & input) {

FILE: websocketpp/close.hpp
  type websocketpp (line 43) | namespace websocketpp {
    type close (line 45) | namespace close {
      type status (line 47) | namespace status {
        function reserved (line 184) | inline bool reserved(value code) {
        function invalid (line 199) | inline bool invalid(value code) {
        function terminal (line 217) | inline bool terminal(value code) {
        function get_string (line 232) | inline std::string get_string(value code) {
      function extract_code (line 294) | inline status::value extract_code(std::string const & payload, lib::...
      function extract_reason (line 333) | inline std::string extract_reason(std::string const & payload, lib::...

FILE: websocketpp/common/asio.hpp
  type websocketpp (line 69) | namespace websocketpp {
    type lib (line 70) | namespace lib {
      type asio (line 73) | namespace asio {
        function is_neg (line 85) | bool is_neg(T duration) {
        function milliseconds (line 88) | inline lib::chrono::milliseconds milliseconds(long duration) {
        function is_neg (line 101) | bool is_neg(T duration) {
        function milliseconds (line 109) | inline std::chrono::milliseconds milliseconds(long duration) {
        function milliseconds (line 113) | inline lib::chrono::milliseconds milliseconds(long duration) {
        function is_neg (line 124) | bool is_neg(T duration) {
        function milliseconds (line 127) | inline boost::posix_time::time_duration milliseconds(long duration) {
      type asio (line 94) | namespace asio {
        function is_neg (line 85) | bool is_neg(T duration) {
        function milliseconds (line 88) | inline lib::chrono::milliseconds milliseconds(long duration) {
        function is_neg (line 101) | bool is_neg(T duration) {
        function milliseconds (line 109) | inline std::chrono::milliseconds milliseconds(long duration) {
        function milliseconds (line 113) | inline lib::chrono::milliseconds milliseconds(long duration) {
        function is_neg (line 124) | bool is_neg(T duration) {
        function milliseconds (line 127) | inline boost::posix_time::time_duration milliseconds(long duration) {

FILE: websocketpp/common/chrono.hpp
  type websocketpp (line 56) | namespace websocketpp {
    type lib (line 57) | namespace lib {

FILE: websocketpp/common/connection_hdl.hpp
  type websocketpp (line 33) | namespace websocketpp {

FILE: websocketpp/common/functional.hpp
  type websocketpp (line 62) | namespace websocketpp {
    type lib (line 63) | namespace lib {
      function clear_function (line 79) | void clear_function(T & x) {
      type placeholders (line 86) | namespace placeholders {
      function clear_function (line 97) | void clear_function(T & x) {

FILE: websocketpp/common/md5.hpp
  type websocketpp (line 74) | namespace websocketpp {
    type md5 (line 76) | namespace md5 {
      type md5_state_s (line 82) | struct md5_state_s {
      function md5_process (line 170) | static void md5_process(md5_state_t *pms, md5_byte_t const * data /*...
      function md5_init (line 349) | void md5_init(md5_state_t *pms) {
      function md5_append (line 357) | void md5_append(md5_state_t *pms, md5_byte_t const * data, size_t nb...
      function md5_finish (line 393) | void md5_finish(md5_state_t *pms, md5_byte_t digest[16]) {
      function md5_hash_string (line 415) | inline std::string md5_hash_string(std::string const & s) {
      function md5_hash_hex (line 433) | inline std::string md5_hash_hex(std::string const & input) {

FILE: websocketpp/common/memory.hpp
  type websocketpp (line 62) | namespace websocketpp {
    type lib (line 63) | namespace lib {

FILE: websocketpp/common/network.hpp
  type websocketpp (line 41) | namespace websocketpp {
    type lib (line 42) | namespace lib {
      type net (line 43) | namespace net {
        function is_little_endian (line 45) | inline bool is_little_endian() {
        function _htonll (line 66) | inline uint64_t _htonll(uint64_t src) {
        function _ntohll (line 98) | inline uint64_t _ntohll(uint64_t src) {

FILE: websocketpp/common/random.hpp
  type websocketpp (line 68) | namespace websocketpp {
    type lib (line 69) | namespace lib {

FILE: websocketpp/common/regex.hpp
  type websocketpp (line 43) | namespace websocketpp {
    type lib (line 44) | namespace lib {

FILE: websocketpp/common/system_error.hpp
  type websocketpp (line 60) | namespace websocketpp {
    type lib (line 61) | namespace lib {

FILE: websocketpp/common/thread.hpp
  type websocketpp (line 68) | namespace websocketpp {
    type lib (line 69) | namespace lib {

FILE: websocketpp/common/time.hpp
  type websocketpp (line 33) | namespace websocketpp {
    type lib (line 34) | namespace lib {
      function localtime (line 41) | inline std::tm localtime(std::time_t const & time) {

FILE: websocketpp/common/type_traits.hpp
  type websocketpp (line 51) | namespace websocketpp {
    type lib (line 52) | namespace lib {

FILE: websocketpp/concurrency/basic.hpp
  type websocketpp (line 33) | namespace websocketpp {
    type concurrency (line 34) | namespace concurrency {
      class basic (line 37) | class basic {

FILE: websocketpp/concurrency/none.hpp
  type websocketpp (line 31) | namespace websocketpp {
    type concurrency (line 34) | namespace concurrency {
      type none_impl (line 37) | namespace none_impl {
        class fake_mutex (line 39) | class fake_mutex {
          method fake_mutex (line 41) | fake_mutex() {}
        class fake_lock_guard (line 46) | class fake_lock_guard {
          method fake_lock_guard (line 48) | explicit fake_lock_guard(fake_mutex) {}
      class none (line 60) | class none {

FILE: websocketpp/config/asio.hpp
  type websocketpp (line 39) | namespace websocketpp {
    type config (line 40) | namespace config {
      type asio_tls (line 43) | struct asio_tls : public core {
        type transport_config (line 61) | struct transport_config : public base::transport_config {

FILE: websocketpp/config/asio_client.hpp
  type websocketpp (line 39) | namespace websocketpp {
    type config (line 40) | namespace config {
      type asio_tls_client (line 43) | struct asio_tls_client : public core_client {
        type transport_config (line 61) | struct transport_config : public base::transport_config {

FILE: websocketpp/config/asio_no_tls.hpp
  type websocketpp (line 34) | namespace websocketpp {
    type config (line 35) | namespace config {
      type asio (line 38) | struct asio : public core {
        type transport_config (line 56) | struct transport_config : public base::transport_config {

FILE: websocketpp/config/asio_no_tls_client.hpp
  type websocketpp (line 34) | namespace websocketpp {
    type config (line 35) | namespace config {
      type asio_client (line 38) | struct asio_client : public core_client {
        type transport_config (line 56) | struct transport_config : public base::transport_config {

FILE: websocketpp/config/core.hpp
  type websocketpp (line 64) | namespace websocketpp {
    type config (line 65) | namespace config {
      type core (line 68) | struct core {
        type transport_config (line 100) | struct transport_config {
        type permessage_deflate_config (line 260) | struct permessage_deflate_config {

FILE: websocketpp/config/core_client.hpp
  type websocketpp (line 67) | namespace websocketpp {
    type config (line 68) | namespace config {
      type core_client (line 71) | struct core_client {
        type transport_config (line 108) | struct transport_config {
        type permessage_deflate_config (line 257) | struct permessage_deflate_config {

FILE: websocketpp/config/debug.hpp
  type websocketpp (line 64) | namespace websocketpp {
    type config (line 65) | namespace config {
      type debug_core (line 68) | struct debug_core {
        type transport_config (line 100) | struct transport_config {
        type permessage_deflate_config (line 249) | struct permessage_deflate_config {

FILE: websocketpp/config/debug_asio.hpp
  type websocketpp (line 39) | namespace websocketpp {
    type config (line 40) | namespace config {
      type debug_asio_tls (line 43) | struct debug_asio_tls : public debug_core {
        type transport_config (line 61) | struct transport_config : public base::transport_config {

FILE: websocketpp/config/debug_asio_no_tls.hpp
  type websocketpp (line 34) | namespace websocketpp {
    type config (line 35) | namespace config {
      type debug_asio (line 38) | struct debug_asio : public debug_core {
        type transport_config (line 56) | struct transport_config : public base::transport_config {

FILE: websocketpp/config/minimal_client.hpp
  type websocketpp (line 33) | namespace websocketpp {
    type config (line 34) | namespace config {

FILE: websocketpp/config/minimal_server.hpp
  type websocketpp (line 63) | namespace websocketpp {
    type config (line 64) | namespace config {
      type minimal_server (line 96) | struct minimal_server {
        type transport_config (line 126) | struct transport_config {
        type permessage_deflate_config (line 275) | struct permessage_deflate_config {

FILE: websocketpp/connection.hpp
  type websocketpp (line 49) | namespace websocketpp {
    type session (line 176) | namespace session {
      type state (line 177) | namespace state {
        type value (line 179) | enum value {
      type fail (line 188) | namespace fail {
        type status (line 189) | namespace status {
          type value (line 190) | enum value {
      type internal_state (line 201) | namespace internal_state {
        type value (line 206) | enum value {
      type http_state (line 219) | namespace http_state {
        type value (line 222) | enum value {
    class connection (line 235) | class connection
      type terminate_status (line 290) | enum terminate_status {
      method connection (line 297) | explicit connection(bool p_is_server, std::string const & ua, const ...
      method ptr (line 336) | ptr get_shared() {
      method set_open_handler (line 351) | void set_open_handler(open_handler h) {
      method set_close_handler (line 361) | void set_close_handler(close_handler h) {
      method set_fail_handler (line 372) | void set_fail_handler(fail_handler h) {
      method set_ping_handler (line 387) | void set_ping_handler(ping_handler h) {
      method set_pong_handler (line 398) | void set_pong_handler(pong_handler h) {
      method set_pong_timeout_handler (line 421) | void set_pong_timeout_handler(pong_timeout_handler h) {
      method set_interrupt_handler (line 432) | void set_interrupt_handler(interrupt_handler h) {
      method set_http_handler (line 447) | void set_http_handler(http_handler h) {
      method set_validate_handler (line 463) | void set_validate_handler(validate_handler h) {
      method set_message_handler (line 473) | void set_message_handler(message_handler h) {
      method set_open_handshake_timeout (line 501) | void set_open_handshake_timeout(long dur) {
      method set_close_handshake_timeout (line 525) | void set_close_handshake_timeout(long dur) {
      method set_pong_timeout (line 546) | void set_pong_timeout(long dur) {
      method get_max_message_size (line 559) | size_t get_max_message_size() const {
      method set_max_message_size (line 575) | void set_max_message_size(size_t new_value) {
      method get_max_http_body_size (line 594) | size_t get_max_http_body_size() const {
      method set_max_http_body_size (line 610) | void set_max_http_body_size(size_t new_value) {
      method buffered_amount (line 635) | size_t buffered_amount() const {
      method get_response_code (line 983) | http::status_code::value get_response_code() const {
      method request_type (line 1102) | request_type const & get_request() const {
      method response_type (line 1121) | response_type const & get_response() const {
      method connection_hdl (line 1183) | connection_hdl get_handle() const {
      method is_server (line 1191) | bool is_server() const {
      method get_local_close_code (line 1217) | close::status::value get_local_close_code() const {
      method get_remote_close_code (line 1233) | close::status::value get_remote_close_code() const {
      method get_ec (line 1254) | lib::error_code get_ec() const {
      method message_ptr (line 1277) | message_ptr get_message(websocketpp::frame::opcode::value op, size_t...
      method set_handle (line 1356) | void set_handle(connection_hdl hdl) {
      method log_err (line 1486) | void log_err(log::level l, char const * msg, error_type const & ec) {

FILE: websocketpp/connection_base.hpp
  type websocketpp (line 31) | namespace websocketpp {
    class connection_base (line 34) | class connection_base {}

FILE: websocketpp/endpoint.hpp
  type websocketpp (line 38) | namespace websocketpp {
    class endpoint (line 42) | class endpoint : public config::transport_type, public config::endpoin...
      method endpoint (line 91) | explicit endpoint(bool p_is_server)
      method connection (line 112) | connection,config>() {}
      method endpoint (line 116) | endpoint(endpoint &) = delete;
      method endpoint (line 119) | endpoint & operator=(endpoint const &) = delete;
      method endpoint (line 124) | endpoint(endpoint && o)
      method endpoint (line 154) | endpoint & operator=(endpoint &&) = delete;
      method get_user_agent (line 169) | std::string get_user_agent() const {
      method set_user_agent (line 196) | void set_user_agent(std::string const & ua) {
      method is_server (line 205) | bool is_server() const {
      method set_access_channels (line 220) | void set_access_channels(log::level channels) {
      method clear_access_channels (line 231) | void clear_access_channels(log::level channels) {
      method set_error_channels (line 242) | void set_error_channels(log::level channels) {
      method clear_error_channels (line 253) | void clear_error_channels(log::level channels) {
      method alog_type (line 261) | alog_type & get_alog() {
      method elog_type (line 269) | elog_type & get_elog() {
      method set_open_handler (line 277) | void set_open_handler(open_handler h) {
      method set_close_handler (line 282) | void set_close_handler(close_handler h) {
      method set_fail_handler (line 287) | void set_fail_handler(fail_handler h) {
      method set_ping_handler (line 292) | void set_ping_handler(ping_handler h) {
      method set_pong_handler (line 297) | void set_pong_handler(pong_handler h) {
      method set_pong_timeout_handler (line 302) | void set_pong_timeout_handler(pong_timeout_handler h) {
      method set_interrupt_handler (line 307) | void set_interrupt_handler(interrupt_handler h) {
      method set_http_handler (line 312) | void set_http_handler(http_handler h) {
      method set_validate_handler (line 317) | void set_validate_handler(validate_handler h) {
      method set_message_handler (line 322) | void set_message_handler(message_handler h) {
      method set_open_handshake_timeout (line 352) | void set_open_handshake_timeout(long dur) {
      method set_close_handshake_timeout (line 377) | void set_close_handshake_timeout(long dur) {
      method set_pong_timeout (line 399) | void set_pong_timeout(long dur) {
      method get_max_message_size (line 415) | size_t get_max_message_size() const {
      method set_max_message_size (line 432) | void set_max_message_size(size_t new_value) {
      method get_max_http_body_size (line 449) | size_t get_max_http_body_size() const {
      method set_max_http_body_size (line 466) | void set_max_http_body_size(size_t new_value) {
      method connection_ptr (line 643) | connection_ptr get_con_from_hdl(connection_hdl hdl, lib::error_code ...
      method connection_ptr (line 653) | connection_ptr get_con_from_hdl(connection_hdl hdl) {

FILE: websocketpp/endpoint_base.hpp
  type websocketpp (line 31) | namespace websocketpp {
    class endpoint_base (line 34) | class endpoint_base {}

FILE: websocketpp/error.hpp
  type websocketpp (line 38) | namespace websocketpp {
    type error (line 44) | namespace error {
      type value (line 45) | enum value {
      class category (line 150) | class category : public lib::error_category {
        method category (line 152) | category() {}
        method message (line 158) | std::string message(int value) const {
      function make_error_code (line 235) | inline lib::error_code make_error_code(error::value e) {
  function _WEBSOCKETPP_ERROR_CODE_ENUM_NS_END_ (line 247) | _WEBSOCKETPP_ERROR_CODE_ENUM_NS_END_

FILE: websocketpp/extensions/extension.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type extensions (line 50) | namespace extensions {
      type error (line 52) | namespace error {
        type value (line 53) | enum value {
        class category (line 61) | class category : public lib::error_category {
          method category (line 63) | category() {}
          method message (line 69) | std::string message(int value) const {
        function make_error_code (line 86) | inline lib::error_code make_error_code(error::value e) {

FILE: websocketpp/extensions/permessage_deflate/disabled.hpp
  type websocketpp (line 42) | namespace websocketpp {
    type extensions (line 43) | namespace extensions {
      type permessage_deflate (line 44) | namespace permessage_deflate {
        class disabled (line 53) | class disabled {
          method err_str_pair (line 65) | err_str_pair negotiate(http::attribute_list const &) {
          method init (line 76) | lib::error_code init(bool) {
          method is_implemented (line 82) | bool is_implemented() const {
          method is_enabled (line 88) | bool is_enabled() const {
          method generate_offer (line 99) | std::string generate_offer() const {
          method compress (line 109) | lib::error_code compress(std::string const &, std::string &) {
          method decompress (line 120) | lib::error_code decompress(uint8_t const *, size_t, std::string ...

FILE: websocketpp/extensions/permessage_deflate/enabled.hpp
  type websocketpp (line 47) | namespace websocketpp {
    type extensions (line 48) | namespace extensions {
      type permessage_deflate (line 88) | namespace permessage_deflate {
        type error (line 91) | namespace error {
          type value (line 92) | enum value {
          class category (line 119) | class category : public lib::error_category {
            method category (line 121) | category() {}
            method message (line 127) | std::string message(int value) const {
          function make_error_code (line 158) | inline lib::error_code make_error_code(error::value e) {
  function _WEBSOCKETPP_ERROR_CODE_ENUM_NS_END_ (line 173) | _WEBSOCKETPP_ERROR_CODE_ENUM_NS_END_

FILE: websocketpp/frame.hpp
  type websocketpp (line 39) | namespace websocketpp {
    type frame (line 45) | namespace frame {
      type opcode (line 76) | namespace opcode {
        type value (line 77) | enum value {
        function reserved (line 118) | inline bool reserved(value v) {
        function invalid (line 130) | inline bool invalid(value v) {
        function is_control (line 139) | inline bool is_control(value v) {
      type limits (line 145) | namespace limits {
      type basic_header (line 189) | struct basic_header {
        method basic_header (line 190) | basic_header() : b0(0x00),b1(0x00) {}
        method basic_header (line 192) | basic_header(uint8_t p0, uint8_t p1) : b0(p0), b1(p1) {}
        method basic_header (line 194) | basic_header(opcode::value op, uint64_t size, bool fin, bool mask,
      type extended_header (line 235) | struct extended_header {
        method extended_header (line 236) | extended_header() {
        method extended_header (line 240) | extended_header(uint64_t payload_size) {
        method extended_header (line 246) | extended_header(uint64_t payload_size, uint32_t masking_key) {
        method copy_payload (line 260) | int copy_payload(uint64_t payload_size) {
      function get_fin (line 321) | inline bool get_fin(basic_header const & h) {
      function set_fin (line 330) | inline void set_fin(basic_header & h, bool value) {
      function get_rsv1 (line 339) | inline bool get_rsv1(const basic_header &h) {
      function set_rsv1 (line 348) | inline void set_rsv1(basic_header &h, bool value) {
      function get_rsv2 (line 357) | inline bool get_rsv2(const basic_header &h) {
      function set_rsv2 (line 366) | inline void set_rsv2(basic_header &h, bool value) {
      function get_rsv3 (line 375) | inline bool get_rsv3(const basic_header &h) {
      function set_rsv3 (line 384) | inline void set_rsv3(basic_header &h, bool value) {
      function get_opcode (line 393) | inline opcode::value get_opcode(const basic_header &h) {
      function get_masked (line 402) | inline bool get_masked(basic_header const & h) {
      function set_masked (line 411) | inline void set_masked(basic_header & h, bool value) {
      function get_basic_size (line 431) | inline uint8_t get_basic_size(const basic_header &h) {
      function get_header_len (line 445) | inline size_t get_header_len(basic_header const & h) {
      function get_masking_key_offset (line 469) | inline unsigned int get_masking_key_offset(const basic_header &h) {
      function prepare_header (line 489) | inline std::string prepare_header(const basic_header &h, const
      function masking_key_type (line 516) | inline masking_key_type get_masking_key(const basic_header &h, const
      function get_extended_size (line 540) | inline uint16_t get_extended_size(const extended_header &e) {
      function get_jumbo_size (line 555) | inline uint64_t get_jumbo_size(const extended_header &e) {
      function get_payload_size (line 573) | inline uint64_t get_payload_size(const basic_header &h, const
      function prepare_masking_key (line 595) | inline size_t prepare_masking_key(const masking_key_type& key) {
      function circshift_prepared_key (line 612) | inline size_t circshift_prepared_key(size_t prepared_key, size_t off...
      function byte_mask (line 645) | void byte_mask(input_iter first, input_iter last, output_iter result,
      function byte_mask (line 675) | void byte_mask(iter_type b, iter_type e, masking_key_type const & key,
      function word_mask_exact (line 702) | inline void word_mask_exact(uint8_t* input, uint8_t* output, size_t ...
      function word_mask_exact (line 731) | inline void word_mask_exact(uint8_t* data, size_t length, const
      function word_mask_circ (line 768) | inline size_t word_mask_circ(uint8_t * input, uint8_t * output, size...
      function word_mask_circ (line 805) | inline size_t word_mask_circ(uint8_t* data, size_t length, size_t pr...
      function byte_mask_circ (line 830) | inline size_t byte_mask_circ(uint8_t * input, uint8_t * output, size...
      function byte_mask_circ (line 857) | inline size_t byte_mask_circ(uint8_t* data, size_t length, size_t pr...

FILE: websocketpp/http/constants.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type http (line 39) | namespace http {
      function is_token_char (line 98) | inline bool is_token_char(unsigned char c) {
      function is_not_token_char (line 103) | inline bool is_not_token_char(unsigned char c) {
      function is_whitespace_char (line 111) | inline bool is_whitespace_char(unsigned char c) {
      function is_not_whitespace_char (line 116) | inline bool is_not_whitespace_char(unsigned char c) {
      type status_code (line 121) | namespace status_code {
        type value (line 122) | enum value {
        function get_string (line 179) | inline std::string get_string(value c) {
      class exception (line 283) | class exception : public std::exception {
        method exception (line 285) | exception(const std::string& log_msg,

FILE: websocketpp/http/impl/parser.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type http (line 38) | namespace http {
      type parser (line 39) | namespace parser {
        function header_list (line 179) | inline header_list const & parser::get_headers() const {

FILE: websocketpp/http/impl/request.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type http (line 38) | namespace http {
      type parser (line 39) | namespace parser {

FILE: websocketpp/http/impl/response.hpp
  type websocketpp (line 38) | namespace websocketpp {
    type http (line 39) | namespace http {
      type parser (line 40) | namespace parser {

FILE: websocketpp/http/parser.hpp
  type websocketpp (line 39) | namespace websocketpp {
    type http (line 40) | namespace http {
      type parser (line 41) | namespace parser {
        type state (line 43) | namespace state {
          type value (line 44) | enum value {
        type body_encoding (line 52) | namespace body_encoding {
          type value (line 53) | enum value {
        function extract_token (line 73) | std::pair<std::string,InputIterator> extract_token(InputIterator b...
        function extract_quoted_string (line 92) | std::pair<std::string,InputIterator> extract_quoted_string(InputIt...
        function InputIterator (line 139) | InputIterator extract_lws(InputIterator begin, InputIterator end) {
        function InputIterator (line 164) | InputIterator extract_all_lws(InputIterator begin, InputIterator e...
        function InputIterator (line 195) | InputIterator extract_attributes(InputIterator begin, InputIterato...
        function InputIterator (line 293) | InputIterator extract_parameters(InputIterator begin, InputIterato...
        function strip_lws (line 379) | inline std::string strip_lws(std::string const & input) {
        class parser (line 398) | class parser {
          method parser (line 400) | parser()
          method get_max_body_size (line 529) | size_t get_max_body_size() const {
          method set_max_body_size (line 542) | void set_max_body_size(size_t value) {
          method body_ready (line 599) | bool body_ready() const {

FILE: websocketpp/http/request.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type http (line 37) | namespace http {
      type parser (line 38) | namespace parser {
        class request (line 50) | class request : public parser {
          method request (line 55) | request()
          method ready (line 82) | bool ready() const {

FILE: websocketpp/http/response.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type http (line 37) | namespace http {
      type parser (line 38) | namespace parser {
        class response (line 57) | class response : public parser {
          method response (line 62) | response()
          method ready (line 116) | bool ready() const {
          method headers_ready (line 121) | bool headers_ready() const {
          method get_status_code (line 152) | status_code::value get_status_code() const {
          type state (line 167) | enum state {

FILE: websocketpp/impl/connection_impl.hpp
  type websocketpp (line 48) | namespace websocketpp {
    function uri_ptr (line 430) | uri_ptr connection<config>::get_uri() const {

FILE: websocketpp/impl/endpoint_impl.hpp
  type websocketpp (line 33) | namespace websocketpp {

FILE: websocketpp/impl/utilities_impl.hpp
  type websocketpp (line 34) | namespace websocketpp {
    type utility (line 35) | namespace utility {
      function to_lower (line 37) | inline std::string to_lower(std::string const & in) {
      function to_hex (line 43) | inline std::string to_hex(std::string const & input) {
      function to_hex (line 56) | inline std::string to_hex(uint8_t const * input, size_t length) {
      function to_hex (line 69) | inline std::string to_hex(const char* input,size_t length) {
      function string_replace_all (line 73) | inline std::string string_replace_all(std::string subject, std::stri...

FILE: websocketpp/logger/basic.hpp
  type websocketpp (line 54) | namespace websocketpp {
    type log (line 55) | namespace log {
      class basic (line 59) | class basic {
        method concurrency (line 84) | concurrency,names>() {}
        method set_ostream (line 113) | void set_ostream(std::ostream * out = &std::cout) {
        method set_channels (line 117) | void set_channels(level channels) {
        method clear_channels (line 127) | void clear_channels(level channels) {
        method write (line 137) | void write(level channel, std::string const & msg) {
        method write (line 151) | void write(level channel, char const * msg) {
        method _WEBSOCKETPP_CONSTEXPR_TOKEN_ (line 160) | _WEBSOCKETPP_CONSTEXPR_TOKEN_ bool static_test(level channel) const {
        method dynamic_test (line 164) | bool dynamic_test(level channel) {

FILE: websocketpp/logger/levels.hpp
  type websocketpp (line 33) | namespace websocketpp {
    type log (line 34) | namespace log {
      type channel_type_hint (line 46) | struct channel_type_hint {
      type elevel (line 59) | struct elevel {
      type alevel (line 112) | struct alevel {

FILE: websocketpp/logger/stub.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type log (line 38) | namespace log {
      class stub (line 41) | class stub {
        method stub (line 47) | explicit stub(channel_type_hint::value) {}
        method stub (line 54) | stub(level, channel_type_hint::value) {}
        method _WEBSOCKETPP_CONSTEXPR_TOKEN_ (line 55) | _WEBSOCKETPP_CONSTEXPR_TOKEN_ stub() {}
        method set_channels (line 64) | void set_channels(level) {}
        method clear_channels (line 73) | void clear_channels(level) {}
        method write (line 82) | void write(level, std::string const &) {}
        method write (line 91) | void write(level, char const *) {}
        method _WEBSOCKETPP_CONSTEXPR_TOKEN_ (line 100) | _WEBSOCKETPP_CONSTEXPR_TOKEN_ bool static_test(level) const {
        method dynamic_test (line 111) | bool dynamic_test(level) {

FILE: websocketpp/logger/syslog.hpp
  type websocketpp (line 41) | namespace websocketpp {
    type log (line 42) | namespace log {
      class syslog (line 46) | class syslog : public basic<concurrency, names> {
        method write (line 72) | void write(level channel, std::string const & msg) {
        method write (line 81) | void write(level channel, char const * msg) {
        method syslog_priority (line 99) | int syslog_priority(level channel) const {
        method syslog_priority_error (line 112) | int syslog_priority_error(level channel) const {
        method _WEBSOCKETPP_CONSTEXPR_TOKEN_ (line 136) | _WEBSOCKETPP_CONSTEXPR_TOKEN_ int syslog_priority_access(level) co...

FILE: websocketpp/message_buffer/alloc.hpp
  type websocketpp (line 34) | namespace websocketpp {
    type message_buffer (line 35) | namespace message_buffer {
      type alloc (line 36) | namespace alloc {
        class con_msg_manager (line 41) | class con_msg_manager
          method message_ptr (line 55) | message_ptr get_message() {
          method message_ptr (line 66) | message_ptr get_message(frame::opcode::value op,size_t size) {
          method recycle (line 80) | bool recycle(message *) {
        class endpoint_msg_manager (line 88) | class endpoint_msg_manager {
          method con_msg_man_ptr (line 96) | con_msg_man_ptr get_manager() const {

FILE: websocketpp/message_buffer/message.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type message_buffer (line 37) | namespace message_buffer {
      class message (line 84) | class message {
        method message (line 96) | message(const con_msg_man_ptr manager)
        method message (line 107) | message(const con_msg_man_ptr manager, frame::opcode::value op, si...
        method get_prepared (line 125) | bool get_prepared() const {
        method set_prepared (line 135) | void set_prepared(bool value) {
        method get_compressed (line 143) | bool get_compressed() const {
        method set_compressed (line 156) | void set_compressed(bool value) {
        method get_terminal (line 169) | bool get_terminal() const {
        method set_terminal (line 181) | void set_terminal(bool value) {
        method get_fin (line 195) | bool get_fin() const {
        method set_fin (line 205) | void set_fin(bool value) {
        method get_opcode (line 210) | frame::opcode::value get_opcode() const {
        method set_opcode (line 215) | void set_opcode(frame::opcode::value op) {
        method set_header (line 234) | void set_header(std::string const & header) {
        method set_payload (line 264) | void set_payload(std::string const & payload) {
        method set_payload (line 275) | void set_payload(void const * payload, size_t len) {
        method append_payload (line 287) | void append_payload(std::string const & payload) {
        method append_payload (line 298) | void append_payload(void const * payload, size_t len) {
        method recycle (line 316) | bool recycle() {

FILE: websocketpp/message_buffer/pool.hpp
  type websocketpp (line 35) | namespace websocketpp {
    type message_buffer (line 36) | namespace message_buffer {
      function message_deleter (line 84) | void message_deleter(T* msg) {
      class message (line 101) | class message {
        method message (line 107) | message(con_msg_man_ptr manager, size_t size = 128)
        method get_opcode (line 111) | frame::opcode::value get_opcode() const {
        method recycle (line 137) | bool recycle() {
      type alloc (line 155) | namespace alloc {
        class con_msg_manager (line 160) | class con_msg_manager {
          method message_ptr (line 173) | message_ptr get_message(size_t size) const {
          method recycle (line 187) | bool recycle(message * msg) {
        class endpoint_msg_manager (line 195) | class endpoint_msg_manager {
          method con_msg_man_ptr (line 203) | con_msg_man_ptr get_manager() const {
      type pool (line 210) | namespace pool {
        class con_msg_manager (line 214) | class con_msg_manager {
        class endpoint_msg_manager (line 220) | class endpoint_msg_manager {

FILE: websocketpp/processors/base.hpp
  type websocketpp (line 40) | namespace websocketpp {
    type processor (line 41) | namespace processor {
      type constants (line 44) | namespace constants {
      type error_cat (line 54) | namespace error_cat {
        type value (line 55) | enum value {
      type error (line 65) | namespace error {
        type processor_errors (line 66) | enum processor_errors {
        class processor_category (line 161) | class processor_category : public lib::error_category {
          method processor_category (line 163) | processor_category() {}
          method message (line 169) | std::string message(int value) const {
        function make_error_code (line 244) | inline lib::error_code make_error_code(error::processor_errors e) {
        function to_ws (line 261) | inline close::status::value to_ws(lib::error_code ec) {

FILE: websocketpp/processors/hybi00.hpp
  type websocketpp (line 46) | namespace websocketpp {
    type processor (line 47) | namespace processor {
      class hybi00 (line 54) | class hybi00 : public processor<config> {
        method hybi00 (line 66) | explicit hybi00(bool secure, bool p_is_server, msg_manager_ptr man...
        method get_version (line 73) | int get_version() const {
        method validate_handshake (line 77) | lib::error_code validate_handshake(request_type const & r) const {
        method process_handshake (line 100) | lib::error_code process_handshake(request_type const & req,
        method client_handshake_request (line 158) | lib::error_code client_handshake_request(request_type &, uri_ptr,
        method validate_server_handshake_response (line 173) | lib::error_code validate_server_handshake_response(request_type co...
        method get_raw (line 179) | std::string get_raw(response_type const & res) const {
        method extract_subprotocols (line 198) | lib::error_code extract_subprotocols(request_type const & req,
        method uri_ptr (line 217) | uri_ptr get_uri(request_type const & request) const {
        method get_key3 (line 247) | std::string get_key3() const {
        method consume (line 252) | size_t consume(uint8_t * buf, size_t len, lib::error_code & ec) {
        method ready (line 309) | bool ready() const {
        method get_error (line 313) | bool get_error() const {
        method message_ptr (line 317) | message_ptr get_message() {
        method prepare_data_frame (line 329) | virtual lib::error_code prepare_data_frame(message_ptr in, message...
        method prepare_ping (line 373) | lib::error_code prepare_ping(std::string const &, message_ptr) const
        method prepare_pong (line 386) | lib::error_code prepare_pong(std::string const &, message_ptr) const
        method prepare_close (line 401) | lib::error_code prepare_close(close::status::value, std::string co...
        method decode_client_key (line 417) | void decode_client_key(std::string const & key, char * result) con...
        type state (line 442) | enum state {

FILE: websocketpp/processors/hybi07.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type processor (line 37) | namespace processor {
      class hybi07 (line 44) | class hybi07 : public hybi08<config> {
        method hybi07 (line 51) | explicit hybi07(bool secure, bool p_is_server, msg_manager_ptr man...
        method client_handshake_request (line 63) | lib::error_code client_handshake_request(request_type &, uri_ptr,
        method get_version (line 69) | int get_version() const {

FILE: websocketpp/processors/hybi08.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type processor (line 37) | namespace processor {
      class hybi08 (line 44) | class hybi08 : public hybi13<config> {
        method hybi08 (line 52) | explicit hybi08(bool secure, bool p_is_server, msg_manager_ptr man...
        method client_handshake_request (line 64) | lib::error_code client_handshake_request(request_type &, uri_ptr,
        method get_version (line 70) | int get_version() const {

FILE: websocketpp/processors/hybi13.hpp
  type websocketpp (line 49) | namespace websocketpp {
    type processor (line 50) | namespace processor {
      class hybi13 (line 54) | class hybi13 : public processor<config> {
        method hybi13 (line 72) | explicit hybi13(bool secure, bool p_is_server, msg_manager_ptr man...
        method get_version (line 80) | int get_version() const {
        method has_permessage_deflate (line 84) | bool has_permessage_deflate() const {
        method err_str_pair (line 88) | err_str_pair negotiate_extensions(request_type const & request) {
        method err_str_pair (line 92) | err_str_pair negotiate_extensions(response_type const & response) {
        method err_str_pair (line 102) | err_str_pair negotiate_extensions_helper(header_type const & heade...
        method validate_handshake (line 185) | lib::error_code validate_handshake(request_type const & r) const {
        method process_handshake (line 209) | lib::error_code process_handshake(request_type const & request,
        method client_handshake_request (line 237) | lib::error_code client_handshake_request(request_type & req, uri_ptr
        method validate_server_handshake_response (line 287) | lib::error_code validate_server_handshake_response(request_type co...
        method get_raw (line 324) | std::string get_raw(response_type const & res) const {
        method extract_subprotocols (line 332) | lib::error_code extract_subprotocols(request_type const & req,
        method uri_ptr (line 351) | uri_ptr get_uri(request_type const & request) const {
        method consume (line 382) | size_t consume(uint8_t * buf, size_t len, lib::error_code & ec) {
        method finalize_message (line 518) | lib::error_code finalize_message() {
        method reset_headers (line 548) | void reset_headers() {
        method ready (line 563) | bool ready() const {
        method message_ptr (line 567) | message_ptr get_message() {
        method get_error (line 586) | bool get_error() const {
        method get_bytes_needed (line 590) | size_t get_bytes_needed() const {
        method prepare_data_frame (line 605) | virtual lib::error_code prepare_data_frame(message_ptr in, message...
        method prepare_ping (line 688) | lib::error_code prepare_ping(std::string const & in, message_ptr o...
        method prepare_pong (line 692) | lib::error_code prepare_pong(std::string const & in, message_ptr o...
        method prepare_close (line 696) | virtual lib::error_code prepare_close(close::status::value code,
        method process_handshake_key (line 733) | lib::error_code process_handshake_key(std::string & key) const {
        method copy_basic_header_bytes (line 744) | size_t copy_basic_header_bytes(uint8_t const * buf, size_t len) {
        method copy_extended_header_bytes (line 776) | size_t copy_extended_header_bytes(uint8_t const * buf, size_t len) {
        method process_payload_bytes (line 799) | size_t process_payload_bytes(uint8_t * buf, size_t len, lib::error...
        method validate_incoming_basic_header (line 848) | lib::error_code validate_incoming_basic_header(frame::basic_header...
        method validate_incoming_extended_header (line 926) | lib::error_code validate_incoming_extended_header(frame::basic_hea...
        method masked_copy (line 961) | void masked_copy (std::string const & i, std::string & o,
        method prepare_control (line 977) | lib::error_code prepare_control(frame::opcode::value op,
        type state (line 1019) | enum state {
        type msg_metadata (line 1031) | struct msg_metadata {
          method msg_metadata (line 1032) | msg_metadata() {}
          method msg_metadata (line 1033) | msg_metadata(message_ptr m, size_t p) : msg_ptr(m),prepared_key(...
          method msg_metadata (line 1034) | msg_metadata(message_ptr m, frame::masking_key_type p)

FILE: websocketpp/processors/processor.hpp
  type websocketpp (line 43) | namespace websocketpp {
    type processor (line 59) | namespace processor {
      function is_websocket_handshake (line 68) | bool is_websocket_handshake(request_type& r) {
      function get_websocket_version (line 107) | int get_websocket_version(request_type& r) {
      function uri_ptr (line 136) | uri_ptr get_uri_from_host(request_type & request, std::string scheme) {
      class processor (line 160) | class processor {
        method processor (line 168) | explicit processor(bool secure, bool p_is_server)
        method get_max_message_size (line 188) | size_t get_max_message_size() const {
        method set_max_message_size (line 203) | void set_max_message_size(size_t new_value) {
        method has_permessage_compress (line 212) | virtual bool has_permessage_compress() const {
        method err_str_pair (line 225) | virtual err_str_pair negotiate_extensions(request_type const &) {
        method err_str_pair (line 239) | virtual err_str_pair negotiate_extensions(response_type const &) {
        method get_bytes_needed (line 349) | virtual size_t get_bytes_needed() const {

FILE: websocketpp/random/none.hpp
  type websocketpp (line 31) | namespace websocketpp {
    type random (line 33) | namespace random {
      type none (line 35) | namespace none {
        class int_generator (line 46) | class int_generator {
          method int_generator (line 48) | int_generator() {}
          method int_type (line 51) | int_type operator()() {

FILE: websocketpp/random/random_device.hpp
  type websocketpp (line 33) | namespace websocketpp {
    type random (line 34) | namespace random {
      type random_device (line 36) | namespace random_device {
        class int_generator (line 53) | class int_generator {
          method int_generator (line 60) | int_generator() {}
          method int_type (line 63) | int_type operator()() {

FILE: websocketpp/roles/client_endpoint.hpp
  type websocketpp (line 40) | namespace websocketpp {
    class client (line 47) | class client : public endpoint<connection<config>,config> {
      method client (line 72) | explicit client() : endpoint_type(false)
      method connection_ptr (line 89) | connection_ptr get_connection(uri_ptr location, lib::error_code & ec) {
      method connection_ptr (line 119) | connection_ptr get_connection(std::string const & u, lib::error_code...
      method connection_ptr (line 139) | connection_ptr connect(connection_ptr con) {
      method handle_connect (line 156) | void handle_connect(connection_ptr con, lib::error_code const & ec) {

FILE: websocketpp/roles/server_endpoint.hpp
  type websocketpp (line 37) | namespace websocketpp {
    class server (line 44) | class server : public endpoint<connection<config>,config> {
      method server (line 69) | explicit server() : endpoint_type(true)
      method connection_ptr (line 106) | connection_ptr get_connection() {
      method start_accept (line 121) | void start_accept(lib::error_code & ec) {
      method start_accept (line 157) | void start_accept() {
      method handle_accept (line 166) | void handle_accept(connection_ptr con, lib::error_code const & ec) {

FILE: websocketpp/sha1/sha1.hpp
  type websocketpp (line 39) | namespace websocketpp {
    type sha1 (line 40) | namespace sha1 {
      function rol (line 45) | inline unsigned int rol(unsigned int value, unsigned int steps) {
      function clearWBuffert (line 51) | inline void clearWBuffert(unsigned int * buffert)
      function innerHash (line 59) | inline void innerHash(unsigned int * result, unsigned int * w)
      function calc (line 127) | inline void calc(void const * src, size_t bytelength, unsigned char ...

FILE: websocketpp/transport/asio/base.hpp
  type websocketpp (line 39) | namespace websocketpp {
    type transport (line 40) | namespace transport {
      type asio (line 46) | namespace asio {
        class handler_allocator (line 52) | class handler_allocator {
          method handler_allocator (line 56) | handler_allocator() : m_in_use(false) {}
          method handler_allocator (line 59) | handler_allocator(handler_allocator const & cpy) = delete;
          method handler_allocator (line 60) | handler_allocator & operator =(handler_allocator const &) = delete;
          method deallocate (line 72) | void deallocate(void * pointer) {
        class custom_alloc_handler (line 92) | class custom_alloc_handler {
          method custom_alloc_handler (line 94) | custom_alloc_handler(handler_allocator& a, Handler h)
          method asio_handler_deallocate (line 115) | void asio_handler_deallocate(void* pointer, std::size_t /*size*/,
        function make_custom_alloc_handler (line 128) | inline custom_alloc_handler<Handler> make_custom_alloc_handler(
        class endpoint (line 143) | class endpoint
        type error (line 161) | namespace error {
          type value (line 162) | enum value {
          class category (line 184) | class category : public lib::error_category {
            method message (line 190) | std::string message(int value) const {
          function make_error_code (line 217) | inline lib::error_code make_error_code(error::value e) {

FILE: websocketpp/transport/asio/connection.hpp
  type websocketpp (line 54) | namespace websocketpp {
    type transport (line 55) | namespace transport {
      type asio (line 56) | namespace asio {
        class connection (line 67) | class connection : public config::socket_type::socket_con_type {
          method connection (line 101) | explicit connection(bool is_server, const lib::shared_ptr<alog_t...
          method ptr (line 110) | ptr get_shared() {
          method is_secure (line 114) | bool is_secure() const {
          method set_uri (line 130) | void set_uri(uri_ptr u) {
          method set_tcp_pre_init_handler (line 144) | void set_tcp_pre_init_handler(tcp_init_handler h) {
          method set_tcp_init_handler (line 158) | void set_tcp_init_handler(tcp_init_handler h) {
          method set_tcp_post_init_handler (line 173) | void set_tcp_post_init_handler(tcp_init_handler h) {
          method set_proxy (line 189) | void set_proxy(std::string const & uri, lib::error_code & ec) {
          method set_proxy (line 198) | void set_proxy(std::string const & uri) {
          method set_proxy_basic_auth (line 217) | void set_proxy_basic_auth(std::string const & username, std::str...
          method set_proxy_basic_auth (line 232) | void set_proxy_basic_auth(std::string const & username, std::str...
          method set_proxy_timeout (line 250) | void set_proxy_timeout(long duration, lib::error_code & ec) {
          method set_proxy_timeout (line 261) | void set_proxy_timeout(long duration) {
          method get_remote_endpoint (line 281) | std::string get_remote_endpoint() const {
          method connection_hdl (line 295) | connection_hdl get_handle() const {
          method timer_ptr (line 313) | timer_ptr set_timer(long duration, timer_handler callback) {
          method handle_timer (line 350) | void handle_timer(timer_ptr, timer_handler callback,
          method strand_ptr (line 366) | strand_ptr get_strand() {
          method get_transport_ec (line 389) | lib::asio::error_code get_transport_ec() const {
          method init (line 411) | void init(init_handler callback) {
          method proxy_init (line 437) | lib::error_code proxy_init(std::string const & authority) {
          method init_asio (line 461) | lib::error_code init_asio (io_service_ptr io_service) {
          method handle_pre_init (line 474) | void handle_pre_init(init_handler callback, lib::error_code cons...
          method post_init (line 496) | void post_init(init_handler callback) {
          method handle_post_init_timeout (line 536) | void handle_post_init_timeout(timer_ptr, init_handler callback,
          method handle_post_init (line 572) | void handle_post_init(timer_ptr post_timer, init_handler callback,
          method proxy_write (line 597) | void proxy_write(init_handler callback) {
          method handle_proxy_timeout (line 651) | void handle_proxy_timeout(init_handler callback, lib::error_code...
          method handle_proxy_write (line 668) | void handle_proxy_write(init_handler callback,
          method proxy_read (line 698) | void proxy_read(init_handler callback) {
          method handle_proxy_read (line 742) | void handle_proxy_read(init_handler callback,
          method async_read_at_least (line 820) | void async_read_at_least(size_t num_bytes, char *buf, size_t len,
          method handle_async_read (line 871) | void handle_async_read(read_handler handler, lib::asio::error_co...
          method async_write (line 906) | void async_write(const char* buf, size_t len, write_handler hand...
          method async_write (line 939) | void async_write(std::vector<buffer> const & bufs, write_handler...
          method handle_async_write (line 980) | void handle_async_write(write_handler handler, lib::asio::error_...
          method set_handle (line 1004) | void set_handle(connection_hdl hdl) {
          method interrupt (line 1013) | lib::error_code interrupt(interrupt_handler handler) {
          method dispatch (line 1022) | lib::error_code dispatch(dispatch_handler handler) {
          method async_shutdown (line 1036) | void async_shutdown(shutdown_handler callback) {
          method handle_async_shutdown_timeout (line 1070) | void handle_async_shutdown_timeout(timer_ptr, init_handler callb...
          method handle_async_shutdown (line 1094) | void handle_async_shutdown(timer_ptr shutdown_timer, shutdown_ha...
          method cancel_socket_checked (line 1134) | void cancel_socket_checked() {
          method log_err (line 1149) | void log_err(log::level l, const char * msg, const error_type & ...
          type proxy_data (line 1160) | struct proxy_data {
            method proxy_data (line 1161) | proxy_data() : timeout_proxy(config::timeout_proxy) {}

FILE: websocketpp/transport/asio/endpoint.hpp
  type websocketpp (line 44) | namespace websocketpp {
    type transport (line 45) | namespace transport {
      type asio (line 46) | namespace asio {
        class endpoint (line 54) | class endpoint : public config::socket_type {
          method endpoint (line 95) | explicit endpoint()
          method endpoint (line 121) | endpoint(const endpoint & src) = delete;
          method endpoint (line 122) | endpoint& operator= (const endpoint & rhs) = delete;
          method endpoint (line 131) | endpoint (endpoint && src)
          method is_secure (line 172) | bool is_secure() const {
          method init_asio (line 185) | void init_asio(io_service_ptr ptr, lib::error_code & ec) {
          method init_asio (line 212) | void init_asio(io_service_ptr ptr) {
          method init_asio (line 227) | void init_asio(lib::error_code & ec) {
          method init_asio (line 249) | void init_asio() {
          method set_tcp_pre_bind_handler (line 274) | void set_tcp_pre_bind_handler(tcp_pre_bind_handler h) {
          method set_tcp_pre_init_handler (line 288) | void set_tcp_pre_init_handler(tcp_init_handler h) {
          method set_tcp_init_handler (line 302) | void set_tcp_init_handler(tcp_init_handler h) {
          method set_tcp_post_init_handler (line 317) | void set_tcp_post_init_handler(tcp_init_handler h) {
          method set_listen_backlog (line 342) | void set_listen_backlog(int backlog) {
          method set_reuse_addr (line 363) | void set_reuse_addr(bool value) {
          method get_local_endpoint (line 395) | lib::asio::ip::tcp::endpoint get_local_endpoint(lib::asio::error...
          method listen (line 412) | void listen(lib::asio::ip::tcp::endpoint const & ep, lib::error_...
          method listen (line 460) | void listen(lib::asio::ip::tcp::endpoint const & ep) {
          method listen (line 481) | void listen(InternetProtocol const & internet_protocol, uint16_t...
          method listen (line 502) | void listen(InternetProtocol const & internet_protocol, uint16_t...
          method listen (line 520) | void listen(uint16_t port, lib::error_code & ec) {
          method listen (line 536) | void listen(uint16_t port) {
          method listen (line 556) | void listen(std::string const & host, std::string const & service,
          method listen (line 589) | void listen(std::string const & host, std::string const & service)
          method stop_listening (line 604) | void stop_listening(lib::error_code & ec) {
          method stop_listening (line 625) | void stop_listening() {
          method is_listening (line 635) | bool is_listening() const {
          method run (line 640) | std::size_t run() {
          method run_one (line 648) | std::size_t run_one() {
          method stop (line 653) | void stop() {
          method poll (line 658) | std::size_t poll() {
          method poll_one (line 663) | std::size_t poll_one() {
          method reset (line 668) | void reset() {
          method stopped (line 673) | bool stopped() const {
          method start_perpetual (line 689) | void start_perpetual() {
          method stop_perpetual (line 701) | void stop_perpetual() {
          method timer_ptr (line 717) | timer_ptr set_timer(long duration, timer_handler callback) {
          method handle_timer (line 745) | void handle_timer(timer_ptr, timer_handler callback,
          method async_accept (line 768) | void async_accept(transport_con_ptr tcon, accept_handler callback,
          method async_accept (line 807) | void async_accept(transport_con_ptr tcon, accept_handler callbac...
          method init_logging (line 823) | void init_logging(const lib::shared_ptr<alog_type>& a, const lib...
          method handle_accept (line 828) | void handle_accept(accept_handler callback, lib::asio::error_cod...
          method async_connect (line 849) | void async_connect(transport_con_ptr tcon, uri_ptr u, connect_ha...
          method handle_resolve_timeout (line 944) | void handle_resolve_timeout(timer_ptr, connect_handler callback,
          method handle_resolve (line 967) | void handle_resolve(transport_con_ptr tcon, timer_ptr dns_timer,
          method handle_connect_timeout (line 1053) | void handle_connect_timeout(transport_con_ptr tcon, timer_ptr,
          method handle_connect (line 1076) | void handle_connect(transport_con_ptr tcon, timer_ptr con_timer,
          method init (line 1113) | lib::error_code init(transport_con_ptr tcon) {
          method log_err (line 1133) | void log_err(log::level l, char const * msg, error_type const & ...
          method clean_up_listen_after_error (line 1141) | lib::error_code clean_up_listen_after_error(error_type const & e...
          type state (line 1149) | enum state {

FILE: websocketpp/transport/asio/security/base.hpp
  type websocketpp (line 62) | namespace websocketpp {
    type transport (line 63) | namespace transport {
      type asio (line 64) | namespace asio {
        type socket (line 65) | namespace socket {
          type error (line 75) | namespace error {
            type value (line 76) | enum value {
          class socket_category (line 110) | class socket_category : public lib::error_category {
            method message (line 116) | std::string message(int value) const {
          function make_error_code (line 147) | inline lib::error_code make_error_code(error::value e) {

FILE: websocketpp/transport/asio/security/none.hpp
  type websocketpp (line 42) | namespace websocketpp {
    type transport (line 43) | namespace transport {
      type asio (line 44) | namespace asio {
        type basic_socket (line 47) | namespace basic_socket {
          class connection (line 58) | class connection : public lib::enable_shared_from_this<connectio...
            method connection (line 74) | explicit connection() : m_state(UNINITIALIZED) {
            method ptr (line 80) | ptr get_shared() {
            method is_secure (line 88) | bool is_secure() const {
            method set_socket_init_handler (line 100) | void set_socket_init_handler(socket_init_handler h) {
            method get_remote_endpoint (line 138) | std::string get_remote_endpoint(lib::error_code & ec) const {
            method init_asio (line 165) | lib::error_code init_asio (io_service_ptr service, strand_ptr,...
            method set_uri (line 193) | void set_uri(uri_ptr) {}
            method pre_init (line 204) | void pre_init(init_handler callback) {
            method post_init (line 223) | void post_init(init_handler callback) {
            method set_handle (line 234) | void set_handle(connection_hdl hdl) {
            method cancel_socket (line 247) | lib::asio::error_code cancel_socket() {
            method async_shutdown (line 253) | void async_shutdown(socket::shutdown_handler h) {
            method get_ec (line 259) | lib::error_code get_ec() const {
            method translate_ec (line 283) | static
            method translate_ec (line 289) | static
            type state (line 299) | enum state {
          class endpoint (line 317) | class endpoint {
            method endpoint (line 328) | explicit endpoint() {}
            method is_secure (line 334) | bool is_secure() const {
            method set_socket_init_handler (line 346) | void set_socket_init_handler(socket_init_handler h) {
            method init (line 359) | lib::error_code init(socket_con_ptr scon) {

FILE: websocketpp/transport/asio/security/tls.hpp
  type websocketpp (line 44) | namespace websocketpp {
    type transport (line 45) | namespace transport {
      type asio (line 46) | namespace asio {
        type tls_socket (line 49) | namespace tls_socket {
          class connection (line 63) | class connection : public lib::enable_shared_from_this<connectio...
            method connection (line 81) | explicit connection() {
            method ptr (line 87) | ptr get_shared() {
            method is_secure (line 95) | bool is_secure() const {
            method socket_type (line 119) | socket_type & get_socket() {
            method set_socket_init_handler (line 131) | void set_socket_init_handler(socket_init_handler h) {
            method set_tls_init_handler (line 144) | void set_tls_init_handler(tls_init_handler h) {
            method get_remote_endpoint (line 158) | std::string get_remote_endpoint(lib::error_code & ec) const {
            method init_asio (line 185) | lib::error_code init_asio (io_service_ptr service, strand_ptr ...
            method set_uri (line 221) | void set_uri(uri_ptr u) {
            method pre_init (line 234) | void pre_init(init_handler callback) {
            method post_init (line 262) | void post_init(init_handler callback) {
            method set_handle (line 294) | void set_handle(connection_hdl hdl) {
            method handle_init (line 298) | void handle_init(init_handler callback,lib::asio::error_code c...
            method get_ec (line 308) | lib::error_code get_ec() const {
            method cancel_socket (line 321) | lib::asio::error_code cancel_socket() {
            method async_shutdown (line 327) | void async_shutdown(socket::shutdown_handler callback) {
            method translate_ec (line 356) | static
            method translate_ec (line 369) | static
            method get_handshake_type (line 376) | socket_type::handshake_type get_handshake_type() {
          class endpoint (line 403) | class endpoint {
            method endpoint (line 414) | explicit endpoint() {}
            method is_secure (line 420) | bool is_secure() const {
            method set_socket_init_handler (line 432) | void set_socket_init_handler(socket_init_handler h) {
            method set_tls_init_handler (line 445) | void set_tls_init_handler(tls_init_handler h) {
            method init (line 458) | lib::error_code init(socket_con_ptr scon) {

FILE: websocketpp/transport/base/connection.hpp
  type websocketpp (line 38) | namespace websocketpp {
    type transport (line 114) | namespace transport {
      type buffer (line 138) | struct buffer {
        method buffer (line 139) | buffer(char const * b, size_t l) : buf(b),len(l) {}
      type error (line 146) | namespace error {
        type value (line 147) | enum value {
        class category (line 183) | class category : public lib::error_category {
          method category (line 185) | category() {}
          method message (line 191) | std::string message(int value) const {
        function make_error_code (line 224) | inline lib::error_code make_error_code(error::value e) {

FILE: websocketpp/transport/base/endpoint.hpp
  type websocketpp (line 34) | namespace websocketpp {
    type transport (line 66) | namespace transport {

FILE: websocketpp/transport/debug/base.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type transport (line 37) | namespace transport {
      type debug (line 40) | namespace debug {
        type error (line 43) | namespace error {
          type value (line 44) | enum value {
          class category (line 58) | class category : public lib::error_category {
            method category (line 60) | category() {}
            method message (line 66) | std::string message(int value) const {
          function make_error_code (line 89) | inline lib::error_code make_error_code(error::value e) {

FILE: websocketpp/transport/debug/connection.hpp
  type websocketpp (line 45) | namespace websocketpp {
    type transport (line 46) | namespace transport {
      type debug (line 47) | namespace debug {
        type timer (line 51) | struct timer {
          method cancel (line 52) | void cancel() {}
        class connection (line 56) | class connection : public lib::enable_shared_from_this< connection...
          method connection (line 76) | explicit connection(bool is_server, const lib::shared_ptr<alog_t...
          method ptr (line 83) | ptr get_shared() {
          method set_secure (line 95) | void set_secure(bool) {}
          method is_secure (line 103) | bool is_secure() const {
          method set_uri (line 119) | void set_uri(uri_ptr) {}
          method set_remote_endpoint (line 135) | void set_remote_endpoint(std::string) {}
          method get_remote_endpoint (line 146) | std::string get_remote_endpoint() const {
          method connection_hdl (line 154) | connection_hdl get_handle() const {
          method timer_ptr (line 168) | timer_ptr set_timer(long, timer_handler handler) {
          method read_all (line 190) | size_t read_all(char const * buf, size_t len) {
          method expire_timer (line 203) | void expire_timer(lib::error_code const & ec) {
          method fullfil_write (line 207) | void fullfil_write() {
          method init (line 217) | void init(init_handler handler) {
          method async_read_at_least (line 246) | void async_read_at_least(size_t num_bytes, char * buf, size_t len,
          method async_write (line 288) | void async_write(char const *, size_t, write_handler handler) {
          method async_write (line 304) | void async_write(std::vector<buffer> const &, write_handler hand...
          method set_handle (line 313) | void set_handle(connection_hdl) {}
          method dispatch (line 326) | lib::error_code dispatch(dispatch_handler handler) {
          method async_shutdown (line 335) | void async_shutdown(shutdown_handler handler) {
          method read_some_impl (line 339) | size_t read_some_impl(char const * buf, size_t len) {
          method complete_read (line 376) | void complete_read(lib::error_code const & ec) {

FILE: websocketpp/transport/debug/endpoint.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type transport (line 38) | namespace transport {
      type debug (line 39) | namespace debug {
        class endpoint (line 42) | class endpoint {
          method endpoint (line 64) | explicit endpoint()
          method set_secure (line 81) | void set_secure(bool) {}
          method is_secure (line 89) | bool is_secure() const {
          method init_logging (line 106) | void init_logging(lib::shared_ptr<alog_type>, lib::shared_ptr<el...
          method async_connect (line 115) | void async_connect(transport_con_ptr, uri_ptr, connect_handler c...
          method init (line 129) | lib::error_code init(transport_con_ptr) {

FILE: websocketpp/transport/iostream/base.hpp
  type websocketpp (line 41) | namespace websocketpp {
    type transport (line 42) | namespace transport {
      type iostream (line 44) | namespace iostream {
        type error (line 64) | namespace error {
          type value (line 65) | enum value {
          class category (line 85) | class category : public lib::error_category {
            method category (line 87) | category() {}
            method message (line 93) | std::string message(int value) const {
          function make_error_code (line 118) | inline lib::error_code make_error_code(error::value e) {

FILE: websocketpp/transport/iostream/connection.hpp
  type websocketpp (line 49) | namespace websocketpp {
    type transport (line 50) | namespace transport {
      type iostream (line 51) | namespace iostream {
        type timer (line 55) | struct timer {
          method cancel (line 56) | void cancel() {}
        class connection (line 60) | class connection : public lib::enable_shared_from_this< connection...
          method connection (line 80) | explicit connection(bool is_server, const lib::shared_ptr<alog_t...
          method ptr (line 93) | ptr get_shared() {
          method register_ostream (line 104) | void register_ostream(std::ostream * o) {
          method set_uri (line 121) | void set_uri(uri_ptr) {}
          method read_some (line 165) | size_t read_some(char const * buf, size_t len) {
          method read_all (line 188) | size_t read_all(char const * buf, size_t len) {
          method readsome (line 208) | size_t readsome(char const * buf, size_t len) {
          method eof (line 219) | void eof() {
          method fatal_error (line 235) | void fatal_error() {
          method set_secure (line 257) | void set_secure(bool value) {
          method is_secure (line 271) | bool is_secure() const {
          method set_remote_endpoint (line 289) | void set_remote_endpoint(std::string value) {
          method get_remote_endpoint (line 305) | std::string get_remote_endpoint() const {
          method connection_hdl (line 313) | connection_hdl get_handle() const {
          method timer_ptr (line 327) | timer_ptr set_timer(long, timer_handler) {
          method set_write_handler (line 350) | void set_write_handler(write_handler h) {
          method set_vector_write_handler (line 380) | void set_vector_write_handler(vector_write_handler h) {
          method set_shutdown_handler (line 400) | void set_shutdown_handler(shutdown_handler h) {
          method init (line 410) | void init(init_handler handler) {
          method async_read_at_least (line 439) | void async_read_at_least(size_t num_bytes, char *buf, size_t len,
          method async_write (line 487) | void async_write(char const * buf, size_t len, transport::write_...
          method async_write (line 527) | void async_write(std::vector<buffer> const & bufs, transport::wr...
          method set_handle (line 565) | void set_handle(connection_hdl hdl) {
          method dispatch (line 580) | lib::error_code dispatch(dispatch_handler handler) {
          method async_shutdown (line 593) | void async_shutdown(transport::shutdown_handler handler) {
          method read (line 603) | void read(std::istream &in) {
          method read_some_impl (line 634) | size_t read_some_impl(char const * buf, size_t len) {
          method complete_read (line 671) | void complete_read(lib::error_code const & ec) {

FILE: websocketpp/transport/iostream/endpoint.hpp
  type websocketpp (line 41) | namespace websocketpp {
    type transport (line 42) | namespace transport {
      type iostream (line 43) | namespace iostream {
        class endpoint (line 46) | class endpoint {
          method endpoint (line 68) | explicit endpoint() : m_output_stream(NULL), m_is_secure(false)
          method register_ostream (line 80) | void register_ostream(std::ostream * o) {
          method set_secure (line 102) | void set_secure(bool value) {
          method is_secure (line 116) | bool is_secure() const {
          method set_write_handler (line 134) | void set_write_handler(write_handler h) {
          method set_shutdown_handler (line 154) | void set_shutdown_handler(shutdown_handler h) {
          method init_logging (line 171) | void init_logging(lib::shared_ptr<alog_type> a, lib::shared_ptr<...
          method async_connect (line 183) | void async_connect(transport_con_ptr, uri_ptr, connect_handler c...
          method init (line 197) | lib::error_code init(transport_con_ptr tcon) {

FILE: websocketpp/transport/stub/base.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type transport (line 37) | namespace transport {
      type stub (line 39) | namespace stub {
        type error (line 42) | namespace error {
          type value (line 43) | enum value {
          class category (line 53) | class category : public lib::error_category {
            method category (line 55) | category() {}
            method message (line 61) | std::string message(int value) const {
          function make_error_code (line 80) | inline lib::error_code make_error_code(error::value e) {

FILE: websocketpp/transport/stub/connection.hpp
  type websocketpp (line 44) | namespace websocketpp {
    type transport (line 45) | namespace transport {
      type stub (line 46) | namespace stub {
        type timer (line 50) | struct timer {
          method cancel (line 51) | void cancel() {}
        class connection (line 55) | class connection : public lib::enable_shared_from_this< connection...
          method connection (line 75) | explicit connection(bool is_server, const lib::shared_ptr<alog_t...
          method ptr (line 82) | ptr get_shared() {
          method set_secure (line 94) | void set_secure(bool value) {}
          method is_secure (line 102) | bool is_secure() const {
          method set_uri (line 118) | void set_uri(uri_ptr) {}
          method set_remote_endpoint (line 134) | void set_remote_endpoint(std::string value) {}
          method get_remote_endpoint (line 145) | std::string get_remote_endpoint() const {
          method connection_hdl (line 153) | connection_hdl get_handle() const {
          method timer_ptr (line 167) | timer_ptr set_timer(long duration, timer_handler handler) {
          method init (line 177) | void init(init_handler handler) {
          method async_read_at_least (line 206) | void async_read_at_least(size_t num_bytes, char * buf, size_t len,
          method async_write (line 225) | void async_write(char const * buf, size_t len, write_handler han...
          method async_write (line 241) | void async_write(std::vector<buffer> const & bufs, write_handler...
          method set_handle (line 250) | void set_handle(connection_hdl hdl) {}
          method dispatch (line 263) | lib::error_code dispatch(dispatch_handler handler) {
          method async_shutdown (line 272) | void async_shutdown(shutdown_handler handler) {

FILE: websocketpp/transport/stub/endpoint.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type transport (line 38) | namespace transport {
      type stub (line 39) | namespace stub {
        class endpoint (line 42) | class endpoint {
          method endpoint (line 64) | explicit endpoint()
          method set_secure (line 81) | void set_secure(bool value) {}
          method is_secure (line 89) | bool is_secure() const {
          method init_logging (line 106) | void init_logging(alog_type * a, elog_type * e) {}
          method async_connect (line 115) | void async_connect(transport_con_ptr tcon, uri_ptr u, connect_ha...
          method init (line 129) | lib::error_code init(transport_con_ptr tcon) {

FILE: websocketpp/uri.hpp
  type websocketpp (line 40) | namespace websocketpp {
    class uri (line 49) | class uri {
      method uri (line 51) | explicit uri(std::string const & uri_string) : m_valid(false) {
      method uri (line 170) | uri(bool secure, std::string const & host, uint16_t port,
      method uri (line 179) | uri(bool secure, std::string const & host, std::string const & resou...
      method uri (line 187) | uri(bool secure, std::string const & host, std::string const & port,
      method uri (line 199) | uri(std::string const & scheme, std::string const & host, uint16_t p...
      method uri (line 208) | uri(std::string scheme, std::string const & host, std::string const ...
      method uri (line 216) | uri(std::string const & scheme, std::string const & host,
      method get_valid (line 228) | bool get_valid() const {
      method get_secure (line 232) | bool get_secure() const {
      method get_host_port (line 244) | std::string get_host_port() const {
      method get_authority (line 254) | std::string get_authority() const {
      method get_port (line 260) | uint16_t get_port() const {
      method get_port_str (line 264) | std::string get_port_str() const {
      method str (line 274) | std::string str() const {
      method get_query (line 294) | std::string get_query() const {
      method get_port_from_string (line 321) | uint16_t get_port_from_string(std::string const & port, lib::error_c...

FILE: websocketpp/utf8_validator.hpp
  type websocketpp (line 36) | namespace websocketpp {
    type utf8_validator (line 37) | namespace utf8_validator {
      function decode (line 69) | inline uint32_t decode(uint32_t * state, uint32_t * codep, uint8_t b...
      class validator (line 81) | class validator {
        method validator (line 84) | validator() : m_state(utf8_accept),m_codepoint(0) {}
        method consume (line 91) | bool consume (uint8_t byte) {
        method decode (line 105) | bool decode (iterator_type begin, iterator_type end) {
        method complete (line 124) | bool complete() {
        method reset (line 129) | void reset() {
      function validate (line 143) | inline bool validate(std::string const & s) {

FILE: websocketpp/utilities.hpp
  type websocketpp (line 37) | namespace websocketpp {
    type utility (line 39) | namespace utility {
      type my_equal (line 49) | struct my_equal {
        method my_equal (line 54) | my_equal(std::locale const & loc ) : m_loc(loc) {}
      type ci_less (line 75) | struct ci_less {
        type nocase_compare (line 77) | struct nocase_compare {
      function ci_find_substr (line 101) | typename T::const_iterator ci_find_substr(T const & haystack, T cons...
      function ci_find_substr (line 123) | typename T::const_iterator ci_find_substr(T const & haystack,

FILE: websocketpp/version.hpp
  type websocketpp (line 32) | namespace websocketpp {
Condensed preview — 268 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,766K chars).
[
  {
    "path": ".gitattributes",
    "chars": 684,
    "preview": "# Lineendings\n*.sln       eol=crlf\n*.vcproj    eol=crlf\n*.vcxproj*  eol=crlf\n\n# Whitespace rules\n# strict (no trailing, "
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 65,
    "preview": "# These are supported funding model platforms\n\ngithub: [zaphoyd]\n"
  },
  {
    "path": ".gitignore",
    "chars": 1311,
    "preview": "# make .git* files visible to git\n!.gitignore\n!.gitattributes\n\n.DS_Store\n\n#vim stuff\n*~\n*.swp\n\n*.o\n*.so\n*.so.?\n*.so.?.?."
  },
  {
    "path": ".travis.yml",
    "chars": 741,
    "preview": "language: cpp\ncompiler:\n  - gcc\nbefore_install:\n #- sudo apt-get install libboost-chrono1.48-dev libboost-regex1.48-dev "
  },
  {
    "path": "CMakeLists.txt",
    "chars": 9767,
    "preview": "\n############ Setup project and cmake\n# Minimum cmake requirement. We should require a quite recent\n# cmake for the depe"
  },
  {
    "path": "COPYING",
    "chars": 7430,
    "preview": "Main Library:\n\nCopyright (c) 2014, Peter Thorson. All rights reserved.\n\nRedistribution and use in source and binary form"
  },
  {
    "path": "Doxyfile",
    "chars": 102887,
    "preview": "# Doxyfile 1.8.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "SConstruct",
    "chars": 11446,
    "preview": "import os, sys, commands\nenv = Environment(ENV = os.environ)\n\n# figure out a better way to configure this\nif os.environ."
  },
  {
    "path": "changelog.md",
    "chars": 27361,
    "preview": "HEAD\n\n0.8.2 - 2020-04-19\n- Examples: Update print_client_tls example to remove use of deprecated\n  OpenSSL functions.\n- "
  },
  {
    "path": "docs/config.dox",
    "chars": 7519,
    "preview": "/** \\page reference.config Config Reference\n\nWebSocket++ uses a config template parameter to supply a number of compile "
  },
  {
    "path": "docs/faq.dox",
    "chars": 16251,
    "preview": "/** \\page faq FAQ\n\n## General Library Usage\n\n### Can a handler be changed after a connection is established? Can one be "
  },
  {
    "path": "docs/getting_started.dox",
    "chars": 1789,
    "preview": "/** \\page getting_started Getting Started\n\nWebSocket++ code is available on github at https://github.com/zaphoyd/websock"
  },
  {
    "path": "docs/handlers.dox",
    "chars": 8167,
    "preview": "/** \\page reference.handlers Handler Reference\n\nHandlers allow WebSocket++ programs to receive notifications about event"
  },
  {
    "path": "docs/logging.dox",
    "chars": 7981,
    "preview": "/** \\page reference.logging Logging Reference\n\nWebSocket++ has the capability of logging events during the lifetime of t"
  },
  {
    "path": "docs/manual.css",
    "chars": 453,
    "preview": ".tabs, .tabs2, .tabs3, .navpath ul {\n    background-image: none;\n    background-color: #333;\n    border: none;\n    borde"
  },
  {
    "path": "docs/manual.dox",
    "chars": 2409,
    "preview": "/** \\mainpage\n\nWebSocket++ is a C++ library that can be used to implement WebSocket functionality. The goals of the proj"
  },
  {
    "path": "docs/simple_broadcast_server.cpp",
    "chars": 1337,
    "preview": "#include <set>\n\n#include <websocketpp/config/asio_no_tls.hpp>\n#include <websocketpp/server.hpp>\n\ntypedef websocketpp::se"
  },
  {
    "path": "docs/simple_count_server_thread.cpp",
    "chars": 1613,
    "preview": "#include <functional>\n#include <mutex>\n#include <set>\n#include <thread>\n\n#include <websocketpp/config/asio_no_tls.hpp>\n#"
  },
  {
    "path": "docs/tutorials.dox",
    "chars": 333,
    "preview": "/** \\page tutorials Tutorials\n\nThese tutorials are works in progress, some are more complete than others.\n\n- \\subpage md"
  },
  {
    "path": "examples/associative_storage/CMakeLists.txt",
    "chars": 264,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (associative_storage)\n\nbuild_executable (${T"
  },
  {
    "path": "examples/associative_storage/associative_storage.cpp",
    "chars": 2524,
    "preview": "#include <iostream>\n#include <map>\n#include <exception>\n#include <websocketpp/config/asio_no_tls.hpp>\n#include <websocke"
  },
  {
    "path": "examples/broadcast_server/CMakeLists.txt",
    "chars": 261,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (broadcast_server)\n\nbuild_executable (${TARG"
  },
  {
    "path": "examples/broadcast_server/SConscript",
    "chars": 684,
    "preview": "## Broadcast Server example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/broadcast_server/broadcast_server.cpp",
    "chars": 4424,
    "preview": "#include <websocketpp/config/asio_no_tls.hpp>\n\n#include <websocketpp/server.hpp>\n\n#include <iostream>\n#include <set>\n\n/*"
  },
  {
    "path": "examples/debug_client/CMakeLists.txt",
    "chars": 300,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\nif (OPENSSL_FOUND)\n\ninit_target (debug_client)\n\nbuild_ex"
  },
  {
    "path": "examples/debug_client/SConscript",
    "chars": 709,
    "preview": "## Debug client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfi"
  },
  {
    "path": "examples/debug_client/debug_client.cpp",
    "chars": 6951,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/debug_server/CMakeLists.txt",
    "chars": 257,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (debug_server)\n\nbuild_executable (${TARGET_N"
  },
  {
    "path": "examples/debug_server/SConscript",
    "chars": 655,
    "preview": "## Debug server example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfi"
  },
  {
    "path": "examples/debug_server/debug_server.cpp",
    "chars": 6362,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/dev/CMakeLists.txt",
    "chars": 253,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\n#init_target (dev)\n\n#build_executable (${TARGET_NAME} ${"
  },
  {
    "path": "examples/dev/SConscript",
    "chars": 443,
    "preview": "## Main development example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/dev/main.cpp",
    "chars": 6564,
    "preview": "//#ifndef _WEBSOCKETPP_CPP11_STL_\n//    #define _WEBSOCKETPP_CPP11_STL_\n//#endif\n\n#include <random>\n#include <boost/time"
  },
  {
    "path": "examples/echo_client/CMakeLists.txt",
    "chars": 256,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (echo_client)\n\nbuild_executable (${TARGET_NA"
  },
  {
    "path": "examples/echo_client/SConscript",
    "chars": 675,
    "preview": "## echo_client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfil"
  },
  {
    "path": "examples/echo_client/echo_client.cpp",
    "chars": 3881,
    "preview": "/*\n * Copyright (c) 2016, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/echo_server/CMakeLists.txt",
    "chars": 256,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (echo_server)\n\nbuild_executable (${TARGET_NA"
  },
  {
    "path": "examples/echo_server/SConscript",
    "chars": 655,
    "preview": "## Main development example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/echo_server/echo_handler.hpp",
    "chars": 1854,
    "preview": "/*\n * Copyright (c) 2012, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/echo_server/echo_server.cpp",
    "chars": 1947,
    "preview": "#include <websocketpp/config/asio_no_tls.hpp>\n\n#include <websocketpp/server.hpp>\n\n#include <iostream>\n\ntypedef websocket"
  },
  {
    "path": "examples/echo_server_both/CMakeLists.txt",
    "chars": 306,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\n\nif (OPENSSL_FOUND)\n\ninit_target (echo_server_both)\n\nbui"
  },
  {
    "path": "examples/echo_server_both/SConscript",
    "chars": 723,
    "preview": "## Combo plain+tls echo server\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport("
  },
  {
    "path": "examples/echo_server_both/echo_server_both.cpp",
    "chars": 3282,
    "preview": "#include <websocketpp/config/asio.hpp>\n#include <websocketpp/server.hpp>\n\n#include <iostream>\n\n// define types for two d"
  },
  {
    "path": "examples/echo_server_both/server.pem",
    "chars": 3479,
    "preview": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: DES-EDE3-CBC,A0ED66EF872A48A9\n\ngXuvKojXzApVhhPVNdRliiaj"
  },
  {
    "path": "examples/echo_server_tls/CMakeLists.txt",
    "chars": 305,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\n\nif (OPENSSL_FOUND)\n\ninit_target (echo_server_tls)\n\nbuil"
  },
  {
    "path": "examples/echo_server_tls/SConscript",
    "chars": 716,
    "preview": "## Main development example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/echo_server_tls/dh.pem",
    "chars": 424,
    "preview": "-----BEGIN DH PARAMETERS-----\nMIIBCAKCAQEAqxMGKZB8YNV8WQnbJWwwwmifc+PfVRtd1FN5v5aQSsf6dpjX3Zlh\nN1NmgecsQyg4u2EWe4Umta10Q"
  },
  {
    "path": "examples/echo_server_tls/echo_server_tls.cpp",
    "chars": 7219,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/echo_server_tls/server.pem",
    "chars": 3505,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDMYjHlTUeUGSys\nFz5PZcvgS3gojBlEAOu2gXFQDcJ"
  },
  {
    "path": "examples/enriched_storage/CMakeLists.txt",
    "chars": 261,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (enriched_storage)\n\nbuild_executable (${TARG"
  },
  {
    "path": "examples/enriched_storage/enriched_storage.cpp",
    "chars": 2782,
    "preview": "#include <iostream>\n#include <websocketpp/config/asio_no_tls.hpp>\n#include <websocketpp/server.hpp>\n\nstruct connection_d"
  },
  {
    "path": "examples/external_io_service/CMakeLists.txt",
    "chars": 264,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (external_io_service)\n\nbuild_executable (${T"
  },
  {
    "path": "examples/external_io_service/SConscript",
    "chars": 687,
    "preview": "## Main development example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/external_io_service/external_io_service.cpp",
    "chars": 3449,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/external_io_service/tcp_echo_server.hpp",
    "chars": 3816,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/handler_switch/CMakeLists.txt",
    "chars": 259,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (handler_switch)\n\nbuild_executable (${TARGET"
  },
  {
    "path": "examples/handler_switch/handler_switch.cpp",
    "chars": 1236,
    "preview": "#include <iostream>\n\n#include <websocketpp/config/asio_no_tls.hpp>\n#include <websocketpp/server.hpp>\n\ntypedef websocketp"
  },
  {
    "path": "examples/iostream_server/CMakeLists.txt",
    "chars": 260,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (iostream_server)\n\nbuild_executable (${TARGE"
  },
  {
    "path": "examples/iostream_server/SConscript",
    "chars": 670,
    "preview": "## iostream server example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('pol"
  },
  {
    "path": "examples/iostream_server/iostream_server.cpp",
    "chars": 3161,
    "preview": "#include <websocketpp/config/core.hpp>\n\n#include <websocketpp/server.hpp>\n\n#include <iostream>\n#include <fstream>\n\ntyped"
  },
  {
    "path": "examples/print_client/CMakeLists.txt",
    "chars": 257,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (print_client)\n\nbuild_executable (${TARGET_N"
  },
  {
    "path": "examples/print_client/SConscript",
    "chars": 655,
    "preview": "## Print client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfi"
  },
  {
    "path": "examples/print_client/print_client.cpp",
    "chars": 3185,
    "preview": "/*\n * Copyright (c) 2016, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/print_client_tls/CMakeLists.txt",
    "chars": 304,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\nif (OPENSSL_FOUND)\n\ninit_target (print_client_tls)\n\nbuil"
  },
  {
    "path": "examples/print_client_tls/SConscript",
    "chars": 720,
    "preview": "## Print client tls example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/print_client_tls/ca-chain.cert.pem",
    "chars": 4082,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIFxTCCA62gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwYDELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAklMMRAwDgYDVQQ"
  },
  {
    "path": "examples/print_client_tls/print_client_tls.cpp",
    "chars": 10296,
    "preview": "/*\n * Copyright (c) 2016, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/print_server/CMakeLists.txt",
    "chars": 257,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (print_server)\n\nbuild_executable (${TARGET_N"
  },
  {
    "path": "examples/print_server/SConscript",
    "chars": 655,
    "preview": "## Print server example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfi"
  },
  {
    "path": "examples/print_server/print_server.cpp",
    "chars": 644,
    "preview": "#include <iostream>\n\n#include <websocketpp/config/asio_no_tls.hpp>\n#include <websocketpp/server.hpp>\n\ntypedef websocketp"
  },
  {
    "path": "examples/scratch_client/SConscript",
    "chars": 709,
    "preview": "## Scratch client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('poly"
  },
  {
    "path": "examples/scratch_client/scratch_client.cpp",
    "chars": 9477,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/scratch_server/SConscript",
    "chars": 743,
    "preview": "## Scratch server example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('poly"
  },
  {
    "path": "examples/scratch_server/scratch_server.cpp",
    "chars": 3570,
    "preview": "/**\n * This example is presently used as a scratch space. It may or may not be broken\n * at any given time.\n */\n\n#includ"
  },
  {
    "path": "examples/simple_broadcast_server/CMakeLists.txt",
    "chars": 268,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (simple_broadcast_server)\n\nbuild_executable "
  },
  {
    "path": "examples/simple_broadcast_server/simple_broadcast_server.cpp",
    "chars": 1309,
    "preview": "#include <set>\n#include <websocketpp/config/asio_no_tls.hpp>\n#include <websocketpp/server.hpp>\n\ntypedef websocketpp::ser"
  },
  {
    "path": "examples/sip_client/CMakeLists.txt",
    "chars": 255,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (sip_client)\n\nbuild_executable (${TARGET_NAM"
  },
  {
    "path": "examples/sip_client/README.txt",
    "chars": 418,
    "preview": "\n\nCheckout the project from git\n\nAt the top level, run cmake:\n\n  cmake -G 'Unix Makefiles' \\\n     -D BUILD_EXAMPLES=ON \\"
  },
  {
    "path": "examples/sip_client/SConscript",
    "chars": 654,
    "preview": "## SIP client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfill"
  },
  {
    "path": "examples/sip_client/sip_client.cpp",
    "chars": 2704,
    "preview": "#include <condition_variable>\n\n#include <websocketpp/config/asio_no_tls_client.hpp>\n\n#include <websocketpp/client.hpp>\n\n"
  },
  {
    "path": "examples/subprotocol_server/CMakeLists.txt",
    "chars": 263,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (subprotocol_server)\n\nbuild_executable (${TA"
  },
  {
    "path": "examples/subprotocol_server/SConscript",
    "chars": 683,
    "preview": "## Main development example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/subprotocol_server/subprotocol_server.cpp",
    "chars": 1230,
    "preview": "#include <iostream>\n\n#include <websocketpp/config/asio_no_tls.hpp>\n#include <websocketpp/server.hpp>\n\ntypedef websocketp"
  },
  {
    "path": "examples/telemetry_client/CMakeLists.txt",
    "chars": 261,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (telemetry_client)\n\nbuild_executable (${TARG"
  },
  {
    "path": "examples/telemetry_client/SConscript",
    "chars": 684,
    "preview": "## Telemetry client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/telemetry_client/telemetry_client.cpp",
    "chars": 5617,
    "preview": "#include <websocketpp/config/asio_no_tls_client.hpp>\n#include <websocketpp/client.hpp>\n\n// This header pulls in the WebS"
  },
  {
    "path": "examples/telemetry_server/CMakeLists.txt",
    "chars": 261,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (telemetry_server)\n\nbuild_executable (${TARG"
  },
  {
    "path": "examples/telemetry_server/SConscript",
    "chars": 675,
    "preview": "## Main development example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('po"
  },
  {
    "path": "examples/telemetry_server/index.html",
    "chars": 1995,
    "preview": "<!doctype html>\n<html>\n<head>\n<title>WebSocket++ Telemetry Client</title>\n</head>\n<body>\n\n<script type=\"text/javascript\""
  },
  {
    "path": "examples/telemetry_server/telemetry_server.cpp",
    "chars": 6426,
    "preview": "#include <websocketpp/config/asio_no_tls.hpp>\n\n#include <websocketpp/server.hpp>\n\n#include <fstream>\n#include <iostream>"
  },
  {
    "path": "examples/testee_client/CMakeLists.txt",
    "chars": 295,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\nif (ZLIB_FOUND)\n\ninit_target (testee_client)\n\nbuild_exec"
  },
  {
    "path": "examples/testee_client/SConscript",
    "chars": 692,
    "preview": "## Autobahn test client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport"
  },
  {
    "path": "examples/testee_client/testee_client.cpp",
    "chars": 5091,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/testee_server/CMakeLists.txt",
    "chars": 295,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\nif (ZLIB_FOUND)\n\ninit_target (testee_server)\n\nbuild_exec"
  },
  {
    "path": "examples/testee_server/SConscript",
    "chars": 677,
    "preview": "## Autobahn Testee Server\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('poly"
  },
  {
    "path": "examples/testee_server/testee_server.cpp",
    "chars": 5564,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "examples/utility_client/CMakeLists.txt",
    "chars": 260,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (utility_client)\n\nbuild_executable (${TARGET"
  },
  {
    "path": "examples/utility_client/SConscript",
    "chars": 673,
    "preview": "## Utility client example\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('poly"
  },
  {
    "path": "examples/utility_client/utility_client.cpp",
    "chars": 11501,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "readme.md",
    "chars": 1618,
    "preview": "WebSocket++ (0.8.2)\n==========================\n\nWebSocket++ is a header only C++ library that implements RFC6455 The Web"
  },
  {
    "path": "roadmap.md",
    "chars": 926,
    "preview": "Complete & Tested:\n- Server and client roles pass all Autobahn v0.5.9 test suite tests strictly\n- Streaming UTF8 validat"
  },
  {
    "path": "test/connection/CMakeLists.txt",
    "chars": 250,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (test_connection)\n\nbuild_test (${TARGET_NAME"
  },
  {
    "path": "test/connection/SConscript",
    "chars": 1030,
    "preview": "## connection unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyf"
  },
  {
    "path": "test/connection/connection.cpp",
    "chars": 21169,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/connection/connection_tu2.cpp",
    "chars": 2490,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/connection/connection_tu2.hpp",
    "chars": 2583,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/endpoint/CMakeLists.txt",
    "chars": 292,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\nif (OPENSSL_FOUND)\n\ninit_target (test_endpoint)\n\nbuild_t"
  },
  {
    "path": "test/endpoint/SConscript",
    "chars": 821,
    "preview": "## endpoint unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfil"
  },
  {
    "path": "test/endpoint/endpoint.cpp",
    "chars": 5265,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/extension/CMakeLists.txt",
    "chars": 510,
    "preview": "# Extension Tests\nfile (GLOB SOURCE extension.cpp)\n\ninit_target (test_extension)\nbuild_executable (${TARGET_NAME} ${SOUR"
  },
  {
    "path": "test/extension/SConscript",
    "chars": 1211,
    "preview": "## http unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfill_li"
  },
  {
    "path": "test/extension/extension.cpp",
    "chars": 1808,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/extension/permessage_deflate.cpp",
    "chars": 27813,
    "preview": "/*\n * Copyright (c) 2013, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/http/CMakeLists.txt",
    "chars": 202,
    "preview": "\nfile (GLOB SOURCE_FILES parser.cpp)\n\ninit_target (test_http)\n\nbuild_test (${TARGET_NAME} ${SOURCE_FILES})\n\nlink_boost ("
  },
  {
    "path": "test/http/SConscript",
    "chars": 734,
    "preview": "## http unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfill_li"
  },
  {
    "path": "test/http/parser.cpp",
    "chars": 39022,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/http/parser_perf.cpp",
    "chars": 5417,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/logger/CMakeLists.txt",
    "chars": 246,
    "preview": "\nfile (GLOB SOURCE_FILES *.cpp)\nfile (GLOB HEADER_FILES *.hpp)\n\ninit_target (test_logger)\n\nbuild_test (${TARGET_NAME} ${"
  },
  {
    "path": "test/logger/SConscript",
    "chars": 782,
    "preview": "## logger unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfill_"
  },
  {
    "path": "test/logger/basic.cpp",
    "chars": 5541,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/message_buffer/CMakeLists.txt",
    "chars": 458,
    "preview": "# Test alloc message buffer strategy\nfile (GLOB SOURCE alloc.cpp)\n\ninit_target (test_message_alloc)\nbuild_executable (${"
  },
  {
    "path": "test/message_buffer/SConscript",
    "chars": 1085,
    "preview": "## message_buffer unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('p"
  },
  {
    "path": "test/message_buffer/alloc.cpp",
    "chars": 3878,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/message_buffer/message.cpp",
    "chars": 2796,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/message_buffer/pool.cpp",
    "chars": 7222,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/processors/CMakeLists.txt",
    "chars": 1474,
    "preview": "# Generic processor tests\nfile (GLOB SOURCE processor.cpp)\n\ninit_target (test_processor)\nbuild_test (${TARGET_NAME} ${SO"
  },
  {
    "path": "test/processors/SConscript",
    "chars": 2859,
    "preview": "## processor unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfi"
  },
  {
    "path": "test/processors/extension_permessage_compress.cpp",
    "chars": 7369,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/processors/hybi00.cpp",
    "chars": 11047,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/processors/hybi07.cpp",
    "chars": 8367,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/processors/hybi08.cpp",
    "chars": 8399,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/processors/hybi13.cpp",
    "chars": 25607,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/processors/processor.cpp",
    "chars": 5127,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/random/CMakeLists.txt",
    "chars": 456,
    "preview": "# Test RNG policy none\nfile (GLOB SOURCE none.cpp)\n\ninit_target (test_random_none)\nbuild_test (${TARGET_NAME} ${SOURCE})"
  },
  {
    "path": "test/random/SConscript",
    "chars": 1186,
    "preview": "## random number generation unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')"
  },
  {
    "path": "test/random/none.cpp",
    "chars": 1923,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/random/random_device.cpp",
    "chars": 2152,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/roles/CMakeLists.txt",
    "chars": 427,
    "preview": "# Test client role\nfile (GLOB SOURCE client.cpp)\n\ninit_target (test_roles_client)\nbuild_test (${TARGET_NAME} ${SOURCE})\n"
  },
  {
    "path": "test/roles/SConscript",
    "chars": 1084,
    "preview": "## role unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfill_li"
  },
  {
    "path": "test/roles/client.cpp",
    "chars": 6717,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/roles/server.cpp",
    "chars": 10469,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/CMakeLists.txt",
    "chars": 1777,
    "preview": "if (OPENSSL_FOUND)\n\n# Test transport integration\nfile (GLOB SOURCE integration.cpp)\n\ninit_target (test_transport)\nbuild_"
  },
  {
    "path": "test/transport/SConscript",
    "chars": 880,
    "preview": "## transport integration tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport("
  },
  {
    "path": "test/transport/asio/SConscript",
    "chars": 1485,
    "preview": "## asio transport unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('p"
  },
  {
    "path": "test/transport/asio/base.cpp",
    "chars": 2158,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/asio/security.cpp",
    "chars": 3390,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/asio/timers.cpp",
    "chars": 7072,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/hybi_util.cpp",
    "chars": 3499,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/integration.cpp",
    "chars": 21256,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/iostream/SConscript",
    "chars": 1611,
    "preview": "## iostream transport unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImpor"
  },
  {
    "path": "test/transport/iostream/base.cpp",
    "chars": 1755,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/iostream/connection.cpp",
    "chars": 19788,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/transport/iostream/endpoint.cpp",
    "chars": 1922,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/utility/CMakeLists.txt",
    "chars": 1257,
    "preview": "# Test close utilities\nfile (GLOB SOURCE close.cpp)\n\ninit_target (test_close)\nbuild_test (${TARGET_NAME} ${SOURCE})\nlink"
  },
  {
    "path": "test/utility/SConscript",
    "chars": 2094,
    "preview": "## utility unit tests\n##\n\nImport('env')\nImport('env_cpp11')\nImport('boostlibs')\nImport('platform_libs')\nImport('polyfill"
  },
  {
    "path": "test/utility/close.cpp",
    "chars": 4392,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/utility/error.cpp",
    "chars": 2488,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/utility/frame.cpp",
    "chars": 19257,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/utility/sha1.cpp",
    "chars": 3374,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/utility/uri.cpp",
    "chars": 8633,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "test/utility/utilities.cpp",
    "chars": 2829,
    "preview": "/*\n * Copyright (c) 2011, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/broadcast_tutorial/broadcast_tutorial.md",
    "chars": 601,
    "preview": "Broadcast Tutorial\n==================\n\nThis tutorial will dig into some more nitty gritty details on how to build high\ns"
  },
  {
    "path": "tutorials/chat_tutorial/chat_tutorial.md",
    "chars": 189,
    "preview": "Chat Tutorial\n=============\n\nGoals of this tutorial:\n- Implement a realtime websocket chat server\n\n\nServer\n- Nicknames\n-"
  },
  {
    "path": "tutorials/utility_client/step1.cpp",
    "chars": 2373,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_client/step2.cpp",
    "chars": 2531,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_client/step3.cpp",
    "chars": 3142,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_client/step4.cpp",
    "chars": 7516,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_client/step5.cpp",
    "chars": 10275,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_client/step6.cpp",
    "chars": 12250,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_client/utility_client.md",
    "chars": 44940,
    "preview": "Utility Client Example Application Tutorial\n===========================================\n\nChapter 1: Initial Setup & Basi"
  },
  {
    "path": "tutorials/utility_server/step1.cpp",
    "chars": 2773,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_server/step2.cpp",
    "chars": 3194,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "tutorials/utility_server/utility_server.md",
    "chars": 10502,
    "preview": "Utility Server Example Application Tutorial\n===========================================\n\nIntroduction\n------------\n\nThis"
  },
  {
    "path": "websocketpp/CMakeLists.txt",
    "chars": 43,
    "preview": "init_target(\"websocketpp\")\nfinal_target ()\n"
  },
  {
    "path": "websocketpp/base64/base64.hpp",
    "chars": 5605,
    "preview": "/*\n    ******\n    base64.hpp is a repackaging of the base64.cpp and base64.h files into a\n    single header suitable for"
  },
  {
    "path": "websocketpp/client.hpp",
    "chars": 1724,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/close.hpp",
    "chars": 13039,
    "preview": "\n/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, "
  },
  {
    "path": "websocketpp/common/asio.hpp",
    "chars": 5980,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/asio_ssl.hpp",
    "chars": 1861,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/chrono.hpp",
    "chars": 2713,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/connection_hdl.hpp",
    "chars": 2420,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/cpp11.hpp",
    "chars": 6931,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/functional.hpp",
    "chars": 3783,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/md5.hpp",
    "chars": 16653,
    "preview": "/*\n  md5.hpp is a reformulation of the md5.h and md5.c code from\n  http://www.opensource.apple.com/source/cups/cups-59/c"
  },
  {
    "path": "websocketpp/common/memory.hpp",
    "chars": 3320,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/network.hpp",
    "chars": 3484,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/platforms.hpp",
    "chars": 2116,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/random.hpp",
    "chars": 3259,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/regex.hpp",
    "chars": 2255,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/stdint.hpp",
    "chars": 2718,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/system_error.hpp",
    "chars": 3377,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/thread.hpp",
    "chars": 3554,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/time.hpp",
    "chars": 2453,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/common/type_traits.hpp",
    "chars": 2492,
    "preview": "/*\n * Copyright (c) 2015, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/concurrency/basic.hpp",
    "chars": 2032,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/concurrency/none.hpp",
    "chars": 3020,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/config/asio.hpp",
    "chars": 3105,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/config/asio_client.hpp",
    "chars": 3168,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/config/asio_no_tls.hpp",
    "chars": 2951,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  },
  {
    "path": "websocketpp/config/asio_no_tls_client.hpp",
    "chars": 3007,
    "preview": "/*\n * Copyright (c) 2014, Peter Thorson. All rights reserved.\n *\n * Redistribution and use in source and binary forms, w"
  }
]

// ... and 68 more files (download for full content)

About this extraction

This page contains the full source code of the zaphoyd/websocketpp GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 268 files (1.6 MB), approximately 409.5k tokens, and a symbol index with 1624 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!