    /* snfmultidll.h
    // Copyright (C) 2007-2009 ARM Research Labs, LLC
    //
    // SNFMulti DLL header.
    */

    #ifndef snfmultidll_included
    #define snfmultidll_included

    const int snf_SUCCESS = 0;
    const int snf_ERROR_CMD_LINE = 65;
    const int snf_ERROR_LOG_FILE = 66;
    const int snf_ERROR_RULE_FILE = 67;
    const int snf_ERROR_RULE_DATA = 68;
    const int snf_ERROR_RULE_AUTH = 73;
    const int snf_ERROR_MSG_FILE = 69;
    const int snf_ERROR_ALLOCATION = 70;
    const int snf_ERROR_BAD_MATRIX = 71;
    const int snf_ERROR_MAX_EVALS = 72;
    const int snf_ERROR_UNKNOWN = 99;

    const int snf_ERROR_NO_HANDLE = -1;
    const int snf_ERROR_SCAN_FAILED = -2;
    const int snf_ERROR_EXCEPTION = -3;

    /*
    enum snfIPRange {                                                               // IP action ranges
        Unknown,                                                                    // Unknown - not defined.
        White,                                                                      // This is a good guy.
        Normal,                                                                     // Benefit of the doubt.
        New,                                                                        // It is new to us.
        Caution,                                                                    // This is suspicious.
        Black,                                                                      // This is bad.
        Truncate                                                                    // Don't even bother looking.
    };
    */

    /* Map these C constants to the enum snfIPRange */

    const int snf_IP_Unknown = 0;
    const int snf_IP_White = 1;
    const int snf_IP_Normal = 2;
    const int snf_IP_New = 3;
    const int snf_IP_Caution = 4;
    const int snf_IP_Black = 5;
    const int snf_IP_Truncate = 6;

    /* IP Reputation Figure Constants */

    const double snf_ReputationMehResult = 0.0;                                     /* Don't know or don't care */
    const double snf_ReputationBadResult = 1.0;                                     /* IP is pure evil */
    const double snf_ReputationGoodResult = -1.0;                                   /* IP is pure good */

    /* This is the API to the SNFMulti DLL */
    #define IMP __declspec(dllimport)
    extern "C" {

        IMP int setThrottle(int Threads);                                           /* Set a scan thread limit */
        IMP int startupSNF(char* Path);                                             /* Start SNF with configuration. */
        IMP int startupSNFAuthenticated(char* Path, char* Lic, char* Auth);         /* Start SNF with conf & auth. */
        IMP int shutdownSNF();                                                      /* Shutdown SNF. */
        IMP int testIP(unsigned long int IPToCheck);                                /* Test the IP for a GBUdb range. */
        IMP double getIPReputation(unsigned long int IPToCheck);                    /* Get reputation figure for IP. */
        IMP int scanBuffer(unsigned char* Bfr, int Length, char* Name, int Setup);  /* Scan msgBuffer, name, setup time. */
        IMP int scanFile(char* FilePath, int Setup);                                /* Scan msgFile, setup time. */
        IMP int getScanXHeaders(int ScanHandle, char** Bfr, int* Length);           /* Get result & XHeaders. */
        IMP int getScanXMLLog(int ScanHandle, char** Bfr, int* Length);             /* Get result & XML Log. */
        IMP int getScanClassicLog(int ScanHandle, char** Bfr, int* Length);         /* Get result & Classic Log. */
        IMP int getScanResult(int ScanHandle);                                      /* Get just the scan result. */
        IMP int closeScan(int ScanHandle);                                          /* Close the scan result. */

    }

    #endif