Back to index

lightning-sunbird  0.9+nobinonly
Functions
mapiutl.h File Reference
#include <mapi.h>
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void SetLoggingEnabled (BOOL val)
void LogString (LPCSTR pStr1)
void BuildMemName (LPSTR name, ULONG winSeed)
HWND GetCommunicatorIPCWindow (void)
DWORD SanityCheckAttachmentFiles (lpMapiMessage lpMessage)
DWORD ValidateFile (LPCSTR szFile)
DWORD GetFileCount (LPSTR pFiles, LPSTR delimChar)
BOOL ExtractFile (LPSTR pFiles, LPSTR delimChar, DWORD fIndex, LPSTR fName)
LPVOID LoadBlobToMemory (LPSTR fName)
LONG GetTempAttachmentName (LPSTR fName)
UINT GetTempMailNameWithExtension (LPSTR szTempFileName, LPSTR origName)
void CleanupMAPITempFiles (void)
void AddTempFile (LPCSTR pFileName)
voidCleanMalloc (size_t mallocSize)
void SafeFree (void *ptr)
LPSTR StripHTML (LPSTR noteText)
LONG WriteMemoryBufferToDisk (LPSTR fName, LONG bufSize, LPSTR buf)

Function Documentation

void AddTempFile ( LPCSTR  pFileName)

Definition at line 769 of file mapiutl.cpp.

