From f9107ff7f1781926529876b1360131a03b994a88 Mon Sep 17 00:00:00 2001 From: Tomasz Zarna Date: Mon, 1 Sep 2008 15:01:25 +0000 Subject: bug 245849: [Net] Native file getproxygnome.c doesn't match library name libproxygnome.so --- .../build.properties | 2 +- .../libgnomeproxy-1.0.0.so | Bin 0 -> 91292 bytes .../libproxygnome.so | Bin 91287 -> 0 bytes .../natives/unix/GetProxyGnome/getproxygnome.d | 220 --------------------- .../natives/unix/GetProxyGnome/makefile | 43 ---- .../natives/unix/GetProxyGnome/objects.mk | 7 - .../natives/unix/GetProxyGnome/sources.mk | 17 -- .../natives/unix/GetProxyGnome/subdir.mk | 24 --- .../natives/unix/getproxygnome.c | 217 -------------------- .../org.eclipse.core.net/natives/unix/gnomeproxy.c | 217 ++++++++++++++++++++ .../natives/unix/linux/makefile | 45 +++++ .../internal/net/proxy/unix/UnixProxyProvider.java | 2 +- 12 files changed, 264 insertions(+), 530 deletions(-) create mode 100644 bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libgnomeproxy-1.0.0.so delete mode 100644 bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libproxygnome.so delete mode 100644 bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/getproxygnome.d delete mode 100644 bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/makefile delete mode 100644 bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/objects.mk delete mode 100644 bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/sources.mk delete mode 100644 bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/subdir.mk delete mode 100644 bundles/org.eclipse.core.net/natives/unix/getproxygnome.c create mode 100644 bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c create mode 100644 bundles/org.eclipse.core.net/natives/unix/linux/makefile (limited to 'bundles') diff --git a/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/build.properties b/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/build.properties index e75ccc1e0..a698f055e 100644 --- a/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/build.properties +++ b/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/build.properties @@ -13,7 +13,7 @@ bin.includes = fragment.properties,\ META-INF/,\ about.html,\ bin/,\ - libproxygnome.so + libgnomeproxy-1.0.0.so src.includes = about.html generateSourceBundle=false source.. = src/ diff --git a/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libgnomeproxy-1.0.0.so b/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libgnomeproxy-1.0.0.so new file mode 100644 index 000000000..05e551e6a Binary files /dev/null and b/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libgnomeproxy-1.0.0.so differ diff --git a/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libproxygnome.so b/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libproxygnome.so deleted file mode 100644 index f0482426f..000000000 Binary files a/bundles/org.eclipse.core.net/fragments/org.eclipse.core.net.linux.x86/libproxygnome.so and /dev/null differ diff --git a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/getproxygnome.d b/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/getproxygnome.d deleted file mode 100644 index b8c3630c8..000000000 --- a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/getproxygnome.d +++ /dev/null @@ -1,220 +0,0 @@ -getproxygnome.d getproxygnome.o: ../getproxygnome.c \ - /usr/include/glib-2.0/glib.h /usr/include/glib-2.0/glib/galloca.h \ - /usr/include/glib-2.0/glib/gtypes.h \ - /usr/lib/glib-2.0/include/glibconfig.h \ - /usr/include/glib-2.0/glib/gmacros.h \ - /usr/include/glib-2.0/glib/garray.h \ - /usr/include/glib-2.0/glib/gasyncqueue.h \ - /usr/include/glib-2.0/glib/gthread.h \ - /usr/include/glib-2.0/glib/gerror.h /usr/include/glib-2.0/glib/gquark.h \ - /usr/include/glib-2.0/glib/gatomic.h \ - /usr/include/glib-2.0/glib/gbacktrace.h \ - /usr/include/glib-2.0/glib/gbase64.h \ - /usr/include/glib-2.0/glib/gbookmarkfile.h \ - /usr/include/glib-2.0/glib/gcache.h /usr/include/glib-2.0/glib/glist.h \ - /usr/include/glib-2.0/glib/gmem.h /usr/include/glib-2.0/glib/gslice.h \ - /usr/include/glib-2.0/glib/gcompletion.h \ - /usr/include/glib-2.0/glib/gconvert.h \ - /usr/include/glib-2.0/glib/gdataset.h \ - /usr/include/glib-2.0/glib/gdate.h /usr/include/glib-2.0/glib/gdir.h \ - /usr/include/glib-2.0/glib/gfileutils.h \ - /usr/include/glib-2.0/glib/ghash.h /usr/include/glib-2.0/glib/ghook.h \ - /usr/include/glib-2.0/glib/giochannel.h \ - /usr/include/glib-2.0/glib/gmain.h /usr/include/glib-2.0/glib/gslist.h \ - /usr/include/glib-2.0/glib/gstring.h \ - /usr/include/glib-2.0/glib/gunicode.h \ - /usr/include/glib-2.0/glib/gutils.h \ - /usr/include/glib-2.0/glib/gkeyfile.h \ - /usr/include/glib-2.0/glib/gmappedfile.h \ - /usr/include/glib-2.0/glib/gmarkup.h \ - /usr/include/glib-2.0/glib/gmessages.h \ - /usr/include/glib-2.0/glib/gnode.h /usr/include/glib-2.0/glib/goption.h \ - /usr/include/glib-2.0/glib/gpattern.h \ - /usr/include/glib-2.0/glib/gprimes.h \ - /usr/include/glib-2.0/glib/gqsort.h /usr/include/glib-2.0/glib/gqueue.h \ - /usr/include/glib-2.0/glib/grand.h /usr/include/glib-2.0/glib/grel.h \ - /usr/include/glib-2.0/glib/gscanner.h \ - /usr/include/glib-2.0/glib/gshell.h /usr/include/glib-2.0/glib/gspawn.h \ - /usr/include/glib-2.0/glib/gstrfuncs.h \ - /usr/include/glib-2.0/glib/gthreadpool.h \ - /usr/include/glib-2.0/glib/gtimer.h /usr/include/glib-2.0/glib/gtree.h \ - /usr/include/gconf/2/gconf/gconf-value.h \ - /usr/include/gconf/2/gconf/gconf-error.h \ - /usr/include/gconf/2/gconf/gconf-client.h \ - /usr/include/glib-2.0/glib-object.h \ - /usr/include/glib-2.0/gobject/gboxed.h \ - /usr/include/glib-2.0/gobject/gtype.h \ - /usr/include/glib-2.0/gobject/genums.h \ - /usr/include/glib-2.0/gobject/gobject.h \ - /usr/include/glib-2.0/gobject/gvalue.h \ - /usr/include/glib-2.0/gobject/gparam.h \ - /usr/include/glib-2.0/gobject/gclosure.h \ - /usr/include/glib-2.0/gobject/gsignal.h \ - /usr/include/glib-2.0/gobject/gmarshal.h \ - /usr/include/glib-2.0/gobject/gparamspecs.h \ - /usr/include/glib-2.0/gobject/gsourceclosure.h \ - /usr/include/glib-2.0/gobject/gtypemodule.h \ - /usr/include/glib-2.0/gobject/gtypeplugin.h \ - /usr/include/glib-2.0/gobject/gvaluearray.h \ - /usr/include/glib-2.0/gobject/gvaluetypes.h \ - /usr/include/gconf/2/gconf/gconf.h \ - /usr/include/gconf/2/gconf/gconf-schema.h \ - /usr/include/gconf/2/gconf/gconf-engine.h \ - /usr/include/gconf/2/gconf/gconf-error.h \ - /usr/include/gconf/2/gconf/gconf-enum-types.h \ - /usr/include/gconf/2/gconf/gconf-listeners.h \ - /usr/include/gconf/2/gconf/gconf-changeset.h - -/usr/include/glib-2.0/glib.h: - -/usr/include/glib-2.0/glib/galloca.h: - -/usr/include/glib-2.0/glib/gtypes.h: - -/usr/lib/glib-2.0/include/glibconfig.h: - -/usr/include/glib-2.0/glib/gmacros.h: - -/usr/include/glib-2.0/glib/garray.h: - -/usr/include/glib-2.0/glib/gasyncqueue.h: - -/usr/include/glib-2.0/glib/gthread.h: - -/usr/include/glib-2.0/glib/gerror.h: - -/usr/include/glib-2.0/glib/gquark.h: - -/usr/include/glib-2.0/glib/gatomic.h: - -/usr/include/glib-2.0/glib/gbacktrace.h: - -/usr/include/glib-2.0/glib/gbase64.h: - -/usr/include/glib-2.0/glib/gbookmarkfile.h: - -/usr/include/glib-2.0/glib/gcache.h: - -/usr/include/glib-2.0/glib/glist.h: - -/usr/include/glib-2.0/glib/gmem.h: - -/usr/include/glib-2.0/glib/gslice.h: - -/usr/include/glib-2.0/glib/gcompletion.h: - -/usr/include/glib-2.0/glib/gconvert.h: - -/usr/include/glib-2.0/glib/gdataset.h: - -/usr/include/glib-2.0/glib/gdate.h: - -/usr/include/glib-2.0/glib/gdir.h: - -/usr/include/glib-2.0/glib/gfileutils.h: - -/usr/include/glib-2.0/glib/ghash.h: - -/usr/include/glib-2.0/glib/ghook.h: - -/usr/include/glib-2.0/glib/giochannel.h: - -/usr/include/glib-2.0/glib/gmain.h: - -/usr/include/glib-2.0/glib/gslist.h: - -/usr/include/glib-2.0/glib/gstring.h: - -/usr/include/glib-2.0/glib/gunicode.h: - -/usr/include/glib-2.0/glib/gutils.h: - -/usr/include/glib-2.0/glib/gkeyfile.h: - -/usr/include/glib-2.0/glib/gmappedfile.h: - -/usr/include/glib-2.0/glib/gmarkup.h: - -/usr/include/glib-2.0/glib/gmessages.h: - -/usr/include/glib-2.0/glib/gnode.h: - -/usr/include/glib-2.0/glib/goption.h: - -/usr/include/glib-2.0/glib/gpattern.h: - -/usr/include/glib-2.0/glib/gprimes.h: - -/usr/include/glib-2.0/glib/gqsort.h: - -/usr/include/glib-2.0/glib/gqueue.h: - -/usr/include/glib-2.0/glib/grand.h: - -/usr/include/glib-2.0/glib/grel.h: - -/usr/include/glib-2.0/glib/gscanner.h: - -/usr/include/glib-2.0/glib/gshell.h: - -/usr/include/glib-2.0/glib/gspawn.h: - -/usr/include/glib-2.0/glib/gstrfuncs.h: - -/usr/include/glib-2.0/glib/gthreadpool.h: - -/usr/include/glib-2.0/glib/gtimer.h: - -/usr/include/glib-2.0/glib/gtree.h: - -/usr/include/gconf/2/gconf/gconf-value.h: - -/usr/include/gconf/2/gconf/gconf-error.h: - -/usr/include/gconf/2/gconf/gconf-client.h: - -/usr/include/glib-2.0/glib-object.h: - -/usr/include/glib-2.0/gobject/gboxed.h: - -/usr/include/glib-2.0/gobject/gtype.h: - -/usr/include/glib-2.0/gobject/genums.h: - -/usr/include/glib-2.0/gobject/gobject.h: - -/usr/include/glib-2.0/gobject/gvalue.h: - -/usr/include/glib-2.0/gobject/gparam.h: - -/usr/include/glib-2.0/gobject/gclosure.h: - -/usr/include/glib-2.0/gobject/gsignal.h: - -/usr/include/glib-2.0/gobject/gmarshal.h: - -/usr/include/glib-2.0/gobject/gparamspecs.h: - -/usr/include/glib-2.0/gobject/gsourceclosure.h: - -/usr/include/glib-2.0/gobject/gtypemodule.h: - -/usr/include/glib-2.0/gobject/gtypeplugin.h: - -/usr/include/glib-2.0/gobject/gvaluearray.h: - -/usr/include/glib-2.0/gobject/gvaluetypes.h: - -/usr/include/gconf/2/gconf/gconf.h: - -/usr/include/gconf/2/gconf/gconf-schema.h: - -/usr/include/gconf/2/gconf/gconf-engine.h: - -/usr/include/gconf/2/gconf/gconf-error.h: - -/usr/include/gconf/2/gconf/gconf-enum-types.h: - -/usr/include/gconf/2/gconf/gconf-listeners.h: - -/usr/include/gconf/2/gconf/gconf-changeset.h: diff --git a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/makefile b/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/makefile deleted file mode 100644 index a74fa321a..000000000 --- a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/makefile +++ /dev/null @@ -1,43 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - --include ../makefile.init - -RM := rm -rf - -# All of the sources participating in the build are defined here --include sources.mk --include subdir.mk --include objects.mk - -ifneq ($(MAKECMDGOALS),clean) -ifneq ($(strip $(C_DEPS)),) --include $(C_DEPS) -endif -endif - --include ../makefile.defs - -# Add inputs and outputs from these tool invocations to the build variables - -# All Target -all: libproxygnome.so - -# Tool invocations -libproxygnome.so: $(OBJS) $(USER_OBJS) - @echo 'Building target: $@' - @echo 'Invoking: GCC C Linker' - gcc -m32 -shared -o"libproxygnome.so" $(OBJS) $(USER_OBJS) $(LIBS) - @echo 'Finished building target: $@' - @echo ' ' - -# Other Targets -clean: - -$(RM) $(OBJS)$(C_DEPS)$(LIBRARIES) libproxygnome.so - -@echo ' ' - -.PHONY: all clean dependents -.SECONDARY: - --include ../makefile.targets diff --git a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/objects.mk b/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/objects.mk deleted file mode 100644 index a9828db0f..000000000 --- a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/objects.mk +++ /dev/null @@ -1,7 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - -USER_OBJS := - -LIBS := -lgconf-2 -lORBit-2 -lgthread-2.0 -lrt -lgobject-2.0 -lglib-2.0 diff --git a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/sources.mk b/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/sources.mk deleted file mode 100644 index 2b71575c4..000000000 --- a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/sources.mk +++ /dev/null @@ -1,17 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - -O_SRCS := -C_SRCS := -S_SRCS := -OBJ_SRCS := -ASM_SRCS := -OBJS := -C_DEPS := -LIBRARIES := - -# Every subdirectory with source files must be described here -SUBDIRS := \ -. \ - diff --git a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/subdir.mk b/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/subdir.mk deleted file mode 100644 index d4d2e6854..000000000 --- a/bundles/org.eclipse.core.net/natives/unix/GetProxyGnome/subdir.mk +++ /dev/null @@ -1,24 +0,0 @@ -################################################################################ -# Automatically-generated file. Do not edit! -################################################################################ - -# Add inputs and outputs from these tool invocations to the build variables -C_SRCS += \ -../getproxygnome.c - -OBJS += \ -./getproxygnome.o - -C_DEPS += \ -./getproxygnome.d - - -# Each subdirectory must supply rules for building sources it contributes -%.o: ../%.c - @echo 'Building file: $<' - @echo 'Invoking: GCC C Compiler' - gcc -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include/ -O0 -fPIC -g3 -Wall -c -fmessage-length=0 -m32 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<" - @echo 'Finished building: $<' - @echo ' ' - - diff --git a/bundles/org.eclipse.core.net/natives/unix/getproxygnome.c b/bundles/org.eclipse.core.net/natives/unix/getproxygnome.c deleted file mode 100644 index 1811952bf..000000000 --- a/bundles/org.eclipse.core.net/natives/unix/getproxygnome.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright 2008 Oakland Software Incorporated and others - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Oakland Software Incorporated - initial API and implementation - * IBM Corporation - enabling JNI calls for gconfInit method (bug 232495) - */ - -#include - -#include -#include -#include -#include - -#ifdef __linux__ -#include -#else -#include -#endif - -static GConfClient *client= NULL; - -static jclass proxyInfoClass; -static jclass stringClass; -static jmethodID proxyInfoConstructor; -static jmethodID toString; - -static jmethodID hostMethod; -static jmethodID portMethod; -static jmethodID userMethod; -static jmethodID passwordMethod; - -#define CHECK_NULL(X) { if ((X) == NULL) fprintf (stderr,"JNI error at line %d\n", __LINE__); } - -JNIEXPORT void JNICALL Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_gconfInit( - JNIEnv *env, jclass clazz) { - - client = gconf_client_get_default(); - jclass cls= NULL; - CHECK_NULL(cls = (*env)->FindClass(env, "org/eclipse/core/internal/net/ProxyData")); - proxyInfoClass = (*env)->NewGlobalRef(env, cls); - - CHECK_NULL(cls = (*env)->FindClass(env, "java/lang/String")); - stringClass = (*env)->NewGlobalRef(env, cls); - - CHECK_NULL(proxyInfoConstructor = (*env)->GetMethodID(env, proxyInfoClass, "", "(Ljava/lang/String;)V")); - - CHECK_NULL(toString = (*env)->GetMethodID(env, proxyInfoClass, "toString", "()Ljava/lang/String;")); - - CHECK_NULL(hostMethod = (*env)->GetMethodID(env, proxyInfoClass, "setHost", - "(Ljava/lang/String;)V")); - CHECK_NULL(portMethod = (*env)->GetMethodID(env, proxyInfoClass, "setPort", - "(I)V")); - CHECK_NULL(userMethod = (*env)->GetMethodID(env, proxyInfoClass, "setUserid", - "(Ljava/lang/String;)V")); - CHECK_NULL(passwordMethod = (*env)->GetMethodID(env, proxyInfoClass, "setPassword", - "(Ljava/lang/String;)V")); -} - -/* - * Class: org_eclipse_core_internal_net_UnixProxyProvider - * Method: getGConfProxyInfo - * Signature: ([Ljava/lang/String); - */ -JNIEXPORT jobject JNICALL Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_getGConfProxyInfo( - JNIEnv *env, jclass clazz, jstring protocol) { - - jboolean isCopy; - const char *cprotocol; - - jobject proxyInfo= NULL; - - if (client == NULL) { - Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_gconfInit(env, clazz); - } - - CHECK_NULL(proxyInfo = (*env)->NewObject(env, proxyInfoClass, proxyInfoConstructor, protocol)); - - cprotocol = (*env)->GetStringUTFChars(env, protocol, &isCopy); - if (cprotocol == NULL) - return NULL; - - //printf("cprotocol: %s\n", cprotocol); - - // use_same_proxy means we use the http value for everything - gboolean useSame = gconf_client_get_bool(client, - "/system/http_proxy/use_same_proxy", NULL); - - if (strcasecmp(cprotocol, "http") == 0 || useSame) { - gboolean useProxy = gconf_client_get_bool(client, - "/system/http_proxy/use_http_proxy", NULL); - if (!useProxy) { - proxyInfo = NULL; - goto exit; - } - - gchar *host = gconf_client_get_string(client, - "/system/http_proxy/host", NULL); - jobject jhost = (*env)->NewStringUTF(env, host); - (*env)->CallVoidMethod(env, proxyInfo, hostMethod, jhost); - - gint port = gconf_client_get_int(client, "/system/http_proxy/port", - NULL); - (*env)->CallVoidMethod(env, proxyInfo, portMethod, port); - - gboolean reqAuth = gconf_client_get_bool(client, - "/system/http_proxy/use_authentication", NULL); - if (reqAuth) { - - gchar *user = gconf_client_get_string(client, - "/system/http_proxy/authentication_user", NULL); - jobject juser = (*env)->NewStringUTF(env, user); - (*env)->CallVoidMethod(env, proxyInfo, userMethod, juser); - - gchar *password = gconf_client_get_string(client, - "/system/http_proxy/authentication_password", NULL); - jobject jpassword = (*env)->NewStringUTF(env, password); - (*env)->CallVoidMethod(env, proxyInfo, passwordMethod, - jpassword); - } - goto exit; - } - - // Everything else applies only if the system proxy mode is manual - gchar *mode = gconf_client_get_string(client, "/system/proxy/mode", NULL); - if (strcasecmp(mode, "manual") != 0) { - proxyInfo = NULL; - goto exit; - } - - char selector[100]; - - if (strcasecmp(cprotocol, "https") == 0) { - strcpy(selector, "/system/proxy/secure_"); - } else if (strcasecmp(cprotocol, "socks") == 0) { - strcpy(selector, "/system/proxy/socks_"); - } else if (strcasecmp(cprotocol, "ftp") == 0) { - strcpy(selector, "/system/proxy/ftp_"); - } else { - proxyInfo = NULL; - goto exit; - } - - char useSelector[100]; - strcpy(useSelector, selector); - - gchar *host = gconf_client_get_string(client, strcat(useSelector, "host"), - NULL); - jobject jhost = (*env)->NewStringUTF(env, host); - (*env)->CallVoidMethod(env, proxyInfo, hostMethod, jhost); - - strcpy(useSelector, selector); - gint port = gconf_client_get_int(client, strcat(useSelector, "port"), NULL); - (*env)->CallVoidMethod(env, proxyInfo, portMethod, port); - - exit: if (isCopy == JNI_TRUE) - (*env)->ReleaseStringUTFChars(env, protocol, cprotocol); - return proxyInfo; -} - -typedef struct { - jobjectArray npHostArray; - JNIEnv *env; - int index; -} ListProcContext; - -// user_data is the ListProcContext -void listProc(gpointer data, gpointer user_data) { - ListProcContext *lpc = user_data; - jobject jnpHost = (*lpc->env)->NewStringUTF(lpc->env, (char *)data); - (*lpc->env)->SetObjectArrayElement(lpc->env, lpc->npHostArray, - lpc->index++, jnpHost); -} - -/* - * Class: org_eclipse_core_internal_net_UnixProxyProvider - * Method: getGConfNonProxyHosts - * Signature: ()[Ljava/lang/String; - */ -JNIEXPORT jobjectArray JNICALL Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_getGConfNonProxyHosts( - JNIEnv *env, jclass clazz) { - - if (client == NULL) { - Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_gconfInit(env, clazz); - } - - GSList *npHosts; - int size; - - npHosts = gconf_client_get_list(client, "/system/http_proxy/ignore_hosts", - GCONF_VALUE_STRING, NULL); - size = g_slist_length(npHosts); - - // TODO - I'm not sure this is really valid, it's from the JVM implementation - // of ProxySelector - if (size == 0) { - npHosts = gconf_client_get_list(client, "/system/proxy/no_proxy_for", - GCONF_VALUE_STRING, NULL); - } - size = g_slist_length(npHosts); - - jobjectArray ret = (*env)->NewObjectArray(env, size, stringClass, NULL); - - ListProcContext lpc; - lpc.env = env; - lpc.npHostArray = ret; - lpc.index = 0; - - g_slist_foreach(npHosts, listProc, &lpc); - return ret; -} - diff --git a/bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c b/bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c new file mode 100644 index 000000000..1811952bf --- /dev/null +++ b/bundles/org.eclipse.core.net/natives/unix/gnomeproxy.c @@ -0,0 +1,217 @@ +/* + * Copyright 2008 Oakland Software Incorporated and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Oakland Software Incorporated - initial API and implementation + * IBM Corporation - enabling JNI calls for gconfInit method (bug 232495) + */ + +#include + +#include +#include +#include +#include + +#ifdef __linux__ +#include +#else +#include +#endif + +static GConfClient *client= NULL; + +static jclass proxyInfoClass; +static jclass stringClass; +static jmethodID proxyInfoConstructor; +static jmethodID toString; + +static jmethodID hostMethod; +static jmethodID portMethod; +static jmethodID userMethod; +static jmethodID passwordMethod; + +#define CHECK_NULL(X) { if ((X) == NULL) fprintf (stderr,"JNI error at line %d\n", __LINE__); } + +JNIEXPORT void JNICALL Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_gconfInit( + JNIEnv *env, jclass clazz) { + + client = gconf_client_get_default(); + jclass cls= NULL; + CHECK_NULL(cls = (*env)->FindClass(env, "org/eclipse/core/internal/net/ProxyData")); + proxyInfoClass = (*env)->NewGlobalRef(env, cls); + + CHECK_NULL(cls = (*env)->FindClass(env, "java/lang/String")); + stringClass = (*env)->NewGlobalRef(env, cls); + + CHECK_NULL(proxyInfoConstructor = (*env)->GetMethodID(env, proxyInfoClass, "", "(Ljava/lang/String;)V")); + + CHECK_NULL(toString = (*env)->GetMethodID(env, proxyInfoClass, "toString", "()Ljava/lang/String;")); + + CHECK_NULL(hostMethod = (*env)->GetMethodID(env, proxyInfoClass, "setHost", + "(Ljava/lang/String;)V")); + CHECK_NULL(portMethod = (*env)->GetMethodID(env, proxyInfoClass, "setPort", + "(I)V")); + CHECK_NULL(userMethod = (*env)->GetMethodID(env, proxyInfoClass, "setUserid", + "(Ljava/lang/String;)V")); + CHECK_NULL(passwordMethod = (*env)->GetMethodID(env, proxyInfoClass, "setPassword", + "(Ljava/lang/String;)V")); +} + +/* + * Class: org_eclipse_core_internal_net_UnixProxyProvider + * Method: getGConfProxyInfo + * Signature: ([Ljava/lang/String); + */ +JNIEXPORT jobject JNICALL Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_getGConfProxyInfo( + JNIEnv *env, jclass clazz, jstring protocol) { + + jboolean isCopy; + const char *cprotocol; + + jobject proxyInfo= NULL; + + if (client == NULL) { + Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_gconfInit(env, clazz); + } + + CHECK_NULL(proxyInfo = (*env)->NewObject(env, proxyInfoClass, proxyInfoConstructor, protocol)); + + cprotocol = (*env)->GetStringUTFChars(env, protocol, &isCopy); + if (cprotocol == NULL) + return NULL; + + //printf("cprotocol: %s\n", cprotocol); + + // use_same_proxy means we use the http value for everything + gboolean useSame = gconf_client_get_bool(client, + "/system/http_proxy/use_same_proxy", NULL); + + if (strcasecmp(cprotocol, "http") == 0 || useSame) { + gboolean useProxy = gconf_client_get_bool(client, + "/system/http_proxy/use_http_proxy", NULL); + if (!useProxy) { + proxyInfo = NULL; + goto exit; + } + + gchar *host = gconf_client_get_string(client, + "/system/http_proxy/host", NULL); + jobject jhost = (*env)->NewStringUTF(env, host); + (*env)->CallVoidMethod(env, proxyInfo, hostMethod, jhost); + + gint port = gconf_client_get_int(client, "/system/http_proxy/port", + NULL); + (*env)->CallVoidMethod(env, proxyInfo, portMethod, port); + + gboolean reqAuth = gconf_client_get_bool(client, + "/system/http_proxy/use_authentication", NULL); + if (reqAuth) { + + gchar *user = gconf_client_get_string(client, + "/system/http_proxy/authentication_user", NULL); + jobject juser = (*env)->NewStringUTF(env, user); + (*env)->CallVoidMethod(env, proxyInfo, userMethod, juser); + + gchar *password = gconf_client_get_string(client, + "/system/http_proxy/authentication_password", NULL); + jobject jpassword = (*env)->NewStringUTF(env, password); + (*env)->CallVoidMethod(env, proxyInfo, passwordMethod, + jpassword); + } + goto exit; + } + + // Everything else applies only if the system proxy mode is manual + gchar *mode = gconf_client_get_string(client, "/system/proxy/mode", NULL); + if (strcasecmp(mode, "manual") != 0) { + proxyInfo = NULL; + goto exit; + } + + char selector[100]; + + if (strcasecmp(cprotocol, "https") == 0) { + strcpy(selector, "/system/proxy/secure_"); + } else if (strcasecmp(cprotocol, "socks") == 0) { + strcpy(selector, "/system/proxy/socks_"); + } else if (strcasecmp(cprotocol, "ftp") == 0) { + strcpy(selector, "/system/proxy/ftp_"); + } else { + proxyInfo = NULL; + goto exit; + } + + char useSelector[100]; + strcpy(useSelector, selector); + + gchar *host = gconf_client_get_string(client, strcat(useSelector, "host"), + NULL); + jobject jhost = (*env)->NewStringUTF(env, host); + (*env)->CallVoidMethod(env, proxyInfo, hostMethod, jhost); + + strcpy(useSelector, selector); + gint port = gconf_client_get_int(client, strcat(useSelector, "port"), NULL); + (*env)->CallVoidMethod(env, proxyInfo, portMethod, port); + + exit: if (isCopy == JNI_TRUE) + (*env)->ReleaseStringUTFChars(env, protocol, cprotocol); + return proxyInfo; +} + +typedef struct { + jobjectArray npHostArray; + JNIEnv *env; + int index; +} ListProcContext; + +// user_data is the ListProcContext +void listProc(gpointer data, gpointer user_data) { + ListProcContext *lpc = user_data; + jobject jnpHost = (*lpc->env)->NewStringUTF(lpc->env, (char *)data); + (*lpc->env)->SetObjectArrayElement(lpc->env, lpc->npHostArray, + lpc->index++, jnpHost); +} + +/* + * Class: org_eclipse_core_internal_net_UnixProxyProvider + * Method: getGConfNonProxyHosts + * Signature: ()[Ljava/lang/String; + */ +JNIEXPORT jobjectArray JNICALL Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_getGConfNonProxyHosts( + JNIEnv *env, jclass clazz) { + + if (client == NULL) { + Java_org_eclipse_core_internal_net_proxy_unix_UnixProxyProvider_gconfInit(env, clazz); + } + + GSList *npHosts; + int size; + + npHosts = gconf_client_get_list(client, "/system/http_proxy/ignore_hosts", + GCONF_VALUE_STRING, NULL); + size = g_slist_length(npHosts); + + // TODO - I'm not sure this is really valid, it's from the JVM implementation + // of ProxySelector + if (size == 0) { + npHosts = gconf_client_get_list(client, "/system/proxy/no_proxy_for", + GCONF_VALUE_STRING, NULL); + } + size = g_slist_length(npHosts); + + jobjectArray ret = (*env)->NewObjectArray(env, size, stringClass, NULL); + + ListProcContext lpc; + lpc.env = env; + lpc.npHostArray = ret; + lpc.index = 0; + + g_slist_foreach(npHosts, listProc, &lpc); + return ret; +} + diff --git a/bundles/org.eclipse.core.net/natives/unix/linux/makefile b/bundles/org.eclipse.core.net/natives/unix/linux/makefile new file mode 100644 index 000000000..daab01dff --- /dev/null +++ b/bundles/org.eclipse.core.net/natives/unix/linux/makefile @@ -0,0 +1,45 @@ +#********************************************************************** +# Copyright (c) 2008 Oakland Software Incorporated and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Oakland Software Incorporated - initial submission +# IBM Corporation - refactoring, bug 245849 +# +#********************************************************************** +# +# makefile for libgnomeproxy-1.0.0.so + +GNOMEPROXY.C = ../gnomeproxy.c +GNOMEPROXY.O = gnomeproxy.o +LIB_NAME = gnomeproxy.so +LIB_NAME_FULL = libgnomeproxy-1.0.0.so + +INCLUDE = -I/usr/include/gconf/2/ -I/usr/include/orbit-2.0/ -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include/ +COMPILER_FLAGS= -O0 -fPIC -g3 -Wall -c -fmessage-length=0 -m32 + +LIBS := -lgconf-2 -lORBit-2 -lgthread-2.0 -lrt -lgobject-2.0 -lglib-2.0 +LINKER_FLAGS= -m32 + +all: link + +compile: + @echo "Building file: $(GNOMEPROXY.O)" + @echo "Invoking: GCC C Compiler" + gcc $(INCLUDE) $(COMPILER_FLAGS) -o $(GNOMEPROXY.O) $(GNOMEPROXY.C) + @echo "Finished building: $(GNOMEPROXY.O)" + @echo " " + +link: compile + @echo "Building target: $(LIB_NAME_FULL)" + @echo "Invoking: GCC C Linker" + gcc $(LINKER_FLAGS) -shared -Wl,-soname,$(LIB_NAME) -o $(LIB_NAME_FULL) $(LIBS) $(GNOMEPROXY.O) -lc + @echo "Finished building target: $(LIB_NAME_FULL)" + @echo " " + +clean: + -$(RM) $(GNOMEPROXY.O) $(LIB_NAME_FULL) + -@echo " " diff --git a/bundles/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java b/bundles/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java index f4af5bb9b..c2f2389e8 100644 --- a/bundles/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java +++ b/bundles/org.eclipse.core.net/src/org/eclipse/core/internal/net/proxy/unix/UnixProxyProvider.java @@ -26,7 +26,7 @@ public class UnixProxyProvider extends AbstractProxyProvider { private static final String LIBRARY_GCONF2 = "gconf-2"; //$NON-NLS-1$ - private static final String LIBRARY_NAME = "proxygnome"; //$NON-NLS-1$ + private static final String LIBRARY_NAME = "gnomeproxy-1.0.0"; //$NON-NLS-1$ private static boolean isGnomeLibLoaded = false; -- cgit v1.2.3