Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
db73fad
implemented first steps of dynamic load balancing and connection reco…
servusrene May 20, 2025
2836060
fix: isolate good connections from poor connection bandwidth impact
servusrene Jun 8, 2025
f278625
removed debug message "ACK throttled"
servusrene Jun 8, 2025
f2a1c1b
improved message throughput
datagutt Jun 9, 2025
4f707e3
add missing debug arg
datagutt Jun 9, 2025
a9dcb37
update copyright headers
datagutt Jun 9, 2025
a935700
feat: implement adaptive bandwidth expectation based on connection si…
servusrene Jun 19, 2025
175660d
feat: Add granular weight levels for smoother load distribution
servusrene Jun 19, 2025
6075cb6
Update receiver.cpp
datagutt Jul 7, 2025
cd61c27
refactor: Optimize ACK throttling with unified weight calculation
servusrene Jun 20, 2025
b609d0b
added debug message for receiving NAKs
datagutt Jun 22, 2025
3519570
code beautify
servusrene Jun 21, 2025
7e4424c
added debug message for throttle calculation
datagutt Jun 22, 2025
20ad0b7
replaced --verbose with --log_level
datagutt Jun 22, 2025
b47d698
added current_time as param to adjust_connection_weights()
servusrene Jun 21, 2025
50b105d
fix: Use per-connection bandwidth evaluation instead of global mode
servusrene Jun 21, 2025
592e320
fix: Calculate median from good connections only (>= 50% of max)
servusrene Jun 22, 2025
2bfbf8a
feat: grace period for new connections
servusrene Jun 24, 2025
45a75a7
fix: check for connection was timeouted
servusrene Jul 8, 2025
e121af7
improved logging for usage percentage
servusrene Jul 8, 2025
1363f96
decreased grace period time
servusrene Jul 8, 2025
f7c1d05
fix: add missing header fcntl.h
sm9cc Jul 25, 2025
9120c9b
feat: increase buffer sizes
datagutt Aug 17, 2025
4c86e16
Update
anttiai Sep 8, 2025
6193205
format
anttiai Sep 9, 2025
84f00d3
Merge pull request #4 from anttiai/next
datagutt Sep 16, 2025
75ae4f4
updated README.md
servusrene Oct 23, 2025
666be83
decreased conn and group timeouts to the same value as srtla_sender
servusrene Oct 23, 2025
a227448
Add non-blocking wait_group_by_id_yield helper
anttiai Oct 22, 2025
ddbd56e
POC nak dedup
anttiai Nov 11, 2025
632cff3
Increase log level
anttiai Nov 11, 2025
9819607
Merge pull request #5 from irlserver/nexter
datagutt Dec 3, 2025
066d91e
refactor: restructure codebase into modular components
datagutt Dec 4, 2025
c351db4
feat: add extended KEEPALIVE with connection telemetry
datagutt Dec 4, 2025
11fb23d
feat: Implement keepalive-based quality assessment improvements
datagutt Dec 4, 2025
1f90a8f
chore: codereview comments
datagutt Dec 4, 2025
97abb7d
feat: Enhance quality evaluation during packet processing and remove …
datagutt Dec 4, 2025
243026f
feat: Improve connection handling and error reporting in various modules
datagutt Dec 4, 2025
c21f66e
chore: Add .clang-format configuration for consistent C++ code styling
datagutt Dec 4, 2025
041ec1e
chore: remove old code
datagutt Dec 4, 2025
8a04948
feat: Update CMakeLists.txt to fetch and build spdlog statically
datagutt Dec 4, 2025
cc0a1cc
feat: Add last load balance evaluation timestamp and improve load bal…
datagutt Dec 4, 2025
b4be57f
feat: Enhance keepalive logging with improved bitrate calculation and…
datagutt Dec 9, 2025
9487a70
feat: Implement real-time comparison between Connection Info and Lega…
datagutt Dec 10, 2025
823ec93
chore: Remove outdated implementation documentation for keepalive-bas…
datagutt Dec 10, 2025
26ad823
feat: Update keepalive connection info to use milliseconds for RTT me…
datagutt Jan 1, 2026
fe8e0e9
chore: update docs with new RTT keepalive format
datagutt Jan 1, 2026
75dadb5
feat: Enhance quality evaluation algorithm with detailed sender telem…
datagutt Jan 2, 2026
b74662b
feat: improve extended keepalive support and adjust bandwidth penalty…
datagutt Jan 6, 2026
46b4676
feat: change log level to trace for keepalive packets without sender …
datagutt Jan 6, 2026
a6024b9
Update CMakeLists.txt
datagutt Jan 11, 2026
7112d9a
feat: add error logging for failed socket info file opening
datagutt Jan 12, 2026
df940a1
fix: correct buffer reference in recv call for SRT socket data handling
datagutt Jan 12, 2026
1595d17
feat: add safety check for group count to prevent iterator invalidati…
datagutt Jan 12, 2026
1bb27f3
fix: correct pointer casting and improve thread yielding in wait_grou…
datagutt Jan 12, 2026
787342e
fix: improve error handling and address family checks in network util…
datagutt Jan 12, 2026
10e7bce
fix: add defensive checks for receive index in register_packet to pre…
datagutt Jan 12, 2026
fc3baa6
feat: enhance QualityMetrics structure to include packets_diff for im…
datagutt Jan 12, 2026
b31e994
Merge pull request #8 from irlserver/feat/keepalive-conn-info
datagutt Jan 12, 2026
aa56156
Merge remote-tracking branch 'irlserver/main'
andrescera Jan 24, 2026
3c834c1
fix(bindings): update receiver bindings for new log_level CLI option
andrescera Jan 24, 2026
d8078ff
fix: add missing cstddef include for size_t in nak_dedup.cpp
andrescera Jan 24, 2026
6020f14
refactor(ci): use native ARM64 runners instead of Docker+QEMU
andrescera Jan 24, 2026
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
116 changes: 116 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
RawStringFormats:
- Language: TextProto
Delimiters:
- 'pb'
- 'proto'
BasedOnStyle: google
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: c++17
TabWidth: 8
UseTab: Never
...
48 changes: 21 additions & 27 deletions .github/workflows/build-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,49 +9,43 @@ on:
jobs:
build:
name: Build ${{ matrix.arch }}
runs-on: ubuntu-latest
runs-on: ${{ matrix.runner }}
strategy:
matrix:
arch: [arm64, amd64]
include:
- arch: amd64
runner: ubuntu-latest
- arch: arm64
runner: ubuntu-24.04-arm
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake git

