mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
1075 lines
28 KiB
C++
1075 lines
28 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
//
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
#include <string.h>
|
|
|
|
#include "port.h"
|
|
#include "resource.h"
|
|
#include "nabapi.h"
|
|
|
|
//
|
|
// Variables...
|
|
//
|
|
extern HINSTANCE hInst;
|
|
HINSTANCE m_hInstNAB;
|
|
NABConnectionID nabConn;
|
|
|
|
void SetFooter(LPSTR msg);
|
|
LPSTR GetNABError(LONG errorCode);
|
|
|
|
void DoNAB_Open(HWND hWnd);
|
|
void DoNAB_Close(HWND hWnd);
|
|
void DoNAB_GetAddressBookList(HWND hWnd);
|
|
void DoNAB_GetDefaultAddressBook(HWND hWnd);
|
|
void DoNAB_CreatePersonalAddressBook(HWND hWnd);
|
|
void DoNAB_FreeMemory(HWND hWnd, LPVOID buf, BOOL alert);
|
|
void DoNAB_SaveAddressBookToHTML(HWND hWnd);
|
|
void DoNAB_ImportLDIFFile(HWND hWnd);
|
|
void DoNAB_ExportLDIFFile(HWND hWnd);
|
|
void DoNAB_GetFirstAddressBookEntry(HWND hWnd);
|
|
void DoNAB_FindAddressBookEntry(HWND hWnd);
|
|
void DoNAB_InsertAddressBookEntry(HWND hWnd);
|
|
void DoNAB_UpdateAddressBookEntry(HWND hWnd);
|
|
void DoNAB_DeleteAddressBookEntry(HWND hWnd);
|
|
LPSTR DoLDIFDiag(HWND hWnd);
|
|
|
|
void
|
|
HackIt(NABAddrBookDescType **arrayPtr[])
|
|
{
|
|
*arrayPtr = (NABAddrBookDescType **) malloc(sizeof(NABAddrBookDescType));
|
|
*arrayPtr[0] = (NABAddrBookDescType *) malloc(sizeof(NABAddrBookDescType));
|
|
}
|
|
|
|
void
|
|
DoTheHack(void)
|
|
{
|
|
NABAddrBookDescType **descType;
|
|
|
|
HackIt(&descType);
|
|
int x = 1;
|
|
}
|
|
|
|
void
|
|
ProcessCommand(HWND hWnd, int id, HWND hCtl, UINT codeNotify)
|
|
{
|
|
switch (id)
|
|
{
|
|
case ID_BUTTON_LDIFDIAG:
|
|
{
|
|
LPSTR ptr = DoLDIFDiag(hWnd);
|
|
SetDlgItemText(hWnd, ID_EDIT_FINDLDIF, ptr);
|
|
}
|
|
break;
|
|
|
|
case ID_LIST_USERS:
|
|
switch(codeNotify)
|
|
{
|
|
case LBN_SELCHANGE:
|
|
{
|
|
char abookInfo[512];
|
|
DWORD selected = ListBox_GetCurSel(GetDlgItem(hWnd, ID_LIST_USERS));
|
|
if (selected == LB_ERR)
|
|
break;
|
|
ListBox_GetText(GetDlgItem(hWnd, ID_LIST_USERS), selected, abookInfo);
|
|
SetDlgItemText(hWnd, ID_EDIT_FINDLDIF, abookInfo);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case ID_BUTTON_OPEN:
|
|
DoNAB_Open(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_CLOSE:
|
|
DoNAB_Close(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_GETADDRLIST:
|
|
DoNAB_GetAddressBookList(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_GETDEF_ADDR:
|
|
DoNAB_GetDefaultAddressBook(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_CREATEABOOK:
|
|
DoNAB_CreatePersonalAddressBook(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_SAVETOHTML:
|
|
DoNAB_SaveAddressBookToHTML(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_EXPORTLDIF:
|
|
DoNAB_ExportLDIFFile(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_IMPORTLDIF:
|
|
DoNAB_ImportLDIFFile(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_LISTAB:
|
|
DoNAB_GetFirstAddressBookEntry(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_FINDAB:
|
|
DoNAB_FindAddressBookEntry(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_INSERT:
|
|
DoNAB_InsertAddressBookEntry(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_UPDATE:
|
|
DoNAB_UpdateAddressBookEntry(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_DELETE:
|
|
DoNAB_DeleteAddressBookEntry(hWnd);
|
|
break;
|
|
|
|
case ID_MENU_MYEXIT:
|
|
DestroyWindow(hWnd);
|
|
break;
|
|
|
|
case ID_BUTTON_CLEAR:
|
|
case ID_MENU_CLEARRESULTS:
|
|
ListBox_ResetContent(GetDlgItem(hWnd, ID_LIST_ABOOK));
|
|
ListBox_ResetContent(GetDlgItem(hWnd, ID_LIST_USERS));
|
|
break;
|
|
|
|
case ID_MENU_MYABOUT:
|
|
MessageBox(hWnd,
|
|
"Netscape Address Book API Test Harness\nWritten by: Rich Pizzarro (rhp@netscape.com)",
|
|
"About",
|
|
MB_ICONINFORMATION);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//
|
|
// This is all needed to process a MAPIReadMail operation
|
|
//
|
|
static LPSTR
|
|
CheckNull(LPSTR inStr)
|
|
{
|
|
static LPSTR str = "<Null>";
|
|
|
|
str[0] = '\0';
|
|
if (inStr == NULL)
|
|
return((LPSTR)str);
|
|
else
|
|
return(inStr);
|
|
}
|
|
|
|
void
|
|
SetFooter(LPSTR msg)
|
|
{
|
|
extern HWND hWnd;
|
|
|
|
SetDlgItemText(hWnd, ID_STATIC_RESULT, msg);
|
|
}
|
|
|
|
LPSTR
|
|
GetNABError(LONG errorCode)
|
|
{
|
|
static char FAR msg[128];
|
|
|
|
switch (errorCode)
|
|
{
|
|
case NAB_SUCCESS:
|
|
lstrcpy(msg, "The API call succeeded.");
|
|
break;
|
|
case NAB_FAILURE:
|
|
lstrcpy(msg, "This is a generic NAB API failure.");
|
|
break;
|
|
case NAB_INVALID_CONNID:
|
|
lstrcpy(msg, "Invalid Connection ID for request");
|
|
break;
|
|
case NAB_NOT_OPEN:
|
|
lstrcpy(msg, "This will be returned when a call is made to the API without NAB_Open() being called first.");
|
|
break;
|
|
case NAB_NOT_FOUND:
|
|
lstrcpy(msg, "The requested information was not found.");
|
|
break;
|
|
case NAB_PERMISSION_DENIED:
|
|
lstrcpy(msg, "User does not have write permission to perform the operation");
|
|
break;
|
|
case NAB_DISK_FULL:
|
|
lstrcpy(msg, "Disk full condition encountered attempting to perform the operation");
|
|
break;
|
|
case NAB_INVALID_NAME:
|
|
lstrcpy(msg, "The name specified for the operation is invalid");
|
|
break;
|
|
case NAB_INVALID_ABOOK:
|
|
lstrcpy(msg, "The address book specified is invalid");
|
|
break;
|
|
case NAB_FILE_NOT_FOUND:
|
|
lstrcpy(msg, "The disk file for the operation was not found");
|
|
break;
|
|
case NAB_ALREADY_EXISTS:
|
|
lstrcpy(msg, "The user entry already exists in the address book being updated");
|
|
break;
|
|
case NAB_MAXCON_EXCEEDED:
|
|
lstrcpy(msg, "The maximum number of API connections has been exceeded");
|
|
break;
|
|
case NAB_MEMORY_FAILURE:
|
|
lstrcpy(msg, "Memory condition, such as malloc() failures");
|
|
break;
|
|
case NAB_FILE_ERROR:
|
|
lstrcpy(msg, "Error on file creation");
|
|
break;
|
|
case NAB_INVALID_ENTRY:
|
|
lstrcpy(msg, "Invalid entry for operation");
|
|
break;
|
|
case NAB_MULTIPLE_USERS_FOUND:
|
|
lstrcpy(msg, "More than one person found with current search criteria");
|
|
break;
|
|
case NAB_INVALID_SEARCH_ATTRIB:
|
|
lstrcpy(msg, "Invalid search criteria");
|
|
break;
|
|
default:
|
|
strcpy(msg, "Unknown NAB Return Code");
|
|
break;
|
|
}
|
|
|
|
return((LPSTR) &(msg[0]));
|
|
}
|
|
|
|
void
|
|
ShowMessage(HWND hWnd, LPSTR msg)
|
|
{
|
|
MessageBox(hWnd, msg, "Info Message", MB_ICONINFORMATION);
|
|
}
|
|
|
|
BOOL
|
|
OpenNAB(void)
|
|
{
|
|
#ifdef WIN16
|
|
m_hInstNAB = LoadLibrary("Y:\\ns\\cmd\\winfe\\nabapi\\NABAPI.DLL");
|
|
#else
|
|
m_hInstNAB = LoadLibrary("Y:\\ns\\cmd\\winfe\\nabapi\\x86Dbg\\NABAPI32.DLL");
|
|
// m_hInstNAB = LoadLibrary("NABAPI32.DLL");
|
|
#endif
|
|
|
|
if (!m_hInstNAB)
|
|
{
|
|
ShowMessage(NULL, "Error Loading the Address Book DLL...Probably not found!");
|
|
return(FALSE);
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
void
|
|
CloseNAB(void)
|
|
{
|
|
if(m_hInstNAB)
|
|
{
|
|
FreeLibrary(m_hInstNAB);
|
|
}
|
|
}
|
|
|
|
int
|
|
GetCurrentABook(HWND hWnd, NABAddrBookDescType *abInfo)
|
|
{
|
|
char abookInfo[512];
|
|
|
|
DWORD selected = ListBox_GetCurSel(GetDlgItem(hWnd, ID_LIST_ABOOK));
|
|
if (selected == LB_ERR)
|
|
{
|
|
ShowMessage(hWnd, "Select a valid address book for this operation\nYou may have to perform a Get AB List operation.");
|
|
return(0);
|
|
}
|
|
|
|
ListBox_GetText(GetDlgItem(hWnd, ID_LIST_ABOOK), selected, abookInfo);
|
|
char *ptr = strchr(abookInfo, '|');
|
|
if (!ptr)
|
|
return(0);
|
|
|
|
--ptr;
|
|
*ptr = '\0';
|
|
abInfo->description = strdup(abookInfo);
|
|
*ptr = ' ';
|
|
ptr += 3;
|
|
abInfo->fileName = strdup(ptr);
|
|
return(1);
|
|
}
|
|
|
|
void
|
|
DoNAB_Open(HWND hWnd)
|
|
{
|
|
char msg[256];
|
|
|
|
UINT_16 majorVerNumber;
|
|
UINT_16 minorVerNumber;
|
|
|
|
// Get Address of NAB function...
|
|
NABError (FAR PASCAL *lpfnNAB_Open)(NABConnectionID *id, UINT_16 *majorVerNumber, UINT_16 *minorVerNumber);
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_Open = GetProcAddress(m_hInstNAB, "NAB_OPEN");
|
|
#else
|
|
(FARPROC&) lpfnNAB_Open = GetProcAddress(m_hInstNAB, "NAB_Open");
|
|
#endif
|
|
|
|
if (!lpfnNAB_Open)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
LONG rc = (*lpfnNAB_Open)( &nabConn, &majorVerNumber, &minorVerNumber );
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
wsprintf(msg, "Success with connection id = %d", nabConn);
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("Logon success");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from Logon\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("Open failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_Close(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_Close) ( NABConnectionID id );
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_Close = GetProcAddress(m_hInstNAB, "NAB_CLOSE");
|
|
#else
|
|
(FARPROC&) lpfnNAB_Close = GetProcAddress(m_hInstNAB, "NAB_Close");
|
|
#endif
|
|
|
|
if (!lpfnNAB_Close)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char msg[256];
|
|
NABError rc = (*lpfnNAB_Close)( nabConn );
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
wsprintf(msg, "Successful Close");
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter(msg);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from Close\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("Close failed");
|
|
}
|
|
|
|
nabConn = 0;
|
|
}
|
|
|
|
void
|
|
DoNAB_FreeMemory(HWND hWnd, LPVOID buf, BOOL alert)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNABFreeMemory) (void *ptr);
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNABFreeMemory = GetProcAddress(m_hInstNAB, "NAB_FREEMEMORY");
|
|
#else
|
|
(FARPROC&) lpfnNABFreeMemory = GetProcAddress(m_hInstNAB, "NAB_FreeMemory");
|
|
#endif
|
|
|
|
if (!lpfnNABFreeMemory)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB Function.");
|
|
return;
|
|
}
|
|
|
|
char msg[256];
|
|
LONG rc = (*lpfnNABFreeMemory)(buf);
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
wsprintf(msg, "Successful Free Memory Operation");
|
|
if (alert)
|
|
ShowMessage(hWnd, msg);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_FreeMemory\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_GetAddressBookList(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_GetAddressBookList)
|
|
(NABConnectionID id, UINT_32 *abookCount,
|
|
NABAddrBookDescType **aBooks[]);
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_GetAddressBookList = GetProcAddress(m_hInstNAB, "NAB_GETADDRESSBOOKLIST");
|
|
#else
|
|
(FARPROC&) lpfnNAB_GetAddressBookList = GetProcAddress(m_hInstNAB, "NAB_GetAddressBookList");
|
|
#endif
|
|
|
|
if (!lpfnNAB_GetAddressBookList)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char msg[512];
|
|
UINT_32 abookCount;
|
|
NABAddrBookDescType **descType;
|
|
|
|
// Clear the list before we start...
|
|
ListBox_ResetContent(GetDlgItem(hWnd, ID_LIST_ABOOK));
|
|
NABError rc = (*lpfnNAB_GetAddressBookList)( nabConn, &abookCount, &descType );
|
|
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
for (DWORD i=0; i<abookCount; i++)
|
|
{
|
|
wsprintf(msg, "%s | %s", CheckNull(descType[i]->description),
|
|
CheckNull(descType[i]->fileName));
|
|
ListBox_InsertString(GetDlgItem(hWnd, ID_LIST_ABOOK), 0, msg);
|
|
ListBox_SetHorizontalExtent(GetDlgItem(hWnd, ID_LIST_ABOOK), 2048);
|
|
DoNAB_FreeMemory(hWnd, descType[i], FALSE);
|
|
}
|
|
|
|
ShowMessage(hWnd, "Successful Call to Address Book List.");
|
|
SetFooter("Successful Call to Address Book List");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from Address Book List\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("GetAddressBookList failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_GetDefaultAddressBook(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_GetDefaultAddressBook) (NABConnectionID id, NABAddrBookDescType **aBook);
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_GetDefaultAddressBook = GetProcAddress(m_hInstNAB, "NAB_GETDEFAULTADDRESSBOOK");
|
|
#else
|
|
(FARPROC&) lpfnNAB_GetDefaultAddressBook = GetProcAddress(m_hInstNAB, "NAB_GetDefaultAddressBook");
|
|
#endif
|
|
|
|
if (!lpfnNAB_GetDefaultAddressBook)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char msg[512];
|
|
NABAddrBookDescType *descType;
|
|
|
|
NABError rc = (*lpfnNAB_GetDefaultAddressBook)( nabConn, &descType );
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
wsprintf(msg, "%s | %s", CheckNull(descType->description),
|
|
CheckNull(descType->fileName));
|
|
ListBox_InsertString(GetDlgItem(hWnd, ID_LIST_ABOOK), 0, msg);
|
|
ListBox_SetHorizontalExtent(GetDlgItem(hWnd, ID_LIST_ABOOK), 2048);
|
|
|
|
wsprintf(msg, "Default Address Book:\nName=[%s]\nFile=%s",
|
|
CheckNull(descType->description),
|
|
CheckNull(descType->fileName));
|
|
DoNAB_FreeMemory(hWnd, descType, FALSE);
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("Found Default");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from Default Address Book\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("GetDefaultAddressBook failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_CreatePersonalAddressBook(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_CreatePersonalAddressBook) (NABConnectionID id, char *addrBookName, NABAddrBookDescType **addrBook);
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_CreatePersonalAddressBook = GetProcAddress(m_hInstNAB, "NAB_CREATEPERSONALADDRESSBOOK");
|
|
#else
|
|
(FARPROC&) lpfnNAB_CreatePersonalAddressBook = GetProcAddress(m_hInstNAB, "NAB_CreatePersonalAddressBook");
|
|
#endif
|
|
|
|
if (!lpfnNAB_CreatePersonalAddressBook)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char abookName[256];
|
|
char msg[256];
|
|
NABAddrBookDescType *abookDesc;
|
|
|
|
GetDlgItemText(hWnd, ID_EDIT_ABOOKNAME, abookName, sizeof(abookName));
|
|
if (abookName[0] == '\0')
|
|
{
|
|
ShowMessage(hWnd, "Enter a name for the new address book!");
|
|
return;
|
|
}
|
|
|
|
// Clear the list before we start...
|
|
NABError rc = (*lpfnNAB_CreatePersonalAddressBook)
|
|
(nabConn, abookName, &abookDesc);
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
wsprintf(msg, "New Address Book:\nName=[%s]\nFile=%s",
|
|
CheckNull(abookDesc->description),
|
|
CheckNull(abookDesc->fileName));
|
|
DoNAB_FreeMemory(hWnd, abookDesc, TRUE);
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("Created successfully");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_CreatePersonalAddressBook\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_CreatePersonalAddressBook failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_SaveAddressBookToHTML(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_SaveAddressBookToHTML) (NABConnectionID id, NABAddrBookDescType *addrBook,
|
|
char *fileName);
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_SaveAddressBookToHTML = GetProcAddress(m_hInstNAB, "NAB_SAVEADDRESSBOOKTOHTML");
|
|
#else
|
|
(FARPROC&) lpfnNAB_SaveAddressBookToHTML = GetProcAddress(m_hInstNAB, "NAB_SaveAddressBookToHTML");
|
|
#endif
|
|
|
|
if (!lpfnNAB_SaveAddressBookToHTML)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char fname[256];
|
|
char msg[256];
|
|
NABAddrBookDescType abookDesc;
|
|
|
|
GetDlgItemText(hWnd, ID_EDIT_FNAME, fname, sizeof(fname));
|
|
if (fname[0] == '\0')
|
|
{
|
|
ShowMessage(hWnd, "Enter a valid file name!");
|
|
return;
|
|
}
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
return;
|
|
}
|
|
|
|
NABError rc = (*lpfnNAB_SaveAddressBookToHTML)
|
|
(nabConn, &abookDesc, fname);
|
|
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
ShowMessage(hWnd, "Created HTML file successfully.");
|
|
SetFooter("Created HTML file successfully");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_SaveAddressBookToHTML\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_SaveAddressBookToHTML failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_ExportLDIFFile(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_ExportLDIFFile)
|
|
(NABConnectionID id, NABAddrBookDescType *addrBook, char *fileName);
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_ExportLDIFFile = GetProcAddress(m_hInstNAB, "NAB_EXPORTLDIFFILE");
|
|
#else
|
|
(FARPROC&) lpfnNAB_ExportLDIFFile = GetProcAddress(m_hInstNAB, "NAB_ExportLDIFFile");
|
|
#endif
|
|
|
|
if (!lpfnNAB_ExportLDIFFile)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char fname[256];
|
|
char msg[256];
|
|
NABAddrBookDescType abookDesc;
|
|
|
|
GetDlgItemText(hWnd, ID_EDIT_FNAME, fname, sizeof(fname));
|
|
if (fname[0] == '\0')
|
|
{
|
|
ShowMessage(hWnd, "Enter a valid file name!");
|
|
return;
|
|
}
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
return;
|
|
}
|
|
|
|
NABError rc = (*lpfnNAB_ExportLDIFFile)
|
|
(nabConn, &abookDesc, fname);
|
|
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
ShowMessage(hWnd, "Created LDIF file successfully.");
|
|
SetFooter("Created LDIF file successfully");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_ExportLDIFFile\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_ExportLDIFFile failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_ImportLDIFFile(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_ImportLDIFFile)
|
|
(NABConnectionID id, NABAddrBookDescType *addrBook, char *fileName,
|
|
NABBool deleteFileWhenFinished);
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_ImportLDIFFile = GetProcAddress(m_hInstNAB, "NAB_IMPORTLDIFFILE");
|
|
#else
|
|
(FARPROC&) lpfnNAB_ImportLDIFFile = GetProcAddress(m_hInstNAB, "NAB_ImportLDIFFile");
|
|
#endif
|
|
|
|
if (!lpfnNAB_ImportLDIFFile)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char fname[256];
|
|
char msg[256];
|
|
NABAddrBookDescType abookDesc;
|
|
|
|
GetDlgItemText(hWnd, ID_EDIT_FNAME, fname, sizeof(fname));
|
|
if (fname[0] == '\0')
|
|
{
|
|
ShowMessage(hWnd, "Enter a valid file name!");
|
|
return;
|
|
}
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
return;
|
|
}
|
|
|
|
NABError rc = (*lpfnNAB_ImportLDIFFile)
|
|
(nabConn, &abookDesc, fname, FALSE);
|
|
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
ShowMessage(hWnd, "Imported LDIF file successfully.");
|
|
SetFooter("Imported LDIF file successfully");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_ImportLDIFFile\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_ImportLDIFFile failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_GetFirstAddressBookEntry(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_GetFirstAddressBookEntry)
|
|
(NABConnectionID id, NABAddrBookDescType *addrBook, NABUserID *userID,
|
|
char **ldifEntry, NABUpdateTime *updTime);
|
|
NABError (FAR PASCAL *lpfnNAB_GetNextAddressBookEntry)
|
|
(NABConnectionID id, NABUserID *userID,
|
|
char **ldifEntry, NABUpdateTime *updTime);
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_GetFirstAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_GETFIRSTADDRESSBOOKENTRY");
|
|
(FARPROC&) lpfnNAB_GetNextAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_GETNEXTADDRESSBOOKENTRY");
|
|
#else
|
|
(FARPROC&) lpfnNAB_GetFirstAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_GetFirstAddressBookEntry");
|
|
(FARPROC&) lpfnNAB_GetNextAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_GetNextAddressBookEntry");
|
|
#endif
|
|
|
|
if ((!lpfnNAB_GetFirstAddressBookEntry) || (!lpfnNAB_GetNextAddressBookEntry))
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char msg[128];
|
|
NABAddrBookDescType abookDesc;
|
|
NABUserID userID;
|
|
char *ldifInfo;
|
|
NABUpdateTime updTime;
|
|
DWORD totalCount = 0;
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// Reset the list...
|
|
ListBox_ResetContent(GetDlgItem(hWnd, ID_LIST_USERS));
|
|
|
|
NABError rc = (*lpfnNAB_GetFirstAddressBookEntry)
|
|
(nabConn, &abookDesc, &userID, &ldifInfo, &updTime);
|
|
while (rc == NAB_SUCCESS)
|
|
{
|
|
char *tmp;
|
|
|
|
if (strlen(ldifInfo) <= 0)
|
|
goto NEXT;
|
|
|
|
tmp = (char *)malloc(strlen(ldifInfo) + 128);
|
|
if (!tmp)
|
|
goto NEXT;
|
|
|
|
wsprintf(tmp, "U=%d T=%d|%s", userID, updTime, ldifInfo);
|
|
ListBox_InsertString(GetDlgItem(hWnd, ID_LIST_USERS), 0, tmp);
|
|
ListBox_SetHorizontalExtent(GetDlgItem(hWnd, ID_LIST_USERS), 2048);
|
|
free(tmp);
|
|
++totalCount;
|
|
|
|
NEXT:
|
|
rc = (*lpfnNAB_GetNextAddressBookEntry)
|
|
(nabConn, &userID, &ldifInfo, &updTime);
|
|
}
|
|
|
|
|
|
wsprintf(msg, "%d total entries found.", totalCount);
|
|
ShowMessage(hWnd, msg);
|
|
}
|
|
|
|
void
|
|
DoNAB_FindAddressBookEntry(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_FindAddressBookEntry)
|
|
(NABConnectionID id, NABAddrBookDescType *addrBook,
|
|
NABUserID *userID, char *ldifSearchAttribute,
|
|
char **ldifEntry, NABUpdateTime *updTime);
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_FindAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_FINDADDRESSBOOKENTRY");
|
|
#else
|
|
(FARPROC&) lpfnNAB_FindAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_FindAddressBookEntry");
|
|
#endif
|
|
|
|
if (!lpfnNAB_FindAddressBookEntry)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char ldif[256] = "";
|
|
char msg[256];
|
|
NABAddrBookDescType abookDesc;
|
|
char abid[32] = "";
|
|
|
|
NABUserID userID;
|
|
char *ldifEntry;
|
|
NABUpdateTime updTime;
|
|
NABError rc;
|
|
|
|
|
|
GetDlgItemText(hWnd, ID_EDIT_FINDID, abid, sizeof(abid));
|
|
if (abid[0] != '\0')
|
|
{
|
|
userID = atoi(abid);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItemText(hWnd, ID_EDIT_FINDLDIF, ldif, sizeof(ldif));
|
|
if (ldif[0] == '\0')
|
|
{
|
|
ShowMessage(hWnd, "Enter an LDIF search criteria!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
ListBox_ResetContent(GetDlgItem(hWnd, ID_LIST_USERS));
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
rc = (*lpfnNAB_FindAddressBookEntry)
|
|
(nabConn, NULL, &userID, ldif,
|
|
&ldifEntry, &updTime);
|
|
}
|
|
else
|
|
{
|
|
rc = (*lpfnNAB_FindAddressBookEntry)
|
|
(nabConn, &abookDesc, &userID, ldif,
|
|
&ldifEntry, &updTime);
|
|
}
|
|
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
char *tmp;
|
|
|
|
if (strlen(ldifEntry) <= 0)
|
|
{
|
|
ShowMessage(hWnd, "Memory allocation problem");
|
|
return;
|
|
}
|
|
|
|
tmp = (char *)malloc(strlen(ldifEntry) + 128);
|
|
if (!tmp)
|
|
{
|
|
ShowMessage(hWnd, "Memory allocation problem");
|
|
return;
|
|
}
|
|
|
|
wsprintf(tmp, "U=%d T=%d|%s", userID, updTime, ldifEntry);
|
|
ListBox_InsertString(GetDlgItem(hWnd, ID_LIST_USERS), 0, tmp);
|
|
ListBox_SetHorizontalExtent(GetDlgItem(hWnd, ID_LIST_USERS), 2048);
|
|
free(tmp);
|
|
SetFooter("NAB_FindAddressBookEntry succeeded!");
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from FindEntry\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_FindAddressBookEntry failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_InsertAddressBookEntry(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_InsertAddressBookEntry)
|
|
(NABConnectionID id, NABAddrBookDescType *addrBook,
|
|
char *ldifEntry, NABUserID *userID);
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_InsertAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_INSERTADDRESSBOOKENTRY");
|
|
#else
|
|
(FARPROC&) lpfnNAB_InsertAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_InsertAddressBookEntry");
|
|
#endif
|
|
|
|
if (!lpfnNAB_InsertAddressBookEntry)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char ldif[256];
|
|
char msg[256];
|
|
NABAddrBookDescType abookDesc;
|
|
|
|
GetDlgItemText(hWnd, ID_EDIT_FINDLDIF, ldif, sizeof(ldif));
|
|
if (ldif[0] == '\0')
|
|
{
|
|
ShowMessage(hWnd, "Enter an LDIF insert line!");
|
|
return;
|
|
}
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
return;
|
|
}
|
|
|
|
NABUserID id;
|
|
NABError rc = (*lpfnNAB_InsertAddressBookEntry)
|
|
(nabConn, &abookDesc, ldif, &id);
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
ShowMessage(hWnd, "NAB_InsertAddressBookEntry succeeded");
|
|
DoNAB_GetFirstAddressBookEntry(hWnd);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_InsertAddressBookEntry\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_InsertAddressBookEntry failed");
|
|
}
|
|
}
|
|
|
|
NABUserID
|
|
GetUserID(HWND hWnd)
|
|
{
|
|
char userInfo[512];
|
|
NABUserID userID;
|
|
|
|
DWORD selected = ListBox_GetCurSel(GetDlgItem(hWnd, ID_LIST_USERS));
|
|
if (selected == LB_ERR)
|
|
{
|
|
ShowMessage(hWnd, "Select an entry to update for this operation.");
|
|
return 0;
|
|
}
|
|
ListBox_GetText(GetDlgItem(hWnd, ID_LIST_USERS), selected, userInfo);
|
|
|
|
char *begPtr, *endPtr;
|
|
begPtr = strchr(userInfo, '=');
|
|
endPtr = strchr(userInfo, ' ');
|
|
if (!endPtr)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate the User ID for operation.");
|
|
return 0;
|
|
}
|
|
|
|
*endPtr = '\0';
|
|
++begPtr;
|
|
userID = atoi( begPtr );
|
|
*endPtr = ' ';
|
|
return(userID);
|
|
}
|
|
|
|
void
|
|
DoNAB_UpdateAddressBookEntry(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_UpdateAddressBookEntry)
|
|
(NABConnectionID id, NABAddrBookDescType *addrBook,
|
|
NABUserID userID, char *ldifEntry);
|
|
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_UpdateAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_UPDATEADDRESSBOOKENTRY");
|
|
#else
|
|
(FARPROC&) lpfnNAB_UpdateAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_UpdateAddressBookEntry");
|
|
#endif
|
|
|
|
if (!lpfnNAB_UpdateAddressBookEntry)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char ldif[512];
|
|
char msg[256];
|
|
NABAddrBookDescType abookDesc;
|
|
|
|
GetDlgItemText(hWnd, ID_EDIT_FINDLDIF, ldif, sizeof(ldif));
|
|
if (ldif[0] == '\0')
|
|
{
|
|
ShowMessage(hWnd, "Enter an LDIF update line!");
|
|
return;
|
|
}
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
return;
|
|
}
|
|
|
|
NABUserID userID = GetUserID(hWnd);
|
|
if (userID == 0)
|
|
return;
|
|
NABError rc = (*lpfnNAB_UpdateAddressBookEntry)
|
|
(nabConn, &abookDesc, userID, ldif);
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
ShowMessage(hWnd, "NAB_InsertAddressBookEntry succeeded");
|
|
DoNAB_GetFirstAddressBookEntry(hWnd);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_InsertAddressBookEntry\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_InsertAddressBookEntry failed");
|
|
}
|
|
}
|
|
|
|
void
|
|
DoNAB_DeleteAddressBookEntry(HWND hWnd)
|
|
{
|
|
NABError (FAR PASCAL *lpfnNAB_DeleteAddressBookEntry)
|
|
(NABConnectionID id, NABAddrBookDescType *addrBook,
|
|
NABUserID userID);
|
|
#ifdef WIN16
|
|
(FARPROC&) lpfnNAB_DeleteAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_DELETEADDRESSBOOKENTRY");
|
|
#else
|
|
(FARPROC&) lpfnNAB_DeleteAddressBookEntry = GetProcAddress(m_hInstNAB, "NAB_DeleteAddressBookEntry");
|
|
#endif
|
|
|
|
if (!lpfnNAB_DeleteAddressBookEntry)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate NAB function.");
|
|
return;
|
|
}
|
|
|
|
char msg[256];
|
|
NABAddrBookDescType abookDesc;
|
|
|
|
// Get the selected address book...
|
|
if (!GetCurrentABook(hWnd, &abookDesc))
|
|
{
|
|
return;
|
|
}
|
|
|
|
NABUserID userID = GetUserID(hWnd);
|
|
if (userID < 0)
|
|
{
|
|
ShowMessage(hWnd, "Unable to locate ABID");
|
|
return;
|
|
}
|
|
|
|
NABError rc = (*lpfnNAB_DeleteAddressBookEntry)
|
|
(nabConn, &abookDesc, userID);
|
|
if (rc == NAB_SUCCESS)
|
|
{
|
|
ShowMessage(hWnd, "NAB_DeleteAddressBookEntry succeeded");
|
|
DoNAB_GetFirstAddressBookEntry(hWnd);
|
|
}
|
|
else
|
|
{
|
|
wsprintf(msg, "FAILURE: Return code %d from NAB_DeleteAddressBookEntry\nError=[%s]",
|
|
rc, GetNABError(rc));
|
|
ShowMessage(hWnd, msg);
|
|
SetFooter("NAB_DeleteAddressBookEntry failed");
|
|
}
|
|
} |