Merge pull request 'fix' (#5) from fix-fix into main

Reviewed-on: #5
This commit is contained in:
Damian Edkovic 2026-02-17 14:43:05 +00:00
commit d0de5e0eff
9 changed files with 221 additions and 34 deletions

View File

@ -0,0 +1,7 @@
---
description: A description of your rule
---
Masz pełny dostęp do całego projektu OSCam (CMakeLists.txt, oscam.c, katalog module/ itd.).
Zawsze myśl o całym repozytorium, nie tylko o otwartym pliku.
Jeśli pytanie dotyczy architektury, modułów, flow ECM/EMM odwołuj się do wielu plików naraz.

22
certs/certificate.crt Normal file
View File

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIBojCCAUmgAwIBAgIUN/1KihHxh5M9E16n+28l7cYu1nUwCgYIKoZIzj0EAwIw
IDEeMBwGA1UEAwwVUHJpdmF0ZSBPU0NhbSBSb290IENBMB4XDTI2MDIxNzE0MDYy
NVoXDTI3MDIxNzE0MDYyNVowJzElMCMGA1UEAwwcUHJpdmF0ZSBPU0NhbSBDQSBD
ZXJ0aWZpY2F0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFsAIMowxU1cut8p
NvwOnRdhAwBL180wbeV1NmQubKgwWBXK72jcFH2KTm9wvAsIj1OY07aYMBl6Cu3d
6R2YS1qjWjBYMB8GA1UdIwQYMBaAFCPlAdEIQT/dxXfSXK/bW178fWZcMAkGA1Ud
EwQCMAAwCwYDVR0PBAQDAgTwMB0GA1UdDgQWBBSe4yO2ilOiBvaxdeB9WQSg+Vo0
yDAKBggqhkjOPQQDAgNHADBEAiBncq6DfmxHM938lqV76vv/ob4V09EGaKzUUWGx
4BGDTQIgFgaOFmjFPIRESfcjtYXwOIgSeos/34csZkTH8jwhxIM=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIBlDCCATugAwIBAgIUZrfJgZff2Gf5RvBJvQzcKJ2q/5kwCgYIKoZIzj0EAwIw
IDEeMBwGA1UEAwwVUHJpdmF0ZSBPU0NhbSBSb290IENBMB4XDTI2MDIxNzE0MDYy
NVoXDTM2MDIxNTE0MDYyNVowIDEeMBwGA1UEAwwVUHJpdmF0ZSBPU0NhbSBSb290
IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEqHqAU+BtmdOyk7OJ71CUllI
UWzYMQ2EX4g4dSgevvIDfuB2egyFUEa9ZEmbEhNovmpUWK8AoxR6EOkdNj0N5KNT
MFEwHQYDVR0OBBYEFCPlAdEIQT/dxXfSXK/bW178fWZcMB8GA1UdIwQYMBaAFCPl
AdEIQT/dxXfSXK/bW178fWZcMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwID
RwAwRAIgJs98kTMJ2nvA4W5PyqXUvEqXOwa3DJVMyZBMyUPwN2cCICs1eTdzNwbo
KmBE30dDCvFf181IfMFoP9HkYzhHi8kh
-----END CERTIFICATE-----

5
certs/private.key Normal file
View File

@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIDVAI8GBuV8wRC7jm1CHim7DtKkB6cvV2IrxkudpKXCWoAoGCCqGSM49
AwEHoUQDQgAEWwAgyjDFTVy63yk2/A6dF2EDAEvXzTBt5XU2ZC5sqDBYFcrvaNwU
fYpOb3C8CwiPU5jTtpgwGXoK7d3pHZhLWg==
-----END EC PRIVATE KEY-----

View File

@ -0,0 +1,11 @@
-----BEGIN CERTIFICATE-----
MIIBlDCCATugAwIBAgIUZrfJgZff2Gf5RvBJvQzcKJ2q/5kwCgYIKoZIzj0EAwIw
IDEeMBwGA1UEAwwVUHJpdmF0ZSBPU0NhbSBSb290IENBMB4XDTI2MDIxNzE0MDYy
NVoXDTM2MDIxNTE0MDYyNVowIDEeMBwGA1UEAwwVUHJpdmF0ZSBPU0NhbSBSb290
IENBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEqHqAU+BtmdOyk7OJ71CUllI
UWzYMQ2EX4g4dSgevvIDfuB2egyFUEa9ZEmbEhNovmpUWK8AoxR6EOkdNj0N5KNT
MFEwHQYDVR0OBBYEFCPlAdEIQT/dxXfSXK/bW178fWZcMB8GA1UdIwQYMBaAFCPl
AdEIQT/dxXfSXK/bW178fWZcMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwID
RwAwRAIgJs98kTMJ2nvA4W5PyqXUvEqXOwa3DJVMyZBMyUPwN2cCICs1eTdzNwbo
KmBE30dDCvFf181IfMFoP9HkYzhHi8kh
-----END CERTIFICATE-----

View File

@ -0,0 +1 @@
37FD4A8A11F187933D135EA7FB6F25EDC62ED675

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUFatG5CGKmv0k8Jh
7iaEctJL73LV+sOo6xEIpvk2/E2hRANCAAQSoeoBT4G2Z07KTs4nvUJSWUhRbNgx
DYRfiDh1KB6+8gN+4HZ6DIVQRr1kSZsSE2i+alRYrwCjFHoQ6R02PQ3k
-----END PRIVATE KEY-----

60
config.h Executable file → Normal file
View File

@ -7,63 +7,63 @@
#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
//#define CLOCKFIX 1 #define CLOCKFIX 1
//#define CS_ANTICASC 1 #define CS_ANTICASC 1
#define WITH_DEBUG 1 #define WITH_DEBUG 1
#define WITH_LB 1 #define WITH_LB 1
#define CS_CACHEEX 1 #define CS_CACHEEX 1
#define CS_CACHEEX_AIO 1 #define CS_CACHEEX_AIO 1
#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

View File

@ -9,9 +9,9 @@ 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=n CONFIG_WEBIF_WIKI=y
CONFIG_WITH_COMPRESS_WEBIF=y CONFIG_WITH_COMPRESS_WEBIF=y
# CONFIG_WITH_SSL=n CONFIG_WITH_SSL=y
CONFIG_HAVE_DVBAPI=y CONFIG_HAVE_DVBAPI=y
CONFIG_WITH_EXTENDED_CW=y CONFIG_WITH_EXTENDED_CW=y
# CONFIG_WITH_NEUTRINO=n # CONFIG_WITH_NEUTRINO=n
@ -28,10 +28,10 @@ CONFIG_LEDSUPPORT=y
CONFIG_CLOCKFIX=y CONFIG_CLOCKFIX=y
CONFIG_IPV6SUPPORT=y CONFIG_IPV6SUPPORT=y
# CONFIG_WITH_ARM_NEON=n # CONFIG_WITH_ARM_NEON=n
CONFIG_WITH_SIGNING=y CONFIG_WITH_SIGNING=n
CONFIG_WITH_EMU=y CONFIG_WITH_EMU=y
CONFIG_WITH_SOFTCAM=y CONFIG_WITH_SOFTCAM=y
# CONFIG_MODULE_CAMD33=n 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

View File

@ -45,6 +45,13 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "user", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUser for remote reader (name).\n\n**Format:**\n```ini\nuser = username\n```\n\n**Example:**\n```ini\nuser = username\n```\n\n**Default:**\n```ini\nuser =\n```", .status = 0 }, { .param = "user", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nUser for remote reader (name).\n\n**Format:**\n```ini\nuser = username\n```\n\n**Example:**\n```ini\nuser = username\n```\n\n**Default:**\n```ini\nuser =\n```", .status = 0 },
{ .param = "password", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPassword for remote reader.\n\n**Format:**\n```ini\npassword = secret\n```\n\n**Example:**\n```ini\npassword = secret\n```\n\n**Default:**\n```ini\npassword =\n```", .status = 0 }, { .param = "password", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPassword for remote reader.\n\n**Format:**\n```ini\npassword = secret\n```\n\n**Example:**\n```ini\npassword = secret\n```\n\n**Default:**\n```ini\npassword =\n```", .status = 0 },
{ .param = "pincode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPincode for **Conax, Cryptoworks and Viaccess** SCs.\n\n**Example:**\n```ini\npincode = 1234\n```\n\n**Default:**\n```ini\npincode =\n```", .status = 0 }, { .param = "pincode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nPincode for **Conax, Cryptoworks and Viaccess** SCs.\n\n**Example:**\n```ini\npincode = 1234\n```\n\n**Default:**\n```ini\npincode =\n```", .status = 0 },
{ .param = "gbox_max_distance", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nMaximum distance to receive peer cards.\n\n**Format:**\n```ini\ngbox_max_distance = distance\n```\n\n**Example:**\n```ini\ngbox_max_distance = 3\n```\n\n**Default:**\n```ini\ngbox_max_distance = 2\n```", .status = 0 },
{ .param = "gbox_max_ecm_send", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSend ECM to max `<gbox_max_ecm_send>` peer cards.\n\n**Format:**\n```ini\ngbox_max_ecm_send = number\n```\n\n**Example:**\n```ini\ngbox_max_ecm_send = 10\n```\n\n**Default:**\n```ini\ngbox_max_ecm_send = 5\n```", .status = 0 },
{ .param = "gbox_reshare", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nShare-Level of local card(s).\n\n```ini\ngbox_reshare = 0 # None of your local cards send to peer\ngbox_reshare = 1 # Local cards send to direct peer only\ngbox_reshare = 2 # Local cards send to direct peer and his direct peer(s)\n```\n\n**Format:**\n```ini\ngbox_reshare = 0|1|2|3|4|5\n```\n\n**Example:**\n```ini\ngbox_reshare = 1\n```\n\n**Default:**\n```ini\ngbox_reshare = 2\n```", .status = 0 },
{ .param = "cccreshare", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nReshare level of CCC proxy cards to be sent into gbox network.\n\n```ini\ncccreshare = -1 # No resharing (default)\ncccreshare = 0 # Reshare for direct peer only\ncccreshare = 1 # Reshare for direct peer plus next level\ncccreshare = x # Resharing for direct peer plus x share level\n```\n\n**Format:**\n```ini\ncccreshare = -1|0|1|...\n```\n\n**Example:**\n```ini\ncccreshare = 1\n```\n\n**Default:**\n```ini\ncccreshare = -1\n```", .status = 0 },
{ .param = "force_remm", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nForce remote EMM.\n\n```ini\nforce_remm = 0 # Disabled (default)\nforce_remm = 1 # Enabled\n```\n\n⚠️ **Attention: Use only to activate a card or if card entitlements are expired**\n\n**Format:**\n```ini\nforce_remm = 0|1\n```\n\n**Example:**\n```ini\nforce_remm = 1\n```\n\n**Default:**\n```ini\nforce_remm = 0\n```", .status = 0 },
{ .param = "ccc_gbx_reshare_ident", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nDefine CAID and provider of cccam cards you want to send to peer.\n\n**Syntax:**\n```ini\nccc_gbx_reshare_ident = <CAID>:<prov>[,prov]...[;<CAID>:<prov>[,prov]...]...\n```\n\n**Example:**\n```ini\nccc_gbx_reshare_ident = 0100:123456,234567;0200:345678,456789\n = # Blank, all available cccam cards are sent to peer (default)\n```", .status = 0 },
{ .param = "send_offline_cmd", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSend offline cmd HERE to peers offline.\n\n```ini\nsend_offline_cmd = 0 # Default\nsend_offline_cmd = 1 # Enabled\n```\n\n**Format:**\n```ini\nsend_offline_cmd = 0|1\n```\n\n**Example:**\n```ini\nsend_offline_cmd = 1\n```\n\n**Default:**\n```ini\nsend_offline_cmd = 0\n```", .status = 0 },
{ .param = "readnano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nWrite file (usually a copy of a file saved by `savenano`) to your smartcard. If no path is specified, the specified file is searched for in the configuration directory. Only valid for physical readers!\n\n**Examples:**\n```ini\nreadnano = write.emm\n = /var/oscam/write.emm\n = # Blank (default)\n```", .status = 0 }, { .param = "readnano", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nWrite file (usually a copy of a file saved by `savenano`) to your smartcard. If no path is specified, the specified file is searched for in the configuration directory. Only valid for physical readers!\n\n**Examples:**\n```ini\nreadnano = write.emm\n = /var/oscam/write.emm\n = # Blank (default)\n```", .status = 0 },
{ .param = "services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n⚠️ **Attention:** If loadbalancing is enabled in `oscam.conf [global]` among `lb_mode`, then there may be **no entries**!\n\n⚠️ **Attention:** The number of services that will be considered based reader, is limited to 64, or 64 times [service-name][CAID][provid][srvid]!\n\nAssignment to service group. This requires an `oscam.services` file to be present.\n\n**Logic (in this order):**\n1. If the field is empty (or invalid), the request is allowed.\n2. When a negative service (i.e., those with \"!\") is applicable, the request is rejected.\n3. If a positive service is applicable or there is no positive service, the request is allowed.\n4. If none of the previous points, the request is rejected.\n\nThis means that negative services are only necessary in individual cases - when services has positive entries, but you want to exclude some. This is not recommended, because misconfiguration can occur easily. Instead, create an additional service that contains all the relevant channels.\n\n**Syntax:**\n```ini\nservices = [!]service[,[!]service]...\n = # Blank (default)\n```", .status = 0 }, { .param = "services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n⚠️ **Attention:** If loadbalancing is enabled in `oscam.conf [global]` among `lb_mode`, then there may be **no entries**!\n\n⚠️ **Attention:** The number of services that will be considered based reader, is limited to 64, or 64 times [service-name][CAID][provid][srvid]!\n\nAssignment to service group. This requires an `oscam.services` file to be present.\n\n**Logic (in this order):**\n1. If the field is empty (or invalid), the request is allowed.\n2. When a negative service (i.e., those with \"!\") is applicable, the request is rejected.\n3. If a positive service is applicable or there is no positive service, the request is allowed.\n4. If none of the previous points, the request is rejected.\n\nThis means that negative services are only necessary in individual cases - when services has positive entries, but you want to exclude some. This is not recommended, because misconfiguration can occur easily. Instead, create an additional service that contains all the relevant channels.\n\n**Syntax:**\n```ini\nservices = [!]service[,[!]service]...\n = # Blank (default)\n```", .status = 0 },
{ .param = "lb_whitelist_services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReader assignment to service group for channels which may never be blocked by the loadbalancer to the reader.\n\n**Syntax:**\n```ini\nlb_whitelist_services = <services>,<services>...\n```\n\n**Default:**\n```ini\nlb_whitelist_services =\n```", .status = 0 }, { .param = "lb_whitelist_services", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReader assignment to service group for channels which may never be blocked by the loadbalancer to the reader.\n\n**Syntax:**\n```ini\nlb_whitelist_services = <services>,<services>...\n```\n\n**Default:**\n```ini\nlb_whitelist_services =\n```", .status = 0 },
@ -84,10 +91,52 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine and mapping of CAIDs for reader.\n\n**Syntax:**\n```ini\ncaid = <CAID>[&<mask>][:<target CAID>][,<CAID>[&<mask>][:<target CAID>]]...\n```\n\n**Examples:**\n```ini\ncaid = 0100\ncaid = 0200&ffee:0300\ncaid = 0400&ff00:0500,0600\ncaid = 0702,0722\ncaid = 0702&ffdf # Shortcut for the example above\n```\n\n**Default:** All CAIDs with mask FFFF", .status = 0 }, { .param = "caid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine and mapping of CAIDs for reader.\n\n**Syntax:**\n```ini\ncaid = <CAID>[&<mask>][:<target CAID>][,<CAID>[&<mask>][:<target CAID>]]...\n```\n\n**Examples:**\n```ini\ncaid = 0100\ncaid = 0200&ffee:0300\ncaid = 0400&ff00:0500,0600\ncaid = 0702,0722\ncaid = 0702&ffdf # Shortcut for the example above\n```\n\n**Default:** All CAIDs with mask FFFF", .status = 0 },
{ .param = "atr", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet a custom ATR (Answer To Reset) for the reader. Override the automatic ATR detection.\n\n**Format:**\n```ini\natr = hex_bytes\n```\n\n**Example:**\n```ini\natr = 3B9F21E49067534C000000280F28000069FF6500\n```\n\n**Default:**\n```ini\natr =\n```", .status = 0 }, { .param = "atr", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet a custom ATR (Answer To Reset) for the reader. Override the automatic ATR detection.\n\n**Format:**\n```ini\natr = hex_bytes\n```\n\n**Example:**\n```ini\natr = 3B9F21E49067534C000000280F28000069FF6500\n```\n\n**Default:**\n```ini\natr =\n```", .status = 0 },
{ .param = "boxid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNDS receiver box ID.\n\n**Example:**\n```ini\nboxid = 12345678\n```\n\n**Default:**\n```ini\nboxid =\n```", .status = 0 }, { .param = "boxid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNDS receiver box ID.\n\n**Example:**\n```ini\nboxid = 12345678\n```\n\n**Default:**\n```ini\nboxid =\n```", .status = 0 },
{ .param = "tongfang3_calibsn", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_TONGFANG` compilation flag)**\n\nCalibration serial number for Tongfang v3 readers. 4 bytes in hexadecimal.\n\n**Format:**\n```ini\ntongfang3_calibsn = hex_bytes\n```\n\n**Example:**\n```ini\ntongfang3_calibsn = 12345678\n```\n\n**Default:**\n```ini\ntongfang3_calibsn =\n```", .status = 0 },
{ .param = "tongfang_boxid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_TONGFANG` compilation flag)**\n\nBox ID for Tongfang readers. 4 bytes in hexadecimal.\n\n**Format:**\n```ini\ntongfang_boxid = hex_bytes\n```\n\n**Example:**\n```ini\ntongfang_boxid = 12345678\n```\n\n**Default:**\n```ini\ntongfang_boxid =\n```", .status = 0 },
{ .param = "stbid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_TONGFANG` compilation flag)**\n\nSTB ID for Tongfang v3 readers. 8 bytes in hexadecimal.\n\n**Format:**\n```ini\nstbid = hex_bytes\n```\n\n**Example:**\n```ini\nstbid = 0102030405060708\n```\n\n**Default:**\n```ini\nstbid =\n```", .status = 0 },
{ .param = "tongfang3_deskey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_TONGFANG` compilation flag)**\n\nDES key for Tongfang v3 readers. 8 bytes in hexadecimal.\n\n**Format:**\n```ini\ntongfang3_deskey = hex_bytes\n```\n\n**Example:**\n```ini\ntongfang3_deskey = 0102030405060708\n```\n\n**Default:**\n```ini\ntongfang3_deskey =\n```", .status = 0 },
{ .param = "boxkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBox key for Nagravision SCs / CAM key for Irdeto SCs / sessionkey for Seca SCs / CamID for Viaccess.\n\n**Default:**\n```ini\nboxkey =\n```", .status = 0 }, { .param = "boxkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBox key for Nagravision SCs / CAM key for Irdeto SCs / sessionkey for Seca SCs / CamID for Viaccess.\n\n**Default:**\n```ini\nboxkey =\n```", .status = 0 },
{ .param = "rsakey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRSA key for Nagravision/Tiger SCs / CAM key data for Irdeto SCs, Conax SCs.\n\n**Default:**\n```ini\nrsakey =\n```", .status = 0 }, { .param = "rsakey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nRSA key for Nagravision/Tiger SCs / CAM key data for Irdeto SCs, Conax SCs.\n\n**Default:**\n```ini\nrsakey =\n```", .status = 0 },
{ .param = "cwpkkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCWPK (Control Word Protection Key) for Nagra readers.\n\n**Format:**\n```ini\ncwpkkey = index:hex_bytes\n```\n\n**Example:**\n```ini\ncwpkkey = 0:0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwpkkey =\n```", .status = 0 }, { .param = "cwpkkey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nCWPK (Control Word Protection Key) for Nagra readers.\n\n**Format:**\n```ini\ncwpkkey = index:hex_bytes\n```\n\n**Example:**\n```ini\ncwpkkey = 0:0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwpkkey =\n```", .status = 0 },
{ .param = "deskey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDES key for the reader in hexadecimal format.\n\n**Format:**\n```ini\ndeskey = hex_bytes\n```\n\n**Example:**\n```ini\ndeskey = 0102030405060708090A0B0C0D0E\n```\n\n**Default:**\n```ini\ndeskey =\n```", .status = 0 }, { .param = "deskey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDES key for the reader in hexadecimal format.\n\n**Format:**\n```ini\ndeskey = hex_bytes\n```\n\n**Example:**\n```ini\ndeskey = 0102030405060708090A0B0C0D0E\n```\n\n**Default:**\n```ini\ndeskey =\n```", .status = 0 },
{ .param = "mod1", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nModulus 1 for Nagra Merlin readers. 112 bytes in hexadecimal.\n\n**Format:**\n```ini\nmod1 = hex_bytes\n```\n\n**Example:**\n```ini\nmod1 = 0102030405...\n```\n\n**Default:**\n```ini\nmod1 =\n```", .status = 0 },
{ .param = "idird", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nIRD ID for Nagra Merlin readers. 4 bytes in hexadecimal.\n\n**Format:**\n```ini\nidird = hex_bytes\n```\n\n**Example:**\n```ini\nidird = 12345678\n```\n\n**Default:**\n```ini\nidird =\n```", .status = 0 },
{ .param = "cmd0eprov", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nProvider ID for CMD0E command. Use only if CMD0E needs a ProvID other than the system ID.\n\n**Format:**\n```ini\ncmd0eprov = hex_bytes\n```\n\n**Example:**\n```ini\ncmd0eprov = 1234\n```\n\n**Default:**\n```ini\ncmd0eprov =\n```", .status = 0 },
{ .param = "mod2", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nModulus 2 for Nagra Merlin readers. 112 bytes in hexadecimal.\n\n**Format:**\n```ini\nmod2 = hex_bytes\n```\n\n**Example:**\n```ini\nmod2 = 0102030405...\n```\n\n**Default:**\n```ini\nmod2 =\n```", .status = 0 },
{ .param = "key3588", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nKey 3588 for Nagra Merlin readers. 136 bytes in hexadecimal.\n\n**Format:**\n```ini\nkey3588 = hex_bytes\n```\n\n**Example:**\n```ini\nkey3588 = 0102030405...\n```\n\n**Default:**\n```ini\nkey3588 =\n```", .status = 0 },
{ .param = "key3460", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nKey 3460 for Nagra Merlin readers. 96 bytes in hexadecimal.\n\n**Format:**\n```ini\nkey3460 = hex_bytes\n```\n\n**Example:**\n```ini\nkey3460 = 0102030405...\n```\n\n**Default:**\n```ini\nkey3460 =\n```", .status = 0 },
{ .param = "key3310", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nKey 3310 for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\nkey3310 = hex_bytes\n```\n\n**Example:**\n```ini\nkey3310 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\nkey3310 =\n```", .status = 0 },
{ .param = "data50", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nData 50 for Nagra Merlin readers. 80 bytes in hexadecimal.\n\n**Format:**\n```ini\ndata50 = hex_bytes\n```\n\n**Example:**\n```ini\ndata50 = 0102030405...\n```\n\n**Default:**\n```ini\ndata50 =\n```", .status = 0 },
{ .param = "mod50", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nModulus 50 for Nagra Merlin readers. 80 bytes in hexadecimal.\n\n**Format:**\n```ini\nmod50 = hex_bytes\n```\n\n**Example:**\n```ini\nmod50 = 0102030405...\n```\n\n**Default:**\n```ini\nmod50 =\n```", .status = 0 },
{ .param = "nuid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nNUID (Network Unique Identifier) for Nagra Merlin readers. 4 bytes in hexadecimal.\n\n**Format:**\n```ini\nnuid = hex_bytes\n```\n\n**Example:**\n```ini\nnuid = 12345678\n```\n\n**Default:**\n```ini\nnuid =\n```", .status = 0 },
{ .param = "forcepair", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nForce pairing byte for Nagra Merlin readers. Use 00 for global pairing.\n\n**Format:**\n```ini\nforcepair = hex_byte\n```\n\n**Example:**\n```ini\nforcepair = 00\n```\n\n**Default:**\n```ini\nforcepair =\n```", .status = 0 },
{ .param = "otpcsc", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nForce OTP CSC (Card Status Code) for Nagra Merlin readers.\n\n**Format:**\n```ini\notpcsc = hex_bytes\n```\n\n**Example:**\n```ini\notpcsc = 1234\n```\n\n**Default:**\n```ini\notpcsc =\n```", .status = 0 },
{ .param = "otacsc", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nForce OTA CSC (Card Status Code) for Nagra Merlin readers.\n\n**Format:**\n```ini\notacsc = hex_bytes\n```\n\n**Example:**\n```ini\notacsc = 1234\n```\n\n**Default:**\n```ini\notacsc =\n```", .status = 0 },
{ .param = "cwpkcaid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCAID for BoxEMM CWPK for Nagra Merlin readers.\n\n**Format:**\n```ini\ncwpkcaid = hex_bytes\n```\n\n**Example:**\n```ini\ncwpkcaid = 1834\n```\n\n**Default:**\n```ini\ncwpkcaid =\n```", .status = 0 },
{ .param = "cwekey0", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK0 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey0 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey0 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey0 =\n```", .status = 0 },
{ .param = "cwekey1", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK1 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey1 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey1 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey1 =\n```", .status = 0 },
{ .param = "cwekey2", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK2 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey2 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey2 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey2 =\n```", .status = 0 },
{ .param = "cwekey3", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK3 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey3 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey3 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey3 =\n```", .status = 0 },
{ .param = "cwekey4", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK4 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey4 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey4 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey4 =\n```", .status = 0 },
{ .param = "cwekey5", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK5 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey5 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey5 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey5 =\n```", .status = 0 },
{ .param = "cwekey6", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK6 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey6 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey6 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey6 =\n```", .status = 0 },
{ .param = "cwekey7", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK7 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey7 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey7 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey7 =\n```", .status = 0 },
{ .param = "cwekey8", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK8 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey8 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey8 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey8 =\n```", .status = 0 },
{ .param = "cwekey9", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK9 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey9 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey9 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey9 =\n```", .status = 0 },
{ .param = "cwekey10", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK10 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey10 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey10 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey10 =\n```", .status = 0 },
{ .param = "cwekey11", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK11 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey11 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey11 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey11 =\n```", .status = 0 },
{ .param = "cwekey12", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK12 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey12 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey12 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey12 =\n```", .status = 0 },
{ .param = "cwekey13", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK13 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey13 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey13 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey13 =\n```", .status = 0 },
{ .param = "cwekey14", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK14 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey14 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey14 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey14 =\n```", .status = 0 },
{ .param = "cwekey15", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK15 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey15 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey15 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey15 =\n```", .status = 0 },
{ .param = "cwekey16", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nCWPK16 (Control Word Protection Key) for Nagra Merlin readers. 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncwekey16 = hex_bytes\n```\n\n**Example:**\n```ini\ncwekey16 = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncwekey16 =\n```", .status = 0 },
{ .param = "forcecwswap", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nForce CW (Control Word) swap for Nagra Merlin readers.\n\n```ini\nforcecwswap = 0 # disabled (default)\nforcecwswap = 1 # force CW swap\n```\n\n**Format:**\n```ini\nforcecwswap = 0|1\n```\n\n**Example:**\n```ini\nforcecwswap = 1\n```\n\n**Default:**\n```ini\nforcecwswap = 0\n```", .status = 0 },
{ .param = "evensa", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nForce even SA (Subscriber Address) for Nagra Merlin readers.\n\n```ini\nevensa = 0 # disabled (default)\nevensa = 1 # force even SA\n```\n\n**Format:**\n```ini\nevensa = 0|1\n```\n\n**Example:**\n```ini\nevensa = 1\n```\n\n**Default:**\n```ini\nevensa = 0\n```", .status = 0 },
{ .param = "forceemmg", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nForce EMMs with tag 0x82 (global EMMs) for Nagra Merlin readers.\n\n```ini\nforceemmg = 0 # disabled (default)\nforceemmg = 1 # force 0x82 EMMs\n```\n\n**Format:**\n```ini\nforceemmg = 0|1\n```\n\n**Example:**\n```ini\nforceemmg = 1\n```\n\n**Default:**\n```ini\nforceemmg = 0\n```", .status = 0 },
{ .param = "cwpkota", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nEnable OTA (Over-The-Air) CWPK updates for Nagra Merlin readers.\n\n```ini\ncwpkota = 0 # OTA CWPK disabled (default)\ncwpkota = 1 # OTA CWPK enabled\n```\n\n**Format:**\n```ini\ncwpkota = 0|1\n```\n\n**Example:**\n```ini\ncwpkota = 1\n```\n\n**Default:**\n```ini\ncwpkota = 0\n```", .status = 0 },
{ .param = "headermode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA_MERLIN` compilation flag)**\n\nHeader mode for Nagra Merlin readers.\n\n```ini\nheadermode = 0 # header 0x00\nheadermode = 1 # header 0x04 (default)\n```\n\n**Format:**\n```ini\nheadermode = 0|1\n```\n\n**Example:**\n```ini\nheadermode = 0\n```\n\n**Default:**\n```ini\nheadermode = 1\n```", .status = 0 },
{ .param = "cak63nuid", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA` compilation flag)**\n\nNagra CAK6.3 NUID (Network Unique Identifier). 4 bytes in hexadecimal.\n\n**Format:**\n```ini\ncak63nuid = hex_bytes\n```\n\n**Example:**\n```ini\ncak63nuid = 12345678\n```\n\n**Default:**\n```ini\ncak63nuid =\n```", .status = 0 },
{ .param = "cak63cwekey", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_NAGRA` compilation flag)**\n\nNagra CAK6.3 CWPK (Control Word Protection Key). 16 bytes in hexadecimal.\n\n**Format:**\n```ini\ncak63cwekey = hex_bytes\n```\n\n**Example:**\n```ini\ncak63cwekey = 0102030405060708090A0B0C0D0E0F10\n```\n\n**Default:**\n```ini\ncak63cwekey =\n```", .status = 0 },
{ .param = "cak7_mode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nInitialize card in CAK7 (Merlin) mode for Nagravision readers.\n\n```ini\ncak7_mode = 0 # standard mode (default)\ncak7_mode = 1 # CAK7/Merlin mode\n```\n\n**Format:**\n```ini\ncak7_mode = 0|1\n```\n\n**Example:**\n```ini\ncak7_mode = 1\n```\n\n**Default:**\n```ini\ncak7_mode = 0\n```", .status = 0 }, { .param = "cak7_mode", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nInitialize card in CAK7 (Merlin) mode for Nagravision readers.\n\n```ini\ncak7_mode = 0 # standard mode (default)\ncak7_mode = 1 # CAK7/Merlin mode\n```\n\n**Format:**\n```ini\ncak7_mode = 0|1\n```\n\n**Example:**\n```ini\ncak7_mode = 1\n```\n\n**Default:**\n```ini\ncak7_mode = 0\n```", .status = 0 },
{ .param = "card_startdate_basemonth", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase month for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_basemonth = month\n```\n\n**Example:**\n```ini\ncard_startdate_basemonth = 1\n```\n\n**Default:**\n```ini\ncard_startdate_basemonth = 1\n```", .status = 0 }, { .param = "card_startdate_basemonth", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase month for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_basemonth = month\n```\n\n**Example:**\n```ini\ncard_startdate_basemonth = 1\n```\n\n**Default:**\n```ini\ncard_startdate_basemonth = 1\n```", .status = 0 },
{ .param = "card_startdate_baseyear", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase year for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_baseyear = year\n```\n\n**Example:**\n```ini\ncard_startdate_baseyear = 1997\n```\n\n**Default:**\n```ini\ncard_startdate_baseyear = 1997\n```", .status = 0 }, { .param = "card_startdate_baseyear", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nBase year for card start date calculation.\n\n**Format:**\n```ini\ncard_startdate_baseyear = year\n```\n\n**Example:**\n```ini\ncard_startdate_baseyear = 1997\n```\n\n**Default:**\n```ini\ncard_startdate_baseyear = 1997\n```", .status = 0 },
@ -103,6 +152,7 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "fix9993", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable fix for 9993 error with CAID 0919 SCs.\n\n```ini\nfix9993 = 0 # Disabled (default)\nfix9993 = 1 # Enabled\n```\n\n**Format:**\n```ini\nfix9993 = 0|1\n```\n\n**Example:**\n```ini\nfix9993 = 1\n```\n\n**Default:**\n```ini\nfix9993 = 0\n```", .status = 0 }, { .param = "fix9993", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nEnable fix for 9993 error with CAID 0919 SCs.\n\n```ini\nfix9993 = 0 # Disabled (default)\nfix9993 = 1 # Enabled\n```\n\n**Format:**\n```ini\nfix9993 = 0|1\n```\n\n**Example:**\n```ini\nfix9993 = 1\n```\n\n**Default:**\n```ini\nfix9993 = 0\n```", .status = 0 },
{ .param = "readtiers", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMethod to get tiers of **NDS Videoguard SCs**.\n\n```ini\nreadtiers = 0 # Disabled (default)\nreadtiers = 1 # ins70 (new) method\nreadtiers = 2 # ins76 (old) method\n```\n\n**Format:**\n```ini\nreadtiers = 0|1|2\n```\n\n**Example:**\n```ini\nreadtiers = 1\n```\n\n**Default:**\n```ini\nreadtiers = 0\n```", .status = 0 }, { .param = "readtiers", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nMethod to get tiers of **NDS Videoguard SCs**.\n\n```ini\nreadtiers = 0 # Disabled (default)\nreadtiers = 1 # ins70 (new) method\nreadtiers = 2 # ins76 (old) method\n```\n\n**Format:**\n```ini\nreadtiers = 0|1|2\n```\n\n**Example:**\n```ini\nreadtiers = 1\n```\n\n**Default:**\n```ini\nreadtiers = 0\n```", .status = 0 },
{ .param = "force_irdeto", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForce Irdeto SC mode even if RSA key is set for Irdeto tunneled Nagravision SC.\n\n```ini\nforce_irdeto = 0 # No (default)\nforce_irdeto = 1 # Yes\n```\n\n**Format:**\n```ini\nforce_irdeto = 0|1\n```\n\n**Example:**\n```ini\nforce_irdeto = 1\n```\n\n**Default:**\n```ini\nforce_irdeto = 0\n```", .status = 0 }, { .param = "force_irdeto", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nForce Irdeto SC mode even if RSA key is set for Irdeto tunneled Nagravision SC.\n\n```ini\nforce_irdeto = 0 # No (default)\nforce_irdeto = 1 # Yes\n```\n\n**Format:**\n```ini\nforce_irdeto = 0|1\n```\n\n**Example:**\n```ini\nforce_irdeto = 1\n```\n\n**Default:**\n```ini\nforce_irdeto = 0\n```", .status = 0 },
{ .param = "needsglobalfirst", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_CRYPTOWORKS` compilation flag)**\n\nSend global EMMs before unique EMMs for Cryptoworks readers.\n\n```ini\nneedsglobalfirst = 0 # disabled (default)\nneedsglobalfirst = 1 # send global EMMs first\n```\n\n**Format:**\n```ini\nneedsglobalfirst = 0|1\n```\n\n**Example:**\n```ini\nneedsglobalfirst = 1\n```\n\n**Default:**\n```ini\nneedsglobalfirst = 0\n```", .status = 0 },
{ .param = "ecmnotfoundlimit", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of ECMs with \"not found\" answer until the reader will be restarted.\n\n```ini\necmnotfoundlimit = count\n = 0 # No limit (default)\n```\n\n**Default:**\n```ini\necmnotfoundlimit = 0\n```", .status = 0 }, { .param = "ecmnotfoundlimit", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nNumber of ECMs with \"not found\" answer until the reader will be restarted.\n\n```ini\necmnotfoundlimit = count\n = 0 # No limit (default)\n```\n\n**Default:**\n```ini\necmnotfoundlimit = 0\n```", .status = 0 },
{ .param = "ecmwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine valid ECM length **in hex** and provid for physical reader.\n\n**Syntax:**\n```ini\necmwhitelist = [CAID[@provid]:]length[,length]...[;[CAID[@provid]:]length[,length]...]...\n```\n\n**Examples:**\n```ini\necmwhitelist = 10,20,30,0a,0b,0c\necmwhitelist = 0100:10,20;0200@12345:0a,4b\n = # None (default) and provid 000000\n```\n\n⚠️ **In normal operation mode this parameter is not required!**\n\n📋 **[List of ECM lengths](http://www.streamboard.tv/oscam/wiki/ECMLengthList)**", .status = 0 }, { .param = "ecmwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDefine valid ECM length **in hex** and provid for physical reader.\n\n**Syntax:**\n```ini\necmwhitelist = [CAID[@provid]:]length[,length]...[;[CAID[@provid]:]length[,length]...]...\n```\n\n**Examples:**\n```ini\necmwhitelist = 10,20,30,0a,0b,0c\necmwhitelist = 0100:10,20;0200@12345:0a,4b\n = # None (default) and provid 000000\n```\n\n⚠️ **In normal operation mode this parameter is not required!**\n\n📋 **[List of ECM lengths](http://www.streamboard.tv/oscam/wiki/ECMLengthList)**", .status = 0 },
{ .param = "ecmheaderwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet valid ECM header per CAID and provid **in hex**.\n\n**Syntax:**\n```ini\necmheaderwhitelist = [CAID[@provid]:]header[,header]...[;[@provid]:]header[,header]...]...\n```\n\n**Default:** None, provid = 000000\n\n📋 **[HeaderWhitelist](http://www.streamboard.tv/oscam/wiki/HeaderWhitelist)**", .status = 0 }, { .param = "ecmheaderwhitelist", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nSet valid ECM header per CAID and provid **in hex**.\n\n**Syntax:**\n```ini\necmheaderwhitelist = [CAID[@provid]:]header[,header]...[;[@provid]:]header[,header]...]...\n```\n\n**Default:** None, provid = 000000\n\n📋 **[HeaderWhitelist](http://www.streamboard.tv/oscam/wiki/HeaderWhitelist)**", .status = 0 },
@ -134,6 +184,7 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "dropbadcws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReject bad CWs, send \"not found\" instead of bad CWs.\n\n```ini\ndropbadcws = 0 # Default\ndropbadcws = 1 # Reject bad CWs\n```\n\n**Format:**\n```ini\ndropbadcws = 0|1\n```\n\n**Example:**\n```ini\ndropbadcws = 1\n```\n\n**Default:**\n```ini\ndropbadcws = 0\n```", .status = 0 }, { .param = "dropbadcws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nReject bad CWs, send \"not found\" instead of bad CWs.\n\n```ini\ndropbadcws = 0 # Default\ndropbadcws = 1 # Reject bad CWs\n```\n\n**Format:**\n```ini\ndropbadcws = 0|1\n```\n\n**Example:**\n```ini\ndropbadcws = 1\n```\n\n**Default:**\n```ini\ndropbadcws = 0\n```", .status = 0 },
{ .param = "disablecrccws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDisable CW checksum test.\n\n```ini\ndisablecrccws = 0 # Enable (default)\ndisablecrccws = 1 # Disable CW checksum test\n```\n\n**Format:**\n```ini\ndisablecrccws = 0|1\n```\n\n**Example:**\n```ini\ndisablecrccws = 1\n```\n\n**Default:**\n```ini\ndisablecrccws = 0\n```", .status = 0 }, { .param = "disablecrccws", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nDisable CW checksum test.\n\n```ini\ndisablecrccws = 0 # Enable (default)\ndisablecrccws = 1 # Disable CW checksum test\n```\n\n**Format:**\n```ini\ndisablecrccws = 0|1\n```\n\n**Example:**\n```ini\ndisablecrccws = 1\n```\n\n**Default:**\n```ini\ndisablecrccws = 0\n```", .status = 0 },
{ .param = "use_gpio", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nUse GPIO as card detect/reset.\n\n```ini\nuse_gpio = 0 # Off (default)\nuse_gpio = 1 # On\n```\n\n**Format:**\n```ini\nuse_gpio = 0|1\n```\n\n**Example:**\n```ini\nuse_gpio = 1\n```\n\n**Default:**\n```ini\nuse_gpio = 0\n```", .status = 0 }, { .param = "use_gpio", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\nUse GPIO as card detect/reset.\n\n```ini\nuse_gpio = 0 # Off (default)\nuse_gpio = 1 # On\n```\n\n**Format:**\n```ini\nuse_gpio = 0|1\n```\n\n**Example:**\n```ini\nuse_gpio = 1\n```\n\n**Default:**\n```ini\nuse_gpio = 0\n```", .status = 0 },
{ .param = "pand_send_ecm", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\nSend ECMs to Panda/Pandora readers.\n\n```ini\npand_send_ecm = 0 # disabled (default)\npand_send_ecm = 1 # enabled\n```\n\n**Format:**\n```ini\npand_send_ecm = 0|1\n```\n\n**Example:**\n```ini\npand_send_ecm = 1\n```\n\n**Default:**\n```ini\npand_send_ecm = 0\n```", .status = 0 },
{ .param = "cccversion", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\n**Only for CCcam**\n\nDefine CCcam version.\n\n**Syntax:**\n```ini\ncccversion = <mainversion>,<version>,<sub version>\n```\n\n**Example:**\n```ini\ncccversion = 1.2.34\n```", .status = 0 }, { .param = "cccversion", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\n**Only for CCcam**\n\nDefine CCcam version.\n\n**Syntax:**\n```ini\ncccversion = <mainversion>,<version>,<sub version>\n```\n\n**Example:**\n```ini\ncccversion = 1.2.34\n```", .status = 0 },
{ .param = "cccmaxhops", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nDefine CCcam maximum SC distance hops.\n\n```ini\ncccmaxhops = 0 # Local SCs only\n = 1 # Local SCs + 1 hop\n = 2 # Local SCs + 2 hops\n = ... # And so on\n = 10 # Default\n```\n\n**Default:**\n```ini\ncccmaxhops = 10\n```", .status = 0 }, { .param = "cccmaxhops", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nDefine CCcam maximum SC distance hops.\n\n```ini\ncccmaxhops = 0 # Local SCs only\n = 1 # Local SCs + 1 hop\n = 2 # Local SCs + 2 hops\n = ... # And so on\n = 10 # Default\n```\n\n**Default:**\n```ini\ncccmaxhops = 10\n```", .status = 0 },
{ .param = "cccmindown", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nFilters all readers with hops smaller than number.\n\n```ini\ncccmindown = number\n = 0 # Default\n```\n\n**Default:**\n```ini\ncccmindown = 0\n```", .status = 0 }, { .param = "cccmindown", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nFilters all readers with hops smaller than number.\n\n```ini\ncccmindown = number\n = 0 # Default\n```\n\n**Default:**\n```ini\ncccmindown = 0\n```", .status = 0 },
@ -141,6 +192,9 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "cccam_reshare", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReshare level of CCC proxy cards to be sent into gbox network.\n\n```ini\ncccam_reshare = -1 # No resharing (default)\n = 0 # Reshare for direct peer only\n = 1 # Reshare for direct peer plus next level\n = x # Resharing for direct peer plus x share level\n```\n\n**Default:**\n```ini\ncccam_reshare = -1\n```", .status = 0 }, { .param = "cccam_reshare", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReshare level of CCC proxy cards to be sent into gbox network.\n\n```ini\ncccam_reshare = -1 # No resharing (default)\n = 0 # Reshare for direct peer only\n = 1 # Reshare for direct peer plus next level\n = x # Resharing for direct peer plus x share level\n```\n\n**Default:**\n```ini\ncccam_reshare = -1\n```", .status = 0 },
{ .param = "cccreconnect", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReconnect again after ECM request timeout in milliseconds.\n\n```ini\ncccreconnect = timeout # Timeout in milliseconds\n = 12000 # Default\n```\n\n**Default:**\n```ini\ncccreconnect = 12000\n```", .status = 0 }, { .param = "cccreconnect", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReconnect again after ECM request timeout in milliseconds.\n\n```ini\ncccreconnect = timeout # Timeout in milliseconds\n = 12000 # Default\n```\n\n**Default:**\n```ini\ncccreconnect = 12000\n```", .status = 0 },
{ .param = "ccchop", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nSet hop for **non** CCCam readers.\n\n```ini\nccchop = hop\n = 0 # Default\n```\n\n**Default:**\n```ini\nccchop = 0\n```", .status = 0 }, { .param = "ccchop", .config = "server", .section = "reader", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nSet hop for **non** CCCam readers.\n\n```ini\nccchop = hop\n = 0 # Default\n```\n\n**Default:**\n```ini\nccchop = 0\n```", .status = 0 },
{ .param = "use_ssl", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GHTTP` compilation flag)**\n\nUse SSL for ghttp protocol.\n\n```ini\nuse_ssl = 0 # Default\nuse_ssl = 1 # Use SSL for ghttp protocol\n```\n\n**Format:**\n```ini\nuse_ssl = 0|1\n```\n\n**Example:**\n```ini\nuse_ssl = 1\n```\n\n**Default:**\n```ini\nuse_ssl = 0\n```", .status = 0 },
{ .param = "force_ua", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_DRE` compilation flag)**\n\nForce UA (4 bytes or 8 chars expressed in hexa).\n\n**Example:**\n```ini\nforce_ua = 12345678\n```", .status = 0 },
{ .param = "exec_cmd_file", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\n**(requires `READER_DRE` compilation flag)**\n\nPath to a script.\n\n**Example:**\n```ini\nexec_cmd_file = /path/to/script.sh\n```", .status = 0 },
{ .param = "resetalways", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAlways reset the card before each ECM request.\n\n```ini\nresetalways = 0 # normal operation (default)\nresetalways = 1 # always reset card\n```\n\n**Format:**\n```ini\nresetalways = 0|1\n```\n\n**Example:**\n```ini\nresetalways = 1\n```\n\n**Default:**\n```ini\nresetalways = 0\n```", .status = 0 }, { .param = "resetalways", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nAlways reset the card before each ECM request.\n\n```ini\nresetalways = 0 # normal operation (default)\nresetalways = 1 # always reset card\n```\n\n**Format:**\n```ini\nresetalways = 0|1\n```\n\n**Example:**\n```ini\nresetalways = 1\n```\n\n**Default:**\n```ini\nresetalways = 0\n```", .status = 0 },
{ .param = "deprecated", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nFirst the SC will be initialized in normal mode. If it fails, the SC will be automatically reverted to deprecated mode, so that the SC speed will not be changed and the communication will remain on normal ATR speed of 9600 baud.\n\n```ini\ndeprecated = 0 # Normal mode (default)\ndeprecated = 1 # Use deprecated SC mode only\n```\n\n**Format:**\n```ini\ndeprecated = 0|1\n```\n\n**Example:**\n```ini\ndeprecated = 1\n```\n\n**Default:**\n```ini\ndeprecated = 0\n```", .status = 0 }, { .param = "deprecated", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nFirst the SC will be initialized in normal mode. If it fails, the SC will be automatically reverted to deprecated mode, so that the SC speed will not be changed and the communication will remain on normal ATR speed of 9600 baud.\n\n```ini\ndeprecated = 0 # Normal mode (default)\ndeprecated = 1 # Use deprecated SC mode only\n```\n\n**Format:**\n```ini\ndeprecated = 0|1\n```\n\n**Example:**\n```ini\ndeprecated = 1\n```\n\n**Default:**\n```ini\ndeprecated = 0\n```", .status = 0 },
{ .param = "audisabled", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nExclude reader from auto AU (auto update).\n\n```ini\naudisabled = 0 # Not excluded (default)\naudisabled = 1 # Excluded\n```\n\n**Format:**\n```ini\naudisabled = 0|1\n```\n\n**Example:**\n```ini\naudisabled = 1\n```\n\n**Default:**\n```ini\naudisabled = 0\n```", .status = 0 }, { .param = "audisabled", .config = "server", .section = "reader", .text = "**🟢 Optional parameter**\n\nExclude reader from auto AU (auto update).\n\n```ini\naudisabled = 0 # Not excluded (default)\naudisabled = 1 # Excluded\n```\n\n**Format:**\n```ini\naudisabled = 0|1\n```\n\n**Example:**\n```ini\naudisabled = 1\n```\n\n**Default:**\n```ini\naudisabled = 0\n```", .status = 0 },
@ -386,6 +440,21 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "disablecrccws", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nSkip CW checksum test globally. Some providers send CWs that don't pass the checksum test but are still valid.\n\n**Format:**\n```ini\ndisablecrccws = 0|1\n```\n\n**Example:**\n```ini\ndisablecrccws = 1\n```\n\n**Default:**\n```ini\ndisablecrccws = 0\n```", .status = 0 }, { .param = "disablecrccws", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nSkip CW checksum test globally. Some providers send CWs that don't pass the checksum test but are still valid.\n\n**Format:**\n```ini\ndisablecrccws = 0|1\n```\n\n**Example:**\n```ini\ndisablecrccws = 1\n```\n\n**Default:**\n```ini\ndisablecrccws = 0\n```", .status = 0 },
{ .param = "disablecrccws_only_for", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nSkip CW checksum test only for specific CAIDs/providers/services. Use this for selective disabling instead of the global `disablecrccws` option.\n\n**Format:**\n```ini\ndisablecrccws_only_for = CAID1[:ident1][,CAID2[:ident2]]...\n```\n\n**Example:**\n```ini\ndisablecrccws_only_for = 0100:000030,0500\n```\n\n**Default:** none", .status = 0 }, { .param = "disablecrccws_only_for", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\nSkip CW checksum test only for specific CAIDs/providers/services. Use this for selective disabling instead of the global `disablecrccws` option.\n\n**Format:**\n```ini\ndisablecrccws_only_for = CAID1[:ident1][,CAID2[:ident2]]...\n```\n\n**Example:**\n```ini\ndisablecrccws_only_for = 0100:000030,0500\n```\n\n**Default:** none", .status = 0 },
{ .param = "cacheex_srcname_webif", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDisplay CacheEx source name in WebIF status.\n\n**Format:**\n```ini\ncacheex_srcname_webif = 0|1\n```\n\n**Example:**\n```ini\ncacheex_srcname_webif = 1\n```\n\n**Default:**\n```ini\ncacheex_srcname_webif = 0\n```", .status = 0 }, { .param = "cacheex_srcname_webif", .config = "conf", .section = "global", .text = "**🟢 Optional parameter**\n\n**(requires `CS_CACHEEX_AIO` compilation flag)**\n\nDisplay CacheEx source name in WebIF status.\n\n**Format:**\n```ini\ncacheex_srcname_webif = 0|1\n```\n\n**Example:**\n```ini\ncacheex_srcname_webif = 1\n```\n\n**Default:**\n```ini\ncacheex_srcname_webif = 0\n```", .status = 0 },
{ .param = "enabled", .config = "conf", .section = "anticasc", .text = "**🔴 Required parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nEnable anti-cascading.\n\n```ini\nenabled = 0 # disabled (default)\nenabled = 1 # enabled\n```\n\n**Format:**\n```ini\nenabled = 0|1\n```\n\n**Example:**\n```ini\nenabled = 1\n```\n\n**Default:**\n```ini\nenabled = 0\n```", .status = 0 },
{ .param = "numusers", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nAnti-cascading: user per account (number).\n\n**Format:**\n```ini\nnumusers = 0 # anticascading disabled (default)\nnumusers = 1 # cascading for 1 user allowed (11 ecms/min)\nnumusers = 2 # cascading for 2 users allowed (17 ecms/min)\n```\n\n**Example:**\n```ini\nnumusers = 2\n```\n\n**Default:**\n```ini\nnumusers = 0\n```\n\n**Note:** Calculation based on oscam.ac value (default 10):\n- numusers = 1 ==> (1*100+80)/(10*100/60) = 11 ecms allowed per minute\n- numusers = 2 ==> (2*100+80)/(10*100/60) = 17 ecms allowed per minute", .status = 0 },
{ .param = "sampletime", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nDuration of sample in minutes.\n\n**Format:**\n```ini\nsampletime = minutes\n```\n\n**Example:**\n```ini\nsampletime = 5\n```\n\n**Default:**\n```ini\nsampletime = 2\n```\n\n**Example calculation:**\n```\nnumusers = 1 ==> 11 ecms * 5 minutes ==> 55 ecms allowed in 5 minutes\nnumusers = 2 ==> 17 ecms * 5 minutes ==> 85 ecms allowed in 5 minutes\n```", .status = 0 },
{ .param = "samples", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nNumber of additional ecms allowed (possible values between 2 and 10).\n\n**Format:**\n```ini\nsamples = 2-10\n```\n\n**Example:**\n```ini\nsamples = 7\n```\n\n**Default:**\n```ini\nsamples = 10\n```", .status = 0 },
{ .param = "penalty", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nLevel of the penalty if the user exceeds the allowed limit.\n\n**Format:**\n```ini\npenalty = 0 # only logging (default)\npenalty = 1 # send fake DWs\npenalty = 2 # ban user temporary\npenalty = 3 # send real DWs with delay (fakedelay)\n```\n\n**Example:**\n```ini\npenalty = 2\n```\n\n**Default:**\n```ini\npenalty = 0\n```\n\npenalty can be overwritten per user in oscam.user", .status = 0 },
{ .param = "aclogfile", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nFile for anti-cascading logging.\n\n**Example:**\n```ini\naclogfile = /var/log/anticasc.log\n```\n\n**Default:**\n```ini\naclogfile = # no logfile (default)\n```", .status = 0 },
{ .param = "fakedelay", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nFake delay time in milliseconds (possible values between 100 and 3000).\n\n**Format:**\n```ini\nfakedelay = 100-3000\n```\n\n**Example:**\n```ini\nfakedelay = 500\n```\n\n**Default:**\n```ini\nfakedelay = 1000\n```", .status = 0 },
{ .param = "denysamples", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nHow many samples should be penalized?\n\n**Format:**\n```ini\ndenysamples = count\n```\n\n**Example:**\n```ini\ndenysamples = 10\n```\n\n**Default:**\n```ini\ndenysamples = 8\n```", .status = 0 },
{ .param = "acosc_enabled", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nEnable anticascading over SIDs count.\n\n```ini\nacosc_enabled = 0 # default\nacosc_enabled = 1 # enable anticascading over SIDs count\n```\n\n**Format:**\n```ini\nacosc_enabled = 0|1\n```\n\n**Example:**\n```ini\nacosc_enabled = 1\n```\n\n**Default:**\n```ini\nacosc_enabled = 0\n```", .status = 0 },
{ .param = "acosc_max_ecms_per_minute", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nMaximum ECM requests allowed per minute for anticascading over SIDs count (ACoSC).\n\n**Format:**\n```ini\nacosc_max_ecms_per_minute = count\n```\n\n**Default:**\n```ini\nacosc_max_ecms_per_minute = 0 # unlimited (default)\n```\n\nCan be overwritten per user in oscam.user.", .status = 0 },
{ .param = "acosc_max_active_sids", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nMaximum active SIDs with anticascading over SIDs count.\n\n**Format:**\n```ini\nacosc_max_active_sids = count\n```\n\n**Default:**\n```ini\nacosc_max_active_sids = 0 # unlimited (default)\n```\n\nCan be overwritten per user in oscam.user.", .status = 0 },
{ .param = "acosc_zap_limit", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nZap limit for anticascading over SIDs count.\n\n**Format:**\n```ini\nacosc_zap_limit = count\n```\n\n**Default:**\n```ini\nacosc_zap_limit = 0 # unlimited (default)\n```\n\nCan be overwritten per user in oscam.user.", .status = 0 },
{ .param = "acosc_penalty", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nLevel of penalty with anticascading over SIDs count.\n\n```ini\nacosc_penalty = 0 # only logging (default)\nacosc_penalty = 1 # send fake DWs\nacosc_penalty = 2 # ban user temporary\nacosc_penalty = 3 # send real DWs with delay\n```\n\n**Format:**\n```ini\nacosc_penalty = 0|1|2|3\n```\n\n**Example:**\n```ini\nacosc_penalty = 2\n```\n\n**Default:**\n```ini\nacosc_penalty = 0\n```\n\nCan be overwritten per user in oscam.user.", .status = 0 },
{ .param = "acosc_penalty_duration", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nPenalty duration for anticascading over SIDs count.\n\n**Format:**\n```ini\nacosc_penalty_duration = seconds\n```\n\n**Default:**\n```ini\nacosc_penalty_duration = 0 # unlimited (default)\n```\n\nCan be overwritten per user in oscam.user.", .status = 0 },
{ .param = "acosc_delay", .config = "conf", .section = "anticasc", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nDelay for anticascading over SIDs count.\n\n**Format:**\n```ini\nacosc_delay = milliseconds\n```\n\n**Default:**\n```ini\nacosc_delay = 0 # unlimited (default)\n```\n\nCan be overwritten per user in oscam.user.", .status = 0 },
{ .param = "CW", .config = "conf", .section = "cache", .text = "Cache of CWs which are saved to detect/drop old CWs arriving via CacheEx.\nTo enable this feature, you have to define `cw_cache_size` or `cw_cache_memory` to set the cache-size and `cw_cache_settings` to define for what CWs which action is taken.\nIf `cw_cache_size` or `cw_cache_memory` is defined, the default is that incoming known CWs older than 15 seconds are dropped, because they are useless.", .status = 0 }, { .param = "CW", .config = "conf", .section = "cache", .text = "Cache of CWs which are saved to detect/drop old CWs arriving via CacheEx.\nTo enable this feature, you have to define `cw_cache_size` or `cw_cache_memory` to set the cache-size and `cw_cache_settings` to define for what CWs which action is taken.\nIf `cw_cache_size` or `cw_cache_memory` is defined, the default is that incoming known CWs older than 15 seconds are dropped, because they are useless.", .status = 0 },
{ .param = "ECM", .config = "conf", .section = "cache", .text = "Cache of ECMs which are saved to detect/drop old ECMs.\nIf you are facing problems with getting old ECMs, with this feature you are able to drop known ECMs. To enable this feature, you have to define `ecm_cache_size` or `ecm_cache_memory` to set the cache-size.", .status = 0 }, { .param = "ECM", .config = "conf", .section = "cache", .text = "Cache of ECMs which are saved to detect/drop old ECMs.\nIf you are facing problems with getting old ECMs, with this feature you are able to drop known ECMs. To enable this feature, you have to define `ecm_cache_size` or `ecm_cache_memory` to set the cache-size.", .status = 0 },
{ .param = "delay", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\nValue to delay cached requests.\n\n**Example:**\n```ini\ndelay = 300\n```\n\n**Default:**\n```ini\ndelay = 0\n```", .status = 0 }, { .param = "delay", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\nValue to delay cached requests.\n\n**Example:**\n```ini\ndelay = 300\n```\n\n**Default:**\n```ini\ndelay = 0\n```", .status = 0 },
@ -432,6 +501,10 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "cwcycle_sensitive", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\n```ini\ncwcycle_sensitive = 0 # disabled (default)\ncwcycle_sensitive = 2 # 2 (or more) same bytes and drop new CW\ncwcycle_sensitive = 3 # 3 (or more) same bytes and drop new CW\ncwcycle_sensitive = 4 # 4 (or more) same bytes and drop new CW\n```\n\n**Format:**\n```ini\ncwcycle_sensitive = 0|2|3|4\n```\n\n**Example:**\n```ini\ncwcycle_sensitive = 3\n```\n\n**Default:**\n```ini\ncwcycle_sensitive = 0\n```", .status = 0 }, { .param = "cwcycle_sensitive", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\n```ini\ncwcycle_sensitive = 0 # disabled (default)\ncwcycle_sensitive = 2 # 2 (or more) same bytes and drop new CW\ncwcycle_sensitive = 3 # 3 (or more) same bytes and drop new CW\ncwcycle_sensitive = 4 # 4 (or more) same bytes and drop new CW\n```\n\n**Format:**\n```ini\ncwcycle_sensitive = 0|2|3|4\n```\n\n**Example:**\n```ini\ncwcycle_sensitive = 3\n```\n\n**Default:**\n```ini\ncwcycle_sensitive = 0\n```", .status = 0 },
{ .param = "cwcycle_allowbadfromffb", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\nAllow bad cycles from a fixed fallback reader.\n\n```ini\ncwcycle_allowbadfromffb = 0 # default\ncwcycle_allowbadfromffb = 1 # allow bad cycles from fixed fallback reader\n```\n\n**Format:**\n```ini\ncwcycle_allowbadfromffb = 0|1\n```\n\n**Example:**\n```ini\ncwcycle_allowbadfromffb = 1\n```\n\n**Default:**\n```ini\ncwcycle_allowbadfromffb = 0\n```", .status = 0 }, { .param = "cwcycle_allowbadfromffb", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\nAllow bad cycles from a fixed fallback reader.\n\n```ini\ncwcycle_allowbadfromffb = 0 # default\ncwcycle_allowbadfromffb = 1 # allow bad cycles from fixed fallback reader\n```\n\n**Format:**\n```ini\ncwcycle_allowbadfromffb = 0|1\n```\n\n**Example:**\n```ini\ncwcycle_allowbadfromffb = 1\n```\n\n**Default:**\n```ini\ncwcycle_allowbadfromffb = 0\n```", .status = 0 },
{ .param = "cwcycle_usecwcfromce", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\nUse CW info from cache exchange.\n\n```ini\ncwcycle_usecwcfromce = 0 # default\ncwcycle_usecwcfromce = 1 # use CW info from cache exchange\n```\n\n**Format:**\n```ini\ncwcycle_usecwcfromce = 0|1\n```\n\n**Example:**\n```ini\ncwcycle_usecwcfromce = 1\n```\n\n**Default:**\n```ini\ncwcycle_usecwcfromce = 0\n```", .status = 0 }, { .param = "cwcycle_usecwcfromce", .config = "conf", .section = "cache", .text = "**🟢 Optional parameter**\n\n**(requires `CW_CYCLE_CHECK` compilation flag)**\n\nUse CW info from cache exchange.\n\n```ini\ncwcycle_usecwcfromce = 0 # default\ncwcycle_usecwcfromce = 1 # use CW info from cache exchange\n```\n\n**Format:**\n```ini\ncwcycle_usecwcfromce = 0|1\n```\n\n**Example:**\n```ini\ncwcycle_usecwcfromce = 1\n```\n\n**Default:**\n```ini\ncwcycle_usecwcfromce = 0\n```", .status = 0 },
{ .param = "enablelcd", .config = "conf", .section = "lcd", .text = "**🟢 Optional parameter**\n\n**(requires `LCDSUPPORT` compilation flag)**\n\nEnable LCD.\n\n```ini\nenablelcd = 0 # default\nenablelcd = 1 # enable LCD\n```\n\n**Format:**\n```ini\nenablelcd = 0|1\n```\n\n**Example:**\n```ini\nenablelcd = 1\n```\n\n**Default:**\n```ini\nenablelcd = 0\n```", .status = 0 },
{ .param = "lcd_outputpath", .config = "conf", .section = "lcd", .text = "**🟢 Optional parameter**\n\n**(requires `LCDSUPPORT` compilation flag)**\n\nPath for LCD output.\n\n**Format:**\n```ini\nlcd_outputpath = path\n```\n\n**Example:**\n```ini\nlcd_outputpath = /var/log/lcd\n```\n\n**Default:**\n```ini\nlcd_outputpath = /tmp\n```", .status = 0 },
{ .param = "lcd_hideidle", .config = "conf", .section = "lcd", .text = "**🟢 Optional parameter**\n\n**(requires `LCDSUPPORT` compilation flag)**\n\nHide reader in LCD output if reader idle > 20 seconds.\n\n**Format:**\n```ini\nlcd_hideidle = 0|1\n```\n\n**Example:**\n```ini\nlcd_hideidle = 1\n```\n\n**Default:**\n```ini\nlcd_hideidle = 0\n```", .status = 0 },
{ .param = "lcd_writeintervall", .config = "conf", .section = "lcd", .text = "**🟢 Optional parameter**\n\n**(requires `LCDSUPPORT` compilation flag)**\n\nLCD refresh interval in seconds (minimum 5).\n\n**Format:**\n```ini\nlcd_writeintervall = seconds\n```\n\n**Example:**\n```ini\nlcd_writeintervall = 15\n```\n\n**Default:**\n```ini\nlcd_writeintervall = 10\n```", .status = 0 },
{ .param = "port", .config = "conf", .section = "newcamd", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_NEWCAMD` compilation flag)**\n\nTCP port/DES key/CAID/ident definitions. Each CAID requires a separate port. If you don't specify a DES key for a port, the default DES Key will be used!\n\n**Format:**\n```ini\nport = port[{DES key}]@CAID[:ident][,ident]...[;port[{DES key}]@CAID[:ident][,ident]...]...\n```\n\n**Example:**\n```ini\nport = 15000@1234:000000\n# CAID 1234 connected with port 15000\n\nport = 15000@1234:000000;15001@5678:000000\n# CAID 1234 connected with port 15000, CAID 5678 with port 15001\n```", .status = 0 }, { .param = "port", .config = "conf", .section = "newcamd", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_NEWCAMD` compilation flag)**\n\nTCP port/DES key/CAID/ident definitions. Each CAID requires a separate port. If you don't specify a DES key for a port, the default DES Key will be used!\n\n**Format:**\n```ini\nport = port[{DES key}]@CAID[:ident][,ident]...[;port[{DES key}]@CAID[:ident][,ident]...]...\n```\n\n**Example:**\n```ini\nport = 15000@1234:000000\n# CAID 1234 connected with port 15000\n\nport = 15000@1234:000000;15001@5678:000000\n# CAID 1234 connected with port 15000, CAID 5678 with port 15001\n```", .status = 0 },
{ .param = "serverip", .config = "conf", .section = "newcamd", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_NEWCAMD` compilation flag)**\n\nBind service to specified IP address.\n\n**Example:**\n```ini\nserverip = 192.168.178.1\n```\n\n**Default:**\n```ini\nserverip =\n```", .status = 0 }, { .param = "serverip", .config = "conf", .section = "newcamd", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_NEWCAMD` compilation flag)**\n\nBind service to specified IP address.\n\n**Example:**\n```ini\nserverip = 192.168.178.1\n```\n\n**Default:**\n```ini\nserverip =\n```", .status = 0 },
{ .param = "key", .config = "conf", .section = "newcamd", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_NEWCAMD` compilation flag)**\n\nDES key - Default key for newcamd client encryption.\n\n**Example:**\n```ini\nkey = 0102030405060708091011121314\n```", .status = 0 }, { .param = "key", .config = "conf", .section = "newcamd", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_NEWCAMD` compilation flag)**\n\nDES key - Default key for newcamd client encryption.\n\n**Example:**\n```ini\nkey = 0102030405060708091011121314\n```", .status = 0 },
@ -455,10 +528,46 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "nocrypt", .config = "conf", .section = "camd33", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD33` compilation flag)**\n\nUnsecured camd 3.3x client connection.\n\n**Format:**\n```ini\nnocrypt = IP address|IP address range[,IP address|IP address range]...\n```\n\n**Example:**\n```ini\nnocrypt = 127.0.0.1,192.168.0.0-192.168.255.255\n```\n\n**Default:**\n```ini\nnocrypt = # none\n```", .status = 0 }, { .param = "nocrypt", .config = "conf", .section = "camd33", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD33` compilation flag)**\n\nUnsecured camd 3.3x client connection.\n\n**Format:**\n```ini\nnocrypt = IP address|IP address range[,IP address|IP address range]...\n```\n\n**Example:**\n```ini\nnocrypt = 127.0.0.1,192.168.0.0-192.168.255.255\n```\n\n**Default:**\n```ini\nnocrypt = # none\n```", .status = 0 },
{ .param = "passive", .config = "conf", .section = "camd33", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD33` compilation flag)**\n\nForce passive camd 3.3x client.\n\nCamd3.3x protocol generally has active clients. In certain circumstances the client must be switched to \"passive\" mode only.\n\n**Example:**\n```ini\npassive = 1\n```\n\n**Default:**\n```ini\npassive = 0\n```", .status = 0 }, { .param = "passive", .config = "conf", .section = "camd33", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD33` compilation flag)**\n\nForce passive camd 3.3x client.\n\nCamd3.3x protocol generally has active clients. In certain circumstances the client must be switched to \"passive\" mode only.\n\n**Example:**\n```ini\npassive = 1\n```\n\n**Default:**\n```ini\npassive = 0\n```", .status = 0 },
{ .param = "key", .config = "conf", .section = "camd33", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD33` compilation flag)**\n\n128 bit key for camd 3.3x client encryption.\n\n**Example:**\n```ini\nkey = 01020304050607080910111213141516\n```\n\n**Default:**\n```ini\nkey = # none\n```", .status = 0 }, { .param = "key", .config = "conf", .section = "camd33", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD33` compilation flag)**\n\n128 bit key for camd 3.3x client encryption.\n\n**Example:**\n```ini\nkey = 01020304050607080910111213141516\n```\n\n**Default:**\n```ini\nkey = # none\n```", .status = 0 },
{ .param = "port", .config = "conf", .section = "cs357x", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_CAMD35` compilation flag)**\n\nUDP port for camd 3.5x|cs357x clients. Port must be opened at router!\n\n**Example:**\n```ini\nport = 15000\nport = 0 # disabled (default)\n```", .status = 0 },
{ .param = "serverip", .config = "conf", .section = "cs357x", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD35` compilation flag)**\n\nBind service to specified IP address.\n\n**Example:**\n```ini\nserverip = 192.168.178.1\n```\n\n**Default:**\n```ini\nserverip = # all (default)\n```", .status = 0 },
{ .param = "suppresscmd08", .config = "conf", .section = "cs357x", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD35` compilation flag)**\n\nTell camd35|cs3.57x-clients not to request again for rejected CAID, service ID and provider ID combination.\n\n```ini\nsuppresscmd08 = 0 # enabled (default)\nsuppresscmd08 = 1 # disabled\n```\n\n**Format:**\n```ini\nsuppresscmd08 = 0|1\n```\n\n**Example:**\n```ini\nsuppresscmd08 = 1\n```\n\n**Default:**\n```ini\nsuppresscmd08 = 0\n```\n\nCan be overwritten in oscam.user!\n\nMore information: [Streamboard-Thread](http://www.streamboard.tv/wbb2/thread.php?threadid=27459)", .status = 0 },
{ .param = "port", .config = "conf", .section = "cs378x", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_CAMD35_TCP` compilation flag)**\n\nPort(s) TCP for cs378x clients (camd 3.5x in TCP mode). Port(s) must be opened at router!\n\n**Format:**\n```ini\nport = port@CAID[:ident][,ident]...[;port@CAID[:ident][,ident]...]...\n```\n\n**Example:**\n```ini\nport = 15000@0500:030B00;22764@0648\n```", .status = 0 }, { .param = "port", .config = "conf", .section = "cs378x", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_CAMD35_TCP` compilation flag)**\n\nPort(s) TCP for cs378x clients (camd 3.5x in TCP mode). Port(s) must be opened at router!\n\n**Format:**\n```ini\nport = port@CAID[:ident][,ident]...[;port@CAID[:ident][,ident]...]...\n```\n\n**Example:**\n```ini\nport = 15000@0500:030B00;22764@0648\n```", .status = 0 },
{ .param = "serverip", .config = "conf", .section = "cs378x", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD35_TCP` compilation flag)**\n\nBind service to specified IP address.\n\n**Example:**\n```ini\nserverip = 192.168.178.1\n```\n\n**Default:**\n```ini\nserverip = # all (default)\n```", .status = 0 }, { .param = "serverip", .config = "conf", .section = "cs378x", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD35_TCP` compilation flag)**\n\nBind service to specified IP address.\n\n**Example:**\n```ini\nserverip = 192.168.178.1\n```\n\n**Default:**\n```ini\nserverip = # all (default)\n```", .status = 0 },
{ .param = "suppresscmd08", .config = "conf", .section = "cs378x", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD35_TCP` compilation flag)**\n\nTell cs3.78x clients not to request again for rejected CAID, service ID and provider ID combination.\n\n```ini\nsuppresscmd08 = 0 # enabled (default)\nsuppresscmd08 = 1 # disabled\n```\n\n**Format:**\n```ini\nsuppresscmd08 = 0|1\n```\n\n**Example:**\n```ini\nsuppresscmd08 = 1\n```\n\n**Default:**\n```ini\nsuppresscmd08 = 0\n```\n\nMore information: [Streamboard-Thread](http://www.streamboard.tv/wbb2/thread.php?threadid=27459)", .status = 0 }, { .param = "suppresscmd08", .config = "conf", .section = "cs378x", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_CAMD35_TCP` compilation flag)**\n\nTell cs3.78x clients not to request again for rejected CAID, service ID and provider ID combination.\n\n```ini\nsuppresscmd08 = 0 # enabled (default)\nsuppresscmd08 = 1 # disabled\n```\n\n**Format:**\n```ini\nsuppresscmd08 = 0|1\n```\n\n**Example:**\n```ini\nsuppresscmd08 = 1\n```\n\n**Default:**\n```ini\nsuppresscmd08 = 0\n```\n\nMore information: [Streamboard-Thread](http://www.streamboard.tv/wbb2/thread.php?threadid=27459)", .status = 0 },
{ .param = "port", .config = "conf", .section = "radegast", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_RADEGAST` compilation flag)**\n\nTCP/IP port for radegast clients (enables radegast).\n\n**Example:**\n```ini\nport = 15000\n```\n\n**Default:**\n```ini\nport = 0\n```", .status = 0 },
{ .param = "serverip", .config = "conf", .section = "radegast", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_RADEGAST` compilation flag)**\n\nBind service to specified IP address.\n\n**Example:**\n```ini\nserverip = 192.162.9.1\n```\n\n**Default:**\n```ini\nserverip = # all IPs allowed (default)\n```", .status = 0 },
{ .param = "allowed", .config = "conf", .section = "radegast", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_RADEGAST` compilation flag)**\n\nClient connections allowed from.\n\n**Format:**\n```ini\nallowed = IP address|IP range[,IP address|IP range]...\n```\n\n**Example:**\n```ini\nallowed = 127.0.0.1,192.168.0.0-192.168.255.255\n# Host and range 192.168.0 are allowed\n```", .status = 0 },
{ .param = "user", .config = "conf", .section = "radegast", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_RADEGAST` compilation flag)**\n\nUser name for radegast client.\n\n**Format:**\n```ini\nuser = username\n```", .status = 0 },
{ .param = "device", .config = "conf", .section = "serial", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_SERIAL` compilation flag)**\n\nParameter of device.\n\n**Format:**\n```ini\ndevice = <user>@<device>[:baud][?option1=value1][?option2=value2]\n```\n\n**Parameters:**\n- `user` = account\n- `device` = name of Serial Device\n- `option` = timeout = milliseconds timeout for connection (default: 50)\n- `option` = delay = milliseconds additive between 2 characters\n\n**Supported serial devices:**\n- HSIC - Humax Sharing Interface Client\n- SSSP - Simple Serial Sharing Protocol\n- bomba - BOMBA Firmware\n- dsr9500 - DSR 9500", .status = 0 },
{ .param = "pand_port", .config = "conf", .section = "pandora", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\npand_port = dummy", .status = 0 },
{ .param = "pand_srvid", .config = "conf", .section = "pandora", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\npand_srvid = dummy", .status = 0 },
{ .param = "pand_usr", .config = "conf", .section = "pandora", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\npand_usr = dummy", .status = 0 },
{ .param = "pand_pass", .config = "conf", .section = "pandora", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\npand_pass = dummy", .status = 0 },
{ .param = "pand_ecm", .config = "conf", .section = "pandora", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\npand_ecm = dummy", .status = 0 },
{ .param = "pand_skip_send_dw", .config = "conf", .section = "pandora", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\npand_skip_send_dw = dummy", .status = 0 },
{ .param = "pand_allowed", .config = "conf", .section = "pandora", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_PANDORA` compilation flag)**\n\npand_allowed = dummy", .status = 0 },
{ .param = "Minimal", .config = "conf", .section = "gbox", .text = "Let's say the gbox runs on host 192.168.1.101 and OSCam is on 192.168.1.123. In file **cwshare.cfg** on gbox side we have, for example, the following lines:\n\n```\nM: { 192.168.1.101 { A123BCDE }}\nD: { 192.168.1.123 { 3820 3819 { 98AF3E25 {3 3}}}}\n```\n\nIf oscam_gbox should connect to the original GBOX above, then you should configure OSCam as follows:\n\n**oscam.conf:**\n```ini\n[gbox]\nhostname = 192.168.1.123\nmy_password = 98AF3E25\nport = 3819\n```\n\n**oscam.server:**\n```ini\n[reader]\nprotocol = gbox\ngroup = 1\ndevice = 192.168.1.101,3820\npassword = A123BCDE\nuser = gbox_client_1\n```\n\n**oscam.user:**\n```ini\n[account]\nuser = gbox_client_1\ngroup = 1\n```", .status = 0 }, { .param = "Minimal", .config = "conf", .section = "gbox", .text = "Let's say the gbox runs on host 192.168.1.101 and OSCam is on 192.168.1.123. In file **cwshare.cfg** on gbox side we have, for example, the following lines:\n\n```\nM: { 192.168.1.101 { A123BCDE }}\nD: { 192.168.1.123 { 3820 3819 { 98AF3E25 {3 3}}}}\n```\n\nIf oscam_gbox should connect to the original GBOX above, then you should configure OSCam as follows:\n\n**oscam.conf:**\n```ini\n[gbox]\nhostname = 192.168.1.123\nmy_password = 98AF3E25\nport = 3819\n```\n\n**oscam.server:**\n```ini\n[reader]\nprotocol = gbox\ngroup = 1\ndevice = 192.168.1.101,3820\npassword = A123BCDE\nuser = gbox_client_1\n```\n\n**oscam.user:**\n```ini\n[account]\nuser = gbox_client_1\ngroup = 1\n```", .status = 0 },
{ .param = "port", .config = "conf", .section = "gbox", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nDefine incoming UDP port(s) used by Gbox protocol.\n\n**Format:**\n```ini\nport = port#1[[,port#2]...[,port#32]]\n```\n\nMaximum 32 ports.", .status = 0 },
{ .param = "hostname", .config = "conf", .section = "gbox", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nMy IP or DDNS.\n\n**Examples:**\n```ini\nhostname = 192.168.1.120\nhostname = willy.noip.org\n```", .status = 0 },
{ .param = "my_password", .config = "conf", .section = "gbox", .text = "**🔴 Required parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\n4 hex bytes, 8 characters.\n\n**Example:**\n```ini\nmy_password = 98AF3E25\n```", .status = 0 },
{ .param = "myid", .config = "conf", .section = "gbox", .text = "** Display only**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nThis is **not a configurable parameter**. The GBox ID (`myid`) is automatically calculated from `my_password` and displayed in the WebIF for informational purposes only.\n\nThe GBox ID is a 2-byte (4 hex character) identifier derived from the 4-byte password using a conversion algorithm. It uniquely identifies your GBox peer in the network.\n\n**Display in WebIF:**\n- Location: Configuration → GBox → \"My Id\"\n- Format: 4 hex characters (e.g., `3E25`)\n- Read-only: Cannot be modified directly\n\n**Note:** To change your GBox ID, you must change `my_password`. The ID will be recalculated automatically.", .status = 0 },
{ .param = "gbox_reconnect", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSend hello message to peers in seconds (min: 60, max: 300).\n\n**Format:**\n```ini\ngbox_reconnect = 60-300\n```\n\n**Example:**\n```ini\ngbox_reconnect = 120\n```\n\n**Default:**\n```ini\ngbox_reconnect = 180\n```", .status = 0 },
{ .param = "my_vers", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSet gbox version hexadecimal low byte.\n\n**Format:**\n```ini\nmy_vers = hex_byte\n```\n\n**Example:**\n```ini\nmy_vers = 30\n```\n\n**Default:**\n```ini\nmy_vers = 2A\n```", .status = 0 },
{ .param = "my_cpu_api", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSet gbox CPU and API byte in hexadecimal.\n\n**Format:**\n```ini\nmy_cpu_api = hex_byte\n```\n\n**Example:**\n```ini\nmy_cpu_api = 40\n```\n\n**Default:**\n```ini\nmy_cpu_api = 61\n```", .status = 0 },
{ .param = "gsms_disable", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nDisable Gbox Short Message Service (GSMS).\n\n```ini\ngsms_disable = 0 # GSMS is enabled\ngsms_disable = 1 # disable GSMS (default)\n```\n\n**Format:**\n```ini\ngsms_disable = 0|1\n```\n\n**Example:**\n```ini\ngsms_disable = 0\n```\n\n**Default:**\n```ini\ngsms_disable = 1\n```", .status = 0 },
{ .param = "gbox_save_gsms", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSave GSMS in configuration.\n\n```ini\ngbox_save_gsms = 0 # don't save GSMS in configuration\ngbox_save_gsms = 1 # save all GSMS field in configuration\n```\n\n⚠️ **Note:** You need to press save button to really save it!", .status = 0 },
{ .param = "dis_attack_txt", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nDisable creation of attack.txt.\n\n```ini\ndis_attack_txt = 0 # default\ndis_attack_txt = 1 # disable\n```\n\n**Format:**\n```ini\ndis_attack_txt = 0|1\n```\n\n**Example:**\n```ini\ndis_attack_txt = 1\n```\n\n**Default:**\n```ini\ndis_attack_txt = 0\n```", .status = 0 },
{ .param = "log_hello", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nDisplay hello messages in debug log.\n\n```ini\nlog_hello = 0\nlog_hello = 1 # default\n```\n\n**Format:**\n```ini\nlog_hello = 0|1\n```\n\n**Example:**\n```ini\nlog_hello = 0\n```\n\n**Default:**\n```ini\nlog_hello = 1\n```", .status = 0 },
{ .param = "tmp_dir", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nGbox temporary directory.\n\n**Format:**\n```ini\ntmp_dir = path\n```\n\n**Example:**\n```ini\ntmp_dir = /var/gbox\n```\n\n**Default:**\n```ini\ntmp_dir = /tmp/.oscam\n```", .status = 0 },
{ .param = "ignore_peer", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nIgnore specific peer ID(s).\n\n**Format:**\n```ini\nignore_peer = peer#1[[,peer#2]...[,peer#16]]\n```\n\nRules:\n- If peer = dist 1 → Login of peer rejected\n- If peer > dist 1 → card(s) of peer ignored", .status = 0 },
{ .param = "accept_remm_peer", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nAccept to send Remote EMMs to specified Server Peer-IDs.\n\n**Format:**\n```ini\naccept_remm_peer = peer#1[[,peer#2]...[,peer#8]]\n```", .status = 0 },
{ .param = "block_ecm", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nBlock ECM for specific peer ID(s).\n\n**Format:**\n```ini\nblock_ecm = peer#1[[,peer#2]...[,peer#16]]\n```", .status = 0 },
{ .param = "proxy_card", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nProxy reader card(s) to be reshared into gbox network.\n\n**Format:**\n```ini\nproxy_card = <CAID><provid>[,<CAID><provid>]...\n```\n\n**Example:**\n```ini\nproxy_card = 18300000,0D950400,05050F00\n```\n\n**Default:** none", .status = 0 },
{ .param = "gbox_save_gsms", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSave GSMS in configuration.\n\n```ini\ngbox_save_gsms = 0 # don't save GSMS in configuration\ngbox_save_gsms = 1 # save all GSMS field in configuration\n```\n\n⚠️ **Note:** You need to press save button to really save it!", .status = 0 },
{ .param = "gbox_msg_type", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nSet GSMS message type.\n\n**Format:**\n```ini\ngbox_msg_type = 0 # normal text message (default)\ngbox_msg_type = 1 # normal text message + OSD (On Screen Display)\n```\n\n**Example:**\n```ini\ngbox_msg_type = 1\n```\n\n**Default:**\n```ini\ngbox_msg_type = 0\n```", .status = 0 },
{ .param = "gbox_dest_peers", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nDestination peers for GSMS.\n\n**Format:**\n```ini\ngbox_dest_peers = [BOXID[,BOXID]...[,BOXID]]\n```\n\nMaximum 16 * 2 bytes (4 hexa digits), comma-separated. For broadcast to all use FFFF.", .status = 0 },
{ .param = "gbox_msg_txt", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nText to send to peers via GSMS.\n\n**Format:**\n```ini\ngbox_msg_txt = Your text to send to peers.\n```\n\nFrom 6 to 127 alphanumerical characters.", .status = 0 },
{ .param = "ccc_reshare", .config = "conf", .section = "gbox", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_GBOX` compilation flag)**\n\nEnable CCcam-cards to be reshared into gbox network (global setting).\n\n```ini\nccc_reshare = 0 # default\nccc_reshare = 1 # enable CCcam-cards reshare\n```\n\n**Format:**\n```ini\nccc_reshare = 0|1\n```\n\n**Example:**\n```ini\nccc_reshare = 1\n```\n\n**Default:**\n```ini\nccc_reshare = 0\n```\n\n⚠️ **Attention:** Peer specific reshare level to be set in oscam.server [reader] → cccam_reshare\n\n⚠️ **Attention:** Peer specific ident filter can be set in oscam.server [reader] → ccc_gbx_reshare_ident", .status = 0 },
{ .param = "Minimal", .config = "conf", .section = "streamrelay", .text = "The following example shows a basic Streamrelay setup where OSCam connects to a local Enigma2 receiver as stream source:\n\n```ini\n[streamrelay]\nstream_relay_enabled = 1\nstream_relay_port = 17999\nstream_relay_user = streamuser\nstream_source_host = 192.168.1.100\nstream_source_port = 8001\n```\n\nIn this setup:\n- OSCam listens on port 17999 for incoming client connections\n- The stream source is an Enigma2 box at 192.168.1.100:8001\n- The user `streamuser` must be defined in oscam.user\n\nClients can then connect to: `http://oscam-ip:17999/caid:srvid`", .status = 0 }, { .param = "Minimal", .config = "conf", .section = "streamrelay", .text = "The following example shows a basic Streamrelay setup where OSCam connects to a local Enigma2 receiver as stream source:\n\n```ini\n[streamrelay]\nstream_relay_enabled = 1\nstream_relay_port = 17999\nstream_relay_user = streamuser\nstream_source_host = 192.168.1.100\nstream_source_port = 8001\n```\n\nIn this setup:\n- OSCam listens on port 17999 for incoming client connections\n- The stream source is an Enigma2 box at 192.168.1.100:8001\n- The user `streamuser` must be defined in oscam.user\n\nClients can then connect to: `http://oscam-ip:17999/caid:srvid`", .status = 0 },
{ .param = "stream_relay_enabled", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nEnable or disable the Streamrelay server.\n\n```ini\nstream_relay_enabled = 0 # disabled (default)\nstream_relay_enabled = 1 # enabled\n```\n\n**Format:**\n```ini\nstream_relay_enabled = 0|1\n```\n\n**Example:**\n```ini\nstream_relay_enabled = 1\n```\n\n**Default:**\n```ini\nstream_relay_enabled = 0\n```", .status = 0 }, { .param = "stream_relay_enabled", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nEnable or disable the Streamrelay server.\n\n```ini\nstream_relay_enabled = 0 # disabled (default)\nstream_relay_enabled = 1 # enabled\n```\n\n**Format:**\n```ini\nstream_relay_enabled = 0|1\n```\n\n**Example:**\n```ini\nstream_relay_enabled = 1\n```\n\n**Default:**\n```ini\nstream_relay_enabled = 0\n```", .status = 0 },
{ .param = "stream_relay_port", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nTCP port on which the Streamrelay server listens for incoming client connections.\n\n**Example:**\n```ini\nstream_relay_port = 17999\n```\n\n**Default:**\n```ini\nstream_relay_port = 17999\n```", .status = 0 }, { .param = "stream_relay_port", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nTCP port on which the Streamrelay server listens for incoming client connections.\n\n**Example:**\n```ini\nstream_relay_port = 17999\n```\n\n**Default:**\n```ini\nstream_relay_port = 17999\n```", .status = 0 },
@ -474,8 +583,26 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "stream_display_client", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nDetermines which address is displayed for Streamrelay connections in the status display and WebIF.\n\n```ini\nstream_display_client = 0 # show stream client address (default)\nstream_display_client = 1 # show stream source host address\n```\n\n**Format:**\n```ini\nstream_display_client = 0|1\n```\n\n**Example:**\n```ini\nstream_display_client = 1\n```\n\n**Default:**\n```ini\nstream_display_client = 0\n```", .status = 0 }, { .param = "stream_display_client", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nDetermines which address is displayed for Streamrelay connections in the status display and WebIF.\n\n```ini\nstream_display_client = 0 # show stream client address (default)\nstream_display_client = 1 # show stream source host address\n```\n\n**Format:**\n```ini\nstream_display_client = 0|1\n```\n\n**Example:**\n```ini\nstream_display_client = 1\n```\n\n**Default:**\n```ini\nstream_display_client = 0\n```", .status = 0 },
{ .param = "stream_reuse_client", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nReuse existing client connections when the same client reconnects. This can reduce overhead for clients that frequently disconnect and reconnect (e.g., during channel changes).\n\n```ini\nstream_reuse_client = 0 # create new client connection each time (default)\nstream_reuse_client = 1 # reuse existing client connection\n```\n\n**Format:**\n```ini\nstream_reuse_client = 0|1\n```\n\n**Example:**\n```ini\nstream_reuse_client = 1\n```\n\n**Default:**\n```ini\nstream_reuse_client = 0\n```", .status = 0 }, { .param = "stream_reuse_client", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nReuse existing client connections when the same client reconnects. This can reduce overhead for clients that frequently disconnect and reconnect (e.g., during channel changes).\n\n```ini\nstream_reuse_client = 0 # create new client connection each time (default)\nstream_reuse_client = 1 # reuse existing client connection\n```\n\n**Format:**\n```ini\nstream_reuse_client = 0|1\n```\n\n**Example:**\n```ini\nstream_reuse_client = 1\n```\n\n**Default:**\n```ini\nstream_reuse_client = 0\n```", .status = 0 },
{ .param = "stream_hide_client", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` and `WEBIF` compilation flags)**\n\nHide Streamrelay clients from the WebIF status display. Useful to reduce clutter in environments with many stream connections.\n\n```ini\nstream_hide_client = 0 # show clients in WebIF (default)\nstream_hide_client = 1 # hide clients from WebIF\n```\n\n**Format:**\n```ini\nstream_hide_client = 0|1\n```\n\n**Example:**\n```ini\nstream_hide_client = 1\n```\n\n**Default:**\n```ini\nstream_hide_client = 0\n```\n\n⚠️ **Note:** This parameter is only available when OSCam is compiled with WebIF support.", .status = 0 }, { .param = "stream_hide_client", .config = "conf", .section = "streamrelay", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` and `WEBIF` compilation flags)**\n\nHide Streamrelay clients from the WebIF status display. Useful to reduce clutter in environments with many stream connections.\n\n```ini\nstream_hide_client = 0 # show clients in WebIF (default)\nstream_hide_client = 1 # hide clients from WebIF\n```\n\n**Format:**\n```ini\nstream_hide_client = 0|1\n```\n\n**Example:**\n```ini\nstream_hide_client = 1\n```\n\n**Default:**\n```ini\nstream_hide_client = 0\n```\n\n⚠️ **Note:** This parameter is only available when OSCam is compiled with WebIF support.", .status = 0 },
{ .param = "enabled", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nDVB API enabled.\n\n```ini\nenabled = 0 # disabled (default)\nenabled = 1 # enabled\n```\n\n**Format:**\n```ini\nenabled = 0|1\n```\n\n**Example:**\n```ini\nenabled = 1\n```\n\n**Default:**\n```ini\nenabled = 0\n```", .status = 0 },
{ .param = "au", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nAU mode for dvbapi.\n\n```ini\nau = 0 # disable AU (default)\nau = 1 # enable AU\n```\n\n**Format:**\n```ini\nau = 0|1\n```\n\n**Example:**\n```ini\nau = 1\n```\n\n**Default:**\n```ini\nau = 0\n```", .status = 0 },
{ .param = "pmt_mode", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nPMT mode.\n\n```ini\npmt_mode = 0 # use camd.socket and PMT file (default)\npmt_mode = 1 # disable reading PMT file\npmt_mode = 2 # disable camd.socket\npmt_mode = 3 # read PMT file on startup only\npmt_mode = 4 # do not use signal handler for monitoring /tmp\npmt_mode = 5 # do not use signal handler to monitor /tmp & disable camd.socket\npmt_mode = 6 # use PMT server mode (NEW svn8680:05/06/2013)\n```\n\n**Format:**\n```ini\npmt_mode = 0|1|2|3|4|5|6\n```\n\n**Example:**\n```ini\npmt_mode = 6\n```\n\n**Default:**\n```ini\npmt_mode = 0\n```", .status = 0 },
{ .param = "request_mode", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nCAID request mode.\n\n```ini\nrequest_mode = 0 # try all possible CAIDs one by one (default)\nrequest_mode = 1 # try all CAIDs simultaneously\n```\n\n**Format:**\n```ini\nrequest_mode = 0|1\n```\n\n**Example:**\n```ini\nrequest_mode = 1\n```\n\n**Default:**\n```ini\nrequest_mode = 0\n```", .status = 0 },
{ .param = "listen_port", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nTCP/IP port for SAT IP clients, filtering has to be done on client site.\n\n**Format:**\n```ini\nlisten_port = port\n```\n\n**Example:**\n```ini\nlisten_port = 9000\n```\n\n**Default:**\n```ini\nlisten_port = 0\n```", .status = 0 },
{ .param = "delayer", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nMinimum time to write CW.\n\n**Format:**\n```ini\ndelayer = milliseconds\n```", .status = 0 },
{ .param = "ecminfo_file", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nEnable or disable writing ecm.info file. The ecm.info file contains information about the current decryption.\n\n**Format:**\n```ini\necminfo_file = 0|1\n```\n\n**Example:**\n```ini\necminfo_file = 1\n```\n\n**Default:**\n```ini\necminfo_file = 1\n```", .status = 0 },
{ .param = "ecminfo_type", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nDefine the type of ecm.info file to create.\n\n**Format:**\n```ini\necminfo_type = 0 # default oscam syntax\necminfo_type = 1 # default oscam syntax with ecmtime in ms instead of s\necminfo_type = 2 # wicardd\necminfo_type = 3 # mgcamd\necminfo_type = 4 # cccam\necminfo_type = 5 # camd3\n```\n\n**Example:**\n```ini\necminfo_type = 3\n```\n\n**Default:**\n```ini\necminfo_type = 0\n```", .status = 0 },
{ .param = "user", .config = "conf", .section = "dvbapi", .text = "**🔴 Required parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nUser name for DVB API client.\n\n**Example:**\n```ini\nuser = user1\n```\n\n**Default:**\n```ini\nuser = # anonymous\n```", .status = 0 },
{ .param = "read_sdt", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nIf it is not yet available, this option automatically adds entries in your oscam.srvid2 (or oscam.srvid) and in your oscam.provid files. You need to stay **more than 30 seconds** on a channel for the auto-detect to start. So both channel name and provider name are retrieved. If entries already exist they are not changed nor updated, so you keep full control on the content of both files, only missing entries are added.\n\n```ini\nread_sdt = 0 # disabled (default)\nread_sdt = 1 # on, do not save FTA channels\nread_sdt = 2 # on, save FTA channels\n```\n\n**Format:**\n```ini\nread_sdt = 0|1|2\n```\n\n**Example:**\n```ini\nread_sdt = 1\n```\n\n**Default:**\n```ini\nread_sdt = 0\n```", .status = 0 },
{ .param = "write_sdt_prov", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nFirst enable the read_sdt parameter then you can specify if the provider name is saved or not into the oscam.srvid2 or oscam.srvid file. This is not mandatory since the provider name is now retrieved automatically from the oscam.provid file.\n\n```ini\nwrite_sdt_prov = 0 # off, do not write provider name into oscam.srvid/2 (default)\nwrite_sdt_prov = 1 # on, write provider name into oscam.srvid/2\n```\n\n**Format:**\n```ini\nwrite_sdt_prov = 0|1\n```\n\n**Example:**\n```ini\nwrite_sdt_prov = 1\n```\n\n**Default:**\n```ini\nwrite_sdt_prov = 0\n```", .status = 0 },
{ .param = "extended_cw_api", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_EXTENDED_CW` compilation flag)**\n\nAPI for extended control words.\n\n**Format:**\n```ini\nextended_cw_api = 0 # none / disabled (default)\nextended_cw_api = 1 # OE2.2+ (OpenEmbedded 2.2, 2.5)\nextended_cw_api = 2 # OE2.0 (OpenEmbedded 2.0)\n```\n\n**Example:**\n```ini\nextended_cw_api = 1\n```\n\n**Default:**\n```ini\nextended_cw_api = 0\n```", .status = 0 }, { .param = "extended_cw_api", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_EXTENDED_CW` compilation flag)**\n\nAPI for extended control words.\n\n**Format:**\n```ini\nextended_cw_api = 0 # none / disabled (default)\nextended_cw_api = 1 # OE2.2+ (OpenEmbedded 2.2, 2.5)\nextended_cw_api = 2 # OE2.0 (OpenEmbedded 2.0)\n```\n\n**Example:**\n```ini\nextended_cw_api = 1\n```\n\n**Default:**\n```ini\nextended_cw_api = 0\n```", .status = 0 },
{ .param = "demuxer_fix", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nFix for demuxer issues related to Stream Relay. Enable this if you experience problems with stream relay and demuxing.\n\n**Format:**\n```ini\ndemuxer_fix = 0|1\n```\n\n**Example:**\n```ini\ndemuxer_fix = 1\n```\n\n**Default:**\n```ini\ndemuxer_fix = 0\n```", .status = 0 }, { .param = "demuxer_fix", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_STREAMRELAY` compilation flag)**\n\nFix for demuxer issues related to Stream Relay. Enable this if you experience problems with stream relay and demuxing.\n\n**Format:**\n```ini\ndemuxer_fix = 0|1\n```\n\n**Example:**\n```ini\ndemuxer_fix = 1\n```\n\n**Default:**\n```ini\ndemuxer_fix = 0\n```", .status = 0 },
{ .param = "boxtype", .config = "conf", .section = "dvbapi", .text = "**🔴 Required parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nSet boxtype, auto detection of DVB API will be aspired.\n\n**Format:**\n```ini\nboxtype = dbox2|dreambox|dm7000|duckbox|ufs910|ipbox|ipbox-pmt|qboxhd|coolstream|neumo|pc\n```\n\n**Notes:**\n- `ipbox` with camd.socket support, currently only with PGI image version 0.6 or above, verified on HD models only\n- `ipbox-pmt` can be used on any DGS based images (with or without camd.socket support), verified on HD models only\n- `pc` is for generic pc support (currently supported on VDR with vdr-plugin-dvbapi)\n\n**Default:**\n```ini\nboxtype = dreambox\n```", .status = 0 },
{ .param = "services", .config = "conf", .section = "dvbapi", .text = "**🟢 Optional parameter**\n\n**(requires `HAVE_DVBAPI` compilation flag)**\n\nServices filter for DVBAPI. Define which services (from oscam.services) are allowed or denied for DVBAPI.\n\n**Format:**\n```ini\nservices = [!]services1[,[!]services2]...\n```\n\n**Example:**\n```ini\nservices = myservices,!blockedservices\n```\n\n**Default:**\n```ini\nservices =\n```", .status = 0 },
{ .param = "port", .config = "conf", .section = "monitor", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_MONITOR` compilation flag)**\n\nUDP port for monitor.\n\n```ini\nport = 0 # monitor disabled\nport = 24480 # monitor on, port = 24480\n```\n\n**Example:**\n```ini\nport = 24480 # monitor on, port = 24480\n```", .status = 0 },
{ .param = "serverip", .config = "conf", .section = "monitor", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_MONITOR` compilation flag)**\n\nBind service to specified IP address.\n\n**Example:**\n```ini\nserverip = 192.168.178.1\n```\n\n**Default:**\n```ini\nserverip = # all IPs (default)\n```", .status = 0 },
{ .param = "nocrypt", .config = "conf", .section = "monitor", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_MONITOR` compilation flag)**\n\nUnsecured monitor connection [,IP address|IP address range]...\n\nPossible:\n- One or more IP addresses\n- One or more IP address ranges\n- Mixture of IP addresses and IP address ranges\n\n**Example:**\n```ini\nnocrypt = 127.0.0.1,192.168.0.0-192.168.255.255\n# Host 127.0.0.1 and IP range 192.168.0.0 to 192.168.255.255\n```\n\n**Default:**\n```ini\nnocrypt = # no secured monitor connection\n```", .status = 0 },
{ .param = "aulow", .config = "conf", .section = "monitor", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_MONITOR` compilation flag)**\n\nTime no EMM occurs so that client is set to low in minutes.\n\n**Example:**\n```ini\naulow = 30 # After 30 minutes without EMM client will be switched\n # from \"active\" to \"on\" (default)\n```", .status = 0 },
{ .param = "monlevel", .config = "conf", .section = "monitor", .text = "**🟢 Optional parameter**\n\n**(requires `MODULE_MONITOR` compilation flag)**\n\nMonitor-level.\n\n**Format:**\n```ini\nmonlevel = 0 # no access to monitor (default)\nmonlevel = 1 # only server and own procs\nmonlevel = 2 # all procs, but viewing only\nmonlevel = 3 # all procs, reload of oscam.user possible\nmonlevel = 4 # complete access\n```\n\n**Example:**\n```ini\nmonlevel = 4\n```\n\n**Default:**\n```ini\nmonlevel = 0\n```\n\nmonlevel can be overwritten per user in oscam.user!", .status = 0 },
{ .param = "File", .config = "conf", .section = "webif", .text = "⚠️ **Attention:**\n- File has to be in TXT format\n- The EMM-file should contain each PRE-CAM EMM in a new line\n- EMMs should be in HEX representation:\n - Example: `AABBCCDD...`\n- Spaces and tabs between the bytes are allowed:\n - `AA BB CC DD...`\n- The HEX representation of each EMM's byte can be represented by upper or lower case - even mixed is allowed:\n - `AA aa Aa aA...`\n- Other chars and comments are not allowed", .status = 0 }, { .param = "File", .config = "conf", .section = "webif", .text = "⚠️ **Attention:**\n- File has to be in TXT format\n- The EMM-file should contain each PRE-CAM EMM in a new line\n- EMMs should be in HEX representation:\n - Example: `AABBCCDD...`\n- Spaces and tabs between the bytes are allowed:\n - `AA BB CC DD...`\n- The HEX representation of each EMM's byte can be represented by upper or lower case - even mixed is allowed:\n - `AA aa Aa aA...`\n- Other chars and comments are not allowed", .status = 0 },
{ .param = "httpport", .config = "conf", .section = "webif", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` compilation flag)**\n\nPort for web interface.\n\n**Format:**\n```ini\nhttpport = 0 # disabled\nhttpport = port # Webinterface listening on http-port\nhttpport = +port # Webinterface listening on https-port (SSL), prefix + enables SSL\n```\n\n**Example:**\n```ini\nhttpport = 8888\nhttpport = +443\n```\n\n**Default:**\n```ini\nhttpport = 8888\n```", .status = 0 }, { .param = "httpport", .config = "conf", .section = "webif", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` compilation flag)**\n\nPort for web interface.\n\n**Format:**\n```ini\nhttpport = 0 # disabled\nhttpport = port # Webinterface listening on http-port\nhttpport = +port # Webinterface listening on https-port (SSL), prefix + enables SSL\n```\n\n**Example:**\n```ini\nhttpport = 8888\nhttpport = +443\n```\n\n**Default:**\n```ini\nhttpport = 8888\n```", .status = 0 },
{ .param = "httpuser", .config = "conf", .section = "webif", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` compilation flag)**\n\nUsername for password protection. Blank is default, which is strongly discouraged!\n\n**Example:**\n```ini\nhttpuser = myusername # all characters and figures are allowed\n```", .status = 0 }, { .param = "httpuser", .config = "conf", .section = "webif", .text = "**🟢 Optional parameter**\n\n**(requires `WEBIF` compilation flag)**\n\nUsername for password protection. Blank is default, which is strongly discouraged!\n\n**Example:**\n```ini\nhttpuser = myusername # all characters and figures are allowed\n```", .status = 0 },
@ -588,6 +715,15 @@ static const struct wiki_entry wiki_entries[] = {
{ .param = "cccreshare", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReshare level for CCcam clients.\n\n```ini\ncccreshare = -1 # use reshare level defined in oscam.conf (default)\ncccreshare = 0 # reshare for direct peer only\ncccreshare = 1 # resharing for direct peer and next level\n```\n\n**Format:**\n```ini\ncccreshare = -1|0|1|...\n```\n\n**Example:**\n```ini\ncccreshare = 1\n```\n\n**Default:**\n```ini\ncccreshare = -1\n```\n\nReshare could be defined in 2 ways:\n- reader (`cccreshare`)\n- user-account (`cccreshare`)\n\nA card's reshare value is set to the smallest value of the 2 parameters!", .status = 0 }, { .param = "cccreshare", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nReshare level for CCcam clients.\n\n```ini\ncccreshare = -1 # use reshare level defined in oscam.conf (default)\ncccreshare = 0 # reshare for direct peer only\ncccreshare = 1 # resharing for direct peer and next level\n```\n\n**Format:**\n```ini\ncccreshare = -1|0|1|...\n```\n\n**Example:**\n```ini\ncccreshare = 1\n```\n\n**Default:**\n```ini\ncccreshare = -1\n```\n\nReshare could be defined in 2 ways:\n- reader (`cccreshare`)\n- user-account (`cccreshare`)\n\nA card's reshare value is set to the smallest value of the 2 parameters!", .status = 0 },
{ .param = "cccignorereshare", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nOnly if CCcam proxies or CCcam server are used!\n\nCCcam ignore reshare settings.\n\n```ini\ncccignorereshare = -1 # use ignore reshare level of oscam.conf [ccc] (default)\ncccignorereshare = 0 # use ignore reshare level of server\ncccignorereshare = 1 # use ignore reshare level of reader or user\n```\n\n**Format:**\n```ini\ncccignorereshare = -1|0|1\n```\n\n**Example:**\n```ini\ncccignorereshare = 1\n```\n\n**Default:**\n```ini\ncccignorereshare = -1\n```", .status = 0 }, { .param = "cccignorereshare", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nOnly if CCcam proxies or CCcam server are used!\n\nCCcam ignore reshare settings.\n\n```ini\ncccignorereshare = -1 # use ignore reshare level of oscam.conf [ccc] (default)\ncccignorereshare = 0 # use ignore reshare level of server\ncccignorereshare = 1 # use ignore reshare level of reader or user\n```\n\n**Format:**\n```ini\ncccignorereshare = -1|0|1\n```\n\n**Example:**\n```ini\ncccignorereshare = 1\n```\n\n**Default:**\n```ini\ncccignorereshare = -1\n```", .status = 0 },
{ .param = "cccstealth", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nCCcam stealth mode.\n\n```ini\ncccstealth = -1 # use CCcam stealth of oscam.conf [ccc] (default)\ncccstealth = 0 # use extended OSCam-CCcam-protocol\ncccstealth = 1 # behavior like the original CCcam-protocol,\n # no activate partner detection and extended OSCam-CCcam-protocol,\n # prevent other OSCam to detect the server as OSCam-server\n```\n\n**Format:**\n```ini\ncccstealth = -1|0|1\n```\n\n**Example:**\n```ini\ncccstealth = 1\n```\n\n**Default:**\n```ini\ncccstealth = -1\n```", .status = 0 }, { .param = "cccstealth", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `MODULE_CCCAM` compilation flag)**\n\nCCcam stealth mode.\n\n```ini\ncccstealth = -1 # use CCcam stealth of oscam.conf [ccc] (default)\ncccstealth = 0 # use extended OSCam-CCcam-protocol\ncccstealth = 1 # behavior like the original CCcam-protocol,\n # no activate partner detection and extended OSCam-CCcam-protocol,\n # prevent other OSCam to detect the server as OSCam-server\n```\n\n**Format:**\n```ini\ncccstealth = -1|0|1\n```\n\n**Example:**\n```ini\ncccstealth = 1\n```\n\n**Default:**\n```ini\ncccstealth = -1\n```", .status = 0 },
{ .param = "fakedelay", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nSet fake delay time individually for user.\n\n```ini\nfakedelay = 0 # fake delay disabled\nfakedelay = -1 # fake delay of oscam.conf[global] (default)\nfakedelay = nn # fake delay in milliseconds for user\n```\n\n**Format:**\n```ini\nfakedelay = -1|0|milliseconds\n```\n\n**Example:**\n```ini\nfakedelay = 500\n```\n\n**Default:**\n```ini\nfakedelay = -1\n```", .status = 0 },
{ .param = "numusers", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nUsed only if anticascading is enabled!\n\nUser per account.\n\n```ini\nnumusers = -1 # global value from oscam.conf, default\nnumusers = 5 # maximal 5 users\nnumusers = 0 # anticascading disabled\n```\n\n**Format:**\n```ini\nnumusers = -1|0|count\n```\n\n**Example:**\n```ini\nnumusers = 5\n```\n\n**Default:**\n```ini\nnumusers = -1\n```", .status = 0 },
{ .param = "penalty", .config = "user", .section = "account", .text = "**🔵 Parameter depends on setup/program version**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nUsed only if anticascading is enabled!\n\nLevel of penalty:\n\n```ini\npenalty = -1 # use value of penalty defined in oscam.conf (default)\npenalty = 0 # only logging\npenalty = 1 # send fake DWs\npenalty = 2 # ban user temporary\npenalty = 3 # send DWs with delay (fakedelay)\n```\n\n**Format:**\n```ini\npenalty = -1|0|1|2|3\n```\n\n**Example:**\n```ini\npenalty = 2\n```\n\n**Default:**\n```ini\npenalty = -1\n```", .status = 0 },
{ .param = "acosc_max_ecms_per_minute", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nMaximum ECM requests allowed per minute for anticascading over SIDs count (ACoSC) for this user.\n\n**Format:**\n```ini\nacosc_max_ecms_per_minute = -1|0|count\n```\n\n**Example:**\n```ini\nacosc_max_ecms_per_minute = 10\n```\n\n**Default:**\n```ini\nacosc_max_ecms_per_minute = -1\n```\n\n- `-1` = use global setting from oscam.conf\n- `0` = unlimited\n- `count` = limit to count ECMs per minute", .status = 0 },
{ .param = "acosc_max_active_sids", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nMaximum active SIDs with anti-cascading over SID.\n\n```ini\nacosc_max_active_sids = 0 # unlimited, default\nacosc_max_active_sids = -1 # use global setting from oscam.conf [global]\n```\n\n**Format:**\n```ini\nacosc_max_active_sids = -1|0|count\n```\n\n**Example:**\n```ini\nacosc_max_active_sids = 5\n```\n\n**Default:**\n```ini\nacosc_max_active_sids = 0\n```", .status = 0 },
{ .param = "acosc_zap_limit", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nZap-limit for anticascading over SID.\n\n```ini\nacosc_zap_limit = 0 # unlimited, default\nacosc_zap_limit = -1 # use global setting from oscam.conf[global]\n```\n\n**Format:**\n```ini\nacosc_zap_limit = -1|0|count\n```\n\n**Example:**\n```ini\nacosc_zap_limit = 10\n```\n\n**Default:**\n```ini\nacosc_zap_limit = 0\n```", .status = 0 },
{ .param = "acosc_penalty", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nLevel of penalty with anti-cascading over SID.\n\n```ini\nacosc_penalty = -1 # use global setting from oscam.conf [global]\nacosc_penalty = 0 # only logging, default\nacosc_penalty = 1 # send fake CW's\nacosc_penalty = 2 # temporary user ban\nacosc_penalty = 3 # send delayed CW's\n```\n\n**Format:**\n```ini\nacosc_penalty = -1|0|1|2|3\n```\n\n**Example:**\n```ini\nacosc_penalty = 2\n```\n\n**Default:**\n```ini\nacosc_penalty = 0\n```", .status = 0 },
{ .param = "acosc_penalty_duration", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nPenalty duration for anti-cascading over SID (seconds).\n\n```ini\nacosc_penalty_duration = 0 # none, default\nacosc_penalty_duration = -1 # use global setting from oscam.conf[global]\n```\n\n**Format:**\n```ini\nacosc_penalty_duration = -1|0|seconds\n```\n\n**Example:**\n```ini\nacosc_penalty_duration = 300\n```\n\n**Default:**\n```ini\nacosc_penalty_duration = 0\n```", .status = 0 },
{ .param = "acosc_delay", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `CS_ANTICASC` compilation flag)**\n\nDuration of delay for anti-cascading over SID (milliseconds).\n\n```ini\nacosc_delay = 0 # none, default\nacosc_delay = -1 # use global setting from oscam.conf[global]\n```\n\n**Format:**\n```ini\nacosc_delay = -1|0|milliseconds\n```\n\n**Example:**\n```ini\nacosc_delay = 500\n```\n\n**Default:**\n```ini\nacosc_delay = 0\n```", .status = 0 },
{ .param = "lb_nbest_readers", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of best readers for load balancing.\n\n```ini\nlb_nbest_readers = -1 # use global lb_nbest_readers in oscam.conf\nlb_nbest_readers = 1 # default\n```\n\n**Format:**\n```ini\nlb_nbest_readers = -1|count\n```\n\n**Example:**\n```ini\nlb_nbest_readers = 2\n```\n\n**Default:**\n```ini\nlb_nbest_readers = 1\n```", .status = 0 }, { .param = "lb_nbest_readers", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of best readers for load balancing.\n\n```ini\nlb_nbest_readers = -1 # use global lb_nbest_readers in oscam.conf\nlb_nbest_readers = 1 # default\n```\n\n**Format:**\n```ini\nlb_nbest_readers = -1|count\n```\n\n**Example:**\n```ini\nlb_nbest_readers = 2\n```\n\n**Default:**\n```ini\nlb_nbest_readers = 1\n```", .status = 0 },
{ .param = "lb_nfb_readers", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of fallback readers for load balancing for this user.\n\n**Format:**\n```ini\nlb_nfb_readers = -1|count\n```\n\n**Example:**\n```ini\nlb_nfb_readers = 2\n```\n\n**Default:**\n```ini\nlb_nfb_readers = -1\n```\n\n`-1` = use global lb_nfb_readers in oscam.conf", .status = 0 }, { .param = "lb_nfb_readers", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of fallback readers for load balancing for this user.\n\n**Format:**\n```ini\nlb_nfb_readers = -1|count\n```\n\n**Example:**\n```ini\nlb_nfb_readers = 2\n```\n\n**Default:**\n```ini\nlb_nfb_readers = -1\n```\n\n`-1` = use global lb_nfb_readers in oscam.conf", .status = 0 },
{ .param = "lb_nbest_percaid", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of best readers per CAIDs for load balancing, wildcards CAIDs with two-digit CAIDs possible.\n\n**Example:**\n```ini\nlb_nbest_percaid = 0100:4,0200:3,03:2,04:1 # wildcards CAIDs 03xx and 04xx\n```\n\n**Default:** none", .status = 0 }, { .param = "lb_nbest_percaid", .config = "user", .section = "account", .text = "**🟢 Optional parameter**\n\n**(requires `WITH_LB` compilation flag)**\n\nSet count of best readers per CAIDs for load balancing, wildcards CAIDs with two-digit CAIDs possible.\n\n**Example:**\n```ini\nlb_nbest_percaid = 0100:4,0200:3,03:2,04:1 # wildcards CAIDs 03xx and 04xx\n```\n\n**Default:** none", .status = 0 },