- name: Build srtla for ${{ matrix.arch }}
- name: Build srtla
run: |
PLATFORM="linux/${{ matrix.arch }}"
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)

docker buildx build \
--platform "$PLATFORM" \
--load \
-t srtla-builder:${{ matrix.arch }} \
-f - . <<'DOCKERFILE'
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
git \
libspdlog-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
COPY . .
RUN cmake -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build -j$(nproc)
DOCKERFILE
- name: Run tests
run: |
cd build
ctest --output-on-failure

- name: Verify binaries were built
- name: Verify binaries
run: |
docker run --rm srtla-builder:${{ matrix.arch }} ls -la /build/build/srtla_send /build/build/srtla_rec
ls -la build/srtla_send build/srtla_rec
file build/srtla_send build/srtla_rec

- name: Build Summary
run: |
echo "## ✅ Build Check Passed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Architecture:** ${{ matrix.arch }}" >> $GITHUB_STEP_SUMMARY
echo "**Runner:** ${{ matrix.runner }}" >> $GITHUB_STEP_SUMMARY
61 changes: 17 additions & 44 deletions .github/workflows/publish-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,57 +66,33 @@ jobs:
build-deb:
name: Build Debian Package (${{ matrix.arch }})
needs: calculate-version
runs-on: ubuntu-latest
runs-on: ${{ matrix.runner }}
strategy:
matrix:
arch: [arm64, amd64]
include:
- arch: amd64
runner: ubuntu-latest
- arch: arm64
runner: ubuntu-24.04-arm
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up QEMU
if: matrix.arch == 'arm64'
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build in Docker (${{ matrix.arch }})
- name: Install build dependencies
run: |
mkdir -p build-output

cat > Dockerfile.build << 'DOCKERFILE'
FROM debian:bookworm

RUN apt-get update && apt-get install -y \
build-essential \
cmake \
pkg-config \
libspdlog-dev \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /src
COPY . .

