#include "convlog.h"

BOOL
ProcessWebLine(
    IN LPINLOGLINE lpLogLine,
    IN LPCSTR      pszInFileName,
    IN LPOUTFILESTATUS lpOutFile
    )
{

    BOOL                    bLineOK = FALSE;                //function return code
    BOOL                    bDateChanged = FALSE;
    BOOL                    bTimeChanged = FALSE;
    char                    szMonth[4];
    char                    szDate[MAX_PATH];
    char                    szTime[MAX_PATH];
    static WORD             wSecond;						// Bug # 110921

    PCHAR   szBytes;

    //
    // NCSA Only
    //

    {
        bDateChanged = FALSE;
        bTimeChanged = FALSE;
        bLineOK = TRUE;

        if ( 0 != strcmp(lpOutFile->szLastDate, lpLogLine->szDate) ) {

            if (0 == strcmp(lpOutFile->szLastDate, NEW_DATETIME)) {

                lpOutFile->fpOutFile = StartNewOutputLog (
                                                lpOutFile,
                                                pszInFileName,
                                                lpLogLine->szDate
                                                );
            }

            strcpy(lpOutFile->szLastDate, lpLogLine->szDate);
            lpOutFile->DosDate.wDOSDate = DateStringToDOSDate(lpLogLine->szDate);
            bDateChanged = TRUE;
        }

        if (0 != strcmp(lpOutFile->szLastTime, lpLogLine->szTime))
        {
            strcpy(lpOutFile->szLastTime, lpLogLine->szTime);
            lpOutFile->DosDate.wDOSTime = TimeStringToDOSTime(lpLogLine->szTime, &wSecond);
            bTimeChanged = TRUE;
        }

        if (bDateChanged || bTimeChanged)
        {
            DosDateTimeToFileTime(lpOutFile->DosDate.wDOSDate, lpOutFile->DosDate.wDOSTime, &(lpOutFile->FileTime));
            FileTimeToSystemTime(&(lpOutFile->FileTime), &(lpOutFile->SystemTime));
            lpOutFile->SystemTime.wSecond = wSecond;
        }

        AscMonth (lpOutFile->SystemTime.wMonth, szMonth);

        //
        // Get bytes
        //

        if ( (_stricmp(lpLogLine->szOperation,"PUT") == 0) ||
             (_stricmp(lpLogLine->szOperation,"POST") == 0) ) {

            szBytes = lpLogLine->szBytesRec;
        } else {
            szBytes = lpLogLine->szBytesSent;
        }

        if ((0 != strcmp(lpLogLine->szParameters, " - ")) &&
           (0 != strcmp(lpLogLine->szParameters, "-,")) &&
           (0 != strcmp(lpLogLine->szParameters, "-")) &&
           (0 != strcmp(lpLogLine->szParameters, "")))
        {

            fprintf(lpOutFile->fpOutFile,"%s - %s [%02d/%s/%d:%02d:%02d:%02d %s] \"%s %s?%s %s\" %s %s\n",
            lpLogLine->szClientIP, lpLogLine->szUserName, lpOutFile->SystemTime.wDay,
            szMonth, lpOutFile->SystemTime.wYear, lpOutFile->SystemTime.wHour,
            lpOutFile->SystemTime.wMinute, lpOutFile->SystemTime.wSecond,
            NCSAGMTOffset, lpLogLine->szOperation,
            lpLogLine->szTargetURL, lpLogLine->szParameters, lpLogLine->szVersion,
            lpLogLine->szServiceStatus, szBytes);

        } else {

            fprintf(lpOutFile->fpOutFile, "%s - %s [%02d/%s/%d:%02d:%02d:%02d %s] \"%s %s %s\" %s %s\n",
            lpLogLine->szClientIP, lpLogLine->szUserName, lpOutFile->SystemTime.wDay,
            szMonth, lpOutFile->SystemTime.wYear, lpOutFile->SystemTime.wHour,
            lpOutFile->SystemTime.wMinute, lpOutFile->SystemTime.wSecond,
            NCSAGMTOffset, lpLogLine->szOperation,
            lpLogLine->szTargetURL, lpLogLine->szVersion, lpLogLine->szServiceStatus, szBytes);
        }
        //} //only process 200s
    }


    return (bLineOK);
}                                                           //end ProcessWebLine