More dead code removal, this time Win32-isms in logging & sockets. Also start cleaning up OS macros in platform.h.
This commit is contained in:
		
							parent
							
								
									3135aaea4f
								
							
						
					
					
						commit
						9be78c1d1c
					
				| 
						 | 
					@ -51,15 +51,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "corestrings.h"    // for: STR_ERR2_ARCH_CRYPTO_ERR
 | 
					#include "corestrings.h"    // for: STR_ERR2_ARCH_CRYPTO_ERR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if FSEEK_TAKES_INT32
 | 
					 | 
				
			||||||
#define FSEEK(x, y, z) fseek((x), (int32)(y), (z))
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
#define FSEEK(x, y, z) fseek((x), (y), (z)) 
 | 
					 | 
				
			||||||
#endif 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//=============================================================================
 | 
					//=============================================================================
 | 
				
			||||||
// Utility Functions
 | 
					// Utility Functions
 | 
				
			||||||
//=============================================================================
 | 
					//=============================================================================
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -89,17 +89,6 @@ void cDebug::Trace(int levelNum, const char* format, ...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void cDebug::Trace(int levelNum, const wchar_t* format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (levelNum > mDebugLevel)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    // create the output buffer 
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, format);
 | 
					 | 
				
			||||||
    DoTrace(format, args);
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//  DoTrace()
 | 
					//  DoTrace()
 | 
				
			||||||
| 
						 | 
					@ -146,56 +135,6 @@ void cDebug::DoTrace(const char *format, va_list &args)
 | 
				
			||||||
        logfile.flush();
 | 
					        logfile.flush();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::DoTrace(const wchar_t *format, va_list &args)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
#if IS_UNIX
 | 
					 | 
				
			||||||
    // we don't support vswprintf on UNIX
 | 
					 | 
				
			||||||
    ASSERT(false);
 | 
					 | 
				
			||||||
    THROW_INTERNAL("debug.cpp");
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    size_t guard1 = 0xBABABABA;
 | 
					 | 
				
			||||||
    wchar_t out[2048];
 | 
					 | 
				
			||||||
    size_t guard2 = 0xBABABABA;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    vswprintf(out, format, args);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    ASSERT(guard1 == 0xBABABABA && guard2 == 0xBABABABA); // string was too long
 | 
					 | 
				
			||||||
    char nout[1024];
 | 
					 | 
				
			||||||
    if (wcstombs(nout, out, 1024) == -1) 
 | 
					 | 
				
			||||||
        strcpy(nout, "XXX Unconvertable wide char detected in cDebug::DoTrace()\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    std::ostringstream ostr;
 | 
					 | 
				
			||||||
    ostr.setf(std::ios::left);
 | 
					 | 
				
			||||||
    ostr.width(40);
 | 
					 | 
				
			||||||
    ostr << mLabel;
 | 
					 | 
				
			||||||
    ostr.width(0);
 | 
					 | 
				
			||||||
    ostr << nout;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ((mOutMask & OUT_STDOUT) != 0)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        std::cout << ostr.str().c_str();
 | 
					 | 
				
			||||||
        std::cout.flush();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    //make it output to log file!
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    if ((mOutMask & OUT_FILE) != 0)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        // the logfile is narrow chars only...
 | 
					 | 
				
			||||||
        logfile.setf(std::ios::left);
 | 
					 | 
				
			||||||
        logfile.width(40);
 | 
					 | 
				
			||||||
        logfile << mLabel;
 | 
					 | 
				
			||||||
        logfile.width(0);
 | 
					 | 
				
			||||||
        logfile << out;
 | 
					 | 
				
			||||||
        logfile.flush();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
#endif // IS_UNIX
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef DEBUG
 | 
					#ifdef DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
| 
						 | 
					@ -275,90 +214,11 @@ void cDebug::TraceNever(const char *format, ...)
 | 
				
			||||||
    va_end(args);
 | 
					    va_end(args);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void cDebug::TraceAlways(const wchar_t *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (D_ALWAYS > mDebugLevel)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // fill up arglist, and pass to printing routine
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, format);
 | 
					 | 
				
			||||||
    DoTrace(format, args);
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::TraceError(const wchar_t *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (D_ERROR > mDebugLevel)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // fill up arglist, and pass to printing routine
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, format);
 | 
					 | 
				
			||||||
    DoTrace(format, args);
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::TraceWarning(const wchar_t *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (D_WARNING > mDebugLevel)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // fill up arglist, and pass to printing routine
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, format);
 | 
					 | 
				
			||||||
    DoTrace(format, args);
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::TraceDebug(const wchar_t *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (D_DEBUG > mDebugLevel)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // fill up arglist, and pass to printing routine
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, format);
 | 
					 | 
				
			||||||
    DoTrace(format, args);
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::TraceDetail(const wchar_t *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (D_DETAIL > mDebugLevel)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // fill up arglist, and pass to printing routine
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, format);
 | 
					 | 
				
			||||||
    DoTrace(format, args);
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::TraceNever(const wchar_t *format, ...)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (D_NEVER > mDebugLevel)
 | 
					 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // fill up arglist, and pass to printing routine
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, format);
 | 
					 | 
				
			||||||
    DoTrace(format, args);
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::TraceVaArgs( int iDebugLevel, const char *format, va_list &args )
 | 
					void cDebug::TraceVaArgs( int iDebugLevel, const char *format, va_list &args )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if ( iDebugLevel <= mDebugLevel )
 | 
					    if ( iDebugLevel <= mDebugLevel )
 | 
				
			||||||
        DoTrace( format, args);
 | 
					        DoTrace( format, args);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::TraceVaArgs( int iDebugLevel, const wchar_t *format, va_list &args )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if ( iDebugLevel <= mDebugLevel )
 | 
					 | 
				
			||||||
        DoTrace( format, args );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // DEBUG
 | 
					#endif // DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
| 
						 | 
					@ -447,55 +307,12 @@ void cDebug::DebugOut( const char* lpOutputString, ... )
 | 
				
			||||||
    vsprintf(buf, lpOutputString, args);
 | 
					    vsprintf(buf, lpOutputString, args);
 | 
				
			||||||
    va_end(args);
 | 
					    va_end(args);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    #if !USE_OUTPUT_DEBUG_STRING 
 | 
						#ifdef _DEBUG
 | 
				
			||||||
        #ifdef _DEBUG
 | 
						TCERR << buf;
 | 
				
			||||||
        TCERR << buf;
 | 
						#endif  //_DEBUG
 | 
				
			||||||
        #endif  //_DEBUG
 | 
					 | 
				
			||||||
    #else   // USE_OUTPUT_DEBUG_STRING
 | 
					 | 
				
			||||||
        ::OutputDebugString(buf);
 | 
					 | 
				
			||||||
    #endif  // USE_OUTPUT_DEBUG_STRING
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TCOUT.flush();
 | 
					    TCOUT.flush();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
void cDebug::DebugOut( const wchar_t* lpOutputString, ... )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    va_list args;
 | 
					 | 
				
			||||||
    va_start(args, lpOutputString);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if IS_UNIX
 | 
					 | 
				
			||||||
    char mbformatbuf[1024];
 | 
					 | 
				
			||||||
    char buf[1024];
 | 
					 | 
				
			||||||
//  if (wcstombs(mbformatbuf, lpOutputString, wcslen(lpOutputString)) == -1)
 | 
					 | 
				
			||||||
//      strcpy(mbformatbuf, "XXX Unconvertable wide char detected in cDebug::DebugOut()\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    vsprintf(buf, mbformatbuf, args);
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    wchar_t buf[1024];
 | 
					 | 
				
			||||||
    vswprintf(buf, lpOutputString, args);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    va_end(args);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    char nbuf[1024];
 | 
					 | 
				
			||||||
    #if IS_UNIX
 | 
					 | 
				
			||||||
    strcpy(nbuf, buf);
 | 
					 | 
				
			||||||
    #else
 | 
					 | 
				
			||||||
    if (wcstombs(nbuf, buf, wcslen(buf)+1) == -1)
 | 
					 | 
				
			||||||
        strcpy(nbuf, "XXX Unconvertable wide char detected in cDebug::DebugOut()\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if !USE_OUTPUT_DEBUG_STRING 
 | 
					 | 
				
			||||||
    #ifdef _DEBUG
 | 
					 | 
				
			||||||
    TCERR << nbuf;
 | 
					 | 
				
			||||||
    #endif  //_DEBUG
 | 
					 | 
				
			||||||
#else   // USE_OUTPUT_DEBUG_STRING
 | 
					 | 
				
			||||||
    ::OutputDebugString(nbuf);
 | 
					 | 
				
			||||||
#endif  // USE_OUTPUT_DEBUG_STRING
 | 
					 | 
				
			||||||
    #endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    TCOUT.flush();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif // DEBUG
 | 
					#endif // DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//////////////////////////////////////////////////////////////////////////////////
 | 
					//////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,22 +113,15 @@ public:
 | 
				
			||||||
    void    TraceDebug      (const char *format, ...);
 | 
					    void    TraceDebug      (const char *format, ...);
 | 
				
			||||||
    void    TraceDetail     (const char *format, ...);
 | 
					    void    TraceDetail     (const char *format, ...);
 | 
				
			||||||
    void    TraceNever      (const char *format, ...);
 | 
					    void    TraceNever      (const char *format, ...);
 | 
				
			||||||
    void    TraceAlways     (const wchar_t *format, ...);
 | 
					
 | 
				
			||||||
    void    TraceError      (const wchar_t *format, ...);
 | 
					 | 
				
			||||||
    void    TraceWarning    (const wchar_t *format, ...);
 | 
					 | 
				
			||||||
    void    TraceDebug      (const wchar_t *format, ...);
 | 
					 | 
				
			||||||
    void    TraceDetail     (const wchar_t *format, ...);
 | 
					 | 
				
			||||||
    void    TraceNever      (const wchar_t *format, ...);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // these are of use if you are inside a function with a "..." as an argument
 | 
					    // these are of use if you are inside a function with a "..." as an argument
 | 
				
			||||||
    // and you want to trace those args
 | 
					    // and you want to trace those args
 | 
				
			||||||
    void    TraceVaArgs     (int iDebugLevel, const char *format,   va_list &args);
 | 
					    void    TraceVaArgs     (int iDebugLevel, const char *format,   va_list &args);
 | 
				
			||||||
    void    TraceVaArgs     (int iDebugLevel, const wchar_t *format, va_list &args);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // ...but you can still choose to use this interface...
 | 
					    // ...but you can still choose to use this interface...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void Trace(int levelNum, const char* format, ...);
 | 
					    void Trace(int levelNum, const char* format, ...);
 | 
				
			||||||
    void Trace(int levelNum, const wchar_t* format, ...);
 | 
					 | 
				
			||||||
        // Outputs based on levelnum.  If levelnum <= global debug, print.
 | 
					        // Outputs based on levelnum.  If levelnum <= global debug, print.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
| 
						 | 
					@ -146,7 +139,6 @@ public:
 | 
				
			||||||
        // level will be output.
 | 
					        // level will be output.
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    static void DebugOut    ( const char* lpOutputString, ... );
 | 
					    static void DebugOut    ( const char* lpOutputString, ... );
 | 
				
			||||||
    static void DebugOut    ( const wchar_t* lpOutputString, ... );
 | 
					 | 
				
			||||||
        // Works just like TRACE
 | 
					        // Works just like TRACE
 | 
				
			||||||
        // note: there is an internal buffer size of 1024; traces larger
 | 
					        // note: there is an internal buffer size of 1024; traces larger
 | 
				
			||||||
        // than that will have unpredictable and probably bad results
 | 
					        // than that will have unpredictable and probably bad results
 | 
				
			||||||
| 
						 | 
					@ -161,7 +153,6 @@ private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // helper functions
 | 
					    // helper functions
 | 
				
			||||||
    void DoTrace(const char *format, va_list &args);
 | 
					    void DoTrace(const char *format, va_list &args);
 | 
				
			||||||
    void DoTrace(const wchar_t *format, va_list &args);
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -199,16 +190,8 @@ inline void cDebug::TraceWarning    (const char *, ...) {}
 | 
				
			||||||
inline void cDebug::TraceDebug      (const char *, ...) {}
 | 
					inline void cDebug::TraceDebug      (const char *, ...) {}
 | 
				
			||||||
inline void cDebug::TraceDetail     (const char *, ...) {}
 | 
					inline void cDebug::TraceDetail     (const char *, ...) {}
 | 
				
			||||||
inline void cDebug::TraceNever      (const char *, ...) {}
 | 
					inline void cDebug::TraceNever      (const char *, ...) {}
 | 
				
			||||||
inline void cDebug::TraceAlways     (const wchar_t *, ...) {}
 | 
					 | 
				
			||||||
inline void cDebug::TraceError      (const wchar_t *, ...) {}
 | 
					 | 
				
			||||||
inline void cDebug::TraceWarning    (const wchar_t *, ...) {}
 | 
					 | 
				
			||||||
inline void cDebug::TraceDebug      (const wchar_t *, ...) {}
 | 
					 | 
				
			||||||
inline void cDebug::TraceDetail     (const wchar_t *, ...) {}
 | 
					 | 
				
			||||||
inline void cDebug::TraceNever      (const wchar_t *, ...) {}
 | 
					 | 
				
			||||||
inline void cDebug::TraceVaArgs     (int, const char *, va_list &) {}
 | 
					inline void cDebug::TraceVaArgs     (int, const char *, va_list &) {}
 | 
				
			||||||
inline void cDebug::TraceVaArgs     (int, const wchar_t *, va_list &) {}
 | 
					 | 
				
			||||||
inline void cDebug::Trace           (int, const char*, ...) {}
 | 
					inline void cDebug::Trace           (int, const char*, ...) {}
 | 
				
			||||||
inline void cDebug::Trace           (int, const wchar_t*, ...) {}
 | 
					 | 
				
			||||||
inline bool cDebug::AddOutTarget    (OutTarget) { return false; }
 | 
					inline bool cDebug::AddOutTarget    (OutTarget) { return false; }
 | 
				
			||||||
inline bool cDebug::RemoveOutTarget (OutTarget) { return false; }
 | 
					inline bool cDebug::RemoveOutTarget (OutTarget) { return false; }
 | 
				
			||||||
inline bool cDebug::HasOutTarget    (OutTarget) { return false; }
 | 
					inline bool cDebug::HasOutTarget    (OutTarget) { return false; }
 | 
				
			||||||
| 
						 | 
					@ -216,7 +199,6 @@ inline bool cDebug::SetOutputFile   (const char*) { return false; }
 | 
				
			||||||
inline void cDebug::SetDebugLevel   (int) {}
 | 
					inline void cDebug::SetDebugLevel   (int) {}
 | 
				
			||||||
inline int  cDebug::GetDebugLevel   (void) { return 0; }
 | 
					inline int  cDebug::GetDebugLevel   (void) { return 0; }
 | 
				
			||||||
inline void cDebug::DebugOut        ( const char*, ... ) {}
 | 
					inline void cDebug::DebugOut        ( const char*, ... ) {}
 | 
				
			||||||
inline void cDebug::DebugOut        ( const wchar_t*, ... ) {}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // DEBUG
 | 
					#endif // DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,9 @@
 | 
				
			||||||
#ifndef __PLATFORM_H
 | 
					#ifndef __PLATFORM_H
 | 
				
			||||||
#define __PLATFORM_H
 | 
					#define __PLATFORM_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//NOTE: Autoconf is strongly preferred as the Right Way to detect platform-specific features/behaviors.
 | 
				
			||||||
 | 
					// These macros should really only be used when autoconf can't get the job done.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//=============================================================================
 | 
					//=============================================================================
 | 
				
			||||||
// Enumerations
 | 
					// Enumerations
 | 
				
			||||||
// 
 | 
					// 
 | 
				
			||||||
| 
						 | 
					@ -47,13 +50,42 @@
 | 
				
			||||||
// variation.  We group similar items together, such as OS_REDHAT and OS_SLACKWARE
 | 
					// variation.  We group similar items together, such as OS_REDHAT and OS_SLACKWARE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OS_UNKNOWN      0
 | 
					#define OS_UNKNOWN      0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OS_WIN32        0x0101
 | 
					#define OS_WIN32        0x0101
 | 
				
			||||||
 | 
					#define OS_CYGWIN       0x0102
 | 
				
			||||||
 | 
					#define OS_DOS_DJGPP    0x0103
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define OS_LINUX        0x0201
 | 
				
			||||||
 | 
					#define OS_ANDROID      0x0202
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define OS_FREEBSD      0x0301
 | 
				
			||||||
 | 
					#define OS_NETBSD       0x0302
 | 
				
			||||||
 | 
					#define OS_OPENBSD      0x0303
 | 
				
			||||||
 | 
					#define OS_DARWIN       0x0304
 | 
				
			||||||
 | 
					#define OS_DRAGONFLYBSD 0x0305
 | 
				
			||||||
 | 
					#define OS_MIDNIGHTBSD  0x0306
 | 
				
			||||||
 | 
					#define OS_HARDENEDBSD  0x0307
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define OS_SOLARIS      0x0400
 | 
				
			||||||
#define OS_AIX          0x0401
 | 
					#define OS_AIX          0x0401
 | 
				
			||||||
#define OS_HPUX         0x0501
 | 
					#define OS_HPUX         0x0402
 | 
				
			||||||
#define OS_IRIX         0x0601
 | 
					#define OS_IRIX         0x0403
 | 
				
			||||||
#define OS_OSF1         0x0701
 | 
					#define OS_OSF1         0x0404
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define OS_MINIX        0x0501
 | 
				
			||||||
 | 
					#define OS_HURD         0x0502
 | 
				
			||||||
 | 
					#define OS_HAIKU        0x0503
 | 
				
			||||||
 | 
					#define OS_SYLLABLE     0x0504
 | 
				
			||||||
 | 
					#define OS_SKYOS        0x0505
 | 
				
			||||||
 | 
					#define OS_SORTIX       0x0506
 | 
				
			||||||
 | 
					#define OS_MINT         0x0507
 | 
				
			||||||
 | 
					#define OS_AROS         0x0506
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define COMP_UNKNOWN        0
 | 
					#define COMP_UNKNOWN        0
 | 
				
			||||||
 | 
					#define COMP_GCC            0x0001
 | 
				
			||||||
 | 
					#define COMP_CLANG          0x0002
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define COMP_MSVC           0x0101
 | 
					#define COMP_MSVC           0x0101
 | 
				
			||||||
#define COMP_KAI_GCC        0x0201
 | 
					#define COMP_KAI_GCC        0x0201
 | 
				
			||||||
#define COMP_KAI_SUNPRO     0x0202
 | 
					#define COMP_KAI_SUNPRO     0x0202
 | 
				
			||||||
| 
						 | 
					@ -81,34 +113,91 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(_WIN32) 
 | 
					#if defined(_WIN32) 
 | 
				
			||||||
    #define OS                  OS_WIN32
 | 
					    #define OS                  OS_WIN32
 | 
				
			||||||
 | 
					    #define IS_WIN32 			1	 
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(__CYGWIN__)
 | 
				
			||||||
 | 
					    #define OS					OS_CYGWIN
 | 
				
			||||||
 | 
					    #define IS_CYGWIN			1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #if defined(_MSC_VER)
 | 
					#elif defined(__DJGPP__)
 | 
				
			||||||
        #define COMP            COMP_MSVC
 | 
					    #define OS					OS_DOS_DJGPP
 | 
				
			||||||
    #else
 | 
						#define IS_DOS_DJGPP        1
 | 
				
			||||||
        #error _MSC_VER not defined.  MSVC is currently the only supported compiler
 | 
						
 | 
				
			||||||
    #endif
 | 
						
 | 
				
			||||||
 | 
					#elif defined(__ANDROID_API__)
 | 
				
			||||||
 | 
					    #define OS					OS_ANDROID
 | 
				
			||||||
 | 
						#define IS_ANDROID          1
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(_LINUX)
 | 
				
			||||||
 | 
						#define OS                  OS_LINUX
 | 
				
			||||||
 | 
						#define IS_LINUX 			1
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(__FreeBSD__)
 | 
				
			||||||
 | 
					    #define OS                  OS_FREEBSD
 | 
				
			||||||
 | 
					    #define IS_FREEBSD          1	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(_IRIX)
 | 
					// add NetBSD, OpenBSD, other BSDs	
 | 
				
			||||||
    #define OS                  OS_IRIX
 | 
						
 | 
				
			||||||
    #define COMP                COMP_KAI_IRIX
 | 
					#elif defined(_OSX)
 | 
				
			||||||
 | 
					    #define OS                  OS_DARWIN
 | 
				
			||||||
#elif defined(_ALPHA)
 | 
					    #define IS_DARWIN           1	
 | 
				
			||||||
    #define OS                  OS_OSF1
 | 
						
 | 
				
			||||||
    #define COMP                COMP_KAI_OSF1ALPHA
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#elif defined(_SOLARIS)
 | 
				
			||||||
 | 
					    #define OS					OS_SOLARIS
 | 
				
			||||||
 | 
					    #define IS_SOLARIS          1	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(_AIX)
 | 
				
			||||||
 | 
					    #define OS					OS_AIX
 | 
				
			||||||
 | 
					    #define IS_AIX              1	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
#elif defined (_HPUX)
 | 
					#elif defined (_HPUX)
 | 
				
			||||||
    #define OS                  OS_HPUX
 | 
					    #define OS                  OS_HPUX
 | 
				
			||||||
    #define COMP                COMP_KAI_HPANSIC
 | 
					    #define IS_HPUX             1
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(_IRIX)
 | 
				
			||||||
 | 
					    #define OS                  OS_IRIX
 | 
				
			||||||
 | 
					    #define IS_IRIX             1
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(TRU64) || defined(__OSF1__)
 | 
				
			||||||
 | 
					    #define OS                  OS_OSF1
 | 
				
			||||||
 | 
					    #define IS_OSF1             1
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					// need Minix, Haiku	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(__gnu_hurd__)
 | 
				
			||||||
 | 
					    #define OS					OS_HURD
 | 
				
			||||||
 | 
						#define IS_HURD				1 
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(__SYLLABLE__)
 | 
				
			||||||
 | 
					    #define OS                  OS_SYLLABLE
 | 
				
			||||||
 | 
					    #define IS_SYLLABLE         1	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(SKYOS)
 | 
				
			||||||
 | 
					    #define OS                  OS_SKYOS
 | 
				
			||||||
 | 
						#define IS_SKYOS            1 
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(_SORTIX_SOURCE)
 | 
				
			||||||
 | 
					  	#define OS                  OS_SORTIX
 | 
				
			||||||
 | 
						#define IS_SORTIX           1
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(__MINT__)
 | 
				
			||||||
 | 
					    #define OS                  OS_MINT
 | 
				
			||||||
 | 
						#define IS_MINT             1 
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					#elif defined(__AROS__)
 | 
				
			||||||
 | 
					    #define OS                  OS_AROS
 | 
				
			||||||
 | 
					    #define IS_AROS             1 
 | 
				
			||||||
 | 
							
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
//  OK for OS not to resolve, it's being phased out.
 | 
					//  OK for OS not to resolve, it's being phased out.
 | 
				
			||||||
//    #error Unknown OS
 | 
					//    #error Unknown OS
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(OS)
 | 
					 | 
				
			||||||
//  OK for OS not to resolve, it's being phased out.
 | 
					 | 
				
			||||||
//    #error OS definition did not resolve.  Check "platform.h".
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
    /* XXX: COMP may now not resolve, because autoconf may
 | 
					    /* XXX: COMP may now not resolve, because autoconf may
 | 
				
			||||||
     *  detect GCC.  This is done in the hopes that all
 | 
					     *  detect GCC.  This is done in the hopes that all
 | 
				
			||||||
     *  COMP detections, and indeed both OS & COMP detechtions
 | 
					     *  COMP detections, and indeed both OS & COMP detechtions
 | 
				
			||||||
| 
						 | 
					@ -150,13 +239,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 | 
					// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// OS detection 
 | 
					 | 
				
			||||||
// Note: Avoid using these if possible (see above)
 | 
					 | 
				
			||||||
#define IS_WIN32    (OS == OS_WIN32)
 | 
					 | 
				
			||||||
#define IS_AIX      (OS == OS_AIX)
 | 
					 | 
				
			||||||
#define IS_HPUX     (OS == OS_HPUX)
 | 
					 | 
				
			||||||
#define IS_IRIX     (OS == OS_IRIX)
 | 
					 | 
				
			||||||
#define IS_OSF1     (OS == OS_OSF1)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// complier detection
 | 
					// complier detection
 | 
				
			||||||
#define IS_KAI      (COMP == COMP_KAI_GCC || COMP == COMP_KAI_SUNPRO || COMP == COMP_KAI_GLIBC || COMP == COMP_KAI_VISUALAGE || COMP == COMP_KAI_HPANSIC || COMP == COMP_KAI_IRIX || COMP == COMP_KAI_OSF1ALPHA)
 | 
					#define IS_KAI      (COMP == COMP_KAI_GCC || COMP == COMP_KAI_SUNPRO || COMP == COMP_KAI_GLIBC || COMP == COMP_KAI_VISUALAGE || COMP == COMP_KAI_HPANSIC || COMP == COMP_KAI_IRIX || COMP == COMP_KAI_OSF1ALPHA)
 | 
				
			||||||
| 
						 | 
					@ -183,17 +265,12 @@
 | 
				
			||||||
#define SUPPORTS_POSIX_THREADS  (!SUPPORTS_WIN32_THREADS)
 | 
					#define SUPPORTS_POSIX_THREADS  (!SUPPORTS_WIN32_THREADS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Miscellaneous
 | 
					// Miscellaneous
 | 
				
			||||||
#define FSEEK_TAKES_INT32       IS_UNIX     // True if fseek takes 32-bit offsets
 | 
					 | 
				
			||||||
#define USE_OUTPUT_DEBUG_STRING IS_WIN32    // Use the Win32 OutputDebugString() for debug messages.
 | 
					 | 
				
			||||||
#define SUPPORTS_MAPI           0
 | 
					 | 
				
			||||||
#define WCHAR_IS_16_BITS        IS_WIN32
 | 
					#define WCHAR_IS_16_BITS        IS_WIN32
 | 
				
			||||||
#define WCHAR_IS_32_BITS        IS_UNIX
 | 
					#define WCHAR_IS_32_BITS        IS_UNIX
 | 
				
			||||||
#define WCHAR_REP_IS_UCS2       IS_WIN32
 | 
					#define WCHAR_REP_IS_UCS2       IS_WIN32
 | 
				
			||||||
#define USES_MPOPEN             IS_UNIX
 | 
					#define USES_MPOPEN             IS_UNIX
 | 
				
			||||||
#define USES_WINSOCK            IS_WIN32
 | 
					 | 
				
			||||||
#define SUPPORTS_WCHART         IS_WIN32    // TODO: Remove after getting new ver of KAI
 | 
					#define SUPPORTS_WCHART         IS_WIN32    // TODO: Remove after getting new ver of KAI
 | 
				
			||||||
#define USES_GLIBC              ((COMP == COMP_KAI_GLIBC) || HAVE_GCC)
 | 
					#define USES_GLIBC              ((COMP == COMP_KAI_GLIBC) || HAVE_GCC)
 | 
				
			||||||
#define SUPPORTS_EVENTLOG       IS_WIN32
 | 
					 | 
				
			||||||
#define SUPPORTS_MEMBER_TEMPLATES               ( ! IS_SUNPRO )
 | 
					#define SUPPORTS_MEMBER_TEMPLATES               ( ! IS_SUNPRO )
 | 
				
			||||||
#define SUPPORTS_EXPLICIT_TEMPLATE_FUNC_INST    ( ! IS_SUNPRO )
 | 
					#define SUPPORTS_EXPLICIT_TEMPLATE_FUNC_INST    ( ! IS_SUNPRO )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -228,60 +228,6 @@ private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // socket related member variables
 | 
					    // socket related member variables
 | 
				
			||||||
    SOCKET  mSocket;
 | 
					    SOCKET  mSocket;
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if USES_WINSOCK
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Types for the functions in winsock.dll
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // These function prototypes and the pointers that use them allow us to use
 | 
					 | 
				
			||||||
    // winsock without requiring the DLL to be on the end system for the application
 | 
					 | 
				
			||||||
    // to run.  It seems unacceptable for tripwire to fail to run at all if wsock32.dll
 | 
					 | 
				
			||||||
    // is not present on the system.
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    HINSTANCE mHlibWinsock;
 | 
					 | 
				
			||||||
    typedef int (PASCAL * WSASTARTUPPROC) (WORD wVersionRequired, LPWSADATA lpWSAData);
 | 
					 | 
				
			||||||
    typedef SOCKET (PASCAL * SOCKETPROC) (int af, int type, int protocol);
 | 
					 | 
				
			||||||
    typedef unsigned long (PASCAL * INETADDRPROC) (const char FAR * cp);
 | 
					 | 
				
			||||||
    typedef int (PASCAL FAR * GETHOSTNAMEPROC) (char FAR * name, int namelen);
 | 
					 | 
				
			||||||
    typedef struct hostent FAR * (PASCAL * GETHOSTBYNAMEPROC)(const char FAR * name);
 | 
					 | 
				
			||||||
    typedef int (PASCAL * CONNECTPROC) (SOCKET s, const struct sockaddr FAR *name, int namelen);
 | 
					 | 
				
			||||||
    typedef int (PASCAL * CLOSESOCKETPROC) (SOCKET s);
 | 
					 | 
				
			||||||
    typedef int (PASCAL * SENDPROC) (SOCKET s, const char FAR * buf, int len, int flags);
 | 
					 | 
				
			||||||
    typedef int (PASCAL * RECVPROC) (SOCKET s, char FAR * buf, int len, int flags);
 | 
					 | 
				
			||||||
    typedef int (PASCAL * SELECTPROC) (int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout);
 | 
					 | 
				
			||||||
    typedef u_long (PASCAL * LONGPROC) (u_long netlong);
 | 
					 | 
				
			||||||
    typedef u_short (PASCAL * SHORTPROC) (u_short netlong);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // pointers to the functions in wsock32.dll
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Berkeley functions
 | 
					 | 
				
			||||||
    SOCKETPROC          mPfnSocket;
 | 
					 | 
				
			||||||
    INETADDRPROC        mPfnInetAddr;
 | 
					 | 
				
			||||||
    GETHOSTNAMEPROC     mPfnGethostname;
 | 
					 | 
				
			||||||
    GETHOSTBYNAMEPROC   mPfnGethostbyname;
 | 
					 | 
				
			||||||
    CONNECTPROC         mPfnConnect;
 | 
					 | 
				
			||||||
    CLOSESOCKETPROC     mPfnCloseSocket;
 | 
					 | 
				
			||||||
    SENDPROC            mPfnSend;
 | 
					 | 
				
			||||||
    RECVPROC            mPfnRecv;
 | 
					 | 
				
			||||||
    SELECTPROC          mPfnSelect;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // winsock functions
 | 
					 | 
				
			||||||
    FARPROC             mPfnWSAGetLastError;
 | 
					 | 
				
			||||||
    WSASTARTUPPROC      mPfnWSAStartup;
 | 
					 | 
				
			||||||
    FARPROC             mPfnWSACleanup;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Endian convertion functions
 | 
					 | 
				
			||||||
    LONGPROC            mPfnNtohl;
 | 
					 | 
				
			||||||
    LONGPROC            mPfnHtonl;
 | 
					 | 
				
			||||||
    SHORTPROC           mPfnNtohs;
 | 
					 | 
				
			||||||
    SHORTPROC           mPfnHtons;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Methods to set the pointers to functions.
 | 
					 | 
				
			||||||
    bool LoadDll();
 | 
					 | 
				
			||||||
    bool UnloadDll();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void SendString( const std::string& str );
 | 
					    void SendString( const std::string& str );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // methods common to windows and unix:
 | 
					    // methods common to windows and unix:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -132,29 +132,6 @@ cSMTPMailMessage::cSMTPMailMessage(TSTRING strServerName, unsigned short portNum
 | 
				
			||||||
    mstrServerName      = strServerName;
 | 
					    mstrServerName      = strServerName;
 | 
				
			||||||
    mPortNumber         = portNumber;
 | 
					    mPortNumber         = portNumber;
 | 
				
			||||||
    mSocket             = INVALID_SOCKET;
 | 
					    mSocket             = INVALID_SOCKET;
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if USES_WINSOCK
 | 
					 | 
				
			||||||
    mHlibWinsock        = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mPfnSocket          = NULL;
 | 
					 | 
				
			||||||
    mPfnInetAddr        = NULL;
 | 
					 | 
				
			||||||
    mPfnGethostname     = NULL;
 | 
					 | 
				
			||||||
    mPfnGethostbyname   = NULL;
 | 
					 | 
				
			||||||
    mPfnConnect         = NULL;
 | 
					 | 
				
			||||||
    mPfnCloseSocket     = NULL;
 | 
					 | 
				
			||||||
    mPfnSend            = NULL;
 | 
					 | 
				
			||||||
    mPfnRecv            = NULL;
 | 
					 | 
				
			||||||
    mPfnSelect          = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    mPfnWSAStartup      = NULL;
 | 
					 | 
				
			||||||
    mPfnWSACleanup      = NULL;
 | 
					 | 
				
			||||||
    mPfnWSAGetLastError = NULL;
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    mPfnNtohl           = NULL;
 | 
					 | 
				
			||||||
    mPfnHtonl           = NULL;
 | 
					 | 
				
			||||||
    mPfnNtohs           = NULL;
 | 
					 | 
				
			||||||
    mPfnHtons           = NULL;
 | 
					 | 
				
			||||||
#endif // USES_WINSOCK
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -167,8 +144,6 @@ cSMTPMailMessage::~cSMTPMailMessage()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Get the IP address from the the server string. It's OK to have 
 | 
					// Get the IP address from the the server string. It's OK to have 
 | 
				
			||||||
| 
						 | 
					@ -585,88 +560,6 @@ void cSMTPMailMessage::DecodeError()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if defined(_DEBUG)
 | 
					#if defined(_DEBUG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if USES_WINSOCK
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // decode an error condition encountered by Windows sockets.
 | 
					 | 
				
			||||||
    // TODO -  write something less technical to explain what when wrong. Windows
 | 
					 | 
				
			||||||
    // message names are not good error strings for a shipping product.
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    int error = mPfnWSAGetLastError();
 | 
					 | 
				
			||||||
    fprintf(stderr, "Encountered winsock error message %d", error);
 | 
					 | 
				
			||||||
    struct ErrorStruct 
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        const char *msg;
 | 
					 | 
				
			||||||
        int error;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    static const errors[52] = 
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        { "WSAEINTR",                (WSABASEERR+4) },
 | 
					 | 
				
			||||||
        { "WSAEBADF",                (WSABASEERR+9) },
 | 
					 | 
				
			||||||
        { "WSAEACCES",               (WSABASEERR+13) },
 | 
					 | 
				
			||||||
        { "WSAEFAULT",               (WSABASEERR+14) },
 | 
					 | 
				
			||||||
        { "WSAEINVAL",               (WSABASEERR+22) },
 | 
					 | 
				
			||||||
        { "WSAEMFILE",               (WSABASEERR+24) },
 | 
					 | 
				
			||||||
        { "WSAEWOULDBLOCK",          (WSABASEERR+35) },
 | 
					 | 
				
			||||||
        { "WSAEINPROGRESS",          (WSABASEERR+36) },
 | 
					 | 
				
			||||||
        { "WSAEALREADY",             (WSABASEERR+37) },
 | 
					 | 
				
			||||||
        { "WSAENOTSOCK",             (WSABASEERR+38) },
 | 
					 | 
				
			||||||
        { "WSAEDESTADDRREQ",         (WSABASEERR+39) },
 | 
					 | 
				
			||||||
        { "WSAEMSGSIZE",             (WSABASEERR+40) },
 | 
					 | 
				
			||||||
        { "WSAEPROTOTYPE",           (WSABASEERR+41) },
 | 
					 | 
				
			||||||
        { "WSAENOPROTOOPT",          (WSABASEERR+42) },
 | 
					 | 
				
			||||||
        { "WSAEPROTONOSUPPORT",      (WSABASEERR+43) },
 | 
					 | 
				
			||||||
        { "WSAESOCKTNOSUPPORT",      (WSABASEERR+44) },
 | 
					 | 
				
			||||||
        { "WSAEOPNOTSUPP",           (WSABASEERR+45) },
 | 
					 | 
				
			||||||
        { "WSAEPFNOSUPPORT",         (WSABASEERR+46) },
 | 
					 | 
				
			||||||
        { "WSAEAFNOSUPPORT",         (WSABASEERR+47) },
 | 
					 | 
				
			||||||
        { "WSAEADDRINUSE",           (WSABASEERR+48) },
 | 
					 | 
				
			||||||
        { "WSAEADDRNOTAVAIL",        (WSABASEERR+49) },
 | 
					 | 
				
			||||||
        { "WSAENETDOWN",             (WSABASEERR+50) },
 | 
					 | 
				
			||||||
        { "WSAENETUNREACH",          (WSABASEERR+51) },
 | 
					 | 
				
			||||||
        { "WSAENETRESET",            (WSABASEERR+52) },
 | 
					 | 
				
			||||||
        { "WSAECONNABORTED",         (WSABASEERR+53) },
 | 
					 | 
				
			||||||
        { "WSAECONNRESET",           (WSABASEERR+54) },
 | 
					 | 
				
			||||||
        { "WSAENOBUFS",              (WSABASEERR+55) },
 | 
					 | 
				
			||||||
        { "WSAEISCONN",              (WSABASEERR+56) },
 | 
					 | 
				
			||||||
        { "WSAENOTCONN",             (WSABASEERR+57) },
 | 
					 | 
				
			||||||
        { "WSAESHUTDOWN",            (WSABASEERR+58) },
 | 
					 | 
				
			||||||
        { "WSAETOOMANYREFS",         (WSABASEERR+59) },
 | 
					 | 
				
			||||||
        { "WSAETIMEDOUT",            (WSABASEERR+60) },
 | 
					 | 
				
			||||||
        { "WSAECONNREFUSED",         (WSABASEERR+61) },
 | 
					 | 
				
			||||||
        { "WSAELOOP",                (WSABASEERR+62) },
 | 
					 | 
				
			||||||
        { "WSAENAMETOOLONG",         (WSABASEERR+63) },
 | 
					 | 
				
			||||||
        { "WSAEHOSTDOWN",            (WSABASEERR+64) },
 | 
					 | 
				
			||||||
        { "WSAEHOSTUNREACH",         (WSABASEERR+65) },
 | 
					 | 
				
			||||||
        { "WSAENOTEMPTY",            (WSABASEERR+66) },
 | 
					 | 
				
			||||||
        { "WSAEPROCLIM",             (WSABASEERR+67) },
 | 
					 | 
				
			||||||
        { "WSAEUSERS",               (WSABASEERR+68) },
 | 
					 | 
				
			||||||
        { "WSAEDQUOT",               (WSABASEERR+69) },
 | 
					 | 
				
			||||||
        { "WSAESTALE",               (WSABASEERR+70) },
 | 
					 | 
				
			||||||
        { "WSAEREMOTE",              (WSABASEERR+71) },
 | 
					 | 
				
			||||||
        { "WSAEDISCON",              (WSABASEERR+101) },
 | 
					 | 
				
			||||||
        { "WSASYSNOTREADY",          (WSABASEERR+91) },
 | 
					 | 
				
			||||||
        { "WSAVERNOTSUPPORTED",      (WSABASEERR+92) },
 | 
					 | 
				
			||||||
        { "WSANOTINITIALISED",       (WSABASEERR+93) },
 | 
					 | 
				
			||||||
        { "WSAHOST_NOT_FOUND",       (WSABASEERR+1001) },
 | 
					 | 
				
			||||||
        { "WSATRY_AGAIN",            (WSABASEERR+1002) },
 | 
					 | 
				
			||||||
        { "WSANO_RECOVERY",          (WSABASEERR+1003) },
 | 
					 | 
				
			||||||
        { "WSANO_DATA",              (WSABASEERR+1004) },
 | 
					 | 
				
			||||||
        { NULL, 0 }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    int i = 0;
 | 
					 | 
				
			||||||
    while (errors[i].msg) 
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        if (errors[i].error == error) 
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            fprintf(stderr, ": %s", errors[i].msg);
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        } 
 | 
					 | 
				
			||||||
        i++;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    fprintf(stderr, "\n");
 | 
					 | 
				
			||||||
#endif // USES_WINSOCK
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if IS_UNIX
 | 
					#if IS_UNIX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,11 +44,6 @@
 | 
				
			||||||
#include <sys/syslog.h>
 | 
					#include <sys/syslog.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if SUPPORTS_EVENTLOG
 | 
					 | 
				
			||||||
#include "tripwiremsg.h"
 | 
					 | 
				
			||||||
#include "tw/systeminfo.h"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// next three includes are for error reporting
 | 
					// next three includes are for error reporting
 | 
				
			||||||
#include "tw/twutil.h"
 | 
					#include "tw/twutil.h"
 | 
				
			||||||
#include "tw/twerrors.h"
 | 
					#include "tw/twerrors.h"
 | 
				
			||||||
| 
						 | 
					@ -63,175 +58,18 @@
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Syslog
 | 
					// Syslog
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if SUPPORTS_EVENTLOG
 | 
					 | 
				
			||||||
static void InitEventLog();
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cSyslog::Log(const TCHAR* programName, cSyslog::LogType logType, const TCHAR* message)
 | 
					void cSyslog::Log(const TCHAR* programName, cSyslog::LogType logType, const TCHAR* message)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if HAVE_SYSLOG_H
 | 
					#if HAVE_SYSLOG_H && !defined(SKYOS) // Handle an oddball OS that has syslog.h but doesn't implement the calls.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    (void)logType; // logType is not used for Unix syslog
 | 
					    (void)logType; // logType is not used for Unix syslog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ASSERT(sizeof(TCHAR) == sizeof(char));
 | 
					    ASSERT(sizeof(TCHAR) == sizeof(char));
 | 
				
			||||||
    const char* ident = programName;
 | 
					    const char* ident = programName;
 | 
				
			||||||
    const char* msg = message;
 | 
					    const char* msg = message;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
#ifndef SKYOS // Handle an oddball OS that has syslog.h but doesn't implement the calls.
 | 
					 | 
				
			||||||
    openlog(ident, LOG_PID, LOG_USER);
 | 
					    openlog(ident, LOG_PID, LOG_USER);
 | 
				
			||||||
    syslog(LOG_NOTICE, "%s", msg);
 | 
					    syslog(LOG_NOTICE, "%s", msg);
 | 
				
			||||||
    closelog();
 | 
					    closelog();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					 | 
				
			||||||
#elif SUPPORTS_EVENTLOG
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    static bool eventLogInitialized = false;
 | 
					 | 
				
			||||||
    if (!eventLogInitialized)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        InitEventLog();
 | 
					 | 
				
			||||||
        eventLogInitialized = true;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    HANDLE h = RegisterEventSource(NULL, _T("Tripwire"));
 | 
					 | 
				
			||||||
    if (h != NULL)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        LPCTSTR stringArray[1];
 | 
					 | 
				
			||||||
        stringArray[0] = message;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        WORD type;
 | 
					 | 
				
			||||||
        DWORD id;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        switch (logType)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
        default:
 | 
					 | 
				
			||||||
            ASSERT(false);
 | 
					 | 
				
			||||||
        case LOG_SUCCESS:
 | 
					 | 
				
			||||||
            type = EVENTLOG_INFORMATION_TYPE;
 | 
					 | 
				
			||||||
            id = MSG_TRIPWIRE_GENERIC_SUCCESS;
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case LOG_INFORMATION:
 | 
					 | 
				
			||||||
            type = EVENTLOG_INFORMATION_TYPE;
 | 
					 | 
				
			||||||
            id = MSG_TRIPWIRE_GENERIC_INFO;
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case LOG_WARNING:
 | 
					 | 
				
			||||||
            type = EVENTLOG_WARNING_TYPE;
 | 
					 | 
				
			||||||
            id = MSG_TRIPWIRE_GENERIC_WARNING;
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        case LOG_ERROR:
 | 
					 | 
				
			||||||
            type = EVENTLOG_ERROR_TYPE;
 | 
					 | 
				
			||||||
            id = MSG_TRIPWIRE_GENERIC_ERROR;
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        BOOL ret = ReportEvent(
 | 
					 | 
				
			||||||
            h,
 | 
					 | 
				
			||||||
            type,                       // event type
 | 
					 | 
				
			||||||
            0,                          // catagory
 | 
					 | 
				
			||||||
            id,                         // event id
 | 
					 | 
				
			||||||
            0,                          // user sid
 | 
					 | 
				
			||||||
            1,                          // num strings
 | 
					 | 
				
			||||||
            0,                          // raw binary data size
 | 
					 | 
				
			||||||
            stringArray,                // array of strings
 | 
					 | 
				
			||||||
            0                           // raw binrary data
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!ret)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            eTWSyslog e( TSS_GetString(cTW, tw::STR_REPORTEVENT_FAILED).c_str(), eError::NON_FATAL );
 | 
					 | 
				
			||||||
            cTWUtil::PrintErrorMsg(e);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        DeregisterEventSource(h);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
    // No support for syslog like functionality
 | 
					 | 
				
			||||||
    //ASSERT(false);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if SUPPORTS_EVENTLOG
 | 
					 | 
				
			||||||
static void InitEventLog()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // To initialize the event log, we need to verify that Tripwire 
 | 
					 | 
				
			||||||
    // is a valid event source.
 | 
					 | 
				
			||||||
    // To do this we look up the value for the Tripwire event source.  If it 
 | 
					 | 
				
			||||||
    // exists, the the dest is a file called "tripwire.exe" (or this executable) and the
 | 
					 | 
				
			||||||
    // file exists, then we assume that the event source is set correctly.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    HKEY hKey;
 | 
					 | 
				
			||||||
    DWORD disposition;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
    if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\Tripwire"), 0, _T(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &disposition) == ERROR_SUCCESS && 
 | 
					 | 
				
			||||||
        disposition == REG_OPENED_EXISTING_KEY) 
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        DWORD type, count;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // We need to insure we have back slashes in our exepath
 | 
					 | 
				
			||||||
        TSTRING exepath = cSystemInfo::GetExePath();
 | 
					 | 
				
			||||||
        TSTRING::iterator i;
 | 
					 | 
				
			||||||
        for (i = exepath.begin(); i != exepath.end(); ++i)
 | 
					 | 
				
			||||||
            if (*i == _T('/'))
 | 
					 | 
				
			||||||
                *i = _T('\\');
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        if (RegQueryValueEx(hKey, _T("TypesSupported"), 0, &type, 0, &count) == ERROR_SUCCESS &&
 | 
					 | 
				
			||||||
            type == REG_DWORD &&
 | 
					 | 
				
			||||||
            RegQueryValueEx(hKey, _T("EventMessageFile"), 0, &type, 0, &count) == ERROR_SUCCESS &&
 | 
					 | 
				
			||||||
            type == REG_EXPAND_SZ)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            TSTRING data;
 | 
					 | 
				
			||||||
            data.resize(count);
 | 
					 | 
				
			||||||
            if (RegQueryValueEx(hKey, _T("EventMessageFile"), 0, &type, (LPBYTE)data.data(), &count) == ERROR_SUCCESS &&
 | 
					 | 
				
			||||||
                type == REG_EXPAND_SZ)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                TSTRING::size_type lastDelimitor;
 | 
					 | 
				
			||||||
                lastDelimitor = data.find_last_of(_T('\\'));
 | 
					 | 
				
			||||||
                if (lastDelimitor == TSTRING::npos)
 | 
					 | 
				
			||||||
                    lastDelimitor = (TSTRING::size_type)-1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (_tcscmp(exepath.c_str(), data.c_str()) == 0)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    RegCloseKey(hKey);
 | 
					 | 
				
			||||||
                    return;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (_tcsicmp(_T("tripwire.exe"), data.substr(lastDelimitor + 1).c_str()) == 0)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    HINSTANCE hInst = LoadLibraryEx(data.c_str(), NULL, DONT_RESOLVE_DLL_REFERENCES|LOAD_LIBRARY_AS_DATAFILE);
 | 
					 | 
				
			||||||
                    if (hInst != NULL)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        FreeLibrary(hInst);
 | 
					 | 
				
			||||||
                        RegCloseKey(hKey);
 | 
					 | 
				
			||||||
                        return;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // If we got here then the event source is not set up correctly
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
        // Add the name to the EventMessageFile subkey. 
 | 
					 | 
				
			||||||
        RegSetValueEx(hKey,             // subkey handle 
 | 
					 | 
				
			||||||
                _T("EventMessageFile"),       // value name 
 | 
					 | 
				
			||||||
                0,                        // must be zero 
 | 
					 | 
				
			||||||
                REG_EXPAND_SZ,            // value type 
 | 
					 | 
				
			||||||
                (LPBYTE) exepath.c_str(),           // pointer to value data 
 | 
					 | 
				
			||||||
                sizeof(TCHAR)*(exepath.length() + 1));       // length of value data 
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
        // Set the supported event types in the TypesSupported subkey. 
 | 
					 | 
				
			||||||
        DWORD dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; 
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
        RegSetValueEx(hKey,      // subkey handle 
 | 
					 | 
				
			||||||
                _T("TypesSupported"),  // value name 
 | 
					 | 
				
			||||||
                0,                 // must be zero 
 | 
					 | 
				
			||||||
                REG_DWORD,         // value type 
 | 
					 | 
				
			||||||
                (LPBYTE) &dwData,  // pointer to value data 
 | 
					 | 
				
			||||||
                sizeof(DWORD));    // length of value data 
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
        RegCloseKey(hKey); 
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue