104 lines
3.8 KiB
C
104 lines
3.8 KiB
C
/*
|
|
* helpers.c
|
|
*
|
|
* helper functions for Java
|
|
*
|
|
* Author: Klaus Kaempf <kkaempf@suse.de>
|
|
*
|
|
*/
|
|
|
|
/*****************************************************************************
|
|
* 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, "<init>", "(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;
|
|
}
|