RUN cmake -B build -DCMAKE_BUILD_TYPE=Release -DSRTLA_BUILD_TESTS=OFF \
-DCMAKE_INSTALL_PREFIX=/usr
RUN cmake --build build -j$(nproc)
RUN DESTDIR=/output cmake --install build
DOCKERFILE
sudo apt-get update
sudo apt-get install -y build-essential cmake pkg-config ruby-dev

docker buildx build \
--platform linux/${{ matrix.arch }} \
--output type=local,dest=build-output \
-f Dockerfile.build \
.
- name: Build srtla
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release -DSRTLA_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build -j$(nproc)
DESTDIR=$PWD/install cmake --install build

- name: Install FPM
run: |
sudo apt-get update
sudo apt-get install -y ruby-dev gcc g++
sudo gem install fpm
run: sudo gem install fpm

- name: Create packages
env:
Expand All @@ -134,14 +110,12 @@ jobs:
--maintainer "CERALIVE <contact@ceralive.com>" \
--url "https://github.com/CERALIVE/srtla" \
--license "AGPL-3.0" \
--depends "srt" \
--depends "libspdlog1" \
-p "dist/srtla_${VERSION}_${ARCH}.deb" \
build-output/usr/=/usr/
install/usr/=/usr/

# Create .tar.gz archive
mkdir -p tarball/srtla-${VERSION}
cp -r build-output/usr/* tarball/srtla-${VERSION}/
cp -r install/usr/* tarball/srtla-${VERSION}/
cd tarball
tar -czvf ../dist/srtla_${VERSION}_${ARCH}.tar.gz srtla-${VERSION}
cd ..
Expand Down Expand Up @@ -247,7 +221,6 @@ jobs:
```
srt
└── srtla (this package)
├── Depends: srt, libspdlog1
└── Used by: ceracoder → ceralive-device
```
Expand Down
1 change: 1 addition & 0 deletions .serena/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/cache
84 changes: 84 additions & 0 deletions .serena/project.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# list of languages for which language servers are started; choose from:
# al bash clojure cpp csharp csharp_omnisharp
# dart elixir elm erlang fortran go
# haskell java julia kotlin lua markdown
# nix perl php python python_jedi r
# rego ruby ruby_solargraph rust scala swift
# terraform typescript typescript_vts yaml zig
# Note:
# - For C, use cpp
# - For JavaScript, use typescript
# Special requirements:
# - csharp: Requires the presence of a .sln file in the project folder.
# When using multiple languages, the first language server that supports a given file will be used for that file.
# The first language is the default language and the respective language server will be used as a fallback.
# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
languages:
- cpp

# the encoding used by text files in the project
# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
encoding: "utf-8"

# whether to use the project's gitignore file to ignore files
# Added on 2025-04-07
ignore_all_files_in_gitignore: true

# list of additional paths to ignore
# same syntax as gitignore, so you can use * and **
# Was previously called `ignored_dirs`, please update your config if you are using that.
# Added (renamed) on 2025-04-07
ignored_paths: []

# whether the project is in read-only mode
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
# Added on 2025-04-18
read_only: false

# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
# Below is the complete list of tools for convenience.
# To make sure you have the latest list of tools, and to view their descriptions,
# execute `uv run scripts/print_tool_overview.py`.
#
# * `activate_project`: Activates a project by name.
# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
# * `create_text_file`: Creates/overwrites a file in the project directory.
# * `delete_lines`: Deletes a range of lines within a file.
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
# * `execute_shell_command`: Executes a shell command.
# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
# * `initial_instructions`: Gets the initial instructions for the current project.
# Should only be used in settings where the system prompt cannot be set,
# e.g. in clients you have no control over, like Claude Desktop.
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
# * `insert_at_line`: Inserts content at a given line in a file.
# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
# * `list_memories`: Lists memories in Serena's project-specific memory store.
# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
# * `read_file`: Reads a file within the project directory.
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
# * `remove_project`: Removes a project from the Serena configuration.
# * `replace_lines`: Replaces a range of lines within a file with new content.
# * `replace_symbol_body`: Replaces the full definition of a symbol.
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
# * `search_for_pattern`: Performs a search for a pattern in the project.
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
# * `switch_modes`: Activates modes by providing a list of their names
# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
excluded_tools: []

# initial prompt for the project. It will always be given to the LLM upon activating the project
# (contrary to the memories, which are loaded on demand).
initial_prompt: ""

project_name: "srtla"
included_optional_tools: []
Loading