Welcome to newcamd - the next generation!

In newcamd-cardserver-tng the cardserver has been completely rewritten from
scratch. Old cardservers and old camd-cardserver.o will NOT work with this
newcamd. Config files have to be looked at too, some options have changed.
Also newcamd's interface to Enigma and Zapit has been improved. From now
on, it is not necessary any longer to change Enigma or Zapit sources to make
it work with newcamd. Just replace camd2 or dccamd with newcamd.

This package is freeware. Distribution and usage is allowed only if you
agree and comply to the following rules:

1. For standalone (outside of flash images) distribution, you are NOT allowed
to make any changes to the original ZIP archive whatsoever. Distributions of
newcamd must not include any keys or Nagra ROMs.
2. Distribution of newcamd inside flash images is allowed, if no keys or
Nagra ROMs are included in the same flash image. Full documentation must be
provided in the flash image. Files keylist, rsakeylist, tpscrypt, ppua,
readme.txt and nagraAU.txt must be present in /var/scce (/var_init/scce on
Dreambox), files newcamd.conf, cardserv.cfg and betad.cfg must be present
in directory /var/tuxbox/config (/var_init/tuxbox/config on Dreambox). Files
in scce must be copied from the original Zip archive, they may not be changed.
Options in config files may be changed, but all the comments must be left
unchanged.
3. Distribution of patched newcamd, cardserver, betad and/or dcd binaries is
strictly prohibited.

Dieses Paket ist Freeware. Weiterverbreitung ist nur unter Einhaltung der
folgenden Regeln gestattet:

1. Das Original ZIP Archiv darf NICHT veraendert werden. Insbesondere duerfen
keine Keys oder Nagra ROMs enthalten sein.
2. Die Weiterverbreitung in Flash-Images ist nur erlaubt, wenn keine Keys oder
Nagra ROMs im Image enthalten sind. Die komplette Dokumentation muss im Image
vorhanden sein. Die Dateien keylist, rsakeylist, tpscrypt, ppua, readme.txt
und nagraAU.txt muessen in unveraenderter Form ins Verzeichnis /var/scce im
Image kopiert werden (/var_init/scce in Dreambox Images), die Dateien
newcamd.conf, cardserv.cfg und betad.cfg muessen ins Verzeichnis
/var/tuxbox/config (bzw. /var_init/tuxbox/config bei Dreambox Images) kopiert
werden. Konfigurationsoptionen duerfen angepasst werden, aber die Kommentare
muessen unveraendert bleiben.
3. Die Weitergabe von gepatchten newcamd, cardserver, betad und/oder dcd
Binaries ist ausdruecklich untersagt.

History:

newcamd-cardserver-tng14
fix segfault on Conax Emu when keys were missing
entitlement dump for Viaccess added

newcamd-cardserver-tng13
fix S2 Ident 0067 handling
cardserver: add TCP port to ask cardserver about entitlements on smartcards
(currently working for Seca, Conax, Cryptoworks)
support non-standard baudrates for Phoenix cardreader on Dreambox serial port

newcamd-cardserver-tng12
another change of newcamd<->cardserver protocol, binaries from this package
are incompatible to older versions
fix Irdeto AU bug
fix cardserver for newest Conax cards (blue)
exclude service id's from being shared (so noone can steal your PPV preview
anymore) - see cardserv.cfg for details

newcamd-cardserver-tng11
add Conax algo 63

newcamd-cardserver-tng10
EMM support for dcd
ECM override feature to use ECM pids from different channels on the same
transponder, tested on Pink M, 5 West, install ecmoverride in /var/scce

newcamd-cardserver-tng9
support for Mediaguard V1+ ident 0064
Mediaguard V1+ AU and SHA-1 signature checking

newcamd-cardserver-tng8
rsakeylist format changed: added new provider ident field
fix occasional freezes on Mediaguard V1+ emu
rsa keys for Mediaguard V1+ providers must now be put in rsakeylist
dcd added (Dreamcrypt daemon for Dreamcrypt cards), use it just like betad

newcamd-cardserver-tng7
Mediaguard V1+ emu for idents 0070, 0071, 0072,
put opkeys /var/scce/keylist just as you would Seca1 keys

newcamd-cardserver-tng6
workarounds for Dreambox demux1 driver broke PMT update handling - fixed
cardserver.dream can now handle Irdeto2 cards in Dreambox card slots
new newcamd.conf paraeter: CA_INFO_FILE

