A EXTENSION_CONTROL_BLOCK estrutura tem a seguinte 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;
O servidor se comunica com o ISA através o EXTENSION_CONTROL_BLOCK.
As referências para dentro e para fora acima indica se o membro se aplica a mensagens de extensão (IN) ou para a extensão (fora).
Membros
A estrutura EXTENSION_CONTROL_BLOCK contém os seguintes campos:
cbSize
O tamanho dessa estrutura.
dwVersion
O ofnbsp de informações de versão; HTTP_FILTER_REVISIO&N. O HIWORD tem o número de versão principal e LOWORD tem o número de versão secundária.
ConnID
Um número exclusivo atribuído pelo servidor de HTTP. Ele não deve ser modificado.
dwHttpStatusCode
O status da transação atual quando a solicitação é concluída. Pode ser uma das seguintes:
lpszLogData
Buffer de tamanho HSE_LOG_BUFFER_LEN. Contém uma Cadeia de informações log null-terminated, específica para o ISA, da transação atual. Este informações log serão inscritos no registo do servidor HTTP. A manutenção de um único arquivo de log com o servidor HTTP e transações de ISA é muito útil para fins de administração.
lpszMethod
O método com o qual a solicitação foi feita. Isso é equivalente para a variável CGI REQUEST_METHOD.
lpszQueryString
nbsp;Cadeia de caracteres terminada por caractere nulo que contém as informações de consulta. Isso é equivalente para a variável CGI QUERY_STRI&NG.
lpszPathInfo
Cadeia de caracteres terminada por caractere nulo que contém informações de caminho adicionais dadas pelo cliente. Isso é equivalente para a variável CGI PATH_INFO.
lpszPathTranslated
Cadeia de caracteres terminada por caractere nulo que contém o caminho convertido. Isso é equivalente para a variável CGI PATH_TRANSLATED.
cbTotalBytes
O número total de bytes a ser recebida do cliente. Isso é equivalente para a variável CGI CO&NTENT_LENGTH. Se esse valor é 0xffffffff, então há quatro gigabytes ou mais de data.nbsp disponíveis; Neste caso, deve ser chamado CHttpServerContext::ReadClient , até que não há mais dados são retornados.
cbAvailable
O número de bytes (de um total de cbTotalBytes) na reserva apontado pelo lpbDatadisponíveis. Se cbTotalBytes é o mesmo que cbAvailable variável lpbData irá apontar para uma reserva que contém todos os dados enviados pelo cliente. Caso contrário, cbTotalBytes irá conter o número total de bytes de dados recebidos. O ISA, em seguida, será necessário usar a função de retorno de chamada CHttpServerContext::ReadClient para ler o resto dos dados (a partir de um deslocamento de cbAvailable).
lpbData
Aponta para um buffer de tamanho cbAvailable que contém os dados enviados pelo cliente.
lpszContentType
Cadeia de caracteres terminada por caractere nulo que contém o tipo de conteúdo dos dados enviados pelo cliente. Isso é equivalente para a variável CGI CONTENT_TYPE.
GetServerVariable
Esta função copia informações (incluindo variáveis CGI) relativas a uma conexão HTTP, ou para o próprio servidor, em um buffer. GetServerVariable leva os seguintes parâmetros:
Nome da variável | Descrição |
ALL_HTTP | Todos os cabeçalhos HTTP que não eram já analisados em uma das variáveis acima. Essas variáveis são a forma HTTP_lt; nome de campo de cabeçalho & gt. |
AUTH_PASS | Isso irá recuperar a senha correspondente REMOTE_USER conforme fornecido pelo cliente. É uma Cadeia de caracteres terminada por caractere nulo. |
AUTH_TYPE | Contém o tipo de autenticação used.nbsp; Por exemplo, se a autenticação básica é usada, a Cadeia de caracteres será "Basic". Para Windows &NT desafio-resposta, será "NTLM". Outros esquemas de autenticação terão outras seqüências de caracteres. Porque novos tipos de autenticação podem ser adicionados ao servidor de Internet, não é possível enumerar todas as seqüências de caracteres possíveis. Se a Cadeia de caracteres estiver vazia, nenhuma autenticação é usada. |
CONTENT_LENGTH | O número de bytes que o script pode esperar receber do cliente. |
CONTENT_TYPE | O tipo de conteúdo das informações fornecidas no corpo de uma solicitação POST. |
GATEWAY_INTERFACE | A revisão da especificação de CGI, ao qual este servidor é compatível. A versão atual é CGI/1.1. |
HTTP_ACCEPT | Cabeçalho HTTP de caso especial. Valores da aceitar: campos são concatenados, separados por ",". Por exemplo, se as linhas a seguir são parte do cabeçalho HTTP
em seguida, a variável HTTP_ACCEPT terá o valor de:
|
PATH_INFO | Informações de caminho adicionais, como determinado pelo cliente. Isso compreende a parte à direita da URL após o nome do script, mas antes a Cadeia de caracteres de consulta (se houver). |
PATH_TRANSLATED | Esse é o valor de PATH_INFO, mas com nenhum nome de caminho virtual expandido em uma especificação de diretório. |
QUERY_STRING | As informações que segue o ? na URL que relacionado esse script. |
REMOTE_ADDR | O endereço IP do cliente. |
REMOTE_HOST | O nome do host do cliente. |
REMOTE_USER | Contém o nome de usuário fornecido pelo cliente e autenticado pelo servidor. |
REQUEST_METHOD | O método de solicitação HTTP. |
SCRIPT_NAME | O nome do programa script está sendo executado. |
NOME_DO_SERVIDOR | Nome do host do servidor (ou endereço IP) como ela deve aparecer em URLs de auto-referência. |
SERVER_PORT | A porta de TCP/IP no qual a solicitação foi recebida. |
SERVER_PROTOCOL | O nome e a versão do protocolo de recuperação de informação relativo a este pedido. Normalmente HTTP/1.0. |
SERVER_SOFTWARE | O nome e versão do servidor web que está executando o programa CGI. |
WriteClient
Envia informação para o cliente do buffer indicado. WriteClient leva os seguintes parâmetros:
ReadClient
Lê informações do corpo da solicitação HTTP do cliente da Web para o buffer fornecido pelo chamador. ReadClient leva os seguintes parâmetros:
ServerSupportFunction
Fornece os ISAs com algumas funções de uso gerais, bem como as funções que são específicas para implementação do servidor HTTP. ServerSupportFunction leva os seguintes parâmetros:
Comentários
Um servidor ide&ntifica arquivos com extensionsnbsp;.EXE e.BAT como executáveis CGI (Common Gateway Interface). Além disso, um servidor identificará um arquivo com uma extensão DLL como um script a executar.
Quando o servidor carrega a DLL, ele chama o DLL no ponto de entrada CHttpServer:: GetExtensionVersion para obter o número de versão do thenbsp; HTTP_FILTER_REVISIO&N ISA se baseia e uma curta descrição de texto para os administradores do servidor. Para cada solicitação de cliente, o ponto de entrada CHttpServer::HttpExtensionProc é chamado. A extensão recebe a informação comumente necessárias, como a Cadeia de caracteres de consulta, informações de caminho, nome do método e o caminho convertido.
Co&nsulte tambémnbsp;CHttpServerContext::ReadClient, CHttpServer:: GetExtensionVersion, CHttpServer::HttpExtensionProc