Commit graph

258 commits

Author SHA1 Message Date
Stephen Seo a0100b1ed9 Use rsync setting up seodisparate doxygen docs
All checks were successful
Publish doxygen documentation to seodisparate.com / doxygen-gen-and-publish (push) Successful in 0s
2023-12-19 12:54:52 +09:00
Stephen Seo 7227895240 Add Forgejo workflow for doxygen docs
All checks were successful
Publish doxygen documentation to seodisparate.com / doxygen-gen-and-publish (push) Successful in 0s
2023-12-19 12:52:44 +09:00
Stephen Seo 611287b377 Revert "Impl "RWLock" for use in TSLQueue"
This reverts commit cf27a6bb76.

The use of "shared_lock" in TSLQueue is unsafe because of two things:

  - The TSLQueue iterator takes a "read" lock.
  - The TSLQueue iterator can erase the current element.
2023-07-22 17:28:33 +09:00
Stephen Seo ce092f81f9 Revert "Replace unnecessary use of atomic in "shared_lock""
This reverts commit b50e50b5fb.
2023-07-22 17:28:13 +09:00
Stephen Seo b50e50b5fb Replace unnecessary use of atomic in "shared_lock" 2023-07-22 16:46:38 +09:00
Stephen Seo cf27a6bb76 Impl "RWLock" for use in TSLQueue
This project supports C++11, and std::shared_lock was made available in
C++17, thus a "shared_spin_lock" was created with similar functionality.
This "shared_spin_lock" is used in TSLQueue.
2023-07-22 16:33:09 +09:00
Stephen Seo 64a0995e21 Fix CMakeLists.txt, handle -Weffc++ warnings 2023-07-22 13:25:43 +09:00
Stephen Seo 56465c280c Update README.md 2023-07-19 11:35:28 +09:00
Stephen Seo 97f030a3a3 Add docs for UDPC_no* functions 2023-07-04 11:41:45 +09:00
Stephen Seo 4887cc2ae5 Update README.md 2023-07-03 12:03:52 +09:00
Stephen Seo 972ec73e88 Refactor addr logprint via template specialization 2023-06-26 14:01:42 +09:00
Stephen Seo 77d69cabbc Impl "unsafe" versions of UDPC_atostr(...)
These "unsafe" versions are guaranteed to not have the returned address
strings be overwritten by UDPC, but they must be manually free'd later
(as mentioned in the documentation).
2023-06-22 13:25:26 +09:00
Stephen Seo 4abd9fddcb Conditionally use UDPC_atostr internally
Previous implementation used UDPC_atostr() frequently. This commit
changes the implementation to only call UDPC_atostr() if the log level
of the code logging to output will cause the log to be output.
2023-06-22 12:39:11 +09:00
Stephen Seo 390f3972f8 Add documentation for UDPC_atostr... 2023-06-22 12:07:26 +09:00
Stephen Seo 2495396d76 Fix potential memory corruption bug
UDPC_atostr(...) uses a uint32_t as an offset into a buffer inside the
UDPC Context such that there can be at most 32 different addr-strings.
The call is thread-safe, up to a point (at most 32 concurrent calls will
return correct strings). The problem was that the offset was not being
reset to 0 and was always being incremented by 40. Should the offset
overflow, the offset into the buffer will be "mis-aligned" such that the
32nd offset into the buffer can possibly overwrite memory past the
buffer's end if the addr string is long enough.

The fix is to use a mutex instead of an atomic uint32_t to lock a
code-block that will always prevent overflow (using modulus operator).

