func unmountArgs(env jutil.Env, jName, jServer C.jstring, jContext, jOptions C.jobject) (name, server string, context *context.T, options []naming.NamespaceOpt, err error) { name = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) server = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jServer)))) context, _, err = jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { return } options, err = goNamespaceOptions(env, jutil.Object(uintptr(unsafe.Pointer(jOptions)))) return }
func setPermissionsArgs(env jutil.Env, jContext, jPermissions C.jobject, jName, jVersion C.jstring, jOptions C.jobject) (context *context.T, permissions access.Permissions, name, version string, options []naming.NamespaceOpt, err error) { context, _, err = jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { return } err = jutil.GoVomCopy(env, jutil.Object(uintptr(unsafe.Pointer(jPermissions))), jPermissionsClass, &permissions) if err != nil { return } options, err = goNamespaceOptions(env, jutil.Object(uintptr(unsafe.Pointer(jOptions)))) name = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) version = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jVersion)))) return }
func mountArgs(env jutil.Env, jContext C.jobject, jName, jServer C.jstring, jDuration, jOptions C.jobject) (context *context.T, name, server string, duration time.Duration, options []naming.NamespaceOpt, err error) { context, _, err = jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { return } name = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) server = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jServer)))) duration, err = jutil.GoDuration(env, jutil.Object(uintptr(unsafe.Pointer(jDuration)))) if err != nil { return } options, err = goNamespaceOptions(env, jutil.Object(uintptr(unsafe.Pointer(jOptions)))) return }
//export Java_io_v_v23_security_VPrincipalImpl_nativeBless func Java_io_v_v23_security_VPrincipalImpl_nativeBless(jenv *C.JNIEnv, jVPrincipalImpl C.jobject, goRef C.jlong, jKey C.jobject, jWith C.jobject, jExtension C.jstring, jCaveat C.jobject, jAdditionalCaveats C.jobjectArray) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) key, err := GoPublicKey(env, jutil.Object(uintptr(unsafe.Pointer(jKey)))) if err != nil { jutil.JThrowV(env, err) return nil } with, err := GoBlessings(env, jutil.Object(uintptr(unsafe.Pointer(jWith)))) if err != nil { jutil.JThrowV(env, err) return nil } extension := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jExtension)))) caveat, err := GoCaveat(env, jutil.Object(uintptr(unsafe.Pointer(jCaveat)))) if err != nil { jutil.JThrowV(env, err) return nil } additionalCaveats, err := GoCaveats(env, jutil.Object(uintptr(unsafe.Pointer(jAdditionalCaveats)))) if err != nil { jutil.JThrowV(env, err) return nil } blessings, err := (*(*security.Principal)(jutil.GoRefValue(jutil.Ref(goRef)))).Bless(key, with, extension, caveat, additionalCaveats...) if err != nil { jutil.JThrowV(env, err) return nil } jBlessings, err := JavaBlessings(env, blessings) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jBlessings)) }
//export Java_io_v_impl_google_lib_discovery_UpdateImpl_nativeAttachment func Java_io_v_impl_google_lib_discovery_UpdateImpl_nativeAttachment(jenv *C.JNIEnv, _ C.jobject, goRef C.jlong, jCtx C.jobject, jName C.jstring, jCbObj C.jobject) { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) ctx, _, err := jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jCtx)))) if err != nil { jutil.JThrowV(env, err) return } update := *(*discovery.Update)(jutil.GoRefValue(jutil.Ref(goRef))) name := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) jCb := jutil.Object(uintptr(unsafe.Pointer(jCbObj))) jutil.DoAsyncCall(env, jCb, func() (jutil.Object, error) { dataOrErr := <-update.Attachment(ctx, name) if dataOrErr.Error != nil { return jutil.NullObject, err } env, freeFunc := jutil.GetEnv() defer freeFunc() jData, err := jutil.JByteArray(env, dataOrErr.Data) if err != nil { return jutil.NullObject, err } // Must grab a global reference as we free up the env and all local references that come // along with it. return jutil.NewGlobalRef(env, jData), nil // Un-refed in DoAsyncCall }) }
//export Java_io_v_impl_google_lib_discovery_GlobalDiscovery_nativeNewDiscovery func Java_io_v_impl_google_lib_discovery_GlobalDiscovery_nativeNewDiscovery(jenv *C.JNIEnv, jRuntime C.jclass, jContext C.jobject, jPath C.jstring, jMountTTL, jScanInterval C.jobject) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) ctx, _, err := jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { jutil.JThrowV(env, err) return nil } path := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jPath)))) mountTTL, err := jutil.GoDuration(env, jutil.Object(uintptr(unsafe.Pointer(jMountTTL)))) if err != nil { jutil.JThrowV(env, err) return nil } scanInterval, err := jutil.GoDuration(env, jutil.Object(uintptr(unsafe.Pointer(jScanInterval)))) if err != nil { jutil.JThrowV(env, err) return nil } discovery, err := gdiscovery.NewWithTTL(ctx, path, mountTTL, scanInterval) if err != nil { jutil.JThrowV(env, err) return nil } jDiscovery, err := JavaDiscovery(env, discovery) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jDiscovery)) }
//export Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistentForSigner func Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistentForSigner(jenv *C.JNIEnv, jclass C.jclass, jSigner C.jobject, jDir C.jstring) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) signerObj := jutil.Object(uintptr(unsafe.Pointer(jSigner))) signer, err := GoSigner(env, signerObj) if err != nil { jutil.JThrowV(env, err) return nil } dir := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jDir)))) stateSerializer, err := vsecurity.NewPrincipalStateSerializer(dir) if err != nil { jutil.JThrowV(env, err) return nil } principal, err := vsecurity.NewPrincipalFromSigner(signer, stateSerializer) if err != nil { jutil.JThrowV(env, err) return nil } ref := jutil.GoNewRef(&principal) // Un-refed when the Java VPrincipalImpl is finalized. jPrincipal, err := jutil.NewObject(env, jVPrincipalImplClass, []jutil.Sign{jutil.LongSign, signerSign, blessingStoreSign, blessingRootsSign}, int64(ref), signerObj, jutil.NullObject, jutil.NullObject) if err != nil { jutil.GoDecRef(ref) jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jPrincipal)) }
//export Java_io_v_impl_google_rpc_ServerImpl_nativeAddName func Java_io_v_impl_google_rpc_ServerImpl_nativeAddName(jenv *C.JNIEnv, jServer C.jobject, goRef C.jlong, jName C.jstring) { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) name := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) if err := (*(*rpc.Server)(jutil.GoRefValue(jutil.Ref(goRef)))).AddName(name); err != nil { jutil.JThrowV(env, err) return } }
//export Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistent func Java_io_v_v23_security_VPrincipalImpl_nativeCreatePersistent(jenv *C.JNIEnv, jclass C.jclass, jPassphrase C.jstring, jDir C.jstring) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) passphrase := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jPassphrase)))) dir := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jDir)))) principal, err := vsecurity.LoadPersistentPrincipal(dir, []byte(passphrase)) if err != nil { if principal, err = vsecurity.CreatePersistentPrincipal(dir, []byte(passphrase)); err != nil { jutil.JThrowV(env, err) return nil } } jPrincipal, err := JavaPrincipal(env, principal) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jPrincipal)) }
//export Java_io_v_impl_google_lib_discovery_UUIDUtil_attributeUUID func Java_io_v_impl_google_lib_discovery_UUIDUtil_attributeUUID(jenv *C.JNIEnv, _ C.jclass, jName C.jstring) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) name := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) jUuid, err := javaUUID(env, idiscovery.NewAttributeUUID(name)) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jUuid)) }
//export Java_io_v_v23_context_VContext_nativeValue func Java_io_v_v23_context_VContext_nativeValue(jenv *C.JNIEnv, jVContext C.jobject, goRef C.jlong, jKeySign C.jstring) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) key := goContextKey(jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jKeySign))))) value := (*(*context.T)(jutil.GoRefValue(jutil.Ref(goRef)))).Value(key) jValue, err := JavaContextValue(env, value) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jValue)) }
//export Java_io_v_v23_security_BlessingRootsImpl_nativeRecognized func Java_io_v_v23_security_BlessingRootsImpl_nativeRecognized(jenv *C.JNIEnv, jBlessingRootsImpl C.jobject, goRef C.jlong, jRoot C.jobject, jBlessing C.jstring) { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) root, err := JavaPublicKeyToDER(env, jutil.Object(uintptr(unsafe.Pointer(jRoot)))) if err != nil { jutil.JThrowV(env, err) return } blessing := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jBlessing)))) if err := (*(*security.BlessingRoots)(jutil.GoRefValue(jutil.Ref(goRef)))).Recognized(root, blessing); err != nil { jutil.JThrowV(env, err) } }
func globArgs(env jutil.Env, jContext C.jobject, jPattern C.jstring, jOptions C.jobject) (context *context.T, cancel func(), pattern string, opts []naming.NamespaceOpt, err error) { context, cancel, err = jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { return } opts, err = goNamespaceOptions(env, jutil.Object(uintptr(unsafe.Pointer(jOptions)))) if err != nil { return } pattern = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jPattern)))) return }
func getPermissionsArgs(env jutil.Env, jContext C.jobject, jName C.jstring, jOptions C.jobject) (context *context.T, name string, options []naming.NamespaceOpt, err error) { context, _, err = jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { return } options, err = goNamespaceOptions(env, jutil.Object(uintptr(unsafe.Pointer(jOptions)))) if err != nil { return } name = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) return }
func resolveToMountTableArgs(env jutil.Env, jContext, jOptions C.jobject, jName C.jstring) (context *context.T, options []naming.NamespaceOpt, name string, err error) { context, _, err = jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { return } options, err = goNamespaceOptions(env, jutil.Object(uintptr(unsafe.Pointer(jOptions)))) if err != nil { return } name = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) return }
func deleteArgs(env jutil.Env, jContext, jOptions C.jobject, jName C.jstring, jDeleteSubtree C.jboolean) (context *context.T, options []naming.NamespaceOpt, name string, deleteSubtree bool, err error) { context, _, err = jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { return } options, err = goNamespaceOptions(env, jutil.Object(uintptr(unsafe.Pointer(jOptions)))) if err != nil { return } name = jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) deleteSubtree = jDeleteSubtree == C.JNI_TRUE return }
//export Java_io_v_impl_google_rpc_ClientImpl_nativeStartCall func Java_io_v_impl_google_rpc_ClientImpl_nativeStartCall(jenv *C.JNIEnv, jClientObj C.jobject, goRef C.jlong, jContext C.jobject, jName C.jstring, jMethod C.jstring, jVomArgs C.jobjectArray, jOptionsObj C.jobject, jCallbackObj C.jobject) { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) name := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) method := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jMethod)))) jOptions := jutil.Object(uintptr(unsafe.Pointer(jOptionsObj))) jCallback := jutil.Object(uintptr(unsafe.Pointer(jCallbackObj))) ctx, cancel, err := jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { jutil.CallbackOnFailure(env, jCallback, err) return } args, err := decodeArgs(env, jVomArgs) if err != nil { jutil.CallbackOnFailure(env, jCallback, err) return } opts, err := jopts.GoRpcOpts(env, jOptions) if err != nil { jutil.CallbackOnFailure(env, jCallback, err) return } // Create a global reference to the client object for the duration of the call // so that the java object doesn't get garbage collected while the async call // is happening. This is an issue because if the java object is garbage collected, // the go ref will also be collected causing doStartCall to panic. jClient := jutil.NewGlobalRef(env, jutil.Object(uintptr(unsafe.Pointer(jClientObj)))) jutil.DoAsyncCall(env, jCallback, func() (jutil.Object, error) { obj, err := doStartCall(ctx, cancel, name, method, opts, goRef, args) env, freeFunc := jutil.GetEnv() jutil.DeleteGlobalRef(env, jClient) freeFunc() return obj, err }) }
//export Java_io_v_impl_google_namespace_NamespaceImpl_nativeFlushCacheEntry func Java_io_v_impl_google_namespace_NamespaceImpl_nativeFlushCacheEntry(jenv *C.JNIEnv, jNamespaceClass C.jclass, goRef C.jlong, jContext C.jobject, jName C.jstring) C.jboolean { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) n := *(*namespace.T)(jutil.GoRefValue(jutil.Ref(goRef))) context, _, err := jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { jutil.JThrowV(env, err) return C.JNI_FALSE } result := n.FlushCacheEntry(context, jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName))))) if result { return C.JNI_TRUE } else { return C.JNI_FALSE } }
//export Java_io_v_v23_i18n_Catalog_nativeFormatParams func Java_io_v_v23_i18n_Catalog_nativeFormatParams(jenv *C.JNIEnv, jCatalog C.jclass, jFormat C.jstring, jParams C.jobjectArray) C.jstring { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) format := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jFormat)))) strParams, err := jutil.GoStringArray(env, jutil.Object(uintptr(unsafe.Pointer(jParams)))) if err != nil { jutil.JThrowV(env, err) return nil } params := make([]interface{}, len(strParams)) for i, strParam := range strParams { params[i] = strParam } result := i18n.FormatParams(format, params...) jRet := jutil.JString(env, result) return C.jstring(unsafe.Pointer(jRet)) }
//export Java_io_v_android_util_Vango_nativeGoContextCall func Java_io_v_android_util_Vango_nativeGoContextCall(jenv *C.JNIEnv, jVango C.jobject, jContext C.jobject, jKey C.jstring, jOutput C.jobject) { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) key := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jKey)))) ctx, _, err := jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jContext)))) if err != nil { jutil.JThrowV(env, err) return } f, ok := vangoFuncs[key] if !ok { jutil.JThrowV(env, fmt.Errorf("vangoFunc key %q doesn't exist", key)) return } if err := f(ctx, newJavaOutputWriter(env, jutil.Object(uintptr(unsafe.Pointer(jOutput))))); err != nil { jutil.JThrowV(env, err) return } }
//export Java_io_v_impl_google_rpc_AddressChooserImpl_nativeChoose func Java_io_v_impl_google_rpc_AddressChooserImpl_nativeChoose(jenv *C.JNIEnv, jAddressChooser C.jobject, goRef C.jlong, jProtocol C.jstring, jCandidates C.jobjectArray) C.jobjectArray { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) protocol := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jProtocol)))) candidates, err := GoNetworkAddressArray(env, jutil.Object(uintptr(unsafe.Pointer(jCandidates)))) if err != nil { jutil.JThrowV(env, err) return nil } addrs, err := (*(*rpc.AddressChooser)(jutil.GoRefValue(jutil.Ref(goRef)))).ChooseAddresses(protocol, candidates) if err != nil { jutil.JThrowV(env, err) return nil } jAddrs, err := JavaNetworkAddressArray(env, addrs) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobjectArray(unsafe.Pointer(jAddrs)) }
//export Java_io_v_v23_security_VPrincipalImpl_nativeBlessSelf func Java_io_v_v23_security_VPrincipalImpl_nativeBlessSelf(jenv *C.JNIEnv, jVPrincipalImpl C.jobject, goRef C.jlong, jName C.jstring, jCaveats C.jobjectArray) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) name := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) caveats, err := GoCaveats(env, jutil.Object(uintptr(unsafe.Pointer(jCaveats)))) if err != nil { jutil.JThrowV(env, err) return nil } blessings, err := (*(*security.Principal)(jutil.GoRefValue(jutil.Ref(goRef)))).BlessSelf(name, caveats...) if err != nil { jutil.JThrowV(env, err) return nil } jBlessings, err := JavaBlessings(env, blessings) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jBlessings)) }
func (c *callImpl) callDischargeMapMethod(methodName string) map[string]security.Discharge { env, freeFunc := jutil.GetEnv() defer freeFunc() javaObjectMap, err := jutil.CallMapMethod(env, c.jCall, methodName, nil) if err != nil { log.Printf("Couldn't call Java %q method: %v", methodName, err) return nil } discharges := make(map[string]security.Discharge) for jKey, jValue := range javaObjectMap { key := jutil.GoString(env, jKey) discharge, err := GoDischarge(env, jValue) if err != nil { log.Printf("Couldn't convert Java Discharge to Go Discharge: %v", err) return nil } discharges[key] = discharge } return discharges }
//export Java_io_v_v23_context_VContext_nativeWithValue func Java_io_v_v23_context_VContext_nativeWithValue(jenv *C.JNIEnv, jVContext C.jobject, goRef C.jlong, goCancelRef C.jlong, jKeySign C.jstring, jValue C.jobject) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) key := goContextKey(jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jKeySign))))) value, err := GoContextValue(env, jutil.Object(uintptr(unsafe.Pointer(jValue)))) if err != nil { jutil.JThrowV(env, err) return nil } ctx := context.WithValue((*context.T)(jutil.GoRefValue(jutil.Ref(goRef))), key, value) var cancel context.CancelFunc if goCancelRef != 0 { cancel = (*(*context.CancelFunc)(jutil.GoRefValue(jutil.Ref(goCancelRef)))) } jCtx, err := JavaContext(env, ctx, cancel) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jCtx)) }
//export Java_io_v_impl_google_lib_discovery_DiscoveryImpl_nativeScan func Java_io_v_impl_google_lib_discovery_DiscoveryImpl_nativeScan(jenv *C.JNIEnv, _ C.jobject, goRef C.jlong, jCtx C.jobject, jQuery C.jstring) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) ctx, _, err := jcontext.GoContext(env, jutil.Object(uintptr(unsafe.Pointer(jCtx)))) if err != nil { jutil.JThrowV(env, err) return nil } d := *(*discovery.T)(jutil.GoRefValue(jutil.Ref(goRef))) query := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jQuery)))) scanCh, err := d.Scan(ctx, query) if err != nil { jutil.JThrowV(env, err) return nil } jChannel, err := jchannel.JavaInputChannel(env, ctx, nil, func() (jutil.Object, error) { update, ok := <-scanCh if !ok { return jutil.NullObject, verror.NewErrEndOfFile(ctx) } env, freeFunc := jutil.GetEnv() defer freeFunc() jUpdate, err := javaUpdate(env, update) if err != nil { return jutil.NullObject, err } // Must grab a global reference as we free up the env and all local references that come // along with it. return jutil.NewGlobalRef(env, jUpdate), nil // un-refed by InputChannelImpl_nativeRecv }) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jChannel)) }
//export Java_io_v_impl_google_services_mounttable_MountTableServer_nativeWithNewServer func Java_io_v_impl_google_services_mounttable_MountTableServer_nativeWithNewServer(jenv *C.JNIEnv, jMountTableServerClass C.jclass, jContext C.jobject, jMountTableServerParams C.jobject) C.jobject { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) jCtx := jutil.Object(uintptr(unsafe.Pointer(jContext))) jParams := jutil.Object(uintptr(unsafe.Pointer(jMountTableServerParams))) // Read and translate all of the server params. mountName, err := jutil.CallStringMethod(env, jParams, "getName", nil) if err != nil { jutil.JThrowV(env, err) return nil } rootDir, err := jutil.CallStringMethod(env, jParams, "getStorageRootDir", nil) if err != nil { jutil.JThrowV(env, err) return nil } permsJMap, err := jutil.CallMapMethod(env, jParams, "getPermissions", nil) if err != nil { jutil.JThrowV(env, err) return nil } permsMap := make(map[string]access.Permissions) for jPath, jPerms := range permsJMap { path := jutil.GoString(env, jPath) perms, err := jaccess.GoPermissions(env, jPerms) if err != nil { jutil.JThrowV(env, err) return nil } permsMap[path] = perms } // Write JSON-encoded permissions to a file. jsonPerms, err := json.Marshal(permsMap) if err != nil { jutil.JThrowV(env, fmt.Errorf("Couldn't JSON-encode path-permissions: %v", err)) return nil } permsFile, err := ioutil.TempFile(rootDir, "jni_permissions") if err != nil { jutil.JThrowV(env, fmt.Errorf("Couldn't create permissions file: %v", err)) return nil } w := bufio.NewWriter(permsFile) if _, err := w.Write(jsonPerms); err != nil { jutil.JThrowV(env, fmt.Errorf("Couldn't write to permissions file: %v", err)) return nil } if err := w.Flush(); err != nil { jutil.JThrowV(env, fmt.Errorf("Couldn't flush to permissions file: %v", err)) } statsPrefix, err := jutil.CallStringMethod(env, jParams, "getStatsPrefix", nil) if err != nil { jutil.JThrowV(env, err) return nil } // Start the mounttable server. ctx, cancel, err := jcontext.GoContext(env, jCtx) if err != nil { jutil.JThrowV(env, err) return nil } d, err := mounttablelib.NewMountTableDispatcher(ctx, permsFile.Name(), rootDir, statsPrefix) if err != nil { jutil.JThrowV(env, err) return nil } newCtx, s, err := v23.WithNewDispatchingServer(ctx, mountName, d, options.ServesMountTable(true)) if err != nil { jutil.JThrowV(env, err) return nil } jNewCtx, err := jcontext.JavaContext(env, newCtx, cancel) if err != nil { jutil.JThrowV(env, err) return nil } jServer, err := jrpc.JavaServer(env, s) if err != nil { jutil.JThrowV(env, err) return nil } // Attach a server to the new context. jServerAttCtx, err := jutil.CallStaticObjectMethod(env, jVRuntimeImplClass, "withServer", []jutil.Sign{contextSign, serverSign}, contextSign, jNewCtx, jServer) if err != nil { jutil.JThrowV(env, err) return nil } return C.jobject(unsafe.Pointer(jServerAttCtx)) }
//export Java_io_v_impl_google_rpc_ServerImpl_nativeRemoveName func Java_io_v_impl_google_rpc_ServerImpl_nativeRemoveName(jenv *C.JNIEnv, jServer C.jobject, goRef C.jlong, jName C.jstring) { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) name := jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jName)))) (*(*rpc.Server)(jutil.GoRefValue(jutil.Ref(goRef)))).RemoveName(name) }
//export Java_io_v_v23_security_BlessingPattern_nativeCreate func Java_io_v_v23_security_BlessingPattern_nativeCreate(jenv *C.JNIEnv, jBlessingPatternClass C.jclass, jValue C.jstring) C.jlong { env := jutil.Env(uintptr(unsafe.Pointer(jenv))) pattern := security.BlessingPattern(jutil.GoString(env, jutil.Object(uintptr(unsafe.Pointer(jValue))))) ref := jutil.GoNewRef(&pattern) // Un-refed when the BlessingPattern object is finalized. return C.jlong(ref) }