#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <memory.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#ifndef PERL_VERSION
#include <patchlevel.h>
#ifndef PERL_VERSION
#define PERL_VERSION PATCHLEVEL
#define PERL_SUBVERSION SUBVERSION
#endif
#endif
#if !defined(PERLIO_IS_STDIO) && PERL_VERSION < 8
#define PERLIO_IS_STDIO
#endif
#ifdef __cplusplus
extern
"C"
{
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#ifdef __cplusplus
}
#endif
#ifdef APACHE
#undef S_ISREG
#undef DIR
#undef VOIDUSED
#undef pregexec
#undef pregfree
#undef pregcomp
#undef setregid
#undef setreuid
#undef sync
#undef my_memcmp
#undef RETURN
#undef die
#undef __attribute__
#if defined(EPAPACHE_SSL) || defined(APACHE_SSL)
#undef TRUE
#undef FALSE
#endif
#ifdef WIN32
#ifdef uid_t
#define apache_uid_t uid_t
#undef uid_t
#endif
#define uid_t apache_uid_t
#ifdef gid_t
#define apache_gid_t gid_t
#undef gid_t
#endif
#define gid_t apache_gid_t
#ifdef mode_t
#define apache_mode_t mode_t
#undef mode_t
#endif
#define mode_t apache_mode_t
#ifdef stat
#define apache_stat stat
#undef stat
#endif
#ifdef lstat
#define apache_lstat lstat
#undef lstat
#endif
#ifdef sleep
#define apache_sleep sleep
#undef sleep
#endif
#if PERL_VERSION >= 6
#ifdef opendir
#define apache_opendir opendir
#undef opendir
#endif
#ifdef readdir
#define apache_readdir readdir
#undef readdir
#endif
#ifdef closedir
#define apache_closedir closedir
#undef closedir
#endif
#ifdef crypt
#define apache_crypt crypt
#undef crypt
#endif
#ifdef errno
#define apache_errno errno
#undef errno
#endif
#endif /* endif PERL_VERSION >= 6 */
#endif /* endif WIN32 */
#include <httpd.h>
#include <http_config.h>
#include <http_protocol.h>
#include <http_log.h>
#if MODULE_MAGIC_NUMBER >= 19980713
#include "ap_compat.h"
#elif MODULE_MAGIC_NUMBER >= 19980413
#include "compat.h"
#endif
void
embperl_ApacheAddModule () ;
#endif
struct
tReq ;
typedef
struct
tReq req ;
typedef
struct
tReq tReq ;
#include "epnames.h"
#ifdef EP2
#include "epdom.h"
#endif
#include "epdat.h"
#include "embperl.h"
#ifdef WIN32
#define PATH_MAX _MAX_DIR
#endif
#ifndef PATH_MAX
#define PATH_MAX 512
#endif
#if PERL_VERSION >= 8
#ifdef sv_undef
#undef sv_undef
#endif
#define sv_undef ep_sv_undef
extern
SV ep_sv_undef ;
#endif
extern
tReq * pCurrReq ;
extern
tReq InitialReq ;
#define nInitialScanOutputSize 2048
int
Init (
int
nIOType,
const
char
* sLogFile,
int
nDebugDefault) ;
int
ResetHandler (
SV * pApacheReqSV) ;
int
Term (
void
) ;
int
ExecuteReq (
register
req * r,
SV * pReqSV) ;
tReq * SetupRequest (
SV * pApacheReqSV,
char
* sSourcefile,
double
mtime,
long
nFilesize,
int
nFirstLine,
char
* sOutputfile,
tConf * pConf,
int
nIOType,
SV * pIn,
SV * pOut,
char
* sSubName,
char
* sImport,
int
nSessionMgnt,
tTokenTable * pTokenTable) ;
void
FreeRequest (
register
req * r) ;
tFile * SetupFileData (
register
req * r,
char
* sSourcefile,
double
mtime,
long
nFilesize,
int
nFirstLine,
tConf * pConf) ;
tFile * GetFileData (
char
* sSourcefile,
char
* sPackage,
double
mtime,
int
bEP1Compat) ;
tConf * SetupConfData (
HV * pReqInfo,
SV * pOpcodeMask) ;
void
FreeConfData (
tConf * pConf) ;
int
ScanCmdEvalsInString (
register
req * r,
char
* pIn,
char
* * pOut,
size_t
nSize,
char
* * pFree) ;
char
* LogError (
register
req * r,
int
rc) ;
void
CommitError (
register
req * r) ;
void
RollbackError (
register
req * r) ;
int
ProcessBlock (
register
req * r,
int
nBlockStart,
int
nBlockSize,
int
nBlockNo) ;
int
ProcessSub (
register
req * r,
tFile * pFile,
int
nBlockStart,
int
nBlockNo) ;
void
NewEscMode (
register
req * r,
SV * pSV) ;
int
AddMagicAV (
register
req * r,
char
* sVarName,
MGVTBL * pVirtTab) ;
struct
tBuf
{
struct
tBuf * pNext ;
int
nSize ;
int
nMarker ;
int
nCount ;
} ;
int
OpenInput (
register
req * r,
const
char
* sFilename) ;
int
CloseInput (
register
req * r) ;
int
iread (
register
req * r,
void
* ptr,
size_t
size) ;
char
* igets (
register
req * r,
char
* s,
int
size) ;
int
ReadHTML (
register
req * r,
char
* sInputfile,
size_t
* nFileSize,
SV * * ppBuf) ;
int
OpenOutput (
register
req * r,
const
char
* sFilename) ;
int
CloseOutput (
register
req * r) ;
int
owrite (
register
req * r,
const
void
* ptr,
size_t
size) ;
void
oputc (
register
req * r,
char
c) ;
int
oputs (
register
req * r,
const
char
* str) ;
void
OutputToMemBuf (
register
req * r,
char
* pBuf,
size_t
nBufSize) ;
char
* OutputToStd (
register
req * r) ;
struct
tBuf * oBegin (
register
req * r) ;
void
oRollback (
register
req * r,
struct
tBuf * pBuf) ;
void
oRollbackOutput (
register
req * r,
struct
tBuf * pBuf) ;
void
oCommit (
register
req * r,
struct
tBuf * pBuf) ;
void
oCommitToMem (
register
req * r,
struct
tBuf * pBuf,
char
* pOut) ;
int
GetContentLength (
register
req * r) ;
int
OpenLog (
register
req * r,
const
char
* sFilename,
int
nMode) ;
int
CloseLog (
register
req * r) ;
int
FlushLog (
register
req * r) ;
int
lprintf (
register
req * r,
const
char
* sFormat,
...) ;
int
lwrite (
register
req * r,
const
void
* ptr,
size_t
size) ;
long
GetLogFilePos (
register
req * r) ;
int
GetLogHandle (
register
req * r) ;
void
_free (
register
req * r,
void
* p) ;
void
* _malloc (
register
req * r,
size_t
size) ;
void
* _realloc (
register
req * r,
void
* ptr,
size_t
oldsize,
size_t
size) ;
char
* _memstrcat (
register
req * r,
const
char
*s, ...) ;
char
* _ep_strdup (
register
req * r,
const
char
* str) ;
char
* _ep_strndup (
register
req * r,
const
char
* str,
int
len) ;
struct
tCharTrans
{
char
c ;
char
* sHtml ;
} ;
extern
struct
tCharTrans Char2Html [] ;
extern
struct
tCharTrans Char2Url [] ;
extern
struct
tCharTrans Html2Char [] ;
extern
int
sizeHtml2Char ;
int
SearchCmd (
register
req * r,
const
char
* sCmdName,
int
nCmdLen,
const
char
* sArg,
int
bIgnore,
struct
tCmd * * ppCmd) ;
int
ProcessCmd (
register
req * r,
struct
tCmd * pCmd,
const
char
* sArg) ;
SV * SplitFdat (
register
req * r,
SV ** ppSVfdat,
SV ** ppSVerg,
char
* pName,
STRLEN nlen) ;
const
char
* strnstr (
const
char
* pString,
const
char
* pSubString,
int
nMax) ;
char
* GetHashValue (
HV * pHash,
const
char
* sKey,
int
nMaxLen,
char
* sValue) ;
char
* GetHashValueLen (
HV * pHash,
const
char
* sKey,
int
nLen,
int
nMaxLen,
char
* sValue) ;
IV GetHashValueInt (
HV * pHash,
const
char
* sKey,
IV nDefault) ;
char
* GetHashValueStr (
HV * pHash,
const
char
* sKey,
char
* sDefault) ;
char
* GetHashValueStrDup (
HV * pHash,
const
char
* sKey,
char
* sDefault) ;
const
char
* GetHtmlArg (
const
char
* pTag,
const
char
* pArg,
int
* pLen) ;
void
OutputToHtml (
register
req * r,
const
char
* sData) ;
void
OutputEscape (
register
req * r,
const
char
* sData,
int
nDataLen,
struct
tCharTrans * pEscTab,
char
cEscChar) ;
SV * Escape (
register
req * r,
const
char
* sData,
int
nDataLen,
int
nEscMode,
struct
tCharTrans * pEscTab,
char
cEscChar) ;
int
TransHtml (
register
req * r,
char
* sData,
int
nLen) ;
void
TransHtmlSV (
register
req * r,
SV * pSV) ;
int
GetLineNo (
register
req * r) ;
int
GetLineNoOf (
register
req * r,
char
* pPos) ;
#ifndef WIN32
#define strnicmp strncasecmp
#define stricmp strcasecmp
#else
#define strnicmp _strnicmp
#define stricmp _stricmp
#endif
void
Dirname (
const
char
* filename,
char
* dirname,
int
size) ;
char
* sstrdup (
char
* pString) ;
int
SetSubTextPos (
register
req * r,
const
char
* sName,
int
sPos) ;
int
GetSubTextPos (
register
req * r,
const
char
* sName) ;
void
ClearSymtab (
register
req * r,
const
char
* sPackage,
int
bDebug) ;
void
UndefSub (
register
req * r,
const
char
* sName,
const
char
* sPackage) ;
int
CallCV (
register
req * r,
const
char
* sArg,
CV * pSub,
int
flags,
SV ** pRet) ;
int
EvalOnly (
register
req * r,
const
char
* sArg,
SV ** ppSV,
int
flags,
const
char
* sName) ;
int
EvalDirect (
register
req * r,
SV * pArg,
int
numArgs,
SV ** pArgs) ;
int
EvalNum (
register
req * r,
char
* sArg,
int
nFilepos,
int
* pNum) ;
int
Eval (
register
req * r,
const
char
* sArg,
int
nFilepos,
SV ** pRet) ;
#ifdef EP2
int
EvalStore (
register
req * r,
const
char
* sArg,
int
nFilepos,
SV ** pRet) ;
#endif
int
EvalTrans (
register
req * r,
char
* sArg,
int
nFilepos,
SV ** pRet) ;
int
EvalTransFlags (
register
req * r,
char
* sArg,
int
nFilepos,
int
flags,
SV ** pRet) ;
int
EvalTransOnFirstCall (
register
req * r,
char
* sArg,
int
nFilepos,
SV ** pRet) ;
int
EvalBool (
register
req * r,
char
* sArg,
int
nFilepos,
int
* pTrue) ;
int
EvalSub (
register
req * r,
const
char
* sArg,
int
nFilepos,
const
char
* sName) ;
int
EvalMain (
register
req * r) ;
int
EvalConfig (
register
req * r,
SV * pSV,
int
numArgs,
SV ** pArgs,
CV ** pCV) ;
#ifdef EP2
int
CallStoredCV (
register
req * r,
const
char
* sArg,
CV * pSub,
int
numArgs,
SV ** pArgs,
int
flags,
SV ** pRet) ;
#endif
int
SetupDebugger (
register
req * r) ;
#ifdef EP2
#include "ep2.h"
#endif