Skip to content

Voice: server-side proximity voice chat (M1), on a fetched MafiaNet - #243

Merged
Segfaultd merged 8 commits into
developfrom
feature/voice-chat-fetched
Jul 30, 2026
Merged

Voice: server-side proximity voice chat (M1), on a fetched MafiaNet#243
Segfaultd merged 8 commits into
developfrom
feature/voice-chat-fetched

Conversation

@Segfaultd

@Segfaultd Segfaultd commented Jul 29, 2026

Copy link
Copy Markdown
Member

Lands M1 of voice chat: the server and shared half, and corrects how Framework consumes MafiaNet. Replaces #242, which vendored the dependencies into this repo — the wrong boundary, and the direct cause of its CI failure.

Clients encode Opus frames and send them to the server; the server decides who hears each frame and forwards the payload without ever decoding it. The server stays authoritative over who hears whom — a hacked client can't hear players it isn't allowed to, because it never receives their bytes — at roughly a memcpy per recipient instead of a codec.

Requires MafiaNet v0.13.0, which carries the relay protocol itself.

Two commits, two concerns

ff8e6c69 — fetch MafiaNet instead of vendoring it. MafiaNet owns RakVoice and therefore owns RakVoice's Opus and RNNoise dependencies, which its own build already fetches. Vendoring a trimmed copy here meant hoisting those a level up: ~85 MB of third-party source, a re-vendor split across three trees that had to stay in lockstep, and a collision with .gitignore's vendors/**/*.cmake rule that silently excluded seven Opus CMake modules from the commit — enough to fail every CI configure while a warm local build tree kept working. Framework now links the exported MafiaNet::MafiaNetStatic, whose PUBLIC includes replace the hand-rolled path into the vendored tree.

8a87eae8 — the voice feature.

Component Role
voice_config.h Shared audio format and routing constants
VoiceRouter Who hears a talker — a pure function of positions and mute state, so it's testable without a server
SpscRing Wait-free PCM handoff across the audio-thread boundary
Mixer Distance attenuation, constant-power stereo pan
VoiceServer Relay host attach, per-tick position refresh, cached recipient sets, impersonation guard

The version pin

cmake/MafiaNetPin.cmake holds the pin as its own file, not an inline GIT_TAG. MafiaNet's message-id enum is positional, so moving the pin can shift every id and break every peer built against the old header. bump_version.sh classifies a release by which paths changed, and with MafiaNet no longer in this tree a wire break has no path to detect — the pin file is that path. It lives in cmake/ specifically because vendors/**/*.cmake would have hidden it, which is the same rule that broke #242.

This PR also repairs a dangling major_paths entry pointing at code/framework/src/networking/messages, deleted long ago; replication is where the sync flow lives now.

Not here, deliberately

The client half — audio device, client pipeline, M2O integration. FrameworkClient is WIN32-only, so none of it compiles on the machine this was built on, and landing it unbuilt would mean three tasks nobody could compile, let alone hear. One finding worth carrying into that work: SetLoopbackMode is a no-op in relay mode, because self-origin frames are dropped. Any codec-roundtrip check there needs two peers or a stub relay host — a self-loopback test will produce silence, and that is not evidence of a broken pipeline.

Testing

182 tests / 15 modules / 0 failed, verified from a clean build tree rather than a warm one — that distinction is what #242 got wrong.

24 new across voice_router, spsc_ring and voice_mixer, each mutation-checked: inverting the local-mute condition, reversing the pan cross-product, and dropping the ring's reserved slot each make a test fail. SpscRing was additionally verified under ThreadSanitizer with a validated negative control.

VoiceServer has no automated tests — it needs a live RakPeerInterface — so its impersonation guard is unverified here. The equivalent parsing and impersonation checks are covered upstream by MafiaNet's own suite, which is one of the reasons the protocol belongs there.

Notes for review

  • Cold configure now needs network access. This is the only FetchContent in the build; everything else under vendors/ stays vendored in-tree. That's the trade for the 85 MB.
  • Voice is unconditional for every server — no InstanceOptions opt-out yet. Blast radius is bounded, but whether servers can disable it is an open API decision worth settling before M2.
  • RNNoise still never runs at this frame size (it needs 10 ms / 480 samples; the framework uses the VoIP-standard 20 ms / 960). M1 ships undenoised by decision, recorded in the spec.

Summary by CodeRabbit

  • New Features

    • Added proximity-based voice chat with server-relayed audio.
    • Voice volume now adjusts by distance and speaker direction.
    • Added support for muting, deafening, server moderation, and per-player audible range settings.
    • Voice audio is limited to nearby eligible players for a more focused experience.
  • Bug Fixes

    • Improved validation and handling of voice packets to prevent invalid or impersonated audio from being relayed.
  • Tests

    • Added coverage for voice routing, spatial mixing, and audio buffering behavior.

MafiaNet owns RakVoice, and therefore owns RakVoice's Opus and RNNoise
dependencies, which its own build already fetches. Vendoring a trimmed
MafiaNet copy here meant hoisting those two a level up into this
repository, which was the wrong dependency boundary and cost accordingly:
~85 MB of third-party source, a re-vendor split across three trees that
had to stay in lockstep, and a collision with .gitignore's
vendors/**/*.cmake rule that silently excluded seven Opus CMake modules
from the commit -- enough to fail every CI configure while a warm local
build tree kept working.

Framework now fetches the MafiaNet release and links the exported
MafiaNet::MafiaNetStatic target, whose PUBLIC includes replace the
hand-rolled path into the vendored tree.

The pin lives in cmake/MafiaNetPin.cmake rather than inline. MafiaNet's
message-id enum is positional, so moving the pin can shift every id and
break every peer built against the old header; bump_version.sh classifies
a release by which paths changed, and with MafiaNet no longer in this tree
a wire break has no path to detect. The pin file is that path. It sits in
cmake/ specifically because vendors/**/*.cmake would have hidden it.

Also repairs a dangling major_paths entry pointing at
code/framework/src/networking/messages, deleted long ago; replication is
where the sync flow lives now.

This is the only FetchContent in the build. Everything else under vendors/
remains vendored in-tree, so a cold configure now needs network access.
Clients encode Opus frames and send them to the server; the server decides
who hears each frame and forwards the payload without ever decoding it.
The server stays authoritative over who hears whom -- a hacked client
cannot hear players it is not allowed to, because it never receives their
bytes -- at roughly a memcpy per recipient instead of a codec.

The relay protocol itself lives in MafiaNet (v0.13.0) rather than here,
since it belongs to RakVoice. This is the Framework half:

  voice_config.h   shared audio format and routing constants
  VoiceRouter      who hears a talker: a pure function of positions and
                   mute state, so it is testable without a server
  SpscRing         wait-free PCM handoff across the audio-thread boundary
  Mixer            distance attenuation and constant-power stereo pan
  VoiceServer      relay host attach, per-tick position refresh, cached
                   recipient sets, impersonation guard

The client half -- audio device, client pipeline, M2O integration -- is
deliberately absent: FrameworkClient is WIN32-only, so none of it can be
compiled or hardware-verified here, and landing it unbuilt would mean
three tasks nobody could compile, let alone hear. The plan carries
annotated notes for that session, including one that invalidates its own
loopback verification step.

24 tests across three modules, each mutation-checked: inverting the
local-mute condition, reversing the pan cross-product, and dropping the
ring's reserved slot each make a test fail. The ring was additionally
verified under ThreadSanitizer with a validated negative control.

VoiceServer has no automated tests -- it needs a live RakPeerInterface --
so its impersonation guard is unverified here. The equivalent parsing
checks are covered upstream in MafiaNet's own suite.
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@Segfaultd, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 25 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: c0793a26-0065-42d1-ba81-6bb54eaeee30

📥 Commits

Reviewing files that changed from the base of the PR and between 0ae06b8 and 20f7868.

📒 Files selected for processing (2)
  • .github/bump_version.sh
  • vendors/CMakeLists.txt

Walkthrough

