detector48-64

This commit is contained in:
Pawel Krystian 2026-02-23 17:40:08 +01:00
parent efee87086b
commit d0caa8d1e8
701 changed files with 24209 additions and 3029 deletions

0
.gitignore vendored Executable file → Normal file
View File

0
.gitmodules vendored Executable file → Normal file
View File

42
CMakeLists.txt Executable file → Normal file
View File

@ -517,7 +517,6 @@ if (CONFIG_STREAMRELAY MATCHES "Y" AND NOT MODULE_STREAMRELAY EQUAL 1)
set (LIBDVBCSA_LIBRARY "${LIBDVBCSADIR}/libdvbcsa.so") set (LIBDVBCSA_LIBRARY "${LIBDVBCSADIR}/libdvbcsa.so")
else (LIBDVBCSADIR) else (LIBDVBCSADIR)
check_include_file ("dvbcsa/dvbcsa.h" FOUND_LIBDVBCSA) check_include_file ("dvbcsa/dvbcsa.h" FOUND_LIBDVBCSA)
set(HAVE_LIBDVBCSA ${FOUND_LIBDVBCSA})
find_library (LIBADVBCSA_LIBRARY NAMES libdvbcsa.a) find_library (LIBADVBCSA_LIBRARY NAMES libdvbcsa.a)
find_library (LIBDVBCSA_LIBRARY NAMES dvbcsa) find_library (LIBDVBCSA_LIBRARY NAMES dvbcsa)
endif (LIBDVBCSADIR) endif (LIBDVBCSADIR)
@ -547,22 +546,6 @@ endif (CONFIG_STREAMRELAY MATCHES "Y" AND NOT MODULE_STREAMRELAY EQUAL 1)
# Manage config.h based on command line parameters # Manage config.h based on command line parameters
# Manipulate config file based on given parameters and read unset parameters # Manipulate config file based on given parameters and read unset parameters
execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --enabled WITH_EMU OUTPUT_VARIABLE CONFIG_WITH_EMU OUTPUT_STRIP_TRAILING_WHITESPACE)
if (CONFIG_WITH_EMU MATCHES "Y" AND NOT WITH_EMU EQUAL 1)
add_definitions ("-DWITH_EMU")
set (WITH_EMU "1")
message (STATUS " EMU is added by config compiling with EMU")
endif (CONFIG_WITH_EMU MATCHES "Y" AND NOT WITH_EMU EQUAL 1)
if (WITH_EMU)
execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --enabled WITH_SOFTCAM OUTPUT_VARIABLE CONFIG_WITH_SOFTCAM OUTPUT_STRIP_TRAILING_WHITESPACE)
if (CONFIG_WITH_SOFTCAM MATCHES "Y" AND NOT WITH_SOFTCAM EQUAL 1)
add_definitions ("-DWITH_SOFTCAM")
set (WITH_SOFTCAM "1")
message (STATUS " SOFTCAM is added by config linking SoftCam.Key")
endif (CONFIG_WITH_SOFTCAM MATCHES "Y" AND NOT WITH_SOFTCAM EQUAL 1)
endif (WITH_EMU)
execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --show-valid OUTPUT_VARIABLE config_vars_string OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process (COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config.sh --show-valid OUTPUT_VARIABLE config_vars_string OUTPUT_STRIP_TRAILING_WHITESPACE)
string(REGEX MATCHALL "[A-Z0-9_]+" config_vars ${config_vars_string}) string(REGEX MATCHALL "[A-Z0-9_]+" config_vars ${config_vars_string})
@ -905,24 +888,6 @@ endif( HAVE_LIBRT OR HAVE_LIBRT_STATIC)
#-------------------------------------------------------------------------------- #--------------------------------------------------------------------------------
if (NOT OSCamOperatingSystem MATCHES "Mac OS X")
if (NOT DEFINED ENV{ANDROID_NDK})
if (NOT DEFINED ENV{ANDROID_STANDALONE_TOOLCHAIN})
if (WITH_SOFTCAM)
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/SoftCam.Key)
execute_process (COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/SoftCam.Key ${CMAKE_CURRENT_BINARY_DIR}/SoftCam.Key)
else (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/SoftCam.Key)
execute_process (COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/SoftCam.Key)
endif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/SoftCam.Key)
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--format=binary -Wl,SoftCam.Key -Wl,--format=default")
if (NOT OSCamOperatingSystem MATCHES "Windows/Cygwin")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,noexecstack")
endif (NOT OSCamOperatingSystem MATCHES "Windows/Cygwin")
endif (WITH_SOFTCAM)
endif (NOT DEFINED ENV{ANDROID_STANDALONE_TOOLCHAIN})
endif (NOT DEFINED ENV{ANDROID_NDK})
endif (NOT OSCamOperatingSystem MATCHES "Mac OS X")
#----------------------- installation ----------------------------- #----------------------- installation -----------------------------
file (GLOB config_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/oscam.*") file (GLOB config_files "${CMAKE_CURRENT_SOURCE_DIR}/Distribution/oscam.*")
@ -1035,11 +1000,4 @@ if (HAVE_LIBDVBCSA)
endif(STATICLIBDVBCSA AND NOT LIBDVBCSADIR) endif(STATICLIBDVBCSA AND NOT LIBDVBCSADIR)
endif (HAVE_LIBDVBCSA) endif (HAVE_LIBDVBCSA)
if (WITH_EMU)
message (STATUS " Compile with EMU support")
if (WITH_SOFTCAM)
message (STATUS " SoftCam.Key will be linked as well")
endif (WITH_SOFTCAM)
endif (WITH_EMU)
message (STATUS "") message (STATUS "")

0
CODING.RULES.txt Executable file → Normal file
View File

0
COPYING Executable file → Normal file
View File

0
Distribution/doc/example/oscam.ac Executable file → Normal file
View File

0
Distribution/doc/example/oscam.cacheex Executable file → Normal file
View File

0
Distribution/doc/example/oscam.cert Executable file → Normal file
View File

0
Distribution/doc/example/oscam.conf Executable file → Normal file
View File

0
Distribution/doc/example/oscam.dvbapi Executable file → Normal file
View File

0
Distribution/doc/example/oscam.guess Executable file → Normal file
View File

0
Distribution/doc/example/oscam.ird Executable file → Normal file
View File

0
Distribution/doc/example/oscam.provid Executable file → Normal file
View File

0
Distribution/doc/example/oscam.server Executable file → Normal file
View File

0
Distribution/doc/example/oscam.services Executable file → Normal file
View File

0
Distribution/doc/example/oscam.srvid Executable file → Normal file
View File

0
Distribution/doc/example/oscam.tiers Executable file → Normal file
View File

0
Distribution/doc/example/oscam.user Executable file → Normal file
View File

0
Distribution/doc/example/oscam.whitelist Executable file → Normal file
View File

0
Distribution/doc/html/list_smargo.1.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.1.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.ac.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.cacheex.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.cert.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.conf.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.dvbapi.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.guess.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.ird.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.provid.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.ratelimit.5.html Executable file → Normal file
View File

7
Distribution/doc/html/oscam.server.5.html Executable file → Normal file
View File

@ -840,13 +840,6 @@ set reader's CCcam reshare hop, default:0
<P> <P>
<B>cccwantemu</B> = <B>0</B>|<B>1</B>
<DL COMPACT><DT><DD>
1 = request to provide emu from CCCam server, too, default:0
</DL>
<P>
<B>ccckeepalive</B> = <B>0</B>|<B>1</B> <B>ccckeepalive</B> = <B>0</B>|<B>1</B>
<DL COMPACT><DT><DD> <DL COMPACT><DT><DD>
1 = send keepalive messages to keep connection to remote CCCam server up, default:0 1 = send keepalive messages to keep connection to remote CCCam server up, default:0

0
Distribution/doc/html/oscam.services.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.srvid.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.srvid2.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.tiers.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.user.5.html Executable file → Normal file
View File

0
Distribution/doc/html/oscam.whitelist.5.html Executable file → Normal file
View File

0
Distribution/doc/man/list_smargo.1 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.1 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.ac.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.cacheex.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.cert.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.conf.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.dvbapi.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.guess.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.ird.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.provid.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.ratelimit.5 Executable file → Normal file
View File

5
Distribution/doc/man/oscam.server.5 Executable file → Normal file
View File

@ -649,11 +649,6 @@ set reader's CCcam reshare hop, default:0
\fBx\fP = resharing for direct peer and share level x \fBx\fP = resharing for direct peer and share level x
.RE .RE
.PP .PP
\fBcccwantemu\fP = \fB0\fP|\fB1\fP
.RS 3n
1 = request to provide emu from CCCam server, too, default:0
.RE
.PP
\fBccckeepalive\fP = \fB0\fP|\fB1\fP \fBccckeepalive\fP = \fB0\fP|\fB1\fP
.RS 3n .RS 3n
1 = send keepalive messages to keep connection to remote CCCam server up, default:0 1 = send keepalive messages to keep connection to remote CCCam server up, default:0

0
Distribution/doc/man/oscam.services.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.srvid.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.srvid2.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.tiers.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.user.5 Executable file → Normal file
View File

0
Distribution/doc/man/oscam.whitelist.5 Executable file → Normal file
View File

0
Distribution/doc/txt/list_smargo.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.ac.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.cacheex.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.cert.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.conf.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.dvbapi.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.guess.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.ird.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.provid.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.ratelimit.txt Executable file → Normal file
View File

3
Distribution/doc/txt/oscam.server.txt Executable file → Normal file
View File

@ -509,9 +509,6 @@ DESCRIPTIONS
0 = resharing for direct peer only 0 = resharing for direct peer only
x = resharing for direct peer and share level x x = resharing for direct peer and share level x
cccwantemu = 0|1
1 = request to provide emu from CCCam server, too, default:0
ccckeepalive = 0|1 ccckeepalive = 0|1
1 = send keepalive messages to keep connection to remote CCCam server up, default:0 1 = send keepalive messages to keep connection to remote CCCam server up, default:0

0
Distribution/doc/txt/oscam.services.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.srvid.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.srvid2.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.tiers.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.user.txt Executable file → Normal file
View File

0
Distribution/doc/txt/oscam.whitelist.txt Executable file → Normal file
View File

0
Distribution/monitor/mpcsmon-src-0.6.tar.bz2 Executable file → Normal file
View File

0
Distribution/monitor/mpcsmon.sh Executable file → Normal file
View File

32
Makefile Executable file → Normal file
View File

@ -32,9 +32,6 @@ ifeq "$(shell ./config.sh --enabled WITH_SSL)" "Y"
override USE_SSL=1 override USE_SSL=1
override USE_LIBCRYPTO=1 override USE_LIBCRYPTO=1
endif endif
ifeq "$(shell ./config.sh --enabled WITH_EMU)" "Y"
override USE_LIBCRYPTO=1
endif
ifdef USE_SSL ifdef USE_SSL
override USE_LIBCRYPTO=1 override USE_LIBCRYPTO=1
endif endif
@ -374,32 +371,6 @@ SRC-$(CONFIG_CS_CACHEEX) += module-cccam-cacheex.c
SRC-$(CONFIG_MODULE_CCCAM) += module-cccam.c SRC-$(CONFIG_MODULE_CCCAM) += module-cccam.c
SRC-$(CONFIG_MODULE_CCCSHARE) += module-cccshare.c SRC-$(CONFIG_MODULE_CCCSHARE) += module-cccshare.c
SRC-$(CONFIG_MODULE_CONSTCW) += module-constcw.c SRC-$(CONFIG_MODULE_CONSTCW) += module-constcw.c
SRC-$(CONFIG_WITH_EMU) += module-emulator.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-osemu.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-biss.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-cryptoworks.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-director.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-irdeto.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-nagravision.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-omnicrypt.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-powervu.c
SRC-$(CONFIG_WITH_EMU) += module-emulator-viaccess.c
ifeq "$(CONFIG_WITH_EMU)" "y"
ifeq "$(CONFIG_WITH_SOFTCAM)" "y"
UNAME := $(shell uname -s)
ifneq ($(UNAME),Darwin)
ifndef ANDROID_NDK
ifndef ANDROID_STANDALONE_TOOLCHAIN
TOUCH_SK := $(shell touch SoftCam.Key)
override LDFLAGS += -Wl,--format=binary -Wl,SoftCam.Key -Wl,--format=default
ifneq ($(uname_S),Cygwin)
override LDFLAGS += -Wl,-z,noexecstack
endif
endif
endif
endif
endif
endif
SRC-$(CONFIG_CS_CACHEEX) += module-csp.c SRC-$(CONFIG_CS_CACHEEX) += module-csp.c
SRC-$(CONFIG_CW_CYCLE_CHECK) += module-cw-cycle-check.c SRC-$(CONFIG_CW_CYCLE_CHECK) += module-cw-cycle-check.c
SRC-$(CONFIG_WITH_AZBOX) += module-dvbapi-azbox.c SRC-$(CONFIG_WITH_AZBOX) += module-dvbapi-azbox.c
@ -960,3 +931,6 @@ debug: all
-include Makefile.extra -include Makefile.extra
-include Makefile.local -include Makefile.local
EXTRA_LIBS += -lm
LIBS += $(EXTRA_LIBS)

0
Makefile.extra Executable file → Normal file
View File

0
README.build Executable file → Normal file
View File

2
README.config Executable file → Normal file
View File

@ -81,7 +81,7 @@ Examples:
./config.sh --create-cert ecdsa prime256v1 ca 'My OSCam Distribution' ./config.sh --create-cert ecdsa prime256v1 ca 'My OSCam Distribution'
Available options: Available options:
addons: WEBIF WEBIF_LIVELOG WEBIF_JQUERY WITH_COMPRESS_WEBIF WITH_SSL HAVE_DVBAPI WITH_EXTENDED_CW WITH_NEUTRINO READ_SDT_CHARSETS CS_ANTICASC WITH_DEBUG MODULE_MONITOR WITH_LB CS_CACHEEX CS_CACHEEX_AIO CW_CYCLE_CHECK LCDSUPPORT LEDSUPPORT CLOCKFIX IPV6SUPPORT WITH_ARM_NEON WITH_SIGNING WITH_EMU WITH_SOFTCAM addons: WEBIF WEBIF_LIVELOG WEBIF_JQUERY WITH_COMPRESS_WEBIF WITH_SSL HAVE_DVBAPI WITH_EXTENDED_CW WITH_NEUTRINO READ_SDT_CHARSETS CS_ANTICASC WITH_DEBUG MODULE_MONITOR WITH_LB CS_CACHEEX CS_CACHEEX_AIO CW_CYCLE_CHECK LCDSUPPORT LEDSUPPORT CLOCKFIX IPV6SUPPORT WITH_ARM_NEON WITH_SIGNING
protocols: MODULE_CAMD33 MODULE_CAMD35 MODULE_CAMD35_TCP MODULE_NEWCAMD MODULE_CCCAM MODULE_CCCSHARE MODULE_GBOX MODULE_RADEGAST MODULE_SCAM MODULE_SERIAL MODULE_CONSTCW MODULE_PANDORA MODULE_GHTTP MODULE_STREAMRELAY protocols: MODULE_CAMD33 MODULE_CAMD35 MODULE_CAMD35_TCP MODULE_NEWCAMD MODULE_CCCAM MODULE_CCCSHARE MODULE_GBOX MODULE_RADEGAST MODULE_SCAM MODULE_SERIAL MODULE_CONSTCW MODULE_PANDORA MODULE_GHTTP MODULE_STREAMRELAY
readers: READER_NAGRA READER_NAGRA_MERLIN READER_IRDETO READER_CONAX READER_CRYPTOWORKS READER_SECA READER_VIACCESS READER_VIDEOGUARD READER_DRE READER_TONGFANG READER_BULCRYPT READER_GRIFFIN READER_DGCRYPT readers: READER_NAGRA READER_NAGRA_MERLIN READER_IRDETO READER_CONAX READER_CRYPTOWORKS READER_SECA READER_VIACCESS READER_VIDEOGUARD READER_DRE READER_TONGFANG READER_BULCRYPT READER_GRIFFIN READER_DGCRYPT
card_readers: CARDREADER_PHOENIX CARDREADER_INTERNAL CARDREADER_SC8IN1 CARDREADER_MP35 CARDREADER_SMARGO CARDREADER_DB2COM CARDREADER_STAPI CARDREADER_STAPI5 CARDREADER_STINGER CARDREADER_DRECAS card_readers: CARDREADER_PHOENIX CARDREADER_INTERNAL CARDREADER_SC8IN1 CARDREADER_MP35 CARDREADER_SMARGO CARDREADER_DB2COM CARDREADER_STAPI CARDREADER_STAPI5 CARDREADER_STINGER CARDREADER_DRECAS

0
README.dvbapi_protocol Executable file → Normal file
View File

221
README.md Executable file → Normal file
View File

@ -1,188 +1,81 @@
# OSCam with AI Fake DCW Detector Test # OSCam: Open Source Conditional Access Module
![AI Fake DCW Detector](images/image1.jpg) [![GitLab Last Commit](https://img.shields.io/gitlab/last-commit/11?gitlab_url=https%3A%2F%2Fgit.streamboard.tv&style=for-the-badge)](https://git.streamboard.tv/common/oscam/-/commits/master)
[![GitLab Tag](https://img.shields.io/gitlab/v/tag/11?gitlab_url=https%3A%2F%2Fgit.streamboard.tv&style=for-the-badge)](https://git.streamboard.tv/common/oscam/-/tags)
[![GitLab License](https://img.shields.io/gitlab/license/11?gitlab_url=https%3A%2F%2Fgit.streamboard.tv&style=for-the-badge)](https://git.streamboard.tv/common/oscam/-/blob/master/COPYING)
## Overview ## Quick links
This repository contains a modified version of **OSCam** enhanced with an advanced **AI-inspired Fake DCW Detection and Voting System**. - [Releases](https://git.streamboard.tv/common/oscam/-/commits/master)
- [GitLab repository](https://git.streamboard.tv/common/oscam)
- [Wiki](https://git.streamboard.tv/common/oscam/-/wikis/home)
- [Issue tracker](https://git.streamboard.tv/common/oscam/-/issues)
- [Support forum](https://board.streamboard.tv/forum/)
The goal of this system is to improve stability and reliability when multiple Control Word (CW) sources are available, such as:
- Local readers ## Releases
- 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. For the latest changes and release history, see the
[OSCam commits](https://git.streamboard.tv/common/oscam/-/commits/master) page.
--- ## GitLab repository
# 🔍 Problem It Solves Project page:
https://git.streamboard.tv/common/oscam
In multi-reader or CacheEx environments, fake or unstable DCWs can appear. ## Building & Dependencies
Default behavior: For detailed information about building OSCam, cross-compilation for
- First CW wins different CPUs, required and optional dependencies, SSL support, hardware
- Possible glitches, freezing, or unstable decoding modules, and platform-specific or distribution-specific notes, please
refer to the OSCam wiki:
With AI Fake DCW Detector: - [Wiki Home](https://git.streamboard.tv/common/oscam/-/wikis/home)
- 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: ## License
✔ Reduced fake DCWs OSCam: Open Source CAM
✔ Increased decoding stability
✔ Better CacheEx reliability
✔ Smarter CW selection
--- Copyright (C) 2009-2026 OSCam developers
# 🧠 Core Functions OSCam is based on the Streamboard mp-cardserver 0.9d by dukat and has been
extended and worked on by many more since then.
## 1`cw_vote_add()` This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This function is called whenever a new CW is received. This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
It: You should have received a copy of the GNU General Public License along with
this program. If not, see <https://www.gnu.org/licenses/>.
- Compares the CW with existing candidates For the full text of the license, please see the
- Increases vote count if it matches [COPYING](https://git.streamboard.tv/common/oscam/-/blob/master/COPYING)
- Adds a new candidate if it is unique file in the OSCam repository.
- 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. ## Contributing
--- Contributions are welcome. If you want to help improve OSCam:
## 2`cw_vote_decide()` - Browse the existing [issues](https://git.streamboard.tv/common/oscam/-/issues)
and open a new issue if you find a bug or have a feature request.
- Fork the [GitLab repository](https://git.streamboard.tv/common/oscam),
create a topic branch, and submit a merge request.
- Check the [OSCam wiki](https://git.streamboard.tv/common/oscam/-/wikis/home)
for additional project information and guidelines.
This function determines the final CW to use. ## Help and Support
### 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.
- Man pages and configuration examples are available in the
`Distribution/doc` directory of the source tree.
- For bug reports and feature requests, please use the
[GitLab issue tracker](https://git.streamboard.tv/common/oscam/-/issues).
- For community help and general discussion (mainly German and English),
visit the [support forum](https://board.streamboard.tv/forum/).
- For configuration guides, FAQs, and detailed documentation, see the
[OSCam wiki](https://git.streamboard.tv/common/oscam/-/wikis/home).

0
caid, Normal file
View File

View File

@ -1,17 +1,15 @@
#ifndef CONFIG_H_ #ifndef CONFIG_H_
#define CONFIG_H_ #define CONFIG_H_
#define WITH_EMU 1
#define WITH_SOFTCAM 1
#define WEBIF 1 #define WEBIF 1
#define WEBIF_LIVELOG 1 #define WEBIF_LIVELOG 1
#define WEBIF_JQUERY 1 #define WEBIF_JQUERY 1
#define WEBIF_WIKI 1 //#define WEBIF_WIKI 1
//#define WITH_COMPRESS_WEBIF 1 #define WITH_COMPRESS_WEBIF 1
//#define WITH_SSL 1 //#define WITH_SSL 1
#if defined(__linux__) || defined(__CYGWIN__) #if defined(__linux__) || defined(__CYGWIN__)
#define HAVE_DVBAPI 1 //#define HAVE_DVBAPI 1
#define WITH_EXTENDED_CW 1 //#define WITH_EXTENDED_CW 1
#endif #endif
//#define WITH_NEUTRINO 1 //#define WITH_NEUTRINO 1
#define READ_SDT_CHARSETS 1 #define READ_SDT_CHARSETS 1
@ -24,46 +22,46 @@
#define CW_CYCLE_CHECK 1 #define CW_CYCLE_CHECK 1
//#define LCDSUPPORT 1 //#define LCDSUPPORT 1
//#define LEDSUPPORT 1 //#define LEDSUPPORT 1
#define IPV6SUPPORT 1 //#define IPV6SUPPORT 1
//#define WITH_ARM_NEON 1 //#define WITH_ARM_NEON 1
//#define WITH_SIGNING 1 //#define WITH_SIGNING 1
#define MODULE_MONITOR 1 //#define MODULE_MONITOR 1
#define MODULE_CAMD33 1 //#define MODULE_CAMD33 1
#define MODULE_CAMD35 1 //#define MODULE_CAMD35 1
#define MODULE_CAMD35_TCP 1 #define MODULE_CAMD35_TCP 1
#define MODULE_NEWCAMD 1 #define MODULE_NEWCAMD 1
#define MODULE_CCCAM 1 #define MODULE_CCCAM 1
#define MODULE_CCCSHARE 1 #define MODULE_CCCSHARE 1
#define MODULE_GBOX 1 //#define MODULE_GBOX 1
#define MODULE_RADEGAST 1 //#define MODULE_RADEGAST 1
//#define MODULE_SERIAL 1 //#define MODULE_SERIAL 1
#define MODULE_CONSTCW 1 //#define MODULE_CONSTCW 1
//#define MODULE_PANDORA 1 //#define MODULE_PANDORA 1
#define MODULE_GHTTP 1 //#define MODULE_GHTTP 1
//#define MODULE_SCAM 1 //#define MODULE_SCAM 1
#define MODULE_STREAMRELAY 1 //#define MODULE_STREAMRELAY 1
#define WITH_CARDREADER 1 //#define WITH_CARDREADER 1
#ifdef WITH_CARDREADER #ifdef WITH_CARDREADER
#define READER_NAGRA 1 //#define READER_NAGRA 1
#define READER_NAGRA_MERLIN 1 //#define READER_NAGRA_MERLIN 1
#define READER_IRDETO 1 //#define READER_IRDETO 1
#define READER_CONAX 1 //#define READER_CONAX 1
#define READER_CRYPTOWORKS 1 //#define READER_CRYPTOWORKS 1
#define READER_SECA 1 //#define READER_SECA 1
#define READER_VIACCESS 1 //#define READER_VIACCESS 1
#define READER_VIDEOGUARD 1 //#define READER_VIDEOGUARD 1
#define READER_DRE 1 //#define READER_DRE 1
#define READER_TONGFANG 1 //#define READER_TONGFANG 1
#define READER_BULCRYPT 1 //#define READER_BULCRYPT 1
#define READER_GRIFFIN 1 //#define READER_GRIFFIN 1
#define READER_DGCRYPT 1 //#define READER_DGCRYPT 1
#define CARDREADER_PHOENIX 1 //#define CARDREADER_PHOENIX 1
#define CARDREADER_INTERNAL 1 //#define CARDREADER_INTERNAL 1
//#define CARDREADER_MP35 1 //#define CARDREADER_MP35 1
//#define CARDREADER_SC8IN1 1 //#define CARDREADER_SC8IN1 1
//#define CARDREADER_SMARGO 1 //#define CARDREADER_SMARGO 1
@ -72,7 +70,7 @@
//#define CARDREADER_DRECAS 1 //#define CARDREADER_DRECAS 1
#ifdef WITH_PCSC #ifdef WITH_PCSC
//#define CARDREADER_PCSC 1 #define CARDREADER_PCSC 1
#endif #endif
#ifdef WITH_LIBUSB #ifdef WITH_LIBUSB

1
config.mak Normal file
View File

@ -0,0 +1 @@
EXTRA_LIBS += -lm

64
config.sh Executable file → Normal file
View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
addons="WEBIF WEBIF_LIVELOG WEBIF_JQUERY WEBIF_WIKI WITH_COMPRESS_WEBIF WITH_SSL HAVE_DVBAPI WITH_EXTENDED_CW WITH_NEUTRINO READ_SDT_CHARSETS CS_ANTICASC WITH_DEBUG MODULE_MONITOR WITH_LB CS_CACHEEX CS_CACHEEX_AIO CW_CYCLE_CHECK LCDSUPPORT LEDSUPPORT CLOCKFIX IPV6SUPPORT WITH_ARM_NEON WITH_SIGNING WITH_EMU WITH_SOFTCAM" addons="WEBIF WEBIF_LIVELOG WEBIF_JQUERY WEBIF_WIKI WITH_COMPRESS_WEBIF WITH_SSL HAVE_DVBAPI WITH_EXTENDED_CW WITH_NEUTRINO READ_SDT_CHARSETS CS_ANTICASC WITH_DEBUG MODULE_MONITOR WITH_LB CS_CACHEEX CS_CACHEEX_AIO CW_CYCLE_CHECK LCDSUPPORT LEDSUPPORT CLOCKFIX IPV6SUPPORT WITH_ARM_NEON WITH_SIGNING"
protocols="MODULE_CAMD33 MODULE_CAMD35 MODULE_CAMD35_TCP MODULE_NEWCAMD MODULE_CCCAM MODULE_CCCSHARE MODULE_GBOX MODULE_RADEGAST MODULE_SCAM MODULE_SERIAL MODULE_CONSTCW MODULE_PANDORA MODULE_GHTTP MODULE_STREAMRELAY" protocols="MODULE_CAMD33 MODULE_CAMD35 MODULE_CAMD35_TCP MODULE_NEWCAMD MODULE_CCCAM MODULE_CCCSHARE MODULE_GBOX MODULE_RADEGAST MODULE_SCAM MODULE_SERIAL MODULE_CONSTCW MODULE_PANDORA MODULE_GHTTP MODULE_STREAMRELAY"
readers="READER_NAGRA READER_NAGRA_MERLIN READER_IRDETO READER_CONAX READER_CRYPTOWORKS READER_SECA READER_VIACCESS READER_VIDEOGUARD READER_DRE READER_TONGFANG READER_BULCRYPT READER_GRIFFIN READER_DGCRYPT" readers="READER_NAGRA READER_NAGRA_MERLIN READER_IRDETO READER_CONAX READER_CRYPTOWORKS READER_SECA READER_VIACCESS READER_VIDEOGUARD READER_DRE READER_TONGFANG READER_BULCRYPT READER_GRIFFIN READER_DGCRYPT"
card_readers="CARDREADER_PHOENIX CARDREADER_INTERNAL CARDREADER_SC8IN1 CARDREADER_MP35 CARDREADER_SMARGO CARDREADER_DB2COM CARDREADER_STAPI CARDREADER_STAPI5 CARDREADER_STINGER CARDREADER_DRECAS" card_readers="CARDREADER_PHOENIX CARDREADER_INTERNAL CARDREADER_SC8IN1 CARDREADER_MP35 CARDREADER_SMARGO CARDREADER_DB2COM CARDREADER_STAPI CARDREADER_STAPI5 CARDREADER_STINGER CARDREADER_DRECAS"
@ -9,42 +9,40 @@ defconfig="
CONFIG_WEBIF=y CONFIG_WEBIF=y
CONFIG_WEBIF_LIVELOG=y CONFIG_WEBIF_LIVELOG=y
CONFIG_WEBIF_JQUERY=y CONFIG_WEBIF_JQUERY=y
CONFIG_WEBIF_WIKI=y # CONFIG_WEBIF_WIKI=n
CONFIG_WITH_COMPRESS_WEBIF=y CONFIG_WITH_COMPRESS_WEBIF=y
CONFIG_WITH_SSL=y # CONFIG_WITH_SSL=n
CONFIG_HAVE_DVBAPI=y CONFIG_HAVE_DVBAPI=y
CONFIG_WITH_EXTENDED_CW=y # CONFIG_WITH_EXTENDED_CW=n
# CONFIG_WITH_NEUTRINO=n # CONFIG_WITH_NEUTRINO=n
CONFIG_READ_SDT_CHARSETS=y CONFIG_READ_SDT_CHARSETS=y
CONFIG_CS_ANTICASC=y # CONFIG_CS_ANTICASC=n
CONFIG_WITH_DEBUG=y CONFIG_WITH_DEBUG=y
CONFIG_MODULE_MONITOR=y CONFIG_MODULE_MONITOR=y
CONFIG_WITH_LB=y CONFIG_WITH_LB=y
CONFIG_CS_CACHEEX=y # CONFIG_CS_CACHEEX=n
CONFIG_CS_CACHEEX_AIO=y # CONFIG_CS_CACHEEX_AIO=n
CONFIG_CW_CYCLE_CHECK=y # CONFIG_CW_CYCLE_CHECK=n
CONFIG_LCDSUPPORT=y # CONFIG_LCDSUPPORT=n
CONFIG_LEDSUPPORT=y # CONFIG_LEDSUPPORT=n
CONFIG_CLOCKFIX=y # CONFIG_CLOCKFIX=n
CONFIG_IPV6SUPPORT=y # CONFIG_IPV6SUPPORT=n
# CONFIG_WITH_ARM_NEON=n # CONFIG_WITH_ARM_NEON=n
CONFIG_WITH_SIGNING=n # CONFIG_WITH_SIGNING=n
CONFIG_WITH_EMU=y # CONFIG_MODULE_CAMD33=n
CONFIG_WITH_SOFTCAM=y
CONFIG_MODULE_CAMD33=n
CONFIG_MODULE_CAMD35=y CONFIG_MODULE_CAMD35=y
CONFIG_MODULE_CAMD35_TCP=y CONFIG_MODULE_CAMD35_TCP=y
CONFIG_MODULE_NEWCAMD=y CONFIG_MODULE_NEWCAMD=y
CONFIG_MODULE_CCCAM=y CONFIG_MODULE_CCCAM=y
CONFIG_MODULE_CCCSHARE=y CONFIG_MODULE_CCCSHARE=y
CONFIG_MODULE_GBOX=y CONFIG_MODULE_GBOX=y
CONFIG_MODULE_RADEGAST=y # CONFIG_MODULE_RADEGAST=n
CONFIG_MODULE_SERIAL=y # CONFIG_MODULE_SERIAL=n
CONFIG_MODULE_CONSTCW=y # CONFIG_MODULE_CONSTCW=n
CONFIG_MODULE_PANDORA=y # CONFIG_MODULE_PANDORA=n
CONFIG_MODULE_SCAM=y # CONFIG_MODULE_SCAM=n
CONFIG_MODULE_GHTTP=y # CONFIG_MODULE_GHTTP=n
CONFIG_MODULE_STREAMRELAY=y # CONFIG_MODULE_STREAMRELAY=n
CONFIG_WITH_CARDREADER=y CONFIG_WITH_CARDREADER=y
CONFIG_READER_NAGRA_COMMON=y CONFIG_READER_NAGRA_COMMON=y
CONFIG_READER_NAGRA=y CONFIG_READER_NAGRA=y
@ -333,8 +331,8 @@ get_opts() {
update_deps() { update_deps() {
# Calculate dependencies # Calculate dependencies
enabled_any $(get_opts readers) $(get_opts card_readers) WITH_EMU && enable_opt WITH_CARDREADER >/dev/null enabled_any $(get_opts readers) $(get_opts card_readers) && enable_opt WITH_CARDREADER >/dev/null
disabled_all $(get_opts readers) $(get_opts card_readers) WITH_EMU && disable_opt WITH_CARDREADER >/dev/null disabled_all $(get_opts readers) $(get_opts card_readers) && disable_opt WITH_CARDREADER >/dev/null
disabled WEBIF && disable_opt WEBIF_LIVELOG >/dev/null disabled WEBIF && disable_opt WEBIF_LIVELOG >/dev/null
disabled WEBIF && disable_opt WEBIF_JQUERY >/dev/null disabled WEBIF && disable_opt WEBIF_JQUERY >/dev/null
disabled WEBIF && disable_opt WEBIF_WIKI >/dev/null disabled WEBIF && disable_opt WEBIF_WIKI >/dev/null
@ -343,9 +341,6 @@ update_deps() {
enabled_any CARDREADER_DB2COM CARDREADER_MP35 CARDREADER_SC8IN1 CARDREADER_STINGER && enable_opt CARDREADER_PHOENIX >/dev/null enabled_any CARDREADER_DB2COM CARDREADER_MP35 CARDREADER_SC8IN1 CARDREADER_STINGER && enable_opt CARDREADER_PHOENIX >/dev/null
enabled CS_CACHEEX_AIO && enable_opt CS_CACHEEX >/dev/null enabled CS_CACHEEX_AIO && enable_opt CS_CACHEEX >/dev/null
enabled WITH_SIGNING && enable_opt WITH_SSL >/dev/null enabled WITH_SIGNING && enable_opt WITH_SSL >/dev/null
enabled WITH_EMU && enable_opt READER_VIACCESS >/dev/null
enabled WITH_EMU && enable_opt MODULE_NEWCAMD >/dev/null
disabled WITH_EMU && disable_opt WITH_SOFTCAM >/dev/null
} }
list_config() { list_config() {
@ -397,9 +392,9 @@ list_config() {
not_have_flag USE_LIBCRYPTO && echo "CONFIG_LIB_AES=y" || echo "# CONFIG_LIB_AES=n" not_have_flag USE_LIBCRYPTO && echo "CONFIG_LIB_AES=y" || echo "# CONFIG_LIB_AES=n"
enabled MODULE_CCCAM && echo "CONFIG_LIB_RC6=y" || echo "# CONFIG_LIB_RC6=n" enabled MODULE_CCCAM && echo "CONFIG_LIB_RC6=y" || echo "# CONFIG_LIB_RC6=n"
not_have_flag USE_LIBCRYPTO && enabled MODULE_CCCAM && echo "CONFIG_LIB_SHA1=y" || echo "# CONFIG_LIB_SHA1=n" not_have_flag USE_LIBCRYPTO && enabled MODULE_CCCAM && echo "CONFIG_LIB_SHA1=y" || echo "# CONFIG_LIB_SHA1=n"
enabled_any READER_DRE MODULE_SCAM READER_VIACCESS READER_NAGRA READER_NAGRA_MERLIN READER_VIDEOGUARD READER_CONAX READER_TONGFANG WITH_EMU && echo "CONFIG_LIB_DES=y" || echo "# CONFIG_LIB_DES=n" enabled_any READER_DRE MODULE_SCAM READER_VIACCESS READER_NAGRA READER_NAGRA_MERLIN READER_VIDEOGUARD READER_CONAX READER_TONGFANG && echo "CONFIG_LIB_DES=y" || echo "# CONFIG_LIB_DES=n"
enabled_any MODULE_CCCAM READER_NAGRA READER_NAGRA_MERLIN READER_SECA WITH_EMU && echo "CONFIG_LIB_IDEA=y" || echo "# CONFIG_LIB_IDEA=n" enabled_any MODULE_CCCAM READER_NAGRA READER_NAGRA_MERLIN READER_SECA && echo "CONFIG_LIB_IDEA=y" || echo "# CONFIG_LIB_IDEA=n"
not_have_flag USE_LIBCRYPTO && enabled_any READER_CONAX READER_CRYPTOWORKS READER_NAGRA READER_NAGRA_MERLIN WITH_EMU && echo "CONFIG_LIB_BIGNUM=y" || echo "# CONFIG_LIB_BIGNUM=n" not_have_flag USE_LIBCRYPTO && enabled_any READER_CONAX READER_CRYPTOWORKS READER_NAGRA READER_NAGRA_MERLIN && echo "CONFIG_LIB_BIGNUM=y" || echo "# CONFIG_LIB_BIGNUM=n"
enabled READER_NAGRA_MERLIN && echo "CONFIG_LIB_MDC2=y" || echo "# CONFIG_LIB_MDC2=n" enabled READER_NAGRA_MERLIN && echo "CONFIG_LIB_MDC2=y" || echo "# CONFIG_LIB_MDC2=n"
enabled READER_NAGRA_MERLIN && echo "CONFIG_LIB_FAST_AES=y" || echo "# CONFIG_LIB_FAST_AES=n" enabled READER_NAGRA_MERLIN && echo "CONFIG_LIB_FAST_AES=y" || echo "# CONFIG_LIB_FAST_AES=n"
enabled_any READER_NAGRA_MERLIN WITH_SIGNING && echo "CONFIG_LIB_SHA256=y" || echo "# CONFIG_LIB_SHA256=n" enabled_any READER_NAGRA_MERLIN WITH_SIGNING && echo "CONFIG_LIB_SHA256=y" || echo "# CONFIG_LIB_SHA256=n"
@ -529,8 +524,6 @@ menu_addons() {
IPV6SUPPORT "IPv6 support (experimental)" $(check_test "IPV6SUPPORT") \ IPV6SUPPORT "IPv6 support (experimental)" $(check_test "IPV6SUPPORT") \
WITH_ARM_NEON "ARM NEON (SIMD/MPE) support" $(check_test "WITH_ARM_NEON") \ WITH_ARM_NEON "ARM NEON (SIMD/MPE) support" $(check_test "WITH_ARM_NEON") \
WITH_SIGNING "Binary signing with X.509 certificate" $(check_test "WITH_SIGNING") \ WITH_SIGNING "Binary signing with X.509 certificate" $(check_test "WITH_SIGNING") \
WITH_EMU "Emulator support" $(check_test "WITH_EMU") \
WITH_SOFTCAM "Built-in SoftCam.Key" $(check_test "WITH_SOFTCAM") \
2> ${tempfile} 2> ${tempfile}
opt=${?} opt=${?}
@ -913,8 +906,7 @@ do
;; ;;
'-v'|'--oscam-version') '-v'|'--oscam-version')
version=`grep '^#define CS_VERSION' globals.h | cut -d\" -f2` version=`grep '^#define CS_VERSION' globals.h | cut -d\" -f2`
emuversion=`grep EMU_VERSION module-emulator-osemu.h | awk '{ print $3 }'` echo $version
echo $version-$emuversion
break break
;; ;;
'--submodule') '--submodule')
@ -965,7 +957,7 @@ do
break break
;; ;;
'-c'|'--oscam-commit') '-c'|'--oscam-commit')
sha=`git log --no-merges 2>/dev/null | sed -n 1p | cut -d ' ' -f2 | cut -c1-8` sha=`git log 2>/dev/null | sed -n 1p | cut -d ' ' -f2 | cut -c1-8`
echo $sha echo $sha
break break
;; ;;

0
cscrypt/CMakeLists.txt Executable file → Normal file
View File

0
cscrypt/Makefile Executable file → Normal file
View File

0
cscrypt/aes.c Executable file → Normal file
View File

0
cscrypt/aes.h Executable file → Normal file
View File

0
cscrypt/bn.h Executable file → Normal file
View File

0
cscrypt/bn_add.c Executable file → Normal file
View File

0
cscrypt/bn_asm.c Executable file → Normal file
View File

0
cscrypt/bn_ctx.c Executable file → Normal file
View File

0
cscrypt/bn_div.c Executable file → Normal file
View File

0
cscrypt/bn_exp.c Executable file → Normal file
View File

0
cscrypt/bn_lcl.h Executable file → Normal file
View File

0
cscrypt/bn_lib.c Executable file → Normal file
View File

0
cscrypt/bn_mul.c Executable file → Normal file
View File

0
cscrypt/bn_print.c Executable file → Normal file
View File

0
cscrypt/bn_shift.c Executable file → Normal file
View File

Some files were not shown because too many files have changed in this diff Show More