home *** CD-ROM | disk | FTP | other *** search
- /* -*- 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.
- */
- // confhook.cpp : implementation file
- //
-
- #include "stdafx.h"
- #include <shellapi.h>
-
- #include "confhook.h"
-
- extern "C" {
- #include "xpgetstr.h"
- extern int MK_MSG_CANT_FIND_CALLPOINT;
- };
-
-
-
- //
- // NEEDED STRINGS
- // ==============
- // MK_MSG_CANT_FIND_CONFAPP - Can't find the app to run
- // IDS_CONFAPP - "Conferencing Application" type string, I think?
- //
-
- //
- // Other internal defines...
- //
- #define CONFAPP_UNAVAILABLE 0
- #define CONFAPP_CONFERENCE 1
- #define CONFAPP_THIRDPARTY 2
-
- //
- // Registry stuff:
- //
- #define _MAX_ARG_LEN_ 128
-
- //
- // Sections for profile lookups...
- //
- static TCHAR lpszWin32ConfAppBranch[] = _T("Software\\Netscape\\ConfApplication");
- static TCHAR lpszWin16ConfAppSection[] = _T("ConfApplication");
- static int confAppAvailibility = CONFAPP_UNAVAILABLE;
-
- BOOL
- FileExists(LPCSTR szFile)
- {
- struct _stat buf;
- int result;
-
- result = _stat( szFile, &buf );
- return (result == 0);
- }
-
- //
- // This routine is specific to looking up values in the new ConfApp
- // registry/ini file section.
- //
- CString
- FEU_GetConfAppProfileString(const CString &queryString)
- {
- char argBuffer[_MAX_PATH + 1];
- CString returnVal("");
-
- returnVal = "";
- strcpy(argBuffer, "");
-
- //
- // If the defined conference application on the system is
- // still a leftover NSCP Conference, we should still use
- // that setting. In this case, simply return the default
- // value for Netscape Conference.
- //
- if (confAppAvailibility == CONFAPP_CONFERENCE)
- {
- //
- // First, we will assign a value to argBuffer that corresponds
- // to NSCP Conference's value for this particular argument.
- //
- if (queryString == IDS_CONFAPP_FULLPATHNAME)
- {
- CString installDirectory, executable;
-
- #ifdef WIN32
- installDirectory = FEU_GetInstallationDirectory(szLoadString(IDS_CONFERENCE_REGISTRY), szLoadString(IDS_PATHNAME));
- executable = "\\NSCONF32.EXE";
- #else // XP_WIN16
- installDirectory = FEU_GetInstallationDirectory(szLoadString(IDS_CONFERENCE),szLoadString(IDS_INSTALL_DIRECTORY));
- executable = "\\NSCSTART.EXE";
- #endif
-
- wsprintf(argBuffer, "%s%s", installDirectory, executable);
- }
- else if (queryString == IDS_CONFAPP_NOBANNER)
- {
- strcpy(argBuffer, "/b");
- }
- else if (queryString == IDS_CONFAPP_MIMEFILE)
- {
- strcpy(argBuffer, "/f");
- }
- else if (queryString == IDS_CONFAPP_DIRECTIP)
- {
- strcpy(argBuffer, "/d");
- }
- else if (queryString == IDS_CONFAPP_EMAIL)
- {
- strcpy(argBuffer, "/i");
- }
- else if (queryString == IDS_CONFAPP_SERVER)
- {
- strcpy(argBuffer, "/s");
- }
- else if (queryString == IDS_CONFAPP_USERNAME)
- {
- strcpy(argBuffer, "");
- }
-
- returnVal = argBuffer;
- return returnVal;
- }
-
- #ifdef _WIN32
-
- HKEY hKey;
- LONG lResult;
- char szVal[_MAX_PATH + 1];
-
- if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszWin32ConfAppBranch, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
- {
- unsigned long cbData = sizeof(szVal);
- lResult = RegQueryValueEx(hKey, queryString, NULL, NULL, (LPBYTE) szVal, &cbData);
- RegCloseKey(hKey);
-
- if (lResult == ERROR_SUCCESS)
- {
- returnVal = szVal;
- }
- }
- #else // XP_WIN16
-
- char szPath[_MAX_PATH + 1];
- const char *pOldProfile = theApp.m_pszProfileName;
-
- UINT nSize = GetWindowsDirectory(szPath, _MAX_PATH + 1);
- XP_STRCPY(szPath + nSize, szLoadString(IDS_NSCPINI));
- theApp.m_pszProfileName = szPath;
-
- returnVal = theApp.GetProfileString(lpszWin16ConfAppSection, queryString, NULL);
-
- theApp.m_pszProfileName = pOldProfile;
- #endif
-
- return returnVal;
- }
-
- //
- // This function is needed to see if a conferencing endpoint
- // is defined on the machine. Return true if there is or false
- // if it doesn't exist.
- //
- BOOL
- FEU_IsConfAppAvailable(void)
- {
- //
- // Check to see if a conf. app is defined on the local
- // machine.
- //
- CString fileName = FEU_GetConfAppProfileString(IDS_CONFAPP_FULLPATHNAME);
- if (fileName.IsEmpty())
- {
- if (FEU_IsConferenceAvailable())
- {
- confAppAvailibility = CONFAPP_CONFERENCE;
- return TRUE;
- }
- else
- {
- confAppAvailibility = CONFAPP_UNAVAILABLE;
- return FALSE;
- }
- }
-
- //
- // We should really make sure there is something at the location
- // defined before we go further.
- //
- if (FileExists(fileName))
- {
- confAppAvailibility = CONFAPP_THIRDPARTY;
- return TRUE;
- }
- else
- {
- confAppAvailibility = CONFAPP_UNAVAILABLE;
- return FALSE;
- }
- }
-
- //
- // This will be the central function where we will do the launching
- // of Conference on this endpoint.
- //
- // Args: makeCall - true if this is going to make a call or false
- // if we are just launching the appliction.
- //
- void
- LaunchConfEndpoint(char *commandLine, HWND parent)
- {
- CString executable;
- char *cline = commandLine;
- char cbuf[_MAX_ARG_LEN_];
-
- executable = FEU_GetConfAppProfileString(IDS_CONFAPP_FULLPATHNAME);
-
- //
- // Check to see if the executable is defined on the machine. If it is not, then
- // show a message and return.
- //
- if (executable.IsEmpty())
- {
- CString s;
- if (s.LoadString( IDS_CONFERENCE ))
- {
- ::MessageBox(parent, XP_GetString(MK_MSG_CANT_FIND_CALLPOINT), s, MB_OK | MB_APPLMODAL);
- }
- return;
- }
-
- //
- // Check if the commandline is null...if so, we need to try to find the banner
- // suppression flag and pass it to the executable.
- //
- if (!commandLine)
- {
- CString nobannerFlag = FEU_GetConfAppProfileString(IDS_CONFAPP_NOBANNER);
- strcpy(cbuf, nobannerFlag);
- cline = &(cbuf[0]);
- }
-
- int uSpawn = (int) ShellExecute(NULL, "open", executable, cline, ".", SW_SHOW);
- if(uSpawn <= 32)
- {
- char szMsg[80];
- switch(uSpawn)
- {
- case 0:
- case 8:
- sprintf(szMsg, szLoadString(IDS_WINEXEC_0_8));
- break;
- case 2:
- case 3:
- sprintf(szMsg, szLoadString(IDS_WINEXEC_2_3));
- break;
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- case 15:
- sprintf(szMsg, szLoadString(IDS_WINEXEC_10_THRU_15));
- break;
- case 16:
- sprintf(szMsg, szLoadString(IDS_WINEXEC_16));
- break;
- case 21:
- sprintf(szMsg, szLoadString(IDS_WINEXEC_21));
- break;
- default:
- sprintf(szMsg, szLoadString(IDS_WINEXEC_XX), uSpawn);
- break;
- }
-
- CString s;
- if (s.LoadString( IDS_BOOKMARK_ADDRESSPROPERTIES ))
- {
- ::MessageBox(parent, szMsg, s, MB_OK | MB_APPLMODAL);
- }
- }
- }
-
-