{
  if ( (!pFileName) || (pFileName[0] == '\0') )
    return;

  char *files = (char *)malloc(kMaxListLength);

  if (!files)
    return;

  GetTempFiles(files, kMaxListLength);
  if ((lstrlen(files) + lstrlen(pFileName) + 2) >= kMaxListLength)
  {
    free(files);
    return;
  }

  if (lstrlen(files) != 0)
  {
          lstrcat(files, ";");
  }

  lstrcat(files, pFileName);
  WriteTempFiles(files);
  free(files);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void BuildMemName ( LPSTR  name,
ULONG  winSeed 
)

Definition at line 150 of file mapiutl.cpp.

{
  static DWORD    id = 0;

  if (id == 0)
  {
    // Seed the random-number generator with current time so that
    // the numbers will be different every time we run.
    srand( (unsigned)time( NULL ) );
    id = rand();
  }

  wsprintf(name, "MAPI_IPC_SMEM-%d", (winSeed + id++));
  TRACE("Shared Memory Name = [%s]\n", name);
}
void* CleanMalloc ( size_t  mallocSize)

Definition at line 881 of file mapiutl.cpp.

{
  void *ptr = malloc(mallocSize);
  if (!ptr)
    return(NULL);

  memset(ptr, 0, mallocSize);
  return(ptr);
}

Here is the call graph for this function:

Definition at line 868 of file mapiutl.cpp.

{
  if (Is_16_OR_32_BIT_CommunitorRunning() == 0)
  {
    RemoveAllTempFiles();           // if Communicator not running, clean up all the temp files
  }
  else
  {
    CheckAgeTempFiles();
  }
}

Here is the call graph for this function:

BOOL ExtractFile ( LPSTR  pFiles,
LPSTR  delimChar,
DWORD  fIndex,
LPSTR  fName 
)

Definition at line 227 of file mapiutl.cpp.

{
  LPSTR   ptr = pFiles;
  DWORD   loc;
  DWORD   count = 0;

       if ((!pFiles) || (!*pFiles))
              return(0);

  // Get to the fIndex'th entry
  for (loc=0; loc<strlen(pFiles); loc++)
  {
    if (count == fIndex)
      break;
    if (pFiles[loc] == delimChar[0])
      count++;
  }

  if (loc >= strlen(pFiles))    // Got to the end of string!
    return(FALSE);

  lstrcpy(fName, (LPSTR)pFiles + loc);
  //
  // Truncate at 2nd delimiter
  //
  for (DWORD i=0; i<strlen(fName); i++)
  {
    if (fName[i] == delimChar[0])
    {
      fName[i] = '\0';
      break;
    }
  }

  return(TRUE);
}

Here is the caller graph for this function:

Definition at line 104 of file mapiutl.cpp.

{
  HWND  hWnd = NULL; 
  DWORD timeCount = 0;
  BOOL  launchTry = FALSE;

  //
  // This will wait for 10 seconds before giving up and failing
  //
  while ((hWnd == NULL) && (timeCount < 20))
  {
    if ((hWnd = FindWindow("AfxFrameOrView", NULL)) && !FindWindow("aHiddenFrameClass", NULL))
      return(hWnd);
    else if ((hWnd = FindWindow("aHiddenFrameClass", NULL)))
      return(hWnd);

    if (!launchTry)
    {
    char    szPath[_MAX_PATH] = "";
              DWORD   nMAPIERROR; 

      if ((nMAPIERROR = XP_GetInstallLocation(szPath, _MAX_PATH)) != SUCCESS_SUCCESS)
      {
        return(NULL); 
      }
              
                WORD nReturn = XP_CallProcess(szPath, " -MAPICLIENT");
      launchTry = TRUE;
    }

    //
    // Pause for 1/2 a second and try to connect again...
    //
#ifdef WIN32
    Sleep(500);
#else 
    Yield();
#endif        

    timeCount++;
  }

       return(hWnd);
}

Here is the call graph for this function:

Here is the caller graph for this function:

DWORD GetFileCount ( LPSTR  pFiles,
LPSTR  delimChar 
)

Definition at line 205 of file mapiutl.cpp.

{
  DWORD   count = 1;
       if ((!pFiles) || (!*pFiles))
              return(0);

  for (DWORD i=0; i<strlen(pFiles); i++)
  {
    if (pFiles[i] == delimChar[0])
    {
      ++count;
    }
  }

  return(count);
}

Definition at line 376 of file mapiutl.cpp.

{
  UINT        res;
  static UINT uUnique = 1;

  if (!fName)
    return(-1);

  LPSTR szTempPath = GetTheTempDirectoryOnTheSystem();

TRYAGAIN:
#ifdef WIN32
  res = GetTempFileName(szTempPath, "MAPI", uUnique++, fName);
#else
  res = ISGetTempFileName(szTempPath, "MAPI", uUnique++, fName);
#endif

  if (ValidateFile(fName) != 1) 
  {
    if (uUnique < 32000)
    {
      goto TRYAGAIN;
    }
    else
    {
      return(-1);
    }
  }

  return 0;
}

Here is the call graph for this function:

UINT GetTempMailNameWithExtension ( LPSTR  szTempFileName,
LPSTR  origName 
)

Definition at line 667 of file mapiutl.cpp.

{
  UINT        res = 1;
  UINT        uUnique = 0;
  char        *szTempPath = GetTheTempDirectoryOnTheSystem();
  char        *tmpPtr;
  char        *realFileName = NULL;

  if ( (origName != NULL) && (*origName != '\0') )
  {
    tmpPtr = origName;
  }
  else
  {
    tmpPtr = szTempFileName;
  }

  realFileName = strrchr(tmpPtr, '\\');
  if (!realFileName)
    realFileName = tmpPtr;
  else
    realFileName++;

TRYAGAIN:

#ifdef WIN32
  if (uUnique == 0)
  {
    wsprintf(szTempFileName, "%s\\%s", szTempPath, realFileName);
  }
  else
  {
    wsprintf(szTempFileName, "%s\\%d_%s", 
                szTempPath, uUnique, realFileName);
  }
#else // WIN16
  if ( (uUnique == 0) && (strlen(realFileName) <= 12) )
  {
    wsprintf(szTempFileName, "%s\\%s", szTempPath, realFileName);
  }
  else
  {              
    if (uUnique < 10)
    {
      GetWin16TempName(realFileName, szTempPath, szTempFileName, uUnique);
    }
    else 
    { 
      res = ISGetTempFileName(szTempPath, "ns", uUnique++, szTempFileName);    
    }

    // Now add the correct extension...
    char *origExt = strrchr(realFileName, '.');
    if (origExt != NULL)
    {
      char *tmpExt = strrchr(szTempFileName, '.');
      if (tmpExt != NULL)
      {
        origExt++;
        tmpExt++;

        while ( ((tmpExt) && (origExt)) && (*origExt != '\0') )
        {
          *tmpExt = *origExt;
          tmpExt++;
          origExt++;
        }

        *tmpExt = '\0';
      }
    }
  }
#endif

  if ( (ValidateFile(szTempFileName) != 1) && (uUnique < MAXTRY) )
  {
    uUnique++;
    if (uUnique >= MAXTRY)
      return(1);
    goto TRYAGAIN;
  }

  return res;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 278 of file mapiutl.cpp.

{
  UCHAR     *ptr = NULL;
  ULONG     bufSize = GetFileSize(fName);

  if (bufSize == 0)
  {
    _unlink(fName);
    return(NULL);
  }

  ptr = (UCHAR *)malloc( (size_t) bufSize);
  if (!ptr)
  {
    _unlink(fName);
    return(NULL);
  }

  HFILE hFile = _lopen(fName, OF_READ);
  if (hFile == HFILE_ERROR)
  {
    _unlink(fName);
    free(ptr);
    return(NULL);
  }

  UINT numRead = _lread(hFile, ptr, (size_t) bufSize);
  _lclose(hFile);

  if (numRead != bufSize)
  {
    _unlink(fName);
    free(ptr);
    return(NULL);
  }

  _unlink(fName);
       return(ptr);  
}

Here is the call graph for this function:

Here is the caller graph for this function:

void LogString ( LPCSTR  pStr1)

Definition at line 64 of file mapiutl.cpp.

{
  // Off of the declaration line...
  LPCSTR pStr2 = NULL;
  BOOL useStr1 = TRUE;

       if (gLoggingEnabled)
       {
              char tempPath[_MAX_PATH] = "";
    if (getenv("TEMP"))
    {
      lstrcpy((LPSTR) tempPath, getenv("TEMP"));  // environmental variable
    } 

              int len = lstrlen(tempPath);
              if ((len > 1) && tempPath[len - 1] != '\\')
              {
                     lstrcat(tempPath, "\\");
              }
              lstrcat(tempPath, szMapiLog);
              HFILE hFile = _lopen(tempPath, OF_WRITE);
              if (hFile == HFILE_ERROR)
              {
                     hFile = _lcreat(tempPath, 0);
              }
              if (hFile != HFILE_ERROR)
              {
                     _llseek(hFile, 0, SEEK_END);              // seek to the end of the file
                     LPCSTR pTemp = useStr1 ? pStr1 : pStr2;
                     _lwrite(hFile, pTemp, lstrlen(pTemp));
                     _lclose(hFile);
              }
       }
}
void SafeFree ( void ptr)

Definition at line 892 of file mapiutl.cpp.

{
  if (!ptr)
    return;

  free(ptr);
  ptr = NULL;
}
DWORD SanityCheckAttachmentFiles ( lpMapiMessage  lpMessage)

Definition at line 188 of file mapiutl.cpp.

{
  ULONG i;
  DWORD rc;

  for (i=0; i<lpMessage->nFileCount; i++)
  {
    if ((rc = ValidateFile(lpMessage->lpFiles[i].lpszPathName)) != 0)
    {
      return(rc);
    }
  }

  return(0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 57 of file mapiutl.cpp.

Here is the caller graph for this function:

LPSTR StripHTML ( LPSTR  noteText)

Definition at line 548 of file mapiutl.cpp.

{
  char    *newBuf;
  LPSTR   signTag = "This is a cryptographically signed message in MIME format.";
  LPSTR   mimeTag = "This is a multi-part message in MIME format.";

  DWORD   i;
  DWORD   realLen = 0;
  DWORD   totalCR = 0;

  // do sanity checking...
  if ((!noteText) || (!(*noteText)))
    return(noteText);

  // more sanity checking...
  DWORD len = strlen(noteText) + 1;
  if (len <= 0) 
    return(noteText);

  // Get the number of CR's in this message and add room for
  // the LF's
  for (i=0; i<len; i++)
  {
    if ( (*(noteText + i)) == 0x0D )
      ++totalCR;
  }

  // This is a check for a signed message in the start of a message
  // check for sign line...    
  if ( strlen(signTag) < len)
  {
    if ( 
        (strncmp(signTag, noteText, strlen(signTag)) == 0) ||
        (strncmp(mimeTag, noteText, strlen(mimeTag)) == 0) 
       )
    {
      return( StripSignedMessage(noteText, totalCR) );
    }
  }

  // create a new buffer...
  newBuf = (char *) malloc((size_t)(len + totalCR));
  if (!newBuf)
    return(noteText);

  newBuf[0] = '\0';

  BOOL    firstChar = FALSE;

  // Now do the translation for the body of the note...
  for (i=0; i<len; i++)
  {
    char  *ptr = (noteText + i);
    
    if ( ((*ptr == 0x0D) || (*ptr == 0x20)) && (!firstChar) )
      continue;
    else
      firstChar = TRUE;

    if (CheckForInlineHTML(ptr, len, &i, newBuf, &realLen))
      continue;

    newBuf[realLen++] = *ptr;
    if ( *ptr == 0x0D )
    {
      newBuf[realLen++] = 0x0A;
    }
  }

  // terminate the buffer - reallocate and move on...
  newBuf[realLen++] = '\0';
  newBuf = (LPSTR) realloc(newBuf, (size_t) realLen);

  // check if the realloc worked and if so, free old memory and
  // return...if not, just return the original buffer
  if (!newBuf)
  {
    return(noteText);
  }
  else
  {
    free(noteText);
    return(newBuf);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

DWORD ValidateFile ( LPCSTR  szFile)

Definition at line 167 of file mapiutl.cpp.

{
       struct _stat buf;
    int result;

    result = _stat( szFile, &buf );
    if (result != 0)
      return(1);

    if (!(buf.st_mode & S_IREAD))
      return(2);

    return(0);
}
LONG WriteMemoryBufferToDisk ( LPSTR  fName,
LONG  bufSize,
LPSTR  buf 
)

Definition at line 319 of file mapiutl.cpp.

{
  if (!buf)
  {
    return(-1);
  }

  HFILE hFile = _lcreat(fName, 0);
  if (hFile == HFILE_ERROR)
  {
    return(-1);
  }

  LONG writeCount = _lwrite(hFile, buf, (size_t) bufSize);
  _lclose(hFile);

  if (writeCount != bufSize)
  {
    _unlink(fName);
    return(-1);
  }

  return(0);
}

Here is the caller graph for this function: