Latest Oscam with emu.

oscam-git11921-802

webif: add service counter
 

Attachments

oscam-git11933-802

webif: embedded wiki help system
Features
* Offline Help: All parameter descriptions are available directly in the binary
* Clickable Parameters: A click on the parameter name opens the help popup
* Draggable Popup: The popup can be freely moved (also via touch on mobile devices)
* Resizable: Size can be adjusted
* Position Remembered: The horizontal position and size are stored in the browser
* Reset Button: Reset to default position and size
* Wiki Link: The title in the popup is a link to the online wiki for more details
* Directly from OSCam Wiki: Parameters dynamically extracted from wiki pages during the build process
* Automatic Updates: Any changes to the wiki pages are automatically integrated into the binary on the next build
* LZO Compression: Wiki data is compressed like WebIF pages (~64% smaller), controlled via WITH_COMPRESS_WEBIF or USE_COMPRESS
* Smart Filtering: Only help texts for actually compiled modules are included in the binary (based on is_defined.txt)

Advantages
* Available Offline - no internet connection needed - perfect for isolated networks
* Fast - instant display without network latency
* Always Up-to-date - wiki content matches exactly the binary version
* User-friendly - help right where you need it
* Touch Support - also works on tablets and smartphones
* No Tracking - the wiki web server sees no requests from your device

Disadvantages
* Larger Binary - approx. 76 KB with LZO compression, or ~45 KB with UPX binary compression
* More RAM - wiki data is kept in memory
* Build Dependency - wiki markdown files must be present during build

The build process:
- New build option WEBIF_WIKI (default=off)
- Git submodule is automatically initialized and updated
- wiki_gen.c parses all markdown files in the wiki/ folder
- Generates pages_wiki.c and pages_wiki.h with all parameter descriptions
- Compiles everything into the final binary

Technical details
- Position Storage: Browser localStorage (wikiPopupLeft, wikiPopupWidth, wikiPopupHeight)
- API Endpoint: /wiki.json?config=conf&param=serverip
- Generation: wiki_gen.c parses the markdown files and generates pages_wiki.c
- Compression: Controlled via WITH_COMPRESS_WEBIF (same as WebIF pages). Automatically disabled when using USE_COMPRESS=1 (UPX binary compression) - UPX compresses the entire binary more efficiently, making internal LZO compression redundant.
 

Attachments

oscam-git11936-802

webif: add BOTTOM navigation link
- css.css: add BOTTOM navigation link and adjust TOP link position
- Both links positioned on the right side (right:10px)
- TOP link: bottom-right in footer
- BOTTOM link: top-right in menu area
- Arrow symbols after text for both links

- menu.html: add BOTTOM link element with class "bottom_link"
- Link anchors to #statusfooter for navigation to page footer

webif: fix BOTTOM navigation link
* define bottom_link as a html div container like top_link
 

Attachments

oscam-git11940-802

reader: add maxparallel feature to limit simultaneous services per reader
This feature allows limiting the number of services that can use a reader
simultaneously, essential for card readers with slot restrictions.

=== NEW CONFIGURATION OPTIONS ===

maxparallel (default: 0 = unlimited)
Maximum number of active services per reader. When reached, the reader
is skipped and other readers are tried (fallover).

paralleltimeout (default: 1000 ms)
Buffer added to the measured ECM interval for slot expiration.
A slot expires when no ECM is received within (measured_interval + timeout).

parallelfactor (default: 1.5)
Multiplier for pending slots to support zapping without blackscreen.
Set to 0 to disable pending slots (strict maxparallel enforcement).

=== ARCHITECTURE ===

Dual-slot system with active and pending services:

- Active slots (size: maxparallel)
Confirmed services actively receiving CWs from this reader.

- Pending slots (size: maxparallel * parallelfactor)
Temporary overflow during channel zapping. Pending services are
promoted to active when slots free up (FIFO), or dropped when
active services need the capacity.

Slot reservation timing:
Slots are reserved when a reader DELIVERS a CW, not when the request
is sent. This prevents readers from blocking capacity for services
they don't end up serving when multiple readers are queried in parallel.

=== BLOCKLIST FOR CLEAN FALLOVER ===

When a pending service is dropped, the client+service combination is
added to a per-reader blocklist. This causes:

- Subsequent ECM requests for blocked combinations to skip this reader
- Clean fallover to other readers without repeated drop cycles
- No log spam from services repeatedly going to pending and getting dropped

Blocklist lifecycle:
- Added: when service is dropped from pending
- Removed: when client zaps to a different service
- Cleared: when an active slot becomes free

=== TYPICAL USE CASE ===

- Reader 1: maxparallel=1 (card allows only 1 service)
- Receiver records Service A on Reader 1, user zaps to Service B
- Service B goes to pending slot (no blackscreen during zap)
- Service A sends ECM -> Service B dropped from pending
- Service B blocklisted on Reader 1 -> falls over to Reader 2
- User stops Service B -> block cleared, Reader 1 available again
 

Attachments

oscam-git11942-802

streamrelay: fix fallback host comparison and resource leaks
- Fix fallback host comparison using streq() instead of pointer comparison
- Fix socket leaks in connect_to_stream() on setsockopt/connect failures
- Add safety checks for glistenfd before close operations
- Fix remove_newline_chars() to also handle carriage returns
- NULL key pointers after dvbcsa_bs_key_free() to prevent double-free
- Rework stream_server() using do-while(0) pattern for cleaner error handling
- Some code formatting according to CODING.RULES.txt

webif: fix entitlements display for cccam
Separate card sorting functions from cccshare module to allow
cccam clients to view received entitlements in webif even when
MODULE_CCCSHARE is disabled.

This fixes a design issue where MODULE_CCCSHARE controlled both
share functionality (server-side) and entitlements display (client-side),
preventing pure cccam clients from seeing their entitlements.
 

Attachments

Back
Top