<?php


function initialisiere_com()
                {
					global $karte;
					
                               $karte = new COM('ATrustRegistrierkasseCom.Registrierkasse');
                               
                               //$ret=$karte->CheckSoftware;
                               //echo $ret;
                               echo "Initialize : \n";
                               $ret=$karte->Initialize;
                               echo $ret;
                               //echo "Check Card : \n";
                               //$ret=$karte->CheckCard;
                               //echo $ret;


                }

	
//*****************************************************************************************
// Diese Funktion liest die Seriennummer von der Signaturkarte
function seriennummer_abfragen($arr)
{
	global $karte;
	
	echo "Seriennummer wird abgefragt ...\n";
	echo "Load Info : \n";
    $ret=$karte->LoadInfo;
	
	$ret_array['return_code']=$ret;
	$ret_array['return_value']=$karte->CertificateSerial;
	$ret_array['return_zda_id']=$karte->ZdaId;
	return($ret_array);
}

//*****************************************************************************************
// Funktion signiert einen String mit der Signaturkarte
function signieren($arr)
{
	global $karte;
	
	echo "Signiere String :".$arr['zu_signieren']." ...\n";

	    echo "Signiere : \n";
                               
    $signature="";
    $ret=$karte->SignJWS($arr['zu_signieren'], $signature);
    							   
	$ret_array['return_code']=$ret;
	$ret_array['return_value']=$signature;
	
	return($ret_array);
	
}

//*****************************************************************************************
// Hauptprogramm
$server = stream_socket_server("tcp://127.0.0.1:4711", $errno, $errorMessage);

initialisiere_com();

if ($server === false) {
    throw new UnexpectedValueException("Could not bind to socket: $errorMessage");
}

// Endlosschleife wartet auf Input vom socket
for (;;) {
    $client = @stream_socket_accept($server);

    if ($client) {
		$string = stream_socket_recvfrom($client, 1500, 0, $peer);
		if (false === empty($string)) 
		{
			$arr=json_decode($string, true);
			switch ($arr['funktion'])
			{
				case "seriennummer_abfragen":
					$ret_array=seriennummer_abfragen($arr);
					break;
				case "signieren":
					$ret_array=signieren($arr);
					break;	
				default:
					echo "Fehlerhafter Aufruf \n";
			}
			$return_string=json_encode($ret_array);
			stream_socket_sendto($client, $return_string, 0, $peer);
		}
        fclose($client);
    }
}
?>