La estructura EXTENSION_CONTROL_BLOCK tiene el siguiente formulario:
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;
El servidor se comunica con el ISA a través de la EXTENSION_CONTROL_BLOCK.
Las referencias a la entrada y de salida anterior indica si el miembro se aplica a los mensajes a la extensión (IN) o de la extensión (OUT).
Miembros
La estructura EXTENSION_CONTROL_BLOCK contiene los siguientes campos:
cbSize
El tamaño de esta estructura.
dwVersion
El ofnbsp de información de versión; HTTP_FILTER_REVISIO&N. El HIWORD tiene el número de versión principal y el LOWORD el número de versión menor.
ConnID
nbsp;Un número único asignado por el servidor HTTP. &No debe ser modificado.
dwHttpStatusCode
El estado de la transacción actual cuando se complete la solicitud. Puede ser uno de los siguientes:
lpszLogData
Búfer de tamaño HSE_LOG_BUFFER_LEN. Contiene una cadena de información de registro terminada en null, específica de la ISA de la transacción actual. Esta información de registro se incluirán en el registro del servidor HTTP. Mantener un único archivo de registro con las transacciones de ISA y el servidor HTTP es muy útil para propósitos de administración.
lpszMethod
El método con el cual se realizó la solicitud. Esto es equivalente a la variable CGI REQUEST_METHOD.
lpszQueryString
nbsp;Cadena terminada en nulo que contiene la información de consulta. Esto es equivalente a la variable CGI QUERY_STRI&NG.
lpszPathInfo
Cadena terminada en nulo que contiene información de ruta adicional dada por el cliente. Esto es equivalente a la variable CGI PATH_INFO.
lpszPathTranslated
Cadena terminada en nulo que contiene la ruta traducida. Esto es equivalente a la variable CGI PATH_TRANSLATED.
cbTotalBytes
El número total de bytes a ser recibidos desde el cliente. Esto es equivalente a la variable CGI CO&NTENT_LENGTH. Si este valor es 0xffffffff, hay cuatro gigabytes o más data.nbsp disponibles; En este caso, debería llamarse CHttpServerContext::ReadClient hasta que se devuelve ningún dato más.
cbAvailable
El número de bytes (de un total de cbTotalBytes) en el buffer apuntado por lpbDatadisponibles. Si cbTotalBytes es el mismo que cbAvailable la variable lpbData apuntará a un búfer que contiene todos los datos enviados por el cliente. De lo contrario cbTotalBytes contendrá el número total de bytes de datos recibidos. ISA, a continuación, tendrá que utilizar la función de devolución de llamada CHttpServerContext::ReadClient para leer el resto de los datos (a partir de un desvío de cbAvailable).
lpbData
Puntos a un búfer de tamaño cbAvailable que tiene los datos enviados por el cliente.
lpszContentType
Cadena terminada en nulo que contiene el tipo de contenido de los datos enviados por el cliente. Esto es equivalente a la variable CGI CONTENT_TYPE.
GetServerVariable
Esta función copia información (incluidas las variables CGI) relativa a una conexión HTTP o al servidor de sí mismo, en un búfer. GetServerVariable toma los siguientes parámetros:
| Nombre de la variable | Descripción |
| ALL_HTTP | Todos los encabezados HTTP que no se han analizado ya en una de las variables mencionadas. Estas variables son de la forma HTTP_lt; nombre de encabezado de campo & gt. |
| AUTH_PASS | Se recupera la contraseña correspondiente a REMOTE_USER como suministrados por el cliente. Será una cadena terminada en null. |
| AUTH_TYPE | Contiene el tipo de autenticación used.nbsp; Por ejemplo, si utiliza la autenticación básica, la cadena será "Basic". Desafío / respuesta de Windows &NT, será "NTLM". Otros esquemas de autenticación tendrá otras cadenas. Porque pueden agregarse nuevos tipos de autenticación al servidor de Internet, no es posible enumerar todas las cadenas posibles. Si la cadena está vacía autenticación no se utiliza. |
| CONTENT_LENGTH | El número de bytes que la secuencia de comandos puede esperar recibir del cliente. |
| CONTENT_TYPE | El tipo de contenido de la información suministrada en el cuerpo de una solicitud POST. |
| GATEWAY_INTERFACE | La revisión de la especificación CGI para que se cumpla este servidor. La versión actual es CGI/1.1. |
| HTTP_ACCEPT | Encabezado HTTP de caso especial. Valores de aceptar: se concatenan campos, separados por ",". Por ejemplo, si las líneas siguientes son parte del encabezado HTTP
entonces la variable HTTP_ACCEPT tendrá un valor de:
|
| PATH_INFO | Información de ruta adicional, como determinado por el cliente. Esto comprende la parte final de la URL después el nombre del script, pero antes la cadena de consulta (si corresponde). |
| PATH_TRANSLATED | Este es el valor de PATH_INFO, sino con cualquier nombre de ruta de acceso virtual ampliado en una especificación de directorio. |
| QUERY_STRING | La información que sigue la ? en la dirección URL que hace referencia esta secuencia de comandos. |
| REMOTE_ADDR | La dirección IP del cliente. |
| REMOTE_HOST | El nombre de host del cliente. |
| REMOTE_USER | Contiene el nombre de usuario proporcionado por el cliente y el servidor autentica. |
| REQUEST_METHOD | El método de petición HTTP. |
| SCRIPT_NAME | El nombre del programa de secuencia de comandos se ejecuta. |
| NOMBRE_SERVIDOR | El servidor host (o dirección IP) que debe aparecer en las direcciones URL de autorreferencia. |
| SERVER_PORT | El puerto TCP/IP en el que se recibió la solicitud. |
| SERVER_PROTOCOL | El nombre y la versión del Protocolo de recuperación de información relativa a esta solicitud. Normalmente HTTP/1.0. |
| SERVER_SOFTWARE | El nombre y la versión del servidor web que se está ejecutando el programa CGI. |
WriteClient
Envía información al cliente desde el buffer indicado. WriteClient toma los siguientes parámetros:
ReadClient
Lee la información del cuerpo de la solicitud HTTP del cliente Web en el búfer suministrado por el llamador. ReadClient toma los siguientes parámetros:
ServerSupportFunction
Proporcionar los ISAs con algunas funciones de propósito generales, así como las funciones que son específicas para la implementación del servidor HTTP. ServerSupportFunction toma los siguientes parámetros:
Comentarios
U&n servidor identifica los archivos con el extensionsnbsp;.EXE y.BAT como ejecutables CGI (Common Gateway Interface). Además, un servidor identificará a un archivo con una extensión DLL como una secuencia de comandos para ejecutar.
Cuando el servidor carga la DLL, llama a la DLL en el punto de entrada CHttpServer::GetExtensionVersion para obtener el número de versión de thenbsp; HTTP_FILTER_REVISIO&N ISA se basa y una descripción de texto corto para los administradores del servidor. Para cada solicitud de cliente, se llama el punto de entrada CHttpServer::HttpExtensionProc . La extensión recibe la información necesaria comúnmente como la cadena de consulta, información de ruta de acceso, nombre de método y la ruta traducida.
Vea tambié&nnbsp;CHttpServerContext::ReadClient, CHttpServer::GetExtensionVersion, CHttpServer::HttpExtensionProc