/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is The Waterfall Java Plugin Module * * The Initial Developer of the Original Code is Sun Microsystems Inc * Portions created by Sun Microsystems Inc are Copyright (C) 2001 * All Rights Reserved. * * $Id: jvmp_extension.h,v 1.2 2001-07-12 19:58:07 edburns%acm.org Exp $ * * Contributor(s): * * Nikolay N. Igotti */ #ifndef _JVMP_EXTENSION_H #define _JVMP_EXTENSION_H #ifdef __cplusplus extern "C" { #endif /* XXX: this include should be more generic - different transports */ #include "shmtran.h" #include "jvmp_caps.h" /** * Usage scenario: * HA: CreatePeer(id) -> JVM: is extension inited? * if not yet - look in registry of registred extensions, or just * ask all registred ext DLL - can they handle this type - use latest * version of handler, call JVMPExt_Init() of matching DLL, * load and run bootstrap class * if yes - just instanciate proper peer, using special factory * registred by bootstrap class in PluggableJVM. */ struct JVMP_Extension { /** * Init native part of this extension. * Argument is side on which extension is loaded, if in * separate process situation (0 - not separate process case * 1 - host side, 2 - JVM side). */ jint (JNICALL *JVMPExt_Init)(jint side); /** * Shutdown this extension. Usually means nobody wants it anymore. */ jint (JNICALL *JVMPExt_Shutdown)(); /** * the only function which can be called before Init * pCID - contract ID, pVersion - version of handler */ jint (JNICALL *JVMPExt_GetExtInfo)(const char* *pCID, jint *pVersion, JVMP_ExtDescription* *desc); /** * Return classpath to find bootstrap Java class, and its name * Classpath is "|"-separated list of URLs, like * jar:file:///usr/java/ext/mozilla/moz6_ext.jar|file:///usr/java/ext/mozilla/classes|http://www.mozilla.org/Waterfall/classes * Name is smth like: sun.jvmp.mozilla.MozillaPeerFactory */ jint (JNICALL *JVMPExt_GetBootstrapClass)(char* *bootstrapClassPath, char* *bootstrapClassName); /** * This is extension's callback to schedule request in host * in different proc or STA situation. * Different methods executed depending * on funcno in request, use macros to numerate your functions: * JVMP_NEW_EXT_FUNCNO(vendorID, funcno). Implementation of this callback * is application/platform dependent. It can be implemented using * XtAddEventHandler on X, SendMessage on Win32. * If local == JNI_TRUE - just execute this request locally. */ jint (JNICALL *JVMPExt_ScheduleRequest)(JVMP_ShmRequest* req, jint local); /** * This function reserves capabilities space for this extension. * Arguments are two caps bitfields - first one is set of capabilities this * extension is interesting, and secind describes sharing policy on this set * of caps: * if bit set - this cap is to be shared. * After this call for all decisions on caps in this range * delegated to AccessControlDecider of this extension. * If access to capability range is shared, then Waterfall chains * all deciders for given capability, if anyone forbids capability setting * - this capability not granted. */ jint (JNICALL *JVMPExt_GetCapsRange)(JVMP_SecurityCap* caps, JVMP_SecurityCap* sh_mask); }; typedef struct JVMP_Extension JVMP_Extension; typedef _JVMP_IMPORT_OR_EXPORT jint (JNICALL *JVMP_GetExtension_t)(JVMP_Extension** ext); typedef jint (JNICALL *JVMPExt_ExecuteRequest_t)(JVMP_ShmRequest* req); #ifdef __cplusplus }; #endif #endif