Also wenn ICH Cups richtig durchschaut habe, wird in der job.c das Backend (z.B. Socket) aufgerufen.
In der von dir erwähnten Codestelle wäre also:
command = /usr/.../socket
argv[0] = socket://ip:9100
argv[1..n]... uninteressant
Ich möchte jetzt "um" den Socket ein Wrapperscript basteln, damit ich die Daten abgreifen kann. Also ein einfaches Bash-Script. Die Device URI lautet dann z.B. socketwrapper://ip:port.
anstatt "cupsJob->socket" sollte dann der Codepfad "cupsJob->socketwrapper->socket" lauten
Variablenbelegung in Cups wäre dann:
command = /usr/.../socketwrapper
argv[0] = socketwrapper://ip:9100
argv[1..n]... uninteressant
Nun wird mein Wrapper-Script aufgerufen, dies schnappt sich die Daten und ruft dann das eigentliche socket-Backend auf.
in der 1.1er steht zum Parsen der URI folgendes
/*
* Extract the hostname and port number from the URI...
*/
httpSeparate(argv[0], method, username, hostname, &port, resource);
hier wird die URI eben in argv[0] erwartet. Ich rufe aber das Backend aus meinem Bash-skript auf, somit steht da der Name des Backends drin.
Ab der 1.2er machen sie das etwas intelligenter, was mir aber nicht viel hilft an dieser Stelle:
/*
* 'cupsBackendDeviceURI()' - Get the device URI for a backend.
*
* The "argv" argument is the argv argument passed to main(). This
* function returns the device URI passed in the DEVICE_URI environment
* variable or the device URI passed in argv[0], whichever is found
* first.
*
* @since CUPS 1.2/Mac OS X 10.5@
*/
-> Ich werd mir wohl oder übel einen Plan-B überlegen müssen .-(