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