La funzione estrai input si incarica di recuperare il numero di matricola
passato in input. Due sono i parametri di questa funzione:
-
il primo è un intero, che
segnala (con il valore PARAMETRO_COMMAND_LINE,
cioè con il valore 1) che il gateway ha ricevuto l'input sulla lina
di comando, altrimenti (con il valore COPPIA_NOME_VALORE,
cioè con il valore 0) che lo ha ricevuto in altro modo (cioè
tramite variabili di ambiente o tramite standard input: in entrambi i casi
si tratta di coppie nome=valore).
-
il secondo parametro è un
puntatore a carattere. Nel caso che l'input sia stato passato sulla linea
di comando punterà al primo carattere della stringa di input, altrimenti
avrà il valore NULL
(un valore convenzionale che nel linguaggio C viene assegnato ai puntatori
per segnalare che non puntano a nulla di significativo).
La funzione estrai_input
comincia con l'allocare uno spazio sufficiente per ospitare la stringa
di input. Se l'input è stato passato al programma tramite linea
di comando (e dunque il parametro formato
è uguale a PARAMETRO_COMMAND_LINE),
la funzione non fa altro che copiare il parametro parametro
nello spazio appena allocato e puntato dal puntatore valore_input;
quindi la funzione termina.
Se invece l'input non è
stato passato sulla linea di comando, allora il parametro parametro
non ha alcun significato (la funzione main
ha passato un NULL),
ed è quindi disponibile per ospitare temporaneamente una stringa
(ci metteremo la stringa nome=valore). Prima, però, è necessario
allocarsi uno spazio opportuno (viene infatti allocato uno spazio per 256
caratteri).
In ogni caso (passaggio di parametri
tramite variabili d'ambiente oppure passaggio di parametri tramite standard
input), il server avrà settato una variabile d'ambiente dal nome
REQUEST_METHOD,
al valore GET
o POST,
a seconda del metodo utilizzato dal client nel suo messaggio http (il nome
ed il ruolo di questa variabile rientra nelle specifiche della CGI). Come
prima cosa, dunque, andiamo a verificare quale valore abbia questa variabile
d'ambiente. Infatti se il metodo utilizzato dal client è il GET,
possiamo desumere che i parametri siano stati passati dal server al gateway
tramite la variabile di ambiente QUERY_STRING,
altrimenti (metodo POST) saranno necessariamente passati dal server al
gateway tramite standard input.
Una volta acquisita la coppia
nome=valore (per esempio "matricola=080894563")
nello spazio allocato per il puntatore parametro,
dobbiamo estrarre da questa stringa la seconda parte contenente il numero
di matricola, eliminando la parte iniziale fino al segno "="
incluso. Per far questo incrementiamo la variabile parametro
fino a che non punti sul segno "=",
e poi la incrementiamo ancora una volta per farglielo scavalcare. A questo
punto copiamo la stringa puntata dalla variabile paramentro
sullo spazio puntato da valore_input.
pagina precedente
prossima pagina