newcamd-cardserver-tng5
change of newcamd<->cardserver protocol, binaries from this package are
incompatible to older versions
added radegast->newcamd protocol converter - you can use cards from
radegast server in newcamd
Nagra AU
fix Irdeto multiple ecm for cardservers
increase timeout for Irdeto multiple ecm for Nova Greece
add timestamps on console log
workarounds for buggy Dreambox demux1 driver
support for Dreambox 5600 (untested)
support for dbox2 ca1 driver 
changed newcamd.conf parameters: BOX_TYPE, CONTROL_WORD_DEVICE, CA_API
new debug options SHOW_CWS_ECM, SHOW_CWS_EMM - show network traffic

newcamd-cardserver-tng4
fixes pt 2
added cwldec file recorder - for details see cwldec-0.0.1.zip on esaee
(Feb 13th, 2004), start/stop recording with camdcmd, option cwlfile,
files are put in /tmp and are named MMDDHHMM.cwl (month/day/hour/minute)
the cwldec file recorder is not available, if newcamd is connected to
a Premiere card in betad to prevent recording of Premiere control words

newcamd-cardserver-tng3
fixes pt 1

newcamd-cardserver-tng2
fix cardserver atr recognition of HRT Viaccess 2 card

newcamd-cardserver-tng1
New cardserver with sc8in1 support - one server for all cards (except for
Betacrypt). Login in both directions, separation of LAN and WAN connections,
client to trigger reconnect of WAN connections.
new newcamd interface to Enigma and Zapit - no changes are required in Zapit
or Enigma to use newcamd

Installation:

Copy newcamd.conf to /var/tuxbox/config (dbox2/Dreambox) or /etc (i386).
Check the config file and alter it for your needs.
Copy keylist, rsakeylist, ppua, tpscrypt, priority, mappings, nagra*.bin to
/var/scce
Enter keys into the keyfiles.
Install control word driver, avia_gt_proc.o (dbox2) or DVB-S driver with
changed root file (i386). Dreambox has control word driver included in
dream.o from Release 1.07. 1.07.2 uses api2 ca0 device in /dev/ca0, dream.o
from 1.07.3 and up use api3 ca0 device in /dev/dvb/card0/ca0.
From newcamd-cardserver-tng5 dbox2 can also use ca1 device, no avia_gt_proc.o
is needed in this case.

With CW_OUTPUT_MODE = 16 newcamd will write the descrambled control words to
/proc/bus/gtx (dbox2), 16 bytes with each write, first 8 byte odd control
word, then 8 byte even control word. With CW_OUTPUT_MODE = 4096 newcamd writes
4096 bytes to /proc/bus/gtx, just like the very first camds did.
On I386 newcamd or BOX_TYPE = DREAMBOX this parameter is ignored, because
control words are written to the ca0 device.

dbox2 users should deactivate hardware section filtering on API3 drivers, for
some reason, which illudes me, the demuxer keeps crashing from time to time
when using newcamd.

Changes to Zapit/Enigma:

Beginning with newcamd-cardserver1 no changes are necessary in recent Zapit
or Enigma sources. Just use newcamd instead of camd2 or dccamd. Make sure to
set PMT_UPDATE_WATCH correctly for the zapper, you are using.
The old newcamd interface also still works for backward compatibility and
for older Zapit and Enigma versions, that don't support the current ca pmt
interface yet. The old interface is described below (see zapit-Anpassung).

Killing newcamd

