188 lines
4 KiB
C++
188 lines
4 KiB
C++
#include "isapi.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
#define MIN_RESPONSE "Content-type: text/html\r\n\r\n"
|
|
|
|
|
|
|
|
BOOL
|
|
SendHeaders(
|
|
LPEXTENSION_CONTROL_BLOCK Ecb
|
|
)
|
|
{
|
|
DWORD Length;
|
|
DWORD ec;
|
|
|
|
|
|
Length = strlen(MIN_RESPONSE);
|
|
if (!Ecb->ServerSupportFunction( Ecb->ConnID, HSE_REQ_SEND_RESPONSE_HEADER, NULL, &Length, (LPDWORD) MIN_RESPONSE )) {
|
|
ec = GetLastError();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL
|
|
SendError(
|
|
LPEXTENSION_CONTROL_BLOCK Ecb,
|
|
DWORD ErrorCode
|
|
)
|
|
{
|
|
IFAX_RESPONSE_HEADER Response;
|
|
|
|
Response.Size = sizeof(IFAX_RESPONSE_HEADER);
|
|
Response.ErrorCode = ErrorCode;
|
|
|
|
DWORD Length = sizeof(IFAX_RESPONSE_HEADER);
|
|
return Ecb->WriteClient( Ecb->ConnID, &Response, &Length, 0 );
|
|
}
|
|
|
|
|
|
BOOL
|
|
SendResponse(
|
|
LPEXTENSION_CONTROL_BLOCK Ecb
|
|
)
|
|
{
|
|
DWORD Length = sizeof(IFAX_RESPONSE_HEADER);
|
|
|
|
IFAX_RESPONSE_HEADER Response;
|
|
|
|
Response.Size = Length;
|
|
Response.ErrorCode = 0;
|
|
|
|
return Ecb->WriteClient( Ecb->ConnID, &Response, &Length, 0 );
|
|
}
|
|
|
|
|
|
BOOL
|
|
SendResponseWithData(
|
|
LPEXTENSION_CONTROL_BLOCK Ecb,
|
|
LPBYTE Data,
|
|
DWORD DataSize
|
|
)
|
|
{
|
|
DWORD Length = sizeof(IFAX_RESPONSE_HEADER) + DataSize;
|
|
|
|
PIFAX_RESPONSE_HEADER Response = (PIFAX_RESPONSE_HEADER) MemAlloc( Length );
|
|
if (!Response) {
|
|
return FALSE;
|
|
}
|
|
|
|
Response->Size = Length;
|
|
Response->ErrorCode = 0;
|
|
|
|
CopyMemory( (LPBYTE)((LPBYTE)Response+sizeof(IFAX_RESPONSE_HEADER)), Data, DataSize );
|
|
|
|
BOOL Rval = Ecb->WriteClient( Ecb->ConnID, Response, &Length, 0 );
|
|
|
|
MemFree( Response );
|
|
|
|
return Rval;
|
|
}
|
|
|
|
|
|
DWORD
|
|
HttpExtensionProc(
|
|
LPEXTENSION_CONTROL_BLOCK Ecb
|
|
)
|
|
{
|
|
DWORD Command = *((LPDWORD)Ecb->lpbData);
|
|
LPBYTE Data = (LPBYTE)(((LPBYTE)Ecb->lpbData)+sizeof(DWORD));
|
|
DWORD Rval = HSE_STATUS_SUCCESS;
|
|
|
|
|
|
DebugPrint(( L"HttpExtensionProc(): ConnId=0x%08x, Command=0x%08x", Ecb->ConnID, Command ));
|
|
|
|
Ecb->dwHttpStatusCode = 0;
|
|
|
|
if (!SendHeaders( Ecb )) {
|
|
return FALSE;
|
|
}
|
|
|
|
Ecb->dwHttpStatusCode = 200;
|
|
|
|
switch (Command) {
|
|
case ICMD_CONNECT:
|
|
if (!IsapiFaxConnect( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_DISCONNECT:
|
|
if (!IsapiFaxDisConnect( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_ENUM_PORTS:
|
|
if (!IsapiFaxEnumPorts( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_GET_PORT:
|
|
if (!IsapiFaxGetPort( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_SET_PORT:
|
|
if (!IsapiFaxSetPort( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_OPEN_PORT:
|
|
if (!IsapiFaxOpenPort( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_CLOSE:
|
|
if (!IsapiFaxClose( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_GET_ROUTINGINFO:
|
|
if (!IsapiFaxGetRoutingInfo( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_GET_DEVICE_STATUS:
|
|
if (!IsapiFaxGetDeviceStatus( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_ENUM_ROUTING_METHODS:
|
|
if (!IsapiFaxEnumRoutingMethods( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_ENABLE_ROUTING_METHOD:
|
|
if (!IsapiFaxEnableRoutingMethod( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
case ICMD_GET_VERSION:
|
|
if (!IsapiFaxGetVersion( Ecb )) {
|
|
Rval = HSE_STATUS_ERROR;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
DebugPrint(( L"HttpExtensionProc(): ConnId=0x%08x, Rval=0x%08x", Ecb->ConnID, Rval ));
|
|
|
|
return Rval;
|
|
}
|