2009-03-30 21:05 UTC+0200 Francesco Saverio Giudice (info/at/fsgiudice.com)
* harbour/contrib/examples/uhttpd/uhttpd.prg
* error string formatting
using hb_GTInfo() functions. Tested only in windows.
* harbour/contrib/examples/uhttpd/session.prg
+ added retrying in case of error in writing / deleting session files.
* harbour/contrib/examples/uhttpd/cgifunc.prg
* changed FCreate() to hb_FCreate()
This commit is contained in:
@@ -8,6 +8,15 @@
|
||||
2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
|
||||
*/
|
||||
|
||||
2009-03-30 21:05 UTC+0200 Francesco Saverio Giudice (info/at/fsgiudice.com)
|
||||
* harbour/contrib/examples/uhttpd/uhttpd.prg
|
||||
* error string formatting
|
||||
using hb_GTInfo() functions. Tested only in windows.
|
||||
* harbour/contrib/examples/uhttpd/session.prg
|
||||
+ added retrying in case of error in writing / deleting session files.
|
||||
* harbour/contrib/examples/uhttpd/cgifunc.prg
|
||||
* changed FCreate() to hb_FCreate()
|
||||
|
||||
2009-03-30 20:13 UTC+0200 Francesco Saverio Giudice (info/at/fsgiudice.com)
|
||||
* harbour/contrib/examples/uhttpd/uhttpd.prg
|
||||
+ added support for closing console using "X" system button
|
||||
|
||||
@@ -714,14 +714,9 @@ PROCEDURE uhttpd_WriteToLogFile( cString, cLog, lCreate )
|
||||
IF cLog <> NIL
|
||||
|
||||
IF !lCreate .AND. FILE( cLog )
|
||||
nHandle := FOpen( cLog, FO_READWRITE + FO_SHARED)
|
||||
nHandle := FOpen( cLog, FO_READWRITE + FO_SHARED )
|
||||
ELSE
|
||||
nHandle := FCreate( cLog )
|
||||
// After creation, I close and reopen it shared
|
||||
IF Ferror() == 0 .AND. nHandle > 0
|
||||
FClose( nHandle )
|
||||
nHandle := FOpen( cLog, FO_READWRITE + FO_SHARED)
|
||||
ENDIF
|
||||
nHandle := hb_FCreate( cLog, FC_NORMAL, FO_READWRITE + FO_SHARED )
|
||||
//__OutDebug( "Create ", nHandle )
|
||||
ENDIF
|
||||
|
||||
|
||||
@@ -582,7 +582,7 @@ METHOD SessionRead( cID ) CLASS uhttpd_Session
|
||||
LOCAL nFileSize
|
||||
LOCAL cBuffer
|
||||
LOCAL nRetry := 0
|
||||
LOCAL nFError := 0
|
||||
|
||||
DEFAULT cID TO ::cSID
|
||||
cFile := ::cSavePath + HB_OSPathSeparator() + ::cName + "_" + cID
|
||||
//TraceLog( "SessionRead: cFile", cFile )
|
||||
@@ -620,6 +620,7 @@ METHOD SessionWrite( cID, cData ) CLASS uhttpd_Session
|
||||
LOCAL cFile
|
||||
LOCAL nFileSize
|
||||
LOCAL lOk := FALSE
|
||||
LOCAL nRetry := 0
|
||||
|
||||
//TraceLog( "SessionWrite() - cID, cData", cID, cData )
|
||||
DEFAULT cID TO ::cSID
|
||||
@@ -630,16 +631,21 @@ METHOD SessionWrite( cID, cData ) CLASS uhttpd_Session
|
||||
cFile := ::cSavePath + HB_OSPathSeparator() + ::cName + "_" + cID
|
||||
//TraceLog( "SessionWrite() - cFile", cFile )
|
||||
IF nFileSize > 0
|
||||
IF ( nH := FCreate( cFile, FC_NORMAL ) ) <> -1
|
||||
IF ( FWrite( nH, @cData, nFileSize ) ) <> nFileSize
|
||||
uhttpd_Die( "ERROR: On writing session file : " + cFile + ", File error : " + hb_cStr( FError() ) )
|
||||
DO WHILE nRetry++ <= ::nFileRetry
|
||||
IF ( nH := hb_FCreate( cFile, FC_NORMAL, FO_READWRITE + FO_DENYWRITE ) ) <> -1
|
||||
IF ( FWrite( nH, @cData, nFileSize ) ) <> nFileSize
|
||||
uhttpd_Die( "ERROR: On writing session file : " + cFile + ", File error : " + hb_cStr( FError() ) )
|
||||
ELSE
|
||||
lOk := TRUE
|
||||
ENDIF
|
||||
FClose( nH )
|
||||
ELSE
|
||||
lOk := TRUE
|
||||
//uhttpd_Die( "ERROR: On WRITING session file. I can not create session file : " + cFile + ", File error : " + hb_cStr( FError() ) )
|
||||
hb_idleSleep( ::nFileWait / 1000 )
|
||||
LOOP
|
||||
ENDIF
|
||||
FClose( nH )
|
||||
ELSE
|
||||
uhttpd_Die( "ERROR: On WRITING session file. I can not create session file : " + cFile + ", File error : " + hb_cStr( FError() ) )
|
||||
ENDIF
|
||||
EXIT
|
||||
ENDDO
|
||||
ELSE
|
||||
// If session data is empty, I will delete the file if exist
|
||||
//IF File( cFile )
|
||||
@@ -653,6 +659,8 @@ RETURN lOk
|
||||
METHOD SessionDestroy( cID ) CLASS uhttpd_Session
|
||||
LOCAL cFile
|
||||
LOCAL lOk
|
||||
LOCAL nRetry := 0
|
||||
|
||||
//TraceLog( "SessionDestroy() - cID", cID )
|
||||
DEFAULT cID TO ::cSID
|
||||
|
||||
@@ -661,9 +669,22 @@ METHOD SessionDestroy( cID ) CLASS uhttpd_Session
|
||||
|
||||
//TraceLog( "SessionDestroy() - cID, oCGI:h_Session", cID, DumpValue( oCGI:h_Session ) )
|
||||
cFile := ::cSavePath + HB_OSPathSeparator() + ::cName + "_" + cID
|
||||
IF !( lOk := ( FErase( cFile ) == 0 ) )
|
||||
uhttpd_Die( "ERROR: On deleting session file : " + cFile + ", File error : " + hb_cStr( FError() ) )
|
||||
ELSE
|
||||
|
||||
lOk := FALSE
|
||||
DO WHILE nRetry++ <= ::nFileRetry
|
||||
IF ( lOk := ( FErase( cFile ) == 0 ) )
|
||||
EXIT
|
||||
ELSE
|
||||
hb_idleSleep( ::nFileWait / 1000 )
|
||||
LOOP
|
||||
ENDIF
|
||||
ENDDO
|
||||
|
||||
//IF !( lOk := ( FErase( cFile ) == 0 ) )
|
||||
// uhttpd_Die( "ERROR: On deleting session file : " + cFile + ", File error : " + hb_cStr( FError() ) )
|
||||
//ELSE
|
||||
|
||||
IF lOk
|
||||
//TraceLog( "SessionDestroy() - Sessione Eliminata - File " + cFile )
|
||||
// Genero un nuovo SID
|
||||
::RegenerateID()
|
||||
@@ -684,6 +705,7 @@ METHOD SessionGC( nMaxLifeTime ) CLASS uhttpd_Session
|
||||
//TraceLog( "GC: aFile[ F_NAME ], aFile[ F_DATE ], Date(), aFile[ F_TIME ], Time(), nSecs, nMaxLifeTime", ;
|
||||
// aFile[ F_NAME ], aFile[ F_DATE ], Date(), aFile[ F_TIME ], Time(), nSecs, nMaxLifeTime )
|
||||
IF nSecs > nMaxLifeTime
|
||||
// No error checking here, because if I cannot delete file now I will find it again on next loop
|
||||
FErase( ::cSavePath + HB_OSPathSeparator() + aFile[ F_NAME ] )
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
@@ -2321,6 +2321,8 @@ STATIC FUNCTION uhttpd_DefError( oError )
|
||||
LOCAL nChoice
|
||||
|
||||
LOCAL n
|
||||
LOCAL cDateTime, cString
|
||||
LOCAL cNewLine := hb_OSNewLine()
|
||||
|
||||
// By default, division by zero results in zero
|
||||
IF oError:genCode == EG_ZERODIV .AND. ;
|
||||
@@ -2360,7 +2362,7 @@ STATIC FUNCTION uhttpd_DefError( oError )
|
||||
cCallstack := ""
|
||||
n := 1
|
||||
DO WHILE ! Empty( ProcName( ++n ) )
|
||||
cCallstack += "Called from " + ProcName( n ) + "(" + hb_NToS( ProcLine( n ) ) + ") "
|
||||
cCallstack += "Called from " + ProcName( n ) + "(" + hb_NToS( ProcLine( n ) ) + ") " + cNewLine
|
||||
ENDDO
|
||||
|
||||
// Build buttons
|
||||
@@ -2387,9 +2389,9 @@ STATIC FUNCTION uhttpd_DefError( oError )
|
||||
DO WHILE nChoice == 0
|
||||
|
||||
IF cDOSError == NIL
|
||||
nChoice := Alert( cMessage + " " + cCallstack, aOptions )
|
||||
nChoice := Alert( cMessage + ";" + cCallstack, aOptions )
|
||||
ELSE
|
||||
nChoice := Alert( cMessage + ";" + cDOSError + " " + cCallstack, aOptions )
|
||||
nChoice := Alert( cMessage + " " + cDOSError + ";" + cCallstack, aOptions )
|
||||
ENDIF
|
||||
|
||||
ENDDO
|
||||
@@ -2411,13 +2413,21 @@ STATIC FUNCTION uhttpd_DefError( oError )
|
||||
cMessage += " " + cDOSError
|
||||
ENDIF
|
||||
|
||||
OutErr( hb_OSNewLine() )
|
||||
OutErr( cNewLine )
|
||||
OutErr( cMessage )
|
||||
OutErr( hb_OSNewLine() )
|
||||
OutErr( cNewLine )
|
||||
OutErr( cCallstack )
|
||||
|
||||
// Write to errorlog
|
||||
uhttpd_WriteToLogFile( cMessage + HB_OsPathSeparator() + cCallstack, Exe_Path() + "\error.log" )
|
||||
cDateTime := HB_TTOC( hb_DateTime() )
|
||||
cString := Replicate( "*", 70 ) + cNewLine + ;
|
||||
cDateTime + cNewLine + ;
|
||||
Replicate( "*", 70 ) + cNewLine + ;
|
||||
cMessage + cNewLine + ;
|
||||
cCallstack + cNewLine + ;
|
||||
Replicate( "*", 70 ) + cNewLine
|
||||
|
||||
uhttpd_WriteToLogFile( cString, Exe_Path() + "\error.log" )
|
||||
|
||||
ErrorLevel( 1 )
|
||||
QUIT
|
||||
|
||||
Reference in New Issue
Block a user