Introduces a voice subsystem with proximity routing, stereo mixing primitives, an SPSC ring buffer, server-side RakVoice relay integration, pinned MafiaNet FetchContent builds, and unit tests covering routing, mixing, and buffering.

Changes

Voice feature

Layer / File(s) Summary
MafiaNet dependency and build wiring
.github/bump_version.sh, cmake/MafiaNetPin.cmake, vendors/CMakeLists.txt, code/framework/CMakeLists.txt, vendors/mafianet/...
Pins MafiaNet to a commit, fetches it as a static dependency, updates Framework linkage and voice source lists, and removes obsolete vendored build artifacts.
Voice configuration, mixer, and ring buffer
code/framework/src/voice/voice_config.h, code/framework/src/voice/client/*, code/tests/modules/spsc_ring_ut.h, code/tests/modules/voice_mixer_ut.h
Adds voice constants, spatial stereo gain calculation, mono-to-stereo accumulation, and an atomic SPSC ring buffer with focused tests.
Proximity routing rules
code/framework/src/voice/server/voice_router.*, code/tests/modules/voice_router_ut.h
Tracks player positions, ranges, mute/deaf state, and computes eligible voice recipients with coverage for routing rules.
Server relay lifecycle and packet flow
code/framework/src/voice/server/voice_server.*, code/framework/src/integrations/server/*, code/framework/src/core_modules.h
Attaches RakVoice, validates incoming relay frames, computes recipients, forwards voice data, updates player positions, handles disconnects, and manages lifecycle registration.
Voice system documentation
CLAUDE.md
Adds Voice to the documented core systems list, including proximity chat and opaque Opus frame relay.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Poem

A rabbit hears the voices near,
And routes each frame with twitching ear.
Through rings and gains the signals hop,
While RakVoice keeps the relay atop.
Proximity blooms—then silence falls!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding server-side proximity voice chat and switching MafiaNet to a fetched dependency.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/voice-chat-fetched

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/bump_version.sh:
- Around line 29-30: Update the major-path matcher in the version bump logic to
enforce a path boundary after each configured entry, so it matches the entry
itself or descendants only when followed by a slash, not similarly prefixed
filenames or directories such as cmake/MafiaNetPin.cmake.bak or replication2.
Preserve the documented exact-file and directory-prefix behavior.

In `@cmake/MafiaNetPin.cmake`:
- Around line 19-20: Make MAFIANET_PIN an enforced resolved commit hash rather
than a user-overridable CACHE STRING, using a cache strategy that overwrites
existing and command-line values. Update the FetchContent declaration to consume
this immutable pin, and remove GIT_SHALLOW TRUE from the MafiaNet declaration in
vendors/CMakeLists.txt.

In `@code/framework/src/voice/server/voice_server.cpp`:
- Around line 93-129: Update VoiceServer::OnVoiceFrame to accept the resolved
packet data offset from GetPacketDataOffset and use that offset when validating
relay-frame length bounds. Ensure timestamped packets are checked based on the
actual forwarded relay payload, while preserving the existing origin, recipient,
and relay behavior.

In `@docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md`:
- Around line 104-109: Update the fenced block describing VERSION.txt in the
voice chat plan to include an explicit text language marker, such as text, while
preserving its existing content.
- Around line 998-1004: Remove the stale candidates partial_sort/resize
recipient truncation from
docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md lines 998-1004,
leaving the implementation example to retain every eligible candidate; update
lines 2267-2269 to state that the server forwards every eligible listener in
range, while only the client speaker-slot count remains bounded.
- Around line 2319-2335: Update VoiceClient::Init to explicitly set the encoder
bitrate with the existing kBitrate symbol, and disable RNNoise by changing
SetNoiseFilter(true) to the inactive setting required for 960-sample frames.
Keep the remaining voice initialization sequence unchanged.
- Around line 2106-2112: Replace the invalid self-loopback verification with a
relay-aware two-peer or relay-stub echo test, unless the implementation
explicitly adds a loopback exemption in OnRelayVoiceData gated by loopbackMode.
In docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md lines 2106-2112,
retain the corrected requirement; update lines 2553-2557 to remove the
SetLoopbackMode(true) self-loopback procedure; and update
docs/superpowers/specs/2026-07-28-voice-chat-design.md lines 260-265 to describe
the relay-aware testing strategy.
- Around line 17-24: Update the M1 audio-format constraints in the plan so the
RNNoise setting states that RNNoise is disabled for 20 ms/960-sample frames,
keeping the remaining Opus and audio requirements unchanged.
- Around line 369-389: Synchronize all relay-protocol documentation with the
shipped versioned format: in
docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md lines 369-389,
document the format-version byte and derive all header offsets and overhead from
it; in lines 426-449, validate packet size and version before reading relay
fields and use the updated offsets; in lines 2002-2019, add the current packet
null/size validation before accessing packet->guid; and in
docs/superpowers/specs/2026-07-28-voice-chat-design.md lines 79-80, update the
relay packet layout and overhead to include the version byte.
- Around line 20-21: Update
docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md lines 20-21 to
describe the pinned MafiaNet v0.13.0 FetchContent integration instead of
v0.10-era vendoring and the prohibition on FetchContent; update
docs/superpowers/specs/2026-07-28-voice-chat-design.md lines 59-70 to use
MafiaNet v0.13.0 and the same FetchContent acquisition model, keeping the
documented integration details consistent across both documents.

In `@docs/superpowers/specs/2026-07-28-voice-chat-design.md`:
- Around line 112-123: Update the fenced code block containing the voice module
tree in the design specification to use the text language marker. Leave the
diagram contents unchanged.
- Around line 125-126: Update the CoreModules API description in the voice chat
design spec to replace SetVoice()/GetVoice() with the shipped
SetVoiceServer()/GetVoiceServer() and SetVoiceClient()/GetVoiceClient()
accessors, while preserving the existing CoreModules registration pattern
reference.
- Line 78: Update the packet-format fenced code block in the voice chat design
specification to declare the `text` language (or an equivalent supported
plain-text fence), resolving the markdownlint warning without changing the
block’s contents.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e5fbff9f-e7b6-4dc2-98a0-1dd6be24d998

📥 Commits

Reviewing files that changed from the base of the PR and between 85cb0e6 and 8a87eae.

📒 Files selected for processing (308)
  • .github/bump_version.sh
  • CLAUDE.md
  • cmake/MafiaNetPin.cmake
  • code/framework/CMakeLists.txt
  • code/framework/src/core_modules.h
  • code/framework/src/integrations/server/instance.cpp
  • code/framework/src/integrations/server/instance.h
  • code/framework/src/voice/client/mixer.cpp
  • code/framework/src/voice/client/mixer.h
  • code/framework/src/voice/client/spsc_ring.h
  • code/framework/src/voice/server/voice_router.cpp
  • code/framework/src/voice/server/voice_router.h
  • code/framework/src/voice/server/voice_server.cpp
  • code/framework/src/voice/server/voice_server.h
  • code/framework/src/voice/voice_config.h
  • code/tests/CMakeLists.txt
  • code/tests/framework_ut.cpp
  • code/tests/modules/spsc_ring_ut.h
  • code/tests/modules/voice_mixer_ut.h
  • code/tests/modules/voice_router_ut.h
  • docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md
  • docs/superpowers/specs/2026-07-28-voice-chat-design.md
  • vendors/CMakeLists.txt
  • vendors/mafianet/CMakeLists.txt
  • vendors/mafianet/LICENSE.md
  • vendors/mafianet/README.md
  • vendors/mafianet/Source/CMakeLists.txt
  • vendors/mafianet/Source/include/mafianet/AutopatcherPatchContext.h
  • vendors/mafianet/Source/include/mafianet/AutopatcherRepositoryInterface.h
  • vendors/mafianet/Source/include/mafianet/Base64Encoder.h
  • vendors/mafianet/Source/include/mafianet/BitStream.h
  • vendors/mafianet/Source/include/mafianet/CCRakNetSlidingWindow.h
  • vendors/mafianet/Source/include/mafianet/CCRakNetUDT.h
  • vendors/mafianet/Source/include/mafianet/CheckSum.h
  • vendors/mafianet/Source/include/mafianet/CloudClient.h
  • vendors/mafianet/Source/include/mafianet/CloudCommon.h
  • vendors/mafianet/Source/include/mafianet/CloudServer.h
  • vendors/mafianet/Source/include/mafianet/CommandParserInterface.h
  • vendors/mafianet/Source/include/mafianet/ConnectionGraph2.h
  • vendors/mafianet/Source/include/mafianet/ConsoleServer.h
  • vendors/mafianet/Source/include/mafianet/DR_SHA1.h
  • vendors/mafianet/Source/include/mafianet/DS_BPlusTree.h
  • vendors/mafianet/Source/include/mafianet/DS_BinarySearchTree.h
  • vendors/mafianet/Source/include/mafianet/DS_BytePool.h
  • vendors/mafianet/Source/include/mafianet/DS_ByteQueue.h
  • vendors/mafianet/Source/include/mafianet/DS_Hash.h
  • vendors/mafianet/Source/include/mafianet/DS_Heap.h
  • vendors/mafianet/Source/include/mafianet/DS_HuffmanEncodingTree.h
  • vendors/mafianet/Source/include/mafianet/DS_HuffmanEncodingTreeFactory.h
  • vendors/mafianet/Source/include/mafianet/DS_HuffmanEncodingTreeNode.h
  • vendors/mafianet/Source/include/mafianet/DS_LinkedList.h
  • vendors/mafianet/Source/include/mafianet/DS_List.h
  • vendors/mafianet/Source/include/mafianet/DS_Map.h
  • vendors/mafianet/Source/include/mafianet/DS_MemoryPool.h
  • vendors/mafianet/Source/include/mafianet/DS_Multilist.h
  • vendors/mafianet/Source/include/mafianet/DS_OrderedChannelHeap.h
  • vendors/mafianet/Source/include/mafianet/DS_OrderedList.h
  • vendors/mafianet/Source/include/mafianet/DS_Queue.h
  • vendors/mafianet/Source/include/mafianet/DS_QueueLinkedList.h
  • vendors/mafianet/Source/include/mafianet/DS_RangeList.h
  • vendors/mafianet/Source/include/mafianet/DS_Table.h
  • vendors/mafianet/Source/include/mafianet/DS_ThreadsafeAllocatingQueue.h
  • vendors/mafianet/Source/include/mafianet/DS_Tree.h
  • vendors/mafianet/Source/include/mafianet/DS_WeightedGraph.h
  • vendors/mafianet/Source/include/mafianet/DataCompressor.h
  • vendors/mafianet/Source/include/mafianet/DirectoryDeltaTransfer.h
  • vendors/mafianet/Source/include/mafianet/DynDNS.h
  • vendors/mafianet/Source/include/mafianet/EmailSender.h
  • vendors/mafianet/Source/include/mafianet/EmptyHeader.h
  • vendors/mafianet/Source/include/mafianet/EpochTimeToString.h
  • vendors/mafianet/Source/include/mafianet/Export.h
  • vendors/mafianet/Source/include/mafianet/FileList.h
  • vendors/mafianet/Source/include/mafianet/FileListNodeContext.h
  • vendors/mafianet/Source/include/mafianet/FileListTransfer.h
  • vendors/mafianet/Source/include/mafianet/FileListTransferCBInterface.h
  • vendors/mafianet/Source/include/mafianet/FileOperations.h
  • vendors/mafianet/Source/include/mafianet/FormatString.h
  • vendors/mafianet/Source/include/mafianet/FullyConnectedMesh2.h
  • vendors/mafianet/Source/include/mafianet/GetTime.h
  • vendors/mafianet/Source/include/mafianet/Getche.h
  • vendors/mafianet/Source/include/mafianet/Gets.h
  • vendors/mafianet/Source/include/mafianet/GridSectorizer.h
  • vendors/mafianet/Source/include/mafianet/HTTPConnection.h
  • vendors/mafianet/Source/include/mafianet/HTTPConnection2.h
  • vendors/mafianet/Source/include/mafianet/IncrementalReadInterface.h
  • vendors/mafianet/Source/include/mafianet/InternalPacket.h
  • vendors/mafianet/Source/include/mafianet/Itoa.h
  • vendors/mafianet/Source/include/mafianet/Kbhit.h
  • vendors/mafianet/Source/include/mafianet/LinuxStrings.h
  • vendors/mafianet/Source/include/mafianet/LocklessTypes.h
  • vendors/mafianet/Source/include/mafianet/LogCommandParser.h
  • vendors/mafianet/Source/include/mafianet/MTUSize.h
  • vendors/mafianet/Source/include/mafianet/MessageFilter.h
  • vendors/mafianet/Source/include/mafianet/MessageIdentifiers.h
  • vendors/mafianet/Source/include/mafianet/NatPunchthroughClient.h
  • vendors/mafianet/Source/include/mafianet/NatPunchthroughServer.h
  • vendors/mafianet/Source/include/mafianet/NatTypeDetectionClient.h
  • vendors/mafianet/Source/include/mafianet/NatTypeDetectionCommon.h
  • vendors/mafianet/Source/include/mafianet/NatTypeDetectionServer.h
  • vendors/mafianet/Source/include/mafianet/NativeFeatureIncludes.h
  • vendors/mafianet/Source/include/mafianet/NativeFeatureIncludesOverrides.h
  • vendors/mafianet/Source/include/mafianet/NativeTypes.h
  • vendors/mafianet/Source/include/mafianet/NetworkIDManager.h
  • vendors/mafianet/Source/include/mafianet/NetworkIDObject.h
  • vendors/mafianet/Source/include/mafianet/PS3Includes.h
  • vendors/mafianet/Source/include/mafianet/PS4Includes.h
  • vendors/mafianet/Source/include/mafianet/PacketConsoleLogger.h
  • vendors/mafianet/Source/include/mafianet/PacketFileLogger.h
  • vendors/mafianet/Source/include/mafianet/PacketLogger.h
  • vendors/mafianet/Source/include/mafianet/PacketOutputWindowLogger.h
  • vendors/mafianet/Source/include/mafianet/PacketPool.h
  • vendors/mafianet/Source/include/mafianet/PacketPriority.h
  • vendors/mafianet/Source/include/mafianet/PacketizedTCP.h
  • vendors/mafianet/Source/include/mafianet/PeerHandle.h
  • vendors/mafianet/Source/include/mafianet/PluginInterface2.h
  • vendors/mafianet/Source/include/mafianet/PointGridSectorizer.h
  • vendors/mafianet/Source/include/mafianet/RPC4Plugin.h
  • vendors/mafianet/Source/include/mafianet/Rackspace.h
  • vendors/mafianet/Source/include/mafianet/Rand.h
  • vendors/mafianet/Source/include/mafianet/RandSync.h
  • vendors/mafianet/Source/include/mafianet/ReadyEvent.h
  • vendors/mafianet/Source/include/mafianet/RefCountedObj.h
  • vendors/mafianet/Source/include/mafianet/RelayPlugin.h
  • vendors/mafianet/Source/include/mafianet/ReliabilityLayer.h
  • vendors/mafianet/Source/include/mafianet/ReplicaEnums.h
  • vendors/mafianet/Source/include/mafianet/ReplicaManager3.h
  • vendors/mafianet/Source/include/mafianet/Router2.h
  • vendors/mafianet/Source/include/mafianet/SecureHandshake.h
  • vendors/mafianet/Source/include/mafianet/SendToThread.h
  • vendors/mafianet/Source/include/mafianet/SignaledEvent.h
  • vendors/mafianet/Source/include/mafianet/SimpleMutex.h
  • vendors/mafianet/Source/include/mafianet/SimpleTCPServer.h
  • vendors/mafianet/Source/include/mafianet/SingleProducerConsumer.h
  • vendors/mafianet/Source/include/mafianet/SocketDefines.h
  • vendors/mafianet/Source/include/mafianet/SocketIncludes.h
  • vendors/mafianet/Source/include/mafianet/SocketLayer.h
  • vendors/mafianet/Source/include/mafianet/StatisticsHistory.h
  • vendors/mafianet/Source/include/mafianet/StringCompressor.h
  • vendors/mafianet/Source/include/mafianet/StringTable.h
  • vendors/mafianet/Source/include/mafianet/SuperFastHash.h
  • vendors/mafianet/Source/include/mafianet/TCPInterface.h
  • vendors/mafianet/Source/include/mafianet/TableSerializer.h
  • vendors/mafianet/Source/include/mafianet/TeamBalancer.h
  • vendors/mafianet/Source/include/mafianet/TeamManager.h
  • vendors/mafianet/Source/include/mafianet/TelnetTransport.h
  • vendors/mafianet/Source/include/mafianet/ThreadPool.h
  • vendors/mafianet/Source/include/mafianet/ThreadsafePacketLogger.h
  • vendors/mafianet/Source/include/mafianet/TransportInterface.h
  • vendors/mafianet/Source/include/mafianet/TwoWayAuthentication.h
  • vendors/mafianet/Source/include/mafianet/UDPForwarder.h
  • vendors/mafianet/Source/include/mafianet/UDPProxyClient.h
  • vendors/mafianet/Source/include/mafianet/UDPProxyCommon.h
  • vendors/mafianet/Source/include/mafianet/UDPProxyCoordinator.h
  • vendors/mafianet/Source/include/mafianet/UDPProxyServer.h
  • vendors/mafianet/Source/include/mafianet/VariableDeltaSerializer.h
  • vendors/mafianet/Source/include/mafianet/VariableListDeltaTracker.h
  • vendors/mafianet/Source/include/mafianet/VariadicSQLParser.h
  • vendors/mafianet/Source/include/mafianet/VirtualWorld.h
  • vendors/mafianet/Source/include/mafianet/VirtualWorldReplica3.h
  • vendors/mafianet/Source/include/mafianet/VitaIncludes.h
  • vendors/mafianet/Source/include/mafianet/WSAStartupSingleton.h
  • vendors/mafianet/Source/include/mafianet/WindowsIncludes.h
  • vendors/mafianet/Source/include/mafianet/XBox360Includes.h
  • vendors/mafianet/Source/include/mafianet/_FindFirst.h
  • vendors/mafianet/Source/include/mafianet/aliases.h
  • vendors/mafianet/Source/include/mafianet/alloca.h
  • vendors/mafianet/Source/include/mafianet/assert.h
  • vendors/mafianet/Source/include/mafianet/commandparser.h
  • vendors/mafianet/Source/include/mafianet/crypto/cryptomanager.h
  • vendors/mafianet/Source/include/mafianet/crypto/factory.h
  • vendors/mafianet/Source/include/mafianet/crypto/fileencrypter.h
  • vendors/mafianet/Source/include/mafianet/crypto/ifileencrypter.h
  • vendors/mafianet/Source/include/mafianet/crypto/securestring.h
  • vendors/mafianet/Source/include/mafianet/defineoverrides.h
  • vendors/mafianet/Source/include/mafianet/defines.h
  • vendors/mafianet/Source/include/mafianet/gettimeofday.h
  • vendors/mafianet/Source/include/mafianet/guid_util.h
  • vendors/mafianet/Source/include/mafianet/linux_adapter.h
  • vendors/mafianet/Source/include/mafianet/mafianet.h
  • vendors/mafianet/Source/include/mafianet/memoryoverride.h
  • vendors/mafianet/Source/include/mafianet/osx_adapter.h
  • vendors/mafianet/Source/include/mafianet/peer.h
  • vendors/mafianet/Source/include/mafianet/peerinterface.h
  • vendors/mafianet/Source/include/mafianet/sleep.h
  • vendors/mafianet/Source/include/mafianet/smartptr.h
  • vendors/mafianet/Source/include/mafianet/socket.h
  • vendors/mafianet/Source/include/mafianet/socket2.h
  • vendors/mafianet/Source/include/mafianet/statistics.h
  • vendors/mafianet/Source/include/mafianet/string.h
  • vendors/mafianet/Source/include/mafianet/thread.h
  • vendors/mafianet/Source/include/mafianet/time.h
  • vendors/mafianet/Source/include/mafianet/transport2.h
  • vendors/mafianet/Source/include/mafianet/types.h
  • vendors/mafianet/Source/include/mafianet/version.h
  • vendors/mafianet/Source/include/mafianet/wstring.h
  • vendors/mafianet/Source/src/Base64Encoder.cpp
  • vendors/mafianet/Source/src/BitStream.cpp
  • vendors/mafianet/Source/src/CCRakNetSlidingWindow.cpp
  • vendors/mafianet/Source/src/CCRakNetUDT.cpp
  • vendors/mafianet/Source/src/CheckSum.cpp
  • vendors/mafianet/Source/src/CloudClient.cpp
  • vendors/mafianet/Source/src/CloudCommon.cpp
  • vendors/mafianet/Source/src/CloudServer.cpp
  • vendors/mafianet/Source/src/CommandParserInterface.cpp
  • vendors/mafianet/Source/src/ConnectionGraph2.cpp
  • vendors/mafianet/Source/src/ConsoleServer.cpp
  • vendors/mafianet/Source/src/DR_SHA1.cpp
  • vendors/mafianet/Source/src/DS_BytePool.cpp
  • vendors/mafianet/Source/src/DS_ByteQueue.cpp
  • vendors/mafianet/Source/src/DS_HuffmanEncodingTree.cpp
  • vendors/mafianet/Source/src/DS_Table.cpp
  • vendors/mafianet/Source/src/DataCompressor.cpp
  • vendors/mafianet/Source/src/DirectoryDeltaTransfer.cpp
  • vendors/mafianet/Source/src/DynDNS.cpp
  • vendors/mafianet/Source/src/EmailSender.cpp
  • vendors/mafianet/Source/src/EpochTimeToString.cpp
  • vendors/mafianet/Source/src/FileList.cpp
  • vendors/mafianet/Source/src/FileListTransfer.cpp
  • vendors/mafianet/Source/src/FileOperations.cpp
  • vendors/mafianet/Source/src/FormatString.cpp
  • vendors/mafianet/Source/src/FullyConnectedMesh2.cpp
  • vendors/mafianet/Source/src/GetTime.cpp
  • vendors/mafianet/Source/src/Getche.cpp
  • vendors/mafianet/Source/src/Gets.cpp
  • vendors/mafianet/Source/src/GridSectorizer.cpp
  • vendors/mafianet/Source/src/HTTPConnection.cpp
  • vendors/mafianet/Source/src/HTTPConnection2.cpp
  • vendors/mafianet/Source/src/IncrementalReadInterface.cpp
  • vendors/mafianet/Source/src/Itoa.cpp
  • vendors/mafianet/Source/src/LinuxStrings.cpp
  • vendors/mafianet/Source/src/LocklessTypes.cpp
  • vendors/mafianet/Source/src/LogCommandParser.cpp
  • vendors/mafianet/Source/src/MessageFilter.cpp
  • vendors/mafianet/Source/src/NatPunchthroughClient.cpp
  • vendors/mafianet/Source/src/NatPunchthroughServer.cpp
  • vendors/mafianet/Source/src/NatTypeDetectionClient.cpp
  • vendors/mafianet/Source/src/NatTypeDetectionCommon.cpp
  • vendors/mafianet/Source/src/NatTypeDetectionServer.cpp
  • vendors/mafianet/Source/src/NetworkIDManager.cpp
  • vendors/mafianet/Source/src/NetworkIDObject.cpp
  • vendors/mafianet/Source/src/PS4Includes.cpp
  • vendors/mafianet/Source/src/PacketConsoleLogger.cpp
  • vendors/mafianet/Source/src/PacketFileLogger.cpp
  • vendors/mafianet/Source/src/PacketLogger.cpp
  • vendors/mafianet/Source/src/PacketOutputWindowLogger.cpp
  • vendors/mafianet/Source/src/PacketizedTCP.cpp
  • vendors/mafianet/Source/src/PeerHandle.cpp
  • vendors/mafianet/Source/src/PluginInterface2.cpp
  • vendors/mafianet/Source/src/PointGridSectorizer.cpp
  • vendors/mafianet/Source/src/RPC4Plugin.cpp
  • vendors/mafianet/Source/src/Rackspace.cpp
  • vendors/mafianet/Source/src/RakMemoryOverride.cpp
  • vendors/mafianet/Source/src/RakNetCommandParser.cpp
  • vendors/mafianet/Source/src/RakNetSocket.cpp
  • vendors/mafianet/Source/src/RakNetSocket2.cpp
  • vendors/mafianet/Source/src/RakNetSocket2_Berkley.cpp
  • vendors/mafianet/Source/src/RakNetSocket2_Windows_Linux.cpp
  • vendors/mafianet/Source/src/RakNetSocket2_Windows_Linux_360.cpp
  • vendors/mafianet/Source/src/RakNetStatistics.cpp
  • vendors/mafianet/Source/src/RakNetTransport2.cpp
  • vendors/mafianet/Source/src/RakNetTypes.cpp
  • vendors/mafianet/Source/src/RakPeer.cpp
  • vendors/mafianet/Source/src/RakSleep.cpp
  • vendors/mafianet/Source/src/RakString.cpp
  • vendors/mafianet/Source/src/RakThread.cpp
  • vendors/mafianet/Source/src/RakWString.cpp
  • vendors/mafianet/Source/src/Rand.cpp
  • vendors/mafianet/Source/src/RandSync.cpp
  • vendors/mafianet/Source/src/ReadyEvent.cpp
  • vendors/mafianet/Source/src/RelayPlugin.cpp
  • vendors/mafianet/Source/src/ReliabilityLayer.cpp
  • vendors/mafianet/Source/src/ReplicaManager3.cpp
  • vendors/mafianet/Source/src/Router2.cpp
  • vendors/mafianet/Source/src/SecureHandshake.cpp
  • vendors/mafianet/Source/src/SendToThread.cpp
  • vendors/mafianet/Source/src/SignaledEvent.cpp
  • vendors/mafianet/Source/src/SimpleMutex.cpp
  • vendors/mafianet/Source/src/SocketLayer.cpp
  • vendors/mafianet/Source/src/StatisticsHistory.cpp
  • vendors/mafianet/Source/src/StringCompressor.cpp
  • vendors/mafianet/Source/src/StringTable.cpp
  • vendors/mafianet/Source/src/SuperFastHash.cpp
  • vendors/mafianet/Source/src/TCPInterface.cpp
  • vendors/mafianet/Source/src/TableSerializer.cpp
  • vendors/mafianet/Source/src/TeamBalancer.cpp
  • vendors/mafianet/Source/src/TeamManager.cpp
  • vendors/mafianet/Source/src/TelnetTransport.cpp
  • vendors/mafianet/Source/src/ThreadsafePacketLogger.cpp
  • vendors/mafianet/Source/src/TwoWayAuthentication.cpp
  • vendors/mafianet/Source/src/UDPForwarder.cpp
  • vendors/mafianet/Source/src/UDPProxyClient.cpp
  • vendors/mafianet/Source/src/UDPProxyCoordinator.cpp
  • vendors/mafianet/Source/src/UDPProxyServer.cpp
  • vendors/mafianet/Source/src/VariableDeltaSerializer.cpp
  • vendors/mafianet/Source/src/VariableListDeltaTracker.cpp
  • vendors/mafianet/Source/src/VariadicSQLParser.cpp
  • vendors/mafianet/Source/src/VitaIncludes.cpp
  • vendors/mafianet/Source/src/WSAStartupSingleton.cpp
  • vendors/mafianet/Source/src/_FindFirst.cpp
  • vendors/mafianet/Source/src/crypto/cryptomanager.cpp
  • vendors/mafianet/Source/src/crypto/factory.cpp
  • vendors/mafianet/Source/src/crypto/fileencrypter.cpp
  • vendors/mafianet/Source/src/crypto/securestring.cpp
  • vendors/mafianet/Source/src/gettimeofday.cpp
  • vendors/mafianet/Source/src/guid_util.cpp
  • vendors/mafianet/Source/src/linux_adapter.cpp
  • vendors/mafianet/Source/src/osx_adapter.cpp
  • vendors/mafianet/VERSION.txt
💤 Files with no reviewable changes (236)
  • vendors/mafianet/Source/include/mafianet/PS4Includes.h
  • vendors/mafianet/LICENSE.md
  • vendors/mafianet/Source/include/mafianet/PS3Includes.h
  • vendors/mafianet/README.md
  • vendors/mafianet/Source/src/PS4Includes.cpp
  • vendors/mafianet/Source/include/mafianet/Rackspace.h
  • vendors/mafianet/Source/include/mafianet/DS_HuffmanEncodingTreeNode.h
  • vendors/mafianet/Source/include/mafianet/WindowsIncludes.h
  • vendors/mafianet/Source/include/mafianet/Kbhit.h
  • vendors/mafianet/Source/include/mafianet/defineoverrides.h
  • vendors/mafianet/Source/include/mafianet/MTUSize.h
  • vendors/mafianet/Source/include/mafianet/gettimeofday.h
  • vendors/mafianet/Source/src/RakMemoryOverride.cpp
  • vendors/mafianet/Source/include/mafianet/Base64Encoder.h
  • vendors/mafianet/Source/include/mafianet/MessageIdentifiers.h
  • vendors/mafianet/Source/include/mafianet/RefCountedObj.h
  • vendors/mafianet/Source/include/mafianet/DS_RangeList.h
  • vendors/mafianet/Source/include/mafianet/ReliabilityLayer.h
  • vendors/mafianet/Source/include/mafianet/EpochTimeToString.h
  • vendors/mafianet/Source/include/mafianet/SocketLayer.h
  • vendors/mafianet/Source/include/mafianet/PacketFileLogger.h
  • vendors/mafianet/Source/include/mafianet/VariadicSQLParser.h
  • vendors/mafianet/Source/include/mafianet/UDPProxyCommon.h
  • vendors/mafianet/Source/include/mafianet/Itoa.h
  • vendors/mafianet/Source/include/mafianet/WSAStartupSingleton.h
  • vendors/mafianet/Source/src/Gets.cpp
  • vendors/mafianet/Source/include/mafianet/NativeTypes.h
  • vendors/mafianet/Source/include/mafianet/LocklessTypes.h
  • vendors/mafianet/Source/include/mafianet/SingleProducerConsumer.h
  • vendors/mafianet/Source/include/mafianet/VirtualWorld.h
  • vendors/mafianet/Source/include/mafianet/NativeFeatureIncludesOverrides.h
  • vendors/mafianet/Source/include/mafianet/aliases.h
  • vendors/mafianet/Source/src/FormatString.cpp
  • vendors/mafianet/Source/include/mafianet/CCRakNetUDT.h
  • vendors/mafianet/Source/src/Itoa.cpp
  • vendors/mafianet/Source/include/mafianet/LinuxStrings.h
  • vendors/mafianet/Source/include/mafianet/ThreadsafePacketLogger.h
  • vendors/mafianet/Source/include/mafianet/FormatString.h
  • vendors/mafianet/Source/include/mafianet/Gets.h
  • vendors/mafianet/Source/include/mafianet/commandparser.h
  • vendors/mafianet/Source/include/mafianet/DS_OrderedChannelHeap.h
  • vendors/mafianet/Source/include/mafianet/FileOperations.h
  • vendors/mafianet/Source/include/mafianet/Getche.h
  • vendors/mafianet/Source/include/mafianet/NetworkIDObject.h
  • vendors/mafianet/Source/include/mafianet/DS_HuffmanEncodingTree.h
  • vendors/mafianet/Source/include/mafianet/DataCompressor.h
  • vendors/mafianet/Source/include/mafianet/SimpleMutex.h
  • vendors/mafianet/Source/include/mafianet/sleep.h
  • vendors/mafianet/Source/include/mafianet/ConsoleServer.h
  • vendors/mafianet/Source/src/PacketOutputWindowLogger.cpp
  • vendors/mafianet/Source/include/mafianet/XBox360Includes.h
  • vendors/mafianet/Source/include/mafianet/EmailSender.h
  • vendors/mafianet/Source/include/mafianet/SimpleTCPServer.h
  • vendors/mafianet/Source/src/Getche.cpp
  • vendors/mafianet/Source/include/mafianet/crypto/ifileencrypter.h
  • vendors/mafianet/Source/src/LocklessTypes.cpp
  • vendors/mafianet/Source/include/mafianet/DS_QueueLinkedList.h
  • vendors/mafianet/Source/src/PacketConsoleLogger.cpp
  • vendors/mafianet/Source/include/mafianet/PointGridSectorizer.h
  • vendors/mafianet/Source/include/mafianet/SuperFastHash.h
  • vendors/mafianet/Source/include/mafianet/DS_ByteQueue.h
  • vendors/mafianet/Source/include/mafianet/crypto/securestring.h
  • vendors/mafianet/Source/include/mafianet/DS_HuffmanEncodingTreeFactory.h
  • vendors/mafianet/Source/include/mafianet/wstring.h
  • vendors/mafianet/Source/include/mafianet/_FindFirst.h
  • vendors/mafianet/Source/include/mafianet/string.h
  • vendors/mafianet/Source/include/mafianet/assert.h
  • vendors/mafianet/Source/include/mafianet/SecureHandshake.h
  • vendors/mafianet/Source/include/mafianet/crypto/factory.h
  • vendors/mafianet/Source/include/mafianet/mafianet.h
  • vendors/mafianet/Source/include/mafianet/FileListTransferCBInterface.h
  • vendors/mafianet/Source/include/mafianet/TransportInterface.h
  • vendors/mafianet/Source/include/mafianet/PacketConsoleLogger.h
  • vendors/mafianet/Source/src/LinuxStrings.cpp
  • vendors/mafianet/Source/include/mafianet/SocketIncludes.h
  • vendors/mafianet/Source/include/mafianet/CloudServer.h
  • vendors/mafianet/Source/src/IncrementalReadInterface.cpp
  • vendors/mafianet/Source/src/EpochTimeToString.cpp
  • vendors/mafianet/Source/src/DS_Table.cpp
  • vendors/mafianet/Source/include/mafianet/peerinterface.h
  • vendors/mafianet/Source/include/mafianet/IncrementalReadInterface.h
  • vendors/mafianet/Source/include/mafianet/crypto/fileencrypter.h
  • vendors/mafianet/Source/include/mafianet/DS_Heap.h
  • vendors/mafianet/Source/include/mafianet/transport2.h
  • vendors/mafianet/Source/include/mafianet/PacketOutputWindowLogger.h
  • vendors/mafianet/Source/include/mafianet/GridSectorizer.h
  • vendors/mafianet/Source/include/mafianet/guid_util.h
  • vendors/mafianet/Source/include/mafianet/VirtualWorldReplica3.h
  • vendors/mafianet/Source/include/mafianet/DS_WeightedGraph.h
  • vendors/mafianet/Source/src/NetworkIDObject.cpp
  • vendors/mafianet/Source/src/guid_util.cpp
  • vendors/mafianet/Source/src/DynDNS.cpp
  • vendors/mafianet/Source/include/mafianet/DirectoryDeltaTransfer.h
  • vendors/mafianet/Source/src/DataCompressor.cpp
  • vendors/mafianet/Source/src/DS_ByteQueue.cpp
  • vendors/mafianet/Source/src/Base64Encoder.cpp
  • vendors/mafianet/Source/src/RakNetCommandParser.cpp
  • vendors/mafianet/Source/src/crypto/factory.cpp
  • vendors/mafianet/Source/src/NatTypeDetectionClient.cpp
  • vendors/mafianet/Source/src/Rackspace.cpp
  • vendors/mafianet/CMakeLists.txt
  • vendors/mafianet/Source/src/EmailSender.cpp
  • vendors/mafianet/Source/src/PacketFileLogger.cpp
  • vendors/mafianet/Source/include/mafianet/statistics.h
  • vendors/mafianet/Source/include/mafianet/AutopatcherPatchContext.h
  • vendors/mafianet/Source/include/mafianet/DS_Hash.h
  • vendors/mafianet/Source/src/crypto/securestring.cpp
  • vendors/mafianet/Source/include/mafianet/DS_Tree.h
  • vendors/mafianet/Source/include/mafianet/ReplicaEnums.h
  • vendors/mafianet/Source/include/mafianet/GetTime.h
  • vendors/mafianet/Source/include/mafianet/DS_Multilist.h
  • vendors/mafianet/Source/src/ConsoleServer.cpp
  • vendors/mafianet/Source/include/mafianet/FileList.h
  • vendors/mafianet/Source/include/mafianet/PeerHandle.h
  • vendors/mafianet/Source/src/gettimeofday.cpp
  • vendors/mafianet/Source/src/CCRakNetUDT.cpp
  • vendors/mafianet/Source/include/mafianet/HTTPConnection.h
  • vendors/mafianet/Source/src/CloudClient.cpp
  • vendors/mafianet/Source/include/mafianet/TelnetTransport.h
  • vendors/mafianet/Source/include/mafianet/InternalPacket.h
  • vendors/mafianet/Source/include/mafianet/StringCompressor.h
  • vendors/mafianet/Source/include/mafianet/DS_LinkedList.h
  • vendors/mafianet/VERSION.txt
  • vendors/mafianet/Source/src/PeerHandle.cpp
  • vendors/mafianet/Source/include/mafianet/thread.h
  • vendors/mafianet/Source/include/mafianet/VariableDeltaSerializer.h
  • vendors/mafianet/Source/src/NetworkIDManager.cpp
  • vendors/mafianet/Source/include/mafianet/RandSync.h
  • vendors/mafianet/Source/include/mafianet/FileListNodeContext.h
  • vendors/mafianet/Source/include/mafianet/alloca.h
  • vendors/mafianet/Source/include/mafianet/FullyConnectedMesh2.h
  • vendors/mafianet/Source/include/mafianet/Rand.h
  • vendors/mafianet/Source/include/mafianet/Export.h
  • vendors/mafianet/Source/include/mafianet/StringTable.h
  • vendors/mafianet/Source/include/mafianet/peer.h
  • vendors/mafianet/Source/include/mafianet/PacketPool.h
  • vendors/mafianet/Source/include/mafianet/ConnectionGraph2.h
  • vendors/mafianet/Source/include/mafianet/DS_BytePool.h
  • vendors/mafianet/Source/src/RakNetSocket2_Windows_Linux.cpp
  • vendors/mafianet/Source/include/mafianet/DynDNS.h
  • vendors/mafianet/Source/src/NatTypeDetectionCommon.cpp
  • vendors/mafianet/Source/include/mafianet/NetworkIDManager.h
  • vendors/mafianet/Source/src/RakNetSocket.cpp
  • vendors/mafianet/Source/include/mafianet/DS_Map.h
  • vendors/mafianet/Source/include/mafianet/DS_Queue.h
  • vendors/mafianet/Source/include/mafianet/PacketizedTCP.h
  • vendors/mafianet/Source/src/LogCommandParser.cpp
  • vendors/mafianet/Source/include/mafianet/VitaIncludes.h
  • vendors/mafianet/Source/include/mafianet/CheckSum.h
  • vendors/mafianet/Source/include/mafianet/UDPForwarder.h
  • vendors/mafianet/Source/src/PluginInterface2.cpp
  • vendors/mafianet/Source/src/CommandParserInterface.cpp
  • vendors/mafianet/Source/include/mafianet/defines.h
  • vendors/mafianet/Source/include/mafianet/DS_List.h
  • vendors/mafianet/Source/src/CheckSum.cpp
  • vendors/mafianet/Source/include/mafianet/LogCommandParser.h
  • vendors/mafianet/Source/src/ConnectionGraph2.cpp
  • vendors/mafianet/Source/src/GetTime.cpp
  • vendors/mafianet/Source/include/mafianet/AutopatcherRepositoryInterface.h
  • vendors/mafianet/Source/include/mafianet/RelayPlugin.h
  • vendors/mafianet/Source/include/mafianet/DS_ThreadsafeAllocatingQueue.h
  • vendors/mafianet/Source/include/mafianet/TwoWayAuthentication.h
  • vendors/mafianet/Source/include/mafianet/DS_BinarySearchTree.h
  • vendors/mafianet/Source/include/mafianet/PacketLogger.h
  • vendors/mafianet/Source/include/mafianet/TeamManager.h
  • vendors/mafianet/Source/include/mafianet/smartptr.h
  • vendors/mafianet/Source/src/HTTPConnection.cpp
  • vendors/mafianet/Source/src/DirectoryDeltaTransfer.cpp
  • vendors/mafianet/Source/include/mafianet/MessageFilter.h
  • vendors/mafianet/Source/include/mafianet/UDPProxyCoordinator.h
  • vendors/mafianet/Source/src/DS_BytePool.cpp
  • vendors/mafianet/Source/src/BitStream.cpp
  • vendors/mafianet/Source/include/mafianet/UDPProxyClient.h
  • vendors/mafianet/Source/src/crypto/fileencrypter.cpp
  • vendors/mafianet/Source/include/mafianet/StatisticsHistory.h
  • vendors/mafianet/Source/include/mafianet/TableSerializer.h
  • vendors/mafianet/Source/src/CloudCommon.cpp
  • vendors/mafianet/Source/include/mafianet/DS_OrderedList.h
  • vendors/mafianet/Source/include/mafianet/PluginInterface2.h
  • vendors/mafianet/Source/src/DS_HuffmanEncodingTree.cpp
  • vendors/mafianet/Source/src/PointGridSectorizer.cpp
  • vendors/mafianet/Source/include/mafianet/version.h
  • vendors/mafianet/Source/src/FileList.cpp
  • vendors/mafianet/Source/src/linux_adapter.cpp
  • vendors/mafianet/Source/include/mafianet/DS_Table.h
  • vendors/mafianet/Source/include/mafianet/FileListTransfer.h
  • vendors/mafianet/Source/CMakeLists.txt
  • vendors/mafianet/Source/src/RPC4Plugin.cpp
  • vendors/mafianet/Source/include/mafianet/VariableListDeltaTracker.h
  • vendors/mafianet/Source/include/mafianet/crypto/cryptomanager.h
  • vendors/mafianet/Source/include/mafianet/Router2.h
  • vendors/mafianet/Source/include/mafianet/memoryoverride.h
  • vendors/mafianet/Source/include/mafianet/time.h
  • vendors/mafianet/Source/src/RakNetSocket2_Berkley.cpp
  • vendors/mafianet/Source/include/mafianet/DS_BPlusTree.h
  • vendors/mafianet/Source/include/mafianet/SignaledEvent.h
  • vendors/mafianet/Source/include/mafianet/ReadyEvent.h
  • vendors/mafianet/Source/include/mafianet/types.h
  • vendors/mafianet/Source/include/mafianet/CommandParserInterface.h
  • vendors/mafianet/Source/include/mafianet/DR_SHA1.h
  • vendors/mafianet/Source/include/mafianet/CloudCommon.h
  • vendors/mafianet/Source/src/DR_SHA1.cpp
  • vendors/mafianet/Source/src/osx_adapter.cpp
  • vendors/mafianet/Source/src/GridSectorizer.cpp
  • vendors/mafianet/Source/include/mafianet/ThreadPool.h
  • vendors/mafianet/Source/include/mafianet/SendToThread.h
  • vendors/mafianet/Source/include/mafianet/TCPInterface.h
  • vendors/mafianet/Source/include/mafianet/TeamBalancer.h
  • vendors/mafianet/Source/src/RakNetSocket2.cpp
  • vendors/mafianet/Source/src/PacketizedTCP.cpp
  • vendors/mafianet/Source/src/NatTypeDetectionServer.cpp
  • vendors/mafianet/Source/src/NatPunchthroughServer.cpp
  • vendors/mafianet/Source/include/mafianet/linux_adapter.h
  • vendors/mafianet/Source/src/HTTPConnection2.cpp
  • vendors/mafianet/Source/include/mafianet/PacketPriority.h
  • vendors/mafianet/Source/include/mafianet/BitStream.h
  • vendors/mafianet/Source/include/mafianet/SocketDefines.h
  • vendors/mafianet/Source/include/mafianet/ReplicaManager3.h
  • vendors/mafianet/Source/include/mafianet/CloudClient.h
  • vendors/mafianet/Source/include/mafianet/HTTPConnection2.h
  • vendors/mafianet/Source/src/NatPunchthroughClient.cpp
  • vendors/mafianet/Source/src/CCRakNetSlidingWindow.cpp
  • vendors/mafianet/Source/src/FileOperations.cpp
  • vendors/mafianet/Source/include/mafianet/RPC4Plugin.h
  • vendors/mafianet/Source/include/mafianet/CCRakNetSlidingWindow.h
  • vendors/mafianet/Source/include/mafianet/UDPProxyServer.h
  • vendors/mafianet/Source/src/FileListTransfer.cpp
  • vendors/mafianet/Source/src/PacketLogger.cpp
  • vendors/mafianet/Source/include/mafianet/DS_MemoryPool.h
  • vendors/mafianet/Source/include/mafianet/EmptyHeader.h
  • vendors/mafianet/Source/include/mafianet/osx_adapter.h
  • vendors/mafianet/Source/include/mafianet/socket2.h
  • vendors/mafianet/Source/src/CloudServer.cpp
  • vendors/mafianet/Source/src/FullyConnectedMesh2.cpp
  • vendors/mafianet/Source/src/MessageFilter.cpp
  • vendors/mafianet/Source/include/mafianet/socket.h

Comment thread .github/bump_version.sh
Comment thread cmake/MafiaNetPin.cmake Outdated
Comment thread code/framework/src/voice/server/voice_server.cpp
Comment thread docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md Outdated
Comment thread docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md Outdated
Comment thread docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md Outdated
Comment thread docs/superpowers/plans/2026-07-28-voice-chat-m1-proximity.md Outdated
Comment thread docs/superpowers/specs/2026-07-28-voice-chat-design.md Outdated
Comment thread docs/superpowers/specs/2026-07-28-voice-chat-design.md Outdated
Comment thread docs/superpowers/specs/2026-07-28-voice-chat-design.md Outdated
MSVC-only compile failure: the mixer test declared `near` and `far`
locals. Both are legacy macros from windows.h, so the names expanded to
nothing and the declarations stopped parsing. Renamed. macOS and Linux
were green, which is exactly why this needed a third platform to catch.

Pin MafiaNet by commit rather than tag, and stop caching it. A tag is a
mutable ref -- repointing it would change what every future build fetches
while the pin file still reads the same. The CACHE entry was the worse
half: a cached value survives in an existing build tree, so bumping the
pin and rebuilding incrementally would silently keep fetching the old
revision. GIT_SHALLOW is retained; the review suggested dropping it on the
grounds that shallow clones cannot pin a detached commit, but that was
verified against GitHub and works, so the fast clone is kept.

Assert the relay format invariant in OnVoiceFrame. The dispatcher upstream
identifies packets through GetPacketDataOffset(), which skips an
ID_TIMESTAMP prefix, while the relay format is defined from byte 0 and
cannot be parsed at any other offset. Checking the packet id where the
frame is consumed makes the two layers agree explicitly instead of relying
on MafiaNet's RelayFrame to reject the mismatch at a distance.

Sync the spec and plan with what shipped. Both predate the fetched
dependency, the relay format-version byte, the removal of the server-side
recipient cap, and the RNNoise and loopback findings -- and the plan is
what a separate Windows session will execute for the client half, so stale
instructions there become real bugs. The plan now carries a status block
marking the landed tasks historical, and its client-side steps are
corrected: the encoder bitrate is set explicitly, SetNoiseFilter is not
called, and the loopback verification is replaced, since self-origin
frames are dropped in relay mode and that procedure could only ever have
produced silence.
@Segfaultd

Copy link
Copy Markdown
Member Author

All addressed in ce31da56, plus the Windows CI failure. Two of the findings I adopted for different reasons than given — noted below rather than silently.

Windows CI (not a review comment, but the actual blocker). The mixer test declared near and far locals. Both are legacy macros from windows.h, so under MSVC the names expanded to nothing and the declarations stopped parsing. macOS and Linux were green. Renamed and commented so it doesn't come back.

Immutable MafiaNet pin (Major) — adopted, partly on different grounds. The security framing doesn't quite hold: anyone who can pass -DMAFIANET_PIN=… can equally edit the file, so it isn't a trust boundary. But there's a sharper bug underneath that the finding is right about — a CACHE entry survives in an existing build tree, so bumping the pin and rebuilding incrementally would silently keep fetching the old revision. That's the same warm-tree failure mode that let the previous PR ship a broken configure, so it's worth closing. Now a plain set() with a commit hash: the file is the single source of truth, and a commit can't be repointed the way a tag can.

I did not drop GIT_SHALLOW. The stated reason — shallow clones can't reliably pin a detached commit — I tested against GitHub with the actual hash before deciding, and it configures fine, so the fast clone is kept. Verified end to end: the fetched tree at _deps/mafianet-src resolves to a515c827, the pinned commit.

Relay-frame bounds vs packet offset (Minor) — adopted, with a different fix. The scenario is already blocked: MafiaNet's RelayFrame rejects data[0] != ID_RAKVOICE_RELAY_DATA, and a timestamped frame fails that test, so nothing oversized gets forwarded today. But the two layers disagreeing silently is the real smell. Rather than thread the offset through, I asserted the invariant where the frame is consumed: the relay format is defined from byte 0 (MafiaNet writes the id there and both its readers use fixed offsets), so a timestamp-prefixed relay frame isn't parseable at any offset. Passing one in would need a MafiaNet format change, not a Framework offset change. One check, and the layers now visibly agree.

Documentation drift (several Major/Minor) — all fixed. These were the most useful findings in the set. The spec and plan predate the fetched dependency, the format-version byte, the removal of the server-side recipient cap, and the RNNoise and loopback findings. That matters more than usual because a separate Windows session will execute the plan's unfinished half verbatim, so stale instructions there become real bugs.

  • Spec: dependency model rewritten (fetched, pinned, and why the boundary belongs in MafiaNet), relay layout corrected to the 14-byte versioned header with real offsets, overhead figure corrected, testing section's loopback claim replaced.
  • Plan: added a status block marking Tasks 1–6/8 historical and Tasks 7/9/10 as the remaining Windows-only work; corrected the ComputeRecipients example to drop the truncation; corrected the OnVoiceFrame example to the shipped validation order; fixed the client-init snippet to call SetEncoderBitrate(kBitrate) and not SetNoiseFilter(true); replaced the Task 9 loopback procedure, which could only ever have produced silence since relay mode drops self-origin frames; added the text language marker.

Two partial_sort mentions remain on purpose — they're "this was removed, do not reintroduce it, here's why" notes, not stale code.

182 tests / 15 modules / 0 failed, verified from a clean build tree rather than a warm one.

@Segfaultd
Segfaultd force-pushed the feature/voice-chat-fetched branch from ce31da5 to 22468e0 Compare July 29, 2026 15:45
Windows link failure: LNK2038 on _ITERATOR_DEBUG_LEVEL and RuntimeLibrary,
with MafiaNetStatic.lib built MDd_DynamicDebug against Framework objects
built MD_DynamicRelease.

FrameworkSetup forces CMAKE_MSVC_RUNTIME_LIBRARY to MultiThreadedDLL --
the release CRT, even in Debug builds, which CI uses. MafiaNet, Opus and
RNNoise are each their own CMake project with their own project() call, so
they do not pick that override up and default to MultiThreadedDebugDLL
under a Debug configuration.

This did not arise while MafiaNet was vendored: that copy was a bare
add_library() with no project() of its own, so it simply inherited the
parent scope. Fetching the real project is what surfaced it.

Sets the property per target rather than relying on variable inheritance
across a subproject boundary, so it does not depend on how each dependency
establishes its scope.
The previous attempt read CMAKE_MSVC_RUNTIME_LIBRARY across the subproject
boundary and had no effect on Windows. An empty value means "use the
default", which is the MDd this is meant to avoid, so the value is now
spelled out to match cmake/FrameworkSetup.cmake instead of being inherited.

Adds temporary configure-time diagnostics reporting the inherited variable,
CMAKE_CXX_FLAGS_DEBUG, and the property actually applied to each fetched
target. Windows is the only platform that reproduces this and it cannot be
tested locally, so the log is the only way to confirm the mechanism rather
than guess at it again. To be removed once green.
CI diagnostics disproved the earlier theories: the parent
CMAKE_MSVC_RUNTIME_LIBRARY inherits correctly as MultiThreadedDLL, and the
MSVC_RUNTIME_LIBRARY property is applied to MafiaNetStatic, opus and
rnnoise -- yet their objects still came out MDd_DynamicDebug. The property
is therefore set but not honoured, meaning the debug CRT enters through the
flags inside those subprojects' own scopes.

Appends /MD as a compile option, which lands after CMAKE_<LANG>_FLAGS. For
MSVC the last runtime switch wins, so this overrides the flag regardless of
where it came from.

Keeps the diagnostics for one more run, now including CMAKE_CXX_FLAGS_DEBUG
read from MafiaNet's own directory scope -- the one value the previous round
could not observe, and the one that should name the source. All diagnostics
come out once Windows is green.
Root cause of the Windows link failure, found by reading MafiaNet's build
rather than guessing at flags: Source/CMakeLists.txt does
target_compile_definitions(... $<$<CONFIG:Debug>:_DEBUG>).

Defining _DEBUG makes MSVC select debug CRT semantics in the object itself
-- _ITERATOR_DEBUG_LEVEL becomes 2 and the object records MDd_DynamicDebug.
Framework uses the RELEASE CRT even in Debug builds, so its objects are
MD_DynamicRelease with _ITERATOR_DEBUG_LEVEL 0, and linking the two fails
with LNK2038.

No flag or MSVC_RUNTIME_LIBRARY property can override this, because the
definition is what drives it. CI diagnostics showed the property applied
correctly to every fetched target while the objects still came out MDd,
which is what pointed at the definition.

The fix drops _DEBUG on the fetched targets. This is Framework adapting to
its own unusual CRT choice, not a defect upstream: MafiaNet is right to
define _DEBUG when built normally. Nothing analogous was needed while
MafiaNet was vendored, because that copy was a bare add_library() with no
compile definitions of its own.

Removes the temporary diagnostics; they have served their purpose.
The comment above major_paths says a directory entry covers everything
beneath it and a file entry matches exactly, but the test was a bare
prefix: "$file" == "$major"*. That also fires on siblings sharing the
same leading characters -- cmake/MafiaNetPin.cmake.bak would trigger a
major bump, as would a future networking/replication2.

Matches exactly, or on a genuine path boundary. Applied to minor_paths too,
which had the same test.
@Segfaultd
Segfaultd merged commit d8592f7 into develop Jul 30, 2026
5 checks passed
@Segfaultd
Segfaultd deleted the feature/voice-chat-fetched branch July 30, 2026 07:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants