Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions .clang-tidy
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
Checks: '
*,
-llvmlibc-*,
-android-*,
-altera-*,
-fuchsia*,
-google-readability-todo,
-fuchsia-default-arguments-calls,
-fuchsia-default-arguments-declarations,
-cppcoreguidelines-init-variables,
-cppcoreguidelines-pro-type-reinterpret-cast,
-android-*,
-altera-*,
-llvm-namespace-comment,
-readability-implicit-bool-conversion,
-google-explicit-constructor,
-fuchsia-overloaded-operator,
-abseil-string-find-str-contains,
-readability-avoid-return-with-void-value,
-readability-convert-member-functions-to-static,

-google-readability-braces-around-statements,
-google-readability-namespace-comments,
-hicpp-special-member-functions,
-hicpp-braces-around-statements,
-hicpp-explicit-conversions,
-fuchsia-trailing-return
-hicpp-explicit-conversions
'

WarningsAsErrors: 'bugprone-exception-escape'
FormatStyle: 'none' # TODO: Replace with 'file' once we have a proper .clang-format file
InheritParentConfig: true
CheckOptions:
misc-include-cleaner.MissingIncludes: 'false'
misc-include-cleaner.IgnoreHeaders: 'CppSockets/OSDetection\.hpp'
misc-include-cleaner.IgnoreHeaders: 'CppSockets/OSDetection.*'

bugprone-argument-comment.StrictMode: 1

Expand All @@ -34,5 +35,7 @@ CheckOptions:

readability-identifier-naming.NamespaceCase: CamelCase

readability-identifier-length.IgnoredVariableNames: "^(fd|nb|ss)$"
readability-identifier-length.IgnoredParameterNames: "^([n]|fd)$"
readability-identifier-length.IgnoredVariableNames: "^(fd|nb|n|ss|ec|is|os|_.*)$"
readability-identifier-length.IgnoredParameterNames: "^(fd|n|is|os|_.*)$"

cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor: true
2 changes: 1 addition & 1 deletion .github/workflows/cmake-multi-platform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
clang-tidy:
needs: 'build'
runs-on: ubuntu-latest
if: always() && github.event_name == 'pull-request'
if: always() && github.event_name == 'pull_request'

steps:
- name: Checkout Code
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/windows-vcpkg/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ runs:
shell: powershell
run: |
echo "CMAKE_TOOLCHAIN_FILE=${env:VCPKG_ROOT}\scripts\buildsystems\vcpkg.cmake" | Out-File -FilePath $env:GITHUB_ENV -Append
vcpkg install --debug
vcpkg install

- name: Always Save VCPKG Cache (Windows)
if: always() && runner.os == 'Windows' && steps.fetch-vcpkg-cache.outputs.cache-hit != 'true'
Expand Down
18 changes: 13 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
## Author Francois Michaut
##
## Started on Sun Aug 28 19:26:51 2022 Francois Michaut
## Last update Tue Aug 5 19:07:23 2025 Francois Michaut
## Last update Wed Aug 20 17:05:18 2025 Francois Michaut
##
## CMakeLists.txt : CMake to build the CppSockets library
##
Expand All @@ -21,15 +21,23 @@ project(LibCppSockets VERSION 0.1.0 LANGUAGES C CXX)
configure_file(include/CppSockets/Version.hpp.in include/CppSockets/Version.hpp)

add_library(cppsockets
source/Tls/Certificate.cpp
source/Tls/Context.cpp
source/Tls/Utils.cpp
source/Tls/Socket.cpp

source/Address.cpp
source/Certificate.cpp
source/IPv4.cpp
source/SSL_Utils.cpp
source/Socket.cpp
source/SocketInit.cpp
source/TlsSocket.cpp
)
target_include_directories(cppsockets PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>)
target_include_directories(cppsockets
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
PRIVATE
${PROJECT_SOURCE_DIR}/private
)

