15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* ***** BEGIN LICENSE BLOCK *****
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Version: MPL 1.1/GPL 2.0/LGPL 2.1
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public License Version
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1.1 (the "License"); you may not use this file except in compliance with
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the License. You may obtain a copy of the License at
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * http://www.mozilla.org/MPL/
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software distributed under the License is distributed on an "AS IS" basis,
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for the specific language governing rights and limitations under the
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Original Code is mozilla.org code.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Initial Developer of the Original Code is
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Netscape Communications Corporation.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Portions created by the Initial Developer are Copyright (C) 1998
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the Initial Developer. All Rights Reserved.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contributor(s):
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, the contents of this file may be used under the terms of
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * either the GNU General Public License Version 2 or later (the "GPL"), or
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in which case the provisions of the GPL or the LGPL are applicable instead
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of those above. If you wish to allow use of your version of this file only
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * under the terms of either the GPL or the LGPL, and not to allow others to
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * use your version of this file under the terms of the MPL, indicate your
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * decision by deleting the provisions above and replace them with the notice
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and other provisions required by the GPL or the LGPL. If you do not delete
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the provisions above, a recipient may use your version of this file under
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the terms of any one of the MPL, the GPL or the LGPL.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * ***** END LICENSE BLOCK ***** */
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "xp.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "epmanager.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "plugload.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "logger.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern NPNetscapeFuncs NPNFuncs;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern Logger * logger;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPNetscapeFuncs fakeNPNFuncs;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern NPPEntryPointManager * epManager;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jref NPP_GetJavaClass (void)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_get_java_class);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_get_java_class);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPError NPP_New(NPMIMEType pluginType,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                NPP instance,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                uint16 mode,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                int16 argc,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                char* argn[],
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                char* argv[],
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                NPSavedData* saved)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_new, (DWORD)pluginType, (DWORD)instance, (DWORD)mode, (DWORD)argc, (DWORD)argn, (DWORD)argv, (DWORD)saved);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* now action begins */
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(NULL == epManager->findEntryPointsForPlugin(pluginType))
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // if it is first time in, we don't have it yet
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // scan plugins dir for available plugins to see if we have anything
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // for the given mimetype
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    XP_HLIB hLib = LoadRealPlugin(pluginType);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if(!hLib)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // what do we do if we don't?
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NPERR_GENERIC_ERROR;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NP_GETENTRYPOINTS real_NP_GetEntryPoints = (NP_GETENTRYPOINTS)XP_GetSymbol(hLib, "NP_GetEntryPoints");
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if(!real_NP_GetEntryPoints)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NPERR_GENERIC_ERROR;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NP_INITIALIZE real_NP_Initialize = (NP_INITIALIZE)XP_GetSymbol(hLib, "NP_Initialize");
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if(!real_NP_Initialize)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NPERR_GENERIC_ERROR;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NP_SHUTDOWN real_NP_Shutdown = (NP_SHUTDOWN)XP_GetSymbol(hLib, "NP_Shutdown");
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if(!real_NP_Shutdown)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NPERR_GENERIC_ERROR;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // fill callbacks structs
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NPPluginFuncs realNPPFuncs;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    memset(&realNPPFuncs, 0, sizeof(NPPluginFuncs));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    realNPPFuncs.size = sizeof(NPPluginFuncs);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    real_NP_GetEntryPoints(&realNPPFuncs);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if(logger)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      logger->logSPY_NP_GetEntryPoints(&realNPPFuncs);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // store the table with the entry point manager
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epManager->createEntryPointsForPlugin(pluginType, &realNPPFuncs, real_NP_Shutdown, hLib);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // inform the plugin about our entry point it should call
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    memset((void *)&fakeNPNFuncs, 0, sizeof(fakeNPNFuncs));
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.size             = sizeof(fakeNPNFuncs);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.version          = NPNFuncs.version;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.geturlnotify     = NPN_GetURLNotify;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.geturl           = NPN_GetURL;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.posturlnotify    = NPN_PostURLNotify;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.posturl          = NPN_PostURL;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.requestread      = NPN_RequestRead;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.newstream        = NPN_NewStream;
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.write            = NPN_Write;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.destroystream    = NPN_DestroyStream;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.status           = NPN_Status;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.uagent           = NPN_UserAgent;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.memalloc         = NPN_MemAlloc;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.memfree          = NPN_MemFree;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.memflush         = NPN_MemFlush;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.reloadplugins    = NPN_ReloadPlugins;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.getJavaEnv       = NPN_GetJavaEnv;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.getJavaPeer      = NPN_GetJavaPeer;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.getvalue         = NPN_GetValue;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.setvalue         = NPN_SetValue;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.invalidaterect   = NPN_InvalidateRect;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.invalidateregion = NPN_InvalidateRegion;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.forceredraw      = NPN_ForceRedraw;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.getstringidentifier    = NPN_GetStringIdentifier;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.getstringidentifiers   = NPN_GetStringIdentifiers;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.getintidentifier       = NPN_GetIntIdentifier;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.identifierisstring     = NPN_IdentifierIsString;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.utf8fromidentifier     = NPN_UTF8FromIdentifier;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.intfromidentifier      = NPN_IntFromIdentifier;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.createobject           = NPN_CreateObject;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.retainobject           = NPN_RetainObject;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.releaseobject          = NPN_ReleaseObject;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.invoke                 = NPN_Invoke;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.invokeDefault          = NPN_InvokeDefault;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.evaluate               = NPN_Evaluate;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.getproperty            = NPN_GetProperty;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.setproperty            = NPN_SetProperty;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.removeproperty         = NPN_RemoveProperty;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.hasproperty            = NPN_HasProperty;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.hasmethod              = NPN_HasMethod;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.releasevariantvalue    = NPN_ReleaseVariantValue;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.setexception           = NPN_SetException;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.pushpopupsenabledstate = NPN_PushPopupsEnabledState;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.poppopupsenabledstate  = NPN_PopPopupsEnabledState;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    fakeNPNFuncs.enumerate              = NPN_Enumerate;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if(logger)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      logger->logSPY_NP_Initialize();
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    real_NP_Initialize(&fakeNPNFuncs);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPError rv = epManager->callNPP_New(pluginType, instance, mode, argc, argn, argv, saved);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_new);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPError NPP_Destroy (NPP instance, NPSavedData** save)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BOOL last = FALSE;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_destroy, (DWORD)instance, (DWORD)save);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPError rv = epManager->callNPP_Destroy(instance, save, &last);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_destroy, rv);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(last && logger->bSPALID)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // this will log it
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epManager->callNP_Shutdown(instance);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    XP_HLIB hLib = NULL;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    epManager->removeEntryPointsForPlugin(instance, &hLib);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UnloadRealPlugin(hLib);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPError NPP_SetWindow (NPP instance, NPWindow* pNPWindow)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_set_window, (DWORD)instance, (DWORD)pNPWindow);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPError rv = epManager->callNPP_SetWindow(instance, pNPWindow);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_set_window, rv);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPError NPP_NewStream(NPP instance,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      NPMIMEType type,
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      NPStream* stream,
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      NPBool seekable,
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      uint16* stype)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_new_stream, (DWORD)instance, (DWORD)type, (DWORD)stream, (DWORD)seekable, (DWORD)stype);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPError rv = epManager->callNPP_NewStream(instance, type, stream, seekable, stype);
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_new_stream, rv);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32 NPP_WriteReady (NPP instance, NPStream *stream)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_write_ready, (DWORD)instance, (DWORD)stream);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32 rv = epManager->callNPP_WriteReady(instance, stream);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_write_ready, rv);
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32 NPP_Write (NPP instance, NPStream *stream, int32 offset, int32 len, void *buffer)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_write, (DWORD)instance, (DWORD)stream, (DWORD)offset, (DWORD)len, (DWORD)buffer);
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32 rv = epManager->callNPP_Write(instance, stream, offset, len, buffer);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_write, rv);
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPError NPP_DestroyStream (NPP instance, NPStream *stream, NPError reason)
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_destroy_stream, (DWORD)instance, (DWORD)stream, (DWORD)reason);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPError rv = epManager->callNPP_DestroyStream(instance, stream, reason);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_destroy_stream, rv);
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NPP_StreamAsFile (NPP instance, NPStream* stream, const char* fname)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_stream_as_file, (DWORD)instance, (DWORD)stream, (DWORD)fname);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epManager->callNPP_StreamAsFile(instance, stream, fname);
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NPP_Print (NPP instance, NPPrint* printInfo)
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_print, (DWORD)instance, (DWORD)printInfo);
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epManager->callNPP_Print(instance, printInfo);
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_url_notify, (DWORD)instance, (DWORD)url, (DWORD)reason, (DWORD)notifyData);
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  epManager->callNPP_URLNotify(instance, url, reason, notifyData);
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPError	NPP_GetValue(NPP instance, NPPVariable variable, void *value)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_get_value, (DWORD)instance, (DWORD)variable, (DWORD)value);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPError rv = epManager->callNPP_GetValue(instance, variable, value);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_get_value, rv);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_GENERIC_ERROR;
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NPERR_INVALID_INSTANCE_ERROR;
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_set_value, (DWORD)instance, (DWORD)variable, (DWORD)value);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NPError rv = epManager->callNPP_SetValue(instance, variable, value);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_set_value, rv);
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int16	NPP_HandleEvent(NPP instance, void* event)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(epManager == NULL)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(instance == NULL)
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logCall(action_npp_handle_event, (DWORD)instance, (DWORD)event);
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int16 rv = epManager->callNPP_HandleEvent(instance, event);
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if(logger)
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    logger->logReturn(action_npp_handle_event, rv);
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
406