I think the speed-loss is negligable (using a lock instead of an atomic
uint32_t) since it isn't expected for programs using UDPC to use
UDPC_atostr(...) very frequently.
2023-06-21 13:23:26 +09:00
Stephen Seo 211715fc56 Fix potential nullptr deref in free_PacketInfo_ptr 2023-04-19 19:11:03 +09:00
Stephen Seo 3fac706d86 Add UDPC_free_PacketInfo_ptr(...)
Also add unit test for this function.
2023-04-19 18:50:26 +09:00
Stephen Seo 00b249bdc8 Update LICENSE year 2023-04-18 14:05:52 +09:00
Stephen Seo f18e87903a Refactor UDPC::get_empty_pinfo() 2023-04-18 14:03:31 +09:00
Stephen Seo 087d3cfc6f Impl handling Ctrl-C for Windows in NetworkTest 2023-01-10 12:14:57 +09:00
Stephen Seo 577ab0bc52 Better handling of receiving packets in recv loop
On error processing a received packet, continue to receive packets in
the loop. If no packet was received, the loop ends.
2023-01-10 11:51:54 +09:00
Stephen Seo a8ef89d9b1 Update documentation about UDPC_update(ctx) 2022-12-08 16:54:02 +09:00
Stephen Seo 77ac7f88a5 Receive packets in loop til none left in interval
Also some formatting fixes (max 80 chars in edited code).
2022-12-04 19:58:13 +09:00
Stephen Seo b7cd3a00c7 Update LICENSE 2022-11-23 14:14:05 +09:00
Stephen Seo e774a54349 Handle SIGINT (Ctrl-C) in NetworkTest 2022-11-23 14:13:44 +09:00
Stephen Seo 6784ba96dd Update README.md 2021-09-09 18:13:38 +09:00
Stephen Seo 6e39e6dc16 Add gh-pages workflow for Doxygen documentation 2021-09-09 18:10:07 +09:00
Stephen Seo 0e082c670f Update .gitignore 2021-08-30 12:07:27 +09:00
Stephen Seo cf748827bc Fix README.md 2021-08-25 19:45:01 +09:00
Stephen Seo cdee65d91a
Update README.md 2021-02-14 13:56:26 +09:00
Stephen Seo d2cb2d79b8 Update year in LICENSE 2021-01-10 14:40:38 +09:00
Stephen Seo e08e620b26 Add |id| to PacketInfo 2021-01-10 14:40:17 +09:00
Stephen Seo ba3d6df406 Use dll_export (for builds for Windows) 2020-06-23 13:01:27 +09:00
Stephen Seo b0e996cda3 Attempt to make NetworkTest work on Windows 2020-04-28 20:55:16 +09:00
Stephen Seo 2a39267b38 Add/fix more documentation 2020-04-28 19:38:07 +09:00
Stephen Seo d3fb621406 Minor fixes 2020-04-27 19:34:04 +09:00
Stephen Seo 445a221a5b Fix check addr endianness in a4toa6 function 2020-04-27 11:47:50 +09:00
Stephen Seo 31ca4ddc44 Impl create id with hostname
Previously, ids could only be created with an ip address. Now they can
be made with a hostname, which will be looked up by UDPC.

Also fix client still requesting connections even if
accept-new-connections flag is false.
2020-04-26 18:52:06 +09:00
Stephen Seo 5dcab1d590 Minor fix to documentation 2020-04-18 16:19:59 +09:00
Stephen Seo 76c5bb750d Use memcpy instead of pointer casted assignment
std::memcpy is used over int pointer casted assignment due to possible
alignment issues that may cause the casted pointer to be invalid.
2020-04-18 16:09:00 +09:00
Stephen Seo cf6ff5a040 Change how UDPC_PacketInfo handles it's data
The "data" member variable in UDPC_PacketInfo is now handled as a
pointer to dynamic data, instead of an array with a fixed size. Every
time a UDPC_PacketInfo is received from the context,
UDPC_free_PacketInfo() must be called on it to avoid a memory leak.
2020-04-15 19:56:15 +09:00
Stephen Seo e01a1ccd94 Fix compilation fail on no libsodium 2020-03-06 13:03:47 +09:00
Stephen Seo 75f54119bf Fix use of C++14/C++17, only C++11 is supported 2020-03-06 12:05:33 +09:00
Stephen Seo c37909bde3 Add helpers converting network-order (big-endian) 2020-01-16 20:28:42 +09:00
Stephen Seo 0170423a35 Fix UDPC::isBigEndian returning always true 2020-01-16 20:28:01 +09:00
Stephen Seo 80e67e845c Distinguish manual variables and pkgconf variables
Variables checked to manually set libsodium paths have been changed to
prevent conflict with variables set by searching for libsodium via
pkgconfig.
2020-01-16 11:31:22 +09:00
Stephen Seo ed20c28ed0 Allow manually setting dependency libsodium paths 2020-01-16 11:27:19 +09:00
Stephen Seo 136c8b21a5 Fix verification message when using libsodium
Previous implementation had the client send only epoch-time-in-seconds
to be signed by the server. Now the client sends random data and
epoch-time to be signed by the server.
2020-01-15 16:31:38 +09:00
Stephen Seo a3da8334e4 Update README.md 2020-01-13 19:26:05 +09:00
Stephen Seo 83392fc916 Fix doxygen documentation 2020-01-13 19:22:08 +09:00