189 lines
4.2 KiB
Markdown
Executable File
189 lines
4.2 KiB
Markdown
Executable File
# OSCam with AI Fake DCW Detector
|
||
|
||

|
||
|
||
## Overview
|
||
|
||
This repository contains a modified version of **OSCam** enhanced with an advanced **AI-inspired Fake DCW Detection and Voting System**.
|
||
|
||
The goal of this system is to improve stability and reliability when multiple Control Word (CW) sources are available, such as:
|
||
|
||
- Local readers
|
||
- CacheEx peers
|
||
- CSP sources
|
||
- Virtual readers
|
||
|
||
Instead of accepting the first CW received, this implementation collects multiple candidates and selects the most reliable one using weighted voting logic.
|
||
|
||
---
|
||
|
||
# 🔍 Problem It Solves
|
||
|
||
In multi-reader or CacheEx environments, fake or unstable DCWs can appear.
|
||
|
||
Default behavior:
|
||
- First CW wins
|
||
- Possible glitches, freezing, or unstable decoding
|
||
|
||
With AI Fake DCW Detector:
|
||
- Multiple CWs are collected
|
||
- Sources are tracked
|
||
- Votes are counted
|
||
- Local readers can be weighted higher
|
||
- Majority or timeout logic is applied
|
||
- A reliable CW is selected
|
||
|
||
Result:
|
||
|
||
✔ Reduced fake DCWs
|
||
✔ Increased decoding stability
|
||
✔ Better CacheEx reliability
|
||
✔ Smarter CW selection
|
||
|
||
---
|
||
|
||
# 🧠 Core Functions
|
||
|
||
## 1️⃣ `cw_vote_add()`
|
||
|
||
This function is called whenever a new CW is received.
|
||
|
||
It:
|
||
|
||
- Compares the CW with existing candidates
|
||
- Increases vote count if it matches
|
||
- Adds a new candidate if it is unique
|
||
- Tracks:
|
||
- Total votes
|
||
- Local votes
|
||
- Reader source
|
||
- CW value
|
||
- Identifies whether the source is:
|
||
- Local reader
|
||
- Virtual reader
|
||
- CacheEx client
|
||
- CSP source
|
||
|
||
Each CW candidate is stored in a voting pool.
|
||
|
||
---
|
||
|
||
## 2️⃣ `cw_vote_decide()`
|
||
|
||
This function determines the final CW to use.
|
||
|
||
### Decision Process
|
||
|
||
1. Count total votes
|
||
2. Verify minimum vote requirement
|
||
3. Calculate effective score:
|
||
4. Check for majority (> 50%)
|
||
5. Apply timeout logic
|
||
6. Apply fallback strategy if necessary
|
||
|
||
If a winner is found:
|
||
|
||
- CW is copied into `er->cw`
|
||
- CacheEx hit statistics are updated
|
||
- Optional logging is performed
|
||
|
||
If no clear winner exists, the system waits for more votes unless timeout rules apply.
|
||
|
||
---
|
||
|
||
# ⚙ Configuration Options
|
||
|
||
| Parameter | Description |
|
||
|------------|------------|
|
||
| `cwvote_enabled` | Enable/disable voting system |
|
||
| `cwvote_max_candidates` | Maximum CW candidates stored |
|
||
| `cwvote_compare_len` | Number of bytes used for CW comparison |
|
||
| `cwvote_local_weight` | Weight multiplier for local votes |
|
||
| `cwvote_min_votes` | Minimum required votes before decision |
|
||
| `cwvote_timeout` | Timeout in milliseconds |
|
||
| `cwvote_fallback` | Fallback mode (1 = best candidate, 2 = first candidate) |
|
||
| `cwvote_log_enabled` | Enable detailed debug logging |
|
||
|
||
---
|
||
|
||
# 🏆 Winner Selection Logic
|
||
|
||
A CW is selected if:
|
||
|
||
- It has a strict majority (> 50%)
|
||
OR
|
||
- Timeout is reached and fallback mode allows selection
|
||
|
||
If timeout occurs and:
|
||
|
||
- `fallback = 1` → best scoring candidate is selected
|
||
- `fallback = 2` → first candidate (slot 0) is selected
|
||
|
||
---
|
||
|
||
# 📊 Intelligent Source Awareness
|
||
|
||
The system distinguishes between:
|
||
|
||
- Trusted local readers
|
||
- Virtual readers
|
||
- CacheEx clients
|
||
- CSP sources
|
||
|
||
Local readers can be weighted higher using `cwvote_local_weight`, improving reliability in hybrid environments.
|
||
|
||
---
|
||
|
||
# 📈 CacheEx Integration
|
||
|
||
If the winning CW originates from CacheEx:
|
||
|
||
- `cwcacheexhit` counters are incremented
|
||
- Client and account statistics are updated
|
||
- Global hit statistics are updated
|
||
|
||
This improves monitoring accuracy and performance analysis.
|
||
|
||
---
|
||
|
||
# 🚀 Advantages
|
||
|
||
- Detects and filters fake DCWs
|
||
- Improves stability in multi-reader setups
|
||
- Reduces glitching and freezing
|
||
- Configurable and flexible logic
|
||
- Seamlessly integrated into OSCam core
|
||
|
||
---
|
||
|
||
# 🧩 AI Concept
|
||
|
||
Although not based on machine learning, this system applies AI-style decision logic:
|
||
|
||
- Aggregates multiple inputs
|
||
- Applies weighted scoring
|
||
- Uses majority validation
|
||
- Implements adaptive timeout fallback
|
||
|
||
It behaves like deterministic intelligence for CW selection.
|
||
|
||
---
|
||
|
||
# Intended Use
|
||
|
||
Designed for:
|
||
|
||
- Emulated environments
|
||
- CacheEx-heavy setups
|
||
- Multi-reader configurations
|
||
- Advanced OSCam tuning
|
||
- High-stability streaming environments
|
||
|
||
---
|
||
|
||
# License
|
||
|
||
Based on the OSCam open-source project.
|
||
This repository includes custom modifications implementing advanced CW voting and fake DCW detection logic.
|
||
|