This seems to be a big problem, from what I can read in certain Internet
forums (Posts like "newcamd never saves any AU keys", well if you kill it
with the -9 option, you're not giving newcamd a chance to save anything).
So, this is, how it's done right: newcamd, during startup, always creates a 
file /tmp/newcamd.pid. Kill that pid (pid = process id) and newcamd will
shut down orderly. For example: kill `cat /tmp/newcamd.pid`

/tmp/pmt.tmp and Polsat acceleration (optional)
(no effect for PMT_UPDATE_WATCH = no and new interface)

Let your zapper create a file called /tmp/pmt.tmp, newcamd can read this
and don't need to demux the channel's pmt again, which is faster.
For example in zapit/src/zapsi/pmt.cpp in function parse_pmt:

FILE* pmtFile;

then after the PMT was read from the demuxer:

section_length = ((buffer[1] & 0x0F) << 8) + buffer[2] + 3;

if ((pmtFile = fopen("/tmp/pmt.tmp", "wb")))
{
        if (fwrite(buffer, sizeof(unsigned char), section_length, pmtFile) != section_length)
        {
                fclose(pmtFile);
                unlink("/tmp/pmt.tmp");
        }
        else
        {
                fclose(pmtFile);
        }
}


zapit-Anpassung (altes Interface):

Folgende Funktionen muessen in zapit.cpp hinzugefuegt werden und an
entsprechender Stelle bei jedem Kanalwechsel aufgerufen werden. Fuer Polsat
empfiehlt es sich ausserdem, in zapost/dmx.cpp den Timeout fuer die PMT zu
verlaengern, ansonsten gibt es eine Menge Probleme mit Kanal nicht verfuegbar.
Fuer die start_camd() Routine ist erforderlich, nachzusehen, ob zapit die PMT
des aktuellen Kanals ueberwacht (pmt_set_update_filter). Diese Funktion wurde
mit zapit Version 1.327 eingefuehrt und war bis 1.330 standardmaessig aktiv,
seitdem ist sie zuschaltbar. newcamd hat ebenfalls so eine PMT Ueberwachung,
um den Wechsel von unverschluesselt zu verschluesselt rechtzeitig zu erkennen,
diese Ueberwachung muss aber abgeschaltet bleiben, wenn sie schon durch zapit
durchgefuehrt wird. Die Umschaltung wird ab sofort durch PMT_UPDATE_WATCH in
newcamd.conf vorgenommen. Die C++ Klasse (CCam) fuer das Betacrypt CAM muss
komplett deaktiviert werden.

void stop_camd()
{
        struct sockaddr_un servaddr;
        int camdSocket;
        unsigned char camdBuffer[6];

        servaddr.sun_family = AF_UNIX;
        strcpy(servaddr.sun_path, "/tmp/camd.socket");
        if ((camdSocket = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
        {
                perror("[camdConnect] socket");
                return;
        }

        if (connect(camdSocket, (struct sockaddr*) &servaddr, sizeof(servaddr)) < 0)
        {
                perror("[camdConnect] connect");
                close(camdSocket);
                return;
        }

        memset (camdBuffer+1, 0, 5);
        camdBuffer[0] = 0xff;

        if (write(camdSocket, camdBuffer, 6) < 0)
        {
                perror("[camdConnect] write");
        }

        if (read(camdSocket, camdBuffer, 2) < 0)
        {
                perror("[camdConnect] read reply");
        }

        close(camdSocket);
}

void start_camd()
{
        struct sockaddr_un servaddr;
        int camdSocket;
        unsigned char camdBuffer[6];
        unsigned short pid;

        servaddr.sun_family = AF_UNIX;
        strcpy(servaddr.sun_path, "/tmp/camd.socket");
        if ((camdSocket = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
        {
                perror("[camdConnect] socket");
                return;
        }

        if (connect(camdSocket, (struct sockaddr*) &servaddr, sizeof(servaddr)) < 0)
        {
                perror("[camdConnect] connect");
                close(camdSocket);
                return;
        }

        pid = channel->getAudioPid();

        camdBuffer[4] = (pid >> 8) & 0x1f;
        camdBuffer[5] = pid & 0xff;
        pid = channel->getPmtPid();
        camdBuffer[0] = (pid >> 8) & 0x1f;
        camdBuffer[1] = pid & 0xff;
        pid = channel->getServiceId();
        camdBuffer[2] = pid >> 8;
        camdBuffer[3] = pid & 0xff;

        if (write(camdSocket, camdBuffer, 6) < 0)
        {
                perror("[camdConnect] write");
        }

        if (read(camdSocket, camdBuffer, 2) < 0)
        {
                perror("[camdConnect] read reply");
        }

        close(camdSocket);
}


vdr-Anpassung:

Mitgeliefert wird ein Patch fuer szap aus dem linuxtv-dvb-1.0.1.tar.gz
Treiberpaket. Die darin enthaltenen camd_stop() und camd_start() Routinen
koennen auch in den vdr uebernommen werden. Saemtliche Funktionalitaet, die
auf das ca-Device zugreift, ist im vdr zu deaktivieren, newcamd benoetigt
exklusiven Zugriff auf das ca-Device. Anstatt der PMT Pid kann auch 0
uebergeben werden, da mein vdr Beta-Tester meinte, die PMT Pid sei an der
Stelle im vdr Code, an dem man den newcamd nach dem Zappen starten moechte,
etwas schwierig zu ermitteln. In diesem Fall versucht newcamd die PMT Pid aus
der Transponder PAT anhand der uebergebenen Service Id zu ermitteln. Nicht
vergessen, einen Treiber mit gepatchtem Root File zu verwenden.

mehrere DVB-S Karten:

Ist mehr als eine DVB-S Karte im Rechner eingebaut, muss fuer jede Karte ein
eigener newcamd gestartet werden. Fuer diesen Fall kann in der Kommandozeile
Pfad+Name des newcamd.conf Files und die Adapternummer angegeben werden (0-3).
"newcamd /etc/newcamdAdapter1.conf 1" startet zum Beispiel einen newcamd fuer
die zweite Karte im Rechner und nutzt /etc/newcamdAdapter1.conf als Konfigfile.
Angesprochen werden die einzelnen newcamd dann ueber /tmp/camd.socket0 bis
/tmp/camd.socket3 (siehe szap Patch).

Faq:

Question: On Dreambox cardserver never (or seldom) detects inserted cards.
So, basically it don't work.
Answer: Early Dreambox mainboards have a design flaw, resistances R5003 and
R5007 have been fitted with 10 kOhm resistances instead of the correct 2.2 kOhm
resistances. You need to replace them both with the correct ones. You find them
just behind the card readers.

Frage: Gehen mit cardserver die neuen Premiere oder Dreamcrypt Karten?
Antwort: Nein. newcamd enthaelt auch weiterhin keinerlei Funktionen, die das
Entschluesseln von Premiere ohne gueltiges Abo ermoeglichen, also auch kein
Control Word Sharing ueber Internet fuer Premiere. Gleiches gilt auch fuer
Dreamcrypt. In der dbox2 werden die neuen Premiere Karten selbstverstaendlich
im normalen CAM unterstuetzt.

Frage: Wie kann ich dann mit der Dreambox oder einer DVB-S Karte und vdr mein
Premiere Abo nutzen?
Antwort: Es gibt eine spezielle betad Version, die die neuen Premiere Karten
unterstuetzt. Diese kommuniziert im Gegensatz zu cardserver nicht ueber
TCP/IP. Also auch hier kein Control Word Sharing ueber Internet.

Frage: Welche Kartentypen werden von betad unterstuetzt?
Antwort: Getestet wurde betad mit S01 und S02 Karten. Prinzipiell sollten alle
01er und 02er Typen funktionieren, also auch K01, K02, P01, P02, A01, A02.
betad ist nicht geeignet fuer die 03er Kartentypen S03, K03, P03, A03.

Frage: Kann ich mit Hilfe von betad und Multicam auch eine S01 (K01, P01, A01)
Karte an der dbox2 benutzen?
Antwort: Ja.

Frage: Ich habe zwei Premiere Abos mit unterschiedlichen Paketen. Kann ich diese
kombinieren?
Antwort: Ja. Mehrere betad auf unterschiedlichen seriellen Ports starten und
alle Server in newcamd.conf anmelden (uds 0, uds 1, ...). dbox2: Erste Karte
in dbox CAM einlegen, zweite Karte in Multicam mit betad.

Frage: Ich habe ein Premiere Abo und meiner Bekannter hat ebenfalls eins, beide
mit unterschiedlichen Paketen. Kann ich diese kombinieren?
Antwort: Nein, siehe "Gehen mit cardserver die neuen Premiere Karten?".

Frage: Wenn ich ein Phoenix an die serielle Schnittstelle anschliesse, bootet
die dbox2 nicht mehr, im Display sind die Inforamtionen vom Debug Modus und
volle Balkenzahl zu sehen.
Antwort: Das ist eine Debug Funktion des Beta Research Bootloaders. Wenn beim
Booten bestimmte Pegel an der seriellen Schnittstelle anliegen, wird der
Bootvorgang angehalten. Mir ist keine Abhilfe bekannt, ich empfehle daher den
Standby-Modus von Neutrino oder ein MultiCam, falls noch nicht vorhanden.