find_package(OpenSSL 3.0 COMPONENTS SSL)
target_link_libraries(cppsockets OpenSSL::SSL)
Expand Down
41 changes: 19 additions & 22 deletions include/CppSockets/Address.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
** Author Francois Michaut
**
** Started on Sun Feb 13 17:09:05 2022 Francois Michaut
** Last update Sat Dec 9 08:52:22 2023 Francois Michaut
** Last update Wed Aug 20 12:57:17 2025 Francois Michaut
**
** Address.hpp : Interface to represent network addresses
*/
Expand All @@ -20,43 +20,40 @@
namespace CppSockets {
class IAddress {
public:
[[nodiscard]] virtual auto getAddress() const -> std::uint32_t = 0;
[[nodiscard]] virtual auto getFamily() const -> int = 0;
[[nodiscard]] virtual auto toString() const -> const std::string & = 0;
virtual ~IAddress() = default;

[[nodiscard]] virtual auto get_address() const -> std::uint32_t = 0;
[[nodiscard]] virtual auto get_family() const -> int = 0;
[[nodiscard]] virtual auto to_string() const -> const std::string & = 0;
};

class IEndpoint {
public:
[[nodiscard]] virtual auto getPort() const -> std::uint16_t = 0;
[[nodiscard]] virtual auto getAddr() const -> const IAddress & = 0;
[[nodiscard]] virtual auto toString() const -> const std::string & = 0;
virtual ~IEndpoint() = default;

[[nodiscard]] virtual auto get_port() const -> std::uint16_t = 0;
[[nodiscard]] virtual auto get_addr() const -> const IAddress & = 0;
[[nodiscard]] virtual auto to_string() const -> const std::string & = 0;

protected:
[[nodiscard]] auto makeString() const -> std::string;
[[nodiscard]] auto make_string() const -> std::string;
};

template <class T>
class Endpoint : public IEndpoint {
// TODO: Replace with new C++ requires
static_assert(std::is_base_of<IAddress, T>::value,
"Endpoint address must derive from IAddress"
"Endpoint address must derive from IAddress"
);
public:
Endpoint(T addr, std::uint16_t port) :
addr(std::move(addr)), port(port), str(makeString())
addr(std::move(addr)), port(port), str(make_string())
{};
virtual ~Endpoint() = default;

[[nodiscard]] auto getPort() const -> std::uint16_t override {
return port;
}

[[nodiscard]] auto getAddr() const -> const T & override {
return addr;
}
~Endpoint() override = default;

[[nodiscard]] auto toString() const -> const std::string & override {
return str;
}
[[nodiscard]] auto get_port() const -> std::uint16_t override { return port; }
[[nodiscard]] auto get_addr() const -> const T & override { return addr; }
[[nodiscard]] auto to_string() const -> const std::string & override { return str; }
private:
T addr;
std::uint16_t port;
Expand Down
9 changes: 4 additions & 5 deletions include/CppSockets/IPv4.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
** Author Francois Michaut
**
** Started on Sun Feb 13 17:05:02 2022 Francois Michaut
** Last update Sat Nov 11 16:58:19 2023 Francois Michaut
** Last update Wed Aug 20 12:57:35 2025 Francois Michaut
**
** IPv4.hpp : Class used to represent and manipulate IPv4 addresses
*/
Expand All @@ -19,10 +19,9 @@ namespace CppSockets {
explicit IPv4(std::uint32_t addr);
IPv4(const char *addr); // TODO add support for string. Maybe string_view ?


[[nodiscard]] auto getAddress() const -> std::uint32_t override;
[[nodiscard]] auto getFamily() const -> int override;
[[nodiscard]] auto toString() const -> const std::string & override;
[[nodiscard]] auto get_address() const -> std::uint32_t override;
[[nodiscard]] auto get_family() const -> int override;
[[nodiscard]] auto to_string() const -> const std::string & override;

private:
std::uint32_t addr;
Expand Down
53 changes: 0 additions & 53 deletions include/CppSockets/SSL_Utils.hpp

This file was deleted.

19 changes: 7 additions & 12 deletions include/CppSockets/Socket.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
** Author Francois Michaut
**
** Started on Sat Jan 15 01:17:42 2022 Francois Michaut
** Last update Tue Aug 5 00:00:48 2025 Francois Michaut
** Last update Wed Aug 20 14:01:21 2025 Francois Michaut
**
** Socket.hpp : Portable C++ socket class
*/

#pragma once

#include "CppSockets/OSDetection.hpp"
#include "CppSockets/SocketInit.hpp"
#include "CppSockets/internal/SocketInit.hpp"

// TODO: move the RawSocketType in CppSockets namespace
#ifdef OS_WINDOWS
Expand Down Expand Up @@ -65,18 +65,13 @@ namespace CppSockets {

void set_blocking(bool val);

[[nodiscard]]
auto get_fd() const -> RawSocketType { return m_sockfd; }
[[nodiscard]]
auto get_type() const -> int { return m_type; }
[[nodiscard]]
auto get_domain() const -> int { return m_domain; }
[[nodiscard]]
auto get_protocol() const -> int { return m_protocol; }
[[nodiscard]] auto get_fd() const -> RawSocketType { return m_sockfd; }
[[nodiscard]] auto get_type() const -> int { return m_type; }
[[nodiscard]] auto get_domain() const -> int { return m_domain; }
[[nodiscard]] auto get_protocol() const -> int { return m_protocol; }
// TODO: Allow to get Endpoint

[[nodiscard]]
auto connected() const -> bool { return m_is_connected; }
[[nodiscard]] auto connected() const -> bool { return m_is_connected; }

static auto get_errno() -> int;
static auto strerror(int err) -> char *;
Expand Down
Loading
Loading