/* * helpers.c * * helper functions for Java * * Author: Klaus Kaempf * */ /***************************************************************************** * Copyright (C) 2008 Novell Inc. All rights reserved. * Copyright (C) 2008 SUSE Linux Products GmbH. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * - Neither the name of Novell Inc. nor of SUSE Linux Products GmbH nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL Novell Inc. OR SUSE Linux Products GmbH OR * THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ /* * callback function if client authentication fails * */ static void auth_request_callback( WsManClient *client, wsman_auth_type_t t, char **username, char **password ) { *username = NULL; /* abort authentication */ return; } #ifndef JCALL0 #ifdef __cplusplus # define JCALL0(func, jenv) jenv->func() # define JCALL1(func, jenv, ar1) jenv->func(ar1) # define JCALL2(func, jenv, ar1, ar2) jenv->func(ar1, ar2) # define JCALL3(func, jenv, ar1, ar2, ar3) jenv->func(ar1, ar2, ar3) # define JCALL4(func, jenv, ar1, ar2, ar3, ar4) \ jenv->func(ar1, ar2, ar3, ar4) # define JCALL7(func, jenv, ar1, ar2, ar3, ar4, ar5, ar6, ar7) \ jenv->func(ar1, ar2, ar3, ar4, ar5, ar6, ar7) #else # define JCALL0(func, jenv) (*jenv)->func(jenv) # define JCALL1(func, jenv, ar1) (*jenv)->func(jenv, ar1) # define JCALL2(func, jenv, ar1, ar2) (*jenv)->func(jenv, ar1, ar2) # define JCALL3(func, jenv, ar1, ar2, ar3) (*jenv)->func(jenv, ar1, ar2, ar3) # define JCALL4(func, jenv, ar1, ar2, ar3, ar4) \ (*jenv)->func(jenv, ar1, ar2, ar3, ar4) # define JCALL7(func, jenv, ar1, ar2, ar3, ar4, ar5, ar6, ar7) \ (*jenv)->func(jenv, ar1, ar2, ar3, ar4, ar5, ar6, ar7) #endif #endif static jobject hash2value(JNIEnv *jenv, hash_t *hash) { hnode_t *node; hscan_t ptr; jclass cls = JCALL1(FindClass, jenv, "java/util/HashMap"); jobject dict = JCALL3(NewObject, jenv, cls, JCALL3(GetMethodID, jenv, cls, "", "(I)V"), (jint) hash_count(hash)); jmethodID put = JCALL3(GetMethodID, jenv, cls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)" "Ljava/lang/Object;"); if (!hash) return NULL; hash_scan_begin(&ptr, hash); while ((node = hash_scan_next(&ptr))) { const void *key = hnode_getkey(node); const void *val = hnode_get(node); JCALL4(CallObjectMethod, jenv, dict, put, JCALL1(NewStringUTF, jenv, key), JCALL1(NewStringUTF, jenv, val)); } return dict; }