Avevamo un cgi (scritto in c non in perl) che era usato insieme ad un webserver
proprietario realizzato dalla mia ditta... ora si é deciso di usare Apache.
Lo scopo di questo cgi era di aprire un file contenente un immagine in formato raw
(un binariaccio senza header ne`niente) e spedirla su socket.
Un applet java chiamava questo cgi con i parametri opportuni e si occupava poi
di convertire le immagini raw e di visualizzarle a gruppi di 4.
Il problema?
Col vecchio webserver il tutto funzionava perfettamente... Apache invece si rifiuta
categoricamente di spedire i dati... io speravo di aprire il cgi da browser e chiedendogli
l'immagine vedere apparire delle scritte strane (veniva infatti inviata all'Applet come testo)
invece in qualche modo un pezzo dei dati mi sovrascrive l'header...
tornando come indietro
Prima di tutto comunico ad apache che cioè che segue é testo:
fprintf(stdout, "Content-Type: text/plain\r\n\r\n"); // In origine era una printf()
Poi chiamo la mia_routine() che spedisce l'immagine come testo
eseguendo le seguenti operazioni:
1) Apre il file in sola lettura
2) Malloca il buffer sorgente definito come "unsigned char*" (le immagini raw hanno tutte
una dimensione fissa... credo siano opportunamente paddate)
3) Legge il file per mezzo di una semplice read() nel buffer sorgente
4) Esegue un eventuale sottocampionamento dell'immagine facendo dei folli
"giochi di puntatori" copiando infine il risultato ottenuto
in un buffer destinazione sempre "unsigned char*"
5) Invia il buffer destinazione:
inizialmente lo facevo con una semplice printf:
printf("%.*s", dst_size, dst);
ma poi ho provato anche con una write() su stdout cosí:
fd_out = fileno(stdout);
if (write(fd_out, dst, dst_size) != dst_size) {
printf("Errore fatale...");
sperando fosse colpa della printf() che magari con quei caratteri strani si incasinava...
La cosa strana é che con le printf() di debug vedo che la mia funzione termina in modo corretto peccato che in qualche modo si sovrascriva l'header
Ho provato anche cambiando il content-type con application/octect-stream ottenendo
dei risultati a dir poco ridicoli... pagine vuote o tentativi di farmi scaricare la cgi stessa (NON
l'immagine che mi sarei magari potuto accontentare) di 0 byte peró :rollo:
Se provo invece ad aprire un file dui testo vero (omettendo i rimpicciolimenti) il testo viene trasferito correttamente...
Non riesco a capire cosa c'é che non va...
Avete qualche suggerimento da darmi???
Son da 4 giorni che son con sto errore 500 malefico!!!
Grazie!!!
fano_il_primo