1*fb3fb4f3Stomee /* 2*fb3fb4f3Stomee * CDDL HEADER START 3*fb3fb4f3Stomee * 4*fb3fb4f3Stomee * The contents of this file are subject to the terms of the 5*fb3fb4f3Stomee * Common Development and Distribution License (the "License"). 6*fb3fb4f3Stomee * You may not use this file except in compliance with the License. 7*fb3fb4f3Stomee * 8*fb3fb4f3Stomee * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*fb3fb4f3Stomee * or http://www.opensolaris.org/os/licensing. 10*fb3fb4f3Stomee * See the License for the specific language governing permissions 11*fb3fb4f3Stomee * and limitations under the License. 12*fb3fb4f3Stomee * 13*fb3fb4f3Stomee * When distributing Covered Code, include this CDDL HEADER in each 14*fb3fb4f3Stomee * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*fb3fb4f3Stomee * If applicable, add the following below this CDDL HEADER, with the 16*fb3fb4f3Stomee * fields enclosed by brackets "[]" replaced with your own identifying 17*fb3fb4f3Stomee * information: Portions Copyright [yyyy] [name of copyright owner] 18*fb3fb4f3Stomee * 19*fb3fb4f3Stomee * CDDL HEADER END 20*fb3fb4f3Stomee */ 21*fb3fb4f3Stomee 22*fb3fb4f3Stomee /* 23*fb3fb4f3Stomee * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24*fb3fb4f3Stomee * Use is subject to license terms. 25*fb3fb4f3Stomee */ 26*fb3fb4f3Stomee 27*fb3fb4f3Stomee #pragma ident "%Z%%M% %I% %E% SMI" 28*fb3fb4f3Stomee 29*fb3fb4f3Stomee #include <string.h> 30*fb3fb4f3Stomee #include <dtrace_jni.h> 31*fb3fb4f3Stomee 32*fb3fb4f3Stomee /* 33*fb3fb4f3Stomee * This file creates instances of the following Java classes: 34*fb3fb4f3Stomee * - org.opensolaris.os.dtrace.ProbeDescription 35*fb3fb4f3Stomee * - org.opensolaris.os.dtrace.ProbeInfo 36*fb3fb4f3Stomee */ 37*fb3fb4f3Stomee 38*fb3fb4f3Stomee jobject 39*fb3fb4f3Stomee dtj_new_probedesc(dtj_java_consumer_t *jc, const dtrace_probedesc_t *probedesc) 40*fb3fb4f3Stomee { 41*fb3fb4f3Stomee JNIEnv *jenv = jc->dtjj_jenv; 42*fb3fb4f3Stomee 43*fb3fb4f3Stomee jstring jprov = NULL; 44*fb3fb4f3Stomee jstring jmod = NULL; 45*fb3fb4f3Stomee jstring jfunc = NULL; 46*fb3fb4f3Stomee jstring jname = NULL; 47*fb3fb4f3Stomee jobject jprobedesc = NULL; 48*fb3fb4f3Stomee 49*fb3fb4f3Stomee jprov = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_provider); 50*fb3fb4f3Stomee if ((*jenv)->ExceptionCheck(jenv)) { 51*fb3fb4f3Stomee goto cleanup; 52*fb3fb4f3Stomee } 53*fb3fb4f3Stomee jmod = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_mod); 54*fb3fb4f3Stomee if ((*jenv)->ExceptionCheck(jenv)) { 55*fb3fb4f3Stomee goto cleanup; 56*fb3fb4f3Stomee } 57*fb3fb4f3Stomee jfunc = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_func); 58*fb3fb4f3Stomee if ((*jenv)->ExceptionCheck(jenv)) { 59*fb3fb4f3Stomee goto cleanup; 60*fb3fb4f3Stomee } 61*fb3fb4f3Stomee jname = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_name); 62*fb3fb4f3Stomee if ((*jenv)->ExceptionCheck(jenv)) { 63*fb3fb4f3Stomee goto cleanup; 64*fb3fb4f3Stomee } 65*fb3fb4f3Stomee jprobedesc = (*jenv)->NewObject(jenv, g_probedesc_jc, 66*fb3fb4f3Stomee g_probedescinit_jm, jprov, jmod, jfunc, jname); 67*fb3fb4f3Stomee if ((*jenv)->ExceptionCheck(jenv)) { 68*fb3fb4f3Stomee goto cleanup; 69*fb3fb4f3Stomee } 70*fb3fb4f3Stomee /* Does not throw exceptions */ 71*fb3fb4f3Stomee (*jenv)->SetIntField(jenv, jprobedesc, g_probedesc_id_jf, 72*fb3fb4f3Stomee probedesc->dtpd_id); 73*fb3fb4f3Stomee 74*fb3fb4f3Stomee cleanup: 75*fb3fb4f3Stomee 76*fb3fb4f3Stomee (*jenv)->DeleteLocalRef(jenv, jprov); 77*fb3fb4f3Stomee (*jenv)->DeleteLocalRef(jenv, jmod); 78*fb3fb4f3Stomee (*jenv)->DeleteLocalRef(jenv, jfunc); 79*fb3fb4f3Stomee (*jenv)->DeleteLocalRef(jenv, jname); 80*fb3fb4f3Stomee return (jprobedesc); 81*fb3fb4f3Stomee } 82*fb3fb4f3Stomee 83*fb3fb4f3Stomee jobject 84*fb3fb4f3Stomee dtj_new_probeinfo(dtj_java_consumer_t *jc, const dtrace_probeinfo_t *probeinfo) 85*fb3fb4f3Stomee { 86*fb3fb4f3Stomee JNIEnv *jenv = jc->dtjj_jenv; 87*fb3fb4f3Stomee 88*fb3fb4f3Stomee jobject jprobeattr = NULL; 89*fb3fb4f3Stomee jobject jargattr = NULL; 90*fb3fb4f3Stomee jobject jprobeinfo = NULL; /* return value */ 91*fb3fb4f3Stomee 92*fb3fb4f3Stomee jprobeattr = dtj_new_attribute(jc, &probeinfo->dtp_attr); 93*fb3fb4f3Stomee if ((*jenv)->ExceptionCheck(jenv)) { 94*fb3fb4f3Stomee return (NULL); 95*fb3fb4f3Stomee } 96*fb3fb4f3Stomee jargattr = dtj_new_attribute(jc, &probeinfo->dtp_arga); 97*fb3fb4f3Stomee if ((*jenv)->ExceptionCheck(jenv)) { 98*fb3fb4f3Stomee (*jenv)->DeleteLocalRef(jenv, jprobeattr); 99*fb3fb4f3Stomee return (NULL); 100*fb3fb4f3Stomee } 101*fb3fb4f3Stomee 102*fb3fb4f3Stomee jprobeinfo = (*jenv)->NewObject(jenv, g_probeinfo_jc, 103*fb3fb4f3Stomee g_probeinfoinit_jm, jprobeattr, jargattr); 104*fb3fb4f3Stomee 105*fb3fb4f3Stomee (*jenv)->DeleteLocalRef(jenv, jprobeattr); 106*fb3fb4f3Stomee (*jenv)->DeleteLocalRef(jenv, jargattr); 107*fb3fb4f3Stomee return (jprobeinfo); 108*fb3fb4f3Stomee } 109