La struttura EXTENSION_CONTROL_BLOCK ha la seguente forma:
typedef struct _EXTENSION_CONTROL_BLOCK {
DWORD cbSize; //IN
DWORD dwVersion //IN
HCONN ConnID; //IN
DWORD dwHttpStatusCode; //OUT
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; //OUT
LPSTR lpszMethod; //IN
LPSTR lpszQueryString; //IN
LPSTR lpszPathInfo; //IN
LPSTR lpszPathTranslated; //IN
DWORD cbTotalBytes; //IN
DWORD cbAvailable; //IN
LPBYTE lpbData; //IN
LPSTR lpszContentType; //IN
BOOL ( WINAPI * GetServerVariable )
( HCONN hConn,
LPSTR lpszVariableName,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * WriteClient )
( HCONN ConnID,
LPVOID Buffer,
LPDWORD lpdwBytes,
DWORD dwReserved );
BOOL ( WINAPI * ReadClient )
( HCONN ConnID,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * ServerSupportFunction )
( HCONN hConn,
DWORD dwHSERRequest,
LPVOID lpvBuffer,
LPDWORD lpdwSize,
LPDWORD lpdwDataType );
} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_BLOCK;
Il server comunica con l'ISA tramite il EXTENSION_CONTROL_BLOCK.
I riferimenti a dentro e fuori sopra indica se il membro verrà applicata ai messaggi all'estensione (IN) o dall'estensione (OUT).
Membri
La struttura EXTENSION_CONTROL_BLOCK contiene i seguenti campi:
cbSize
La dimensione di questa struttura.
dwVersion
La versione ofnbsp informazioni; HTTP_FILTER_REVISIO&N. Il HIWORD ha il numero di versione principale e il LOWORD ha il numero di versione secondaria.
ConnID
nbsp;Un numero univoco assegnato dal server HTTP. &Non devono essere modificata.
dwHttpStatusCode
Lo stato della transazione corrente quando la richiesta viene completata. Può essere uno dei seguenti:
lpszLogData
Buffer di dimensione HSE_LOG_BUFFER_LEN. Contiene una stringa di informazioni di registro con terminazione null, specifica per l'ISA, della transazione corrente. Queste informazioni di registro verranno inserite nel log del server HTTP. Mantenimento di un singolo file di log con server HTTP e transazioni ISA è molto utile per scopi di amministrazione.
lpszMethod
Il metodo con cui la richiesta è stata fatta. Questo è equivalente alla variabile CGI REQUEST_METHOD.
lpszQueryString
nbsp;Stringa con terminazione &NULL contenente le informazioni di query. Questo è equivalente alla variabile QUERY_STRING CGI.
lpszPathInfo
Stringa con terminazione NULL contenente informazioni sul percorso supplementare forniti dal cliente. Questo è equivalente alla variabile CGI PATH_INFO.
lpszPathTranslated
Stringa con terminazione NULL contenente il percorso tradotto. Questo è equivalente alla variabile CGI PATH_TRANSLATED.
cbTotalBytes
Il numero totale di byte che deve essere ricevuti dal client. Questo è equivalente alla variabile CO&NTENT_LENGTHCGI. Se questo valore è 0xffffffff, ci sono quattro gigabyte o più di data.nbsp disponibili; In questo caso, dovrebbe essere chiamato CHttpServerContext::ReadClient fino a quando non viene restituiti alcun più dati.
cbAvailable
Il numero di byte (di un totale di cbTotalBytes) nel buffer disponibile a cui punta lpbData. Se cbTotalBytes è lo stesso di cbAvailable la variabile lpbData punterà a un buffer che contiene tutti i dati inviati dal client. In caso contrario cbTotalBytes conterrà il numero totale di byte di dati ricevuti. L'ISA sarà quindi necessario utilizzare la funzione di callback CHttpServerContext::ReadClient per leggere il resto dei dati (a partire da un offset di cbAvailable).
lpbData
Punti a un buffer di dimensione cbAvailable contenente i dati inviati dal client.
lpszContentType
Stringa con terminazione NULL contenente il tipo di contenuto dei dati inviati dal client. Questo è equivalente alla variabile CGI CONTENT_TYPE.
GetServerVariable
Questa funzione copia informazioni (incluse le variabili CGI) relativi a una connessione HTTP, o per il server stesso, in un buffer. GetServerVariable accetta i seguenti parametri:
Nome della variabile | Descrizione |
ALL_HTTP | Tutte le intestazioni HTTP che non sono stati già analizzate in una delle variabili di cui sopra. Queste variabili sono la forma HTTP_lt; nome del campo di intestazione & gt. |
AUTH_PASS | Questo recupera la password corrispondente a REMOTE_USER come forniti dal cliente. Sarà una stringa null-terminated. |
AUTH_TYPE | Contiene il tipo di autenticazione used.nbsp; Ad esempio, se viene utilizzata l'autenticazione di base, la stringa sarà "Basic". Per Challenge-response di Windows &NT, sarà "NTLM". Altri schemi di autenticazione avrà altre stringhe. Perché nuovi tipi di autenticazione possono essere aggiunto al Server Internet, non è possibile elencare tutte le possibili stringhe. Se la stringa è vuota, quindi viene utilizzata alcuna autenticazione. |
CONTENT_LENGTH | Il numero di byte che lo script può aspettarsi di ricevere dal client. |
CONTENT_TYPE | Il tipo di contenuto delle informazioni fornite nel corpo di una richiesta POST. |
GATEWAY_INTERFACE | La revisione della specifica CGI a cui questo server è conforme. La versione attuale è CGI/1.1. |
HTTP_ACCEPT | Intestazione HTTP caso speciale. I valori dei Accept: campi sono concatenati, separati da ",". Ad esempio, se le righe seguenti sono parte dell'intestazione HTTP
quindi la variabile HTTP_ACCEPT avrà un valore di:
|
PATH_INFO | Informazioni aggiuntive sul percorso, come indicato dal cliente. Ciò comprende la parte finale dell'URL dopo il nome dello script, ma prima la stringa di query (se presente). |
PATH_TRANSLATED | Questo è il valore di PATH_INFO, ma con un nome qualsiasi percorso virtuale espanso in una specifica directory. |
QUERY_STRING | Le informazioni che segue l'URL a cui fa riferimento questo script ?. |
REMOTE_ADDR | L'indirizzo IP del client. |
REMOTE_HOST | Il nome host del client. |
REMOTE_USER | Questo contiene il nome utente forniti dal cliente e autenticato dal server. |
REQUEST_METHOD | Il metodo di richiesta HTTP. |
SCRIPT_NAME | Il nome del programma script in esecuzione. |
SERVER_NAME | Del server hostname (o indirizzo IP) come dovrebbe apparire in autoreferenziali URLs. |
SERVER_PORT | La porta TCP/IP su cui è stata ricevuta la richiesta. |
SERVER_PROTOCOL | Il nome e la versione del protocollo di recupero delle informazioni relative a questa richiesta. Normalmente HTTP/1.0. |
SERVER_SOFTWARE | Il nome e la versione del server web con cui viene eseguito il programma CGI. |
WriteClient
Invia informazioni al client dal buffer indicato. WriteClient accetta i seguenti parametri:
ReadClient
Legge le informazioni dal corpo della richiesta HTTP del client Web nel buffer fornito dal chiamante. ReadClient accetta i seguenti parametri:
ServerSupportFunction
Fornire l'ISAs con alcune funzioni general-purpose, nonché le funzioni specifiche per l'implementazione di server HTTP. ServerSupportFunction accetta i seguenti parametri:
Commenti
U&n server identifica i file con la extensionsnbsp;.EXE e.BAT come eseguibili CGI (Common Gateway Interface). Inoltre, un server identificherà un file con estensione DLL come uno script da eseguire.
Quando il server viene caricata la DLL, chiama la DLL al punto di ingresso GetExtensionVersion per ottenere il numero di versione di thenbsp; HTTP_FILTER_REVISIO&N ISA si basa su e una descrizione di testo breve per gli amministratori del server. Per ogni richiesta del client, viene chiamato il punto di ingresso di CHttpServer:: HttpExtensionProc . L'estensione riceve le informazioni come ad esempio la stringa di query, informazioni di percorso, nome del metodo e il percorso tradotto comunemente necessari.
Vedere a&nchenbsp;CHttpServerContext::ReadClient, GetExtensionVersion, CHttpServer:: HttpExtensionProc