/*++

Copyright (c) 1998-99  Microsoft Corporation

Module Name:

    wincelic.h

Abstract:


Author:

    Fred Chong (FredCh) 7/1/1998

Environment:

Notes:

--*/

#include <dbgapi.h>
#define assert(x) ASSERT(x)

#define MAX_COMPUTERNAME_LENGTH 15

#ifdef HARDCODED_USER_NAME

#define WBT_USER_NAME "Windows Term"
#define WBT_USER_NAME_LEN   (sizeof(WBT_USER_NAME))

#else

#include <winsock.h>
#include <license.h>
#include <cryptkey.h>

// Two hex characters for each byte, plus null terminator

#define HWID_STR_LEN (sizeof(HWID) * 2 + 1)

#define BAD_HARDCODED_NAME1 "WBT"
#define BAD_HARDCODED_NAME2 "WinCE"

#endif

static BOOL GetUserName(
  LPSTR lpBuffer,  // address of name buffer
  LPDWORD nSize     // address of size of name buffer
)
{

#ifdef HARDCODED_USER_NAME
    if (*nSize < WBT_USER_NAME_LEN) {
        *nSize = WBT_USER_NAME_LEN;
        return FALSE;
    }

    *nSize = WBT_USER_NAME_LEN;
    strcpy(lpBuffer, WBT_USER_NAME);

    return TRUE;

#else

    CHAR achHostName[MAX_PATH+1];
    BOOL fReturn = FALSE;
    HWID hwid;
    DWORD cchName;

    // get the host name of the device
    if (0 == gethostname( achHostName, sizeof(achHostName) ))
    {
        // Check for bad hardcoded values
        if ((0 == strcmp(achHostName,BAD_HARDCODED_NAME1))
            || (0 == strcmp(achHostName,BAD_HARDCODED_NAME2)))
        {
            goto use_uuid;
        }

        // gethostname success

        cchName = strlen(achHostName);

        if (*nSize <= cchName)
        {
            *nSize = (cchName + 1);
            return FALSE;
        }

        strcpy(lpBuffer,achHostName);
        return TRUE;
    }
    
use_uuid:

    // Can't get hostname

    if (*nSize >= HWID_STR_LEN)
    {
        // Use UUID instead

        if (LICENSE_STATUS_OK == GenerateClientHWID(&hwid))
        {
            
            sprintf(lpBuffer,
                    "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x",
                    (hwid.dwPlatformID & 0xFF000000) >> 24,
                    (hwid.dwPlatformID & 0x00FF0000) >> 16,
                    (hwid.dwPlatformID & 0x0000FF00) >> 8,
                     hwid.dwPlatformID & 0x000000FF,
                    (hwid.Data1 & 0xFF000000) >> 24,
                    (hwid.Data1 & 0x00FF0000) >> 16,
                    (hwid.Data1 & 0x0000FF00) >> 8,
                     hwid.Data1 & 0x000000FF,
                    (hwid.Data2 & 0xFF000000) >> 24,
                    (hwid.Data2 & 0x00FF0000) >> 16,
                    (hwid.Data2 & 0x0000FF00) >> 8,
                     hwid.Data2 & 0x000000FF,
                    (hwid.Data3 & 0xFF000000) >> 24,
                    (hwid.Data3 & 0x00FF0000) >> 16,
                    (hwid.Data3 & 0x0000FF00) >> 8,
                     hwid.Data3 & 0x000000FF,
                    (hwid.Data4 & 0xFF000000) >> 24,
                    (hwid.Data4 & 0x00FF0000) >> 16,
                    (hwid.Data4 & 0x0000FF00) >> 8,
                     hwid.Data4 & 0x000000FF
                     );

            fReturn = TRUE;
        }
    }

    *nSize = HWID_STR_LEN;

    return fReturn;

#endif

}

#define GetComputerName GetUserName