Trust me, I tried to load the shared libraries as well, but failed. Statically linking was the only way to ensure my application uses the latest OpenSSL regardless of Android version(though my ABI is set to API level 8).
On Sat, Sep 15, 2012 at 1:18 PM, Indtiny s <indt...@gmail.com> wrote: > Hi, > > Actually in my java application I will load all three shared libries > (ssl,crypto and curl) ... Hence Iam trying build all libs as shared . > > I tried to debug it as per your input , now I am getting the response as 1 i > .e CURLE_UNSUPPORTED_PROTOCOL (1) when I tried to execute the https . > > > > I think still the openssl is not included properly ..!! > > > > I dunno where I have gone wrong . > > > > Rgds > > Indu > > > > > On Sat, Sep 15, 2012 at 1:04 AM, farmdve data.bg <farm...@data.bg> wrote: >> >> Try using LogCat by connecting an Android device via USB, or launching >> an emulator and opening a new Command Prompt for Windows or Terminal >> instance in linux and type adb logcat. >> Then launch the app and look at the output. >> >> You see, Android ships with OpenSSL, but the version is usually quite >> old. You need to compile OpenSSL 1.0.1c as static and link statically >> to use the new library. >> >> On Fri, Sep 14, 2012 at 9:14 PM, Indtiny s <indt...@gmail.com> wrote: >> > Hi, >> > I have just ran ndk-build for the code >> > https://github.com/aluvalassuman/OpenSSL1.0.1cForAndroid and it >> > generated >> > the two shared libraries in libs/ floder which I required , libcrypto.so >> > and >> > libssl.so( as build say these are shared libarray) I just included them >> > in >> > the curl code as prebuilt shared library(edited now to shared in the >> > android >> > make) , then Since I need to include the curl with openssl in my java >> > code >> > I want to build curl as shared library only .. I just changed my >> > android >> > curl make to shared .. >> > And sorry it was System.loadLibrary("curltest"); only .. but still I'm >> > not >> > getting the any response from the curl ...? am I following the correct >> > way >> > to use the openssl , becoz when I test the curl alone I get the proper >> > http >> > page requested ... ! >> > >> > Rgds >> > Indu >> > >> > >> > On Fri, Sep 14, 2012 at 1:54 PM, farmdve data.bg <farm...@data.bg> >> > wrote: >> >> >> >> It's not clear if you built libcurl as a static library to begin with. >> >> And not clear if you built OpenSSL as a static or shared library. >> >> >> >> And you must load curltest(as that is the name of the module) not curl. >> >> >> >> On Fri, Sep 14, 2012 at 8:28 PM, Indtiny s <indt...@gmail.com> wrote: >> >> > >> >> > >> >> > >> >> > Hi, >> >> > >> >> > yes I'm able to built the openssl1.0.1c version for android and got >> >> > the >> >> > shared libraries . >> >> > >> >> > Now I want to use the same with curl , first I built simple curl >> >> > application >> >> > and tested and it worked now I tried to include the openssl . >> >> > below is the android.mk file which I have written to include openssl >> >> > libraries for the curl code . >> >> > >> >> > >> >> > LOCAL_PATH:= $(call my-dir) >> >> > >> >> > CFLAGS := -Wpointer-arith -Wwrite-strings -Wunused -Winline \ >> >> > -Wnested-externs -Wmissing-declarations -Wmissing-prototypes >> >> > -Wno-long-long >> >> > \ >> >> > -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral \ >> >> > -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement \ >> >> > -Wno-system-headers -DHAVE_CONFIG_H >> >> > >> >> > include $(CLEAR_VARS) >> >> > >> >> > ## Crypto lib >> >> > include $(CLEAR_VARS) >> >> > LOCAL_MODULE := xcryptox >> >> > LOCAL_SRC_FILES := openssl/lib/libcrypto.so >> >> > LOCAL_C_INCLUDES := $(LOCAL_PATH)/openssl/includes/openssl >> >> > include $(PREBUILT_SHARED_LIBRARY) >> >> > # >> >> > ### SSL lib >> >> > include $(CLEAR_VARS) >> >> > LOCAL_MODULE := xsslx >> >> > LOCAL_SRC_FILES := openssl/libssl/lib/libssl.so >> >> > LOCAL_C_INCLUDES := $(LOCAL_PATH)/openssl/includes/openssl >> >> > include $(PREBUILT_SHARED_LIBRARY) >> >> > >> >> > include $(LOCAL_PATH)/curl/lib/Makefile.inc . >> >> > >> >> > LOCAL_SRC_FILES := $(addprefix curl/lib/,$(CSOURCES)) >> >> > LOCAL_CFLAGS += $(CFLAGS) >> >> > LOCAL_C_INCLUDES += $(LOCAL_PATH)/curl/include/ >> >> > >> >> > LOCAL_COPY_HEADERS_TO := libcurl >> >> > LOCAL_COPY_HEADERS := $(addprefix curl/include/curl/,$(HHEADERS)) >> >> > >> >> > LOCAL_MODULE:= libcurl >> >> > >> >> > include $(BUILD_STATIC_LIBRARY) >> >> > >> >> > # Build shared library now >> >> > # curltest >> >> > >> >> > include $(CLEAR_VARS) >> >> > >> >> > LOCAL_MODULE := curltest >> >> > LOCAL_SRC_FILES := curltest.c >> >> > LOCAL_STATIC_LIBRARIES := libcurl >> >> > LOCAL_C_INCLUDES += $(LOCAL_PATH)/curl/include >> >> > include $(BUILD_SHARED_LIBRARY) >> >> > >> >> > And below is my C curtest code with ssl include . >> >> > >> >> > >> >> > >> >> > #include <string.h> >> >> > #include <jni.h> >> >> > #include <stdio.h> >> >> > #include <stdlib.h> >> >> > #include "curl_config.h" >> >> > #include "curl/curl.h" >> >> > >> >> > typedef struct pageInfo_t { >> >> > char *data; >> >> > int len; >> >> > } pageInfo_t; >> >> > >> >> > static size_t >> >> > HTTPData(void *buffer, size_t size, size_t nmemb, void *userData) { >> >> > int len = size * nmemb; >> >> > pageInfo_t *page = (pageInfo_t *)userData; >> >> > >> >> > >> >> > if (buffer && page->data && (page->len + len < (16 * 1024)) ) { >> >> > memcpy(&page->data[page->len], buffer, len); >> >> > page->len += len; >> >> > } >> >> > return len; >> >> > } >> >> > >> >> > //Inteface funciton that will recieve web page fom Java >> >> > jstring >> >> > Java_com_mtterra_curltest_curltest_JNIGetWebpage( JNIEnv* env, >> >> > jobject entryObject, >> >> > jstring webpageJStr ) >> >> > { >> >> > pageInfo_t page; >> >> > CURL *curl; >> >> > CURLcode res; >> >> > char *buffer; >> >> > >> >> > static const char *pCertFile = >> >> > "/sdcared/indu/openssl/testcert.pem"; >> >> > static const char *pCACertFile="/sdcared/indu/openssl/cacert.pem"; >> >> > >> >> > const char *pKeyName; >> >> > const char *pKeyType; >> >> > >> >> > const char *pEngine; >> >> > const jbyte *webpage; >> >> > pKeyName = "/sdcared/indu/openssl/testkey.pem"; >> >> > pKeyType = "PEM"; >> >> > pEngine = NULL; >> >> > webpage = (*env)->GetStringUTFChars(env, webpageJStr, NULL); >> >> > if (webpage == NULL) { >> >> > return NULL; /* OutOfMemoryError already thrown */ >> >> > } >> >> > >> >> > page.data = (char *)malloc(16 * 1024); >> >> > page.len = 0; >> >> > if (page.data) >> >> > memset(page.data, 32, 16 * 1024); >> >> > >> >> > buffer = (char *)malloc(1024); >> >> > >> >> > curl = curl_easy_init(); >> >> > if(curl) { >> >> > curl_easy_setopt(curl, CURLOPT_URL, webpage); >> >> > curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPData); >> >> > curl_easy_setopt(curl, CURLOPT_WRITEDATA, &page); >> >> > >> >> > /* since PEM is default, we needn't set it for PEM */ >> >> > curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM"); >> >> > >> >> > /* set the cert for client authentication */ >> >> > curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile); >> >> > >> >> > /* if we use a key stored in a crypto engine, >> >> > we must set the key type to "ENG" */ >> >> > curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,pKeyType); >> >> > >> >> > /* set the private key (file or ID in engine) */ >> >> > curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName); >> >> > >> >> > /* set the file with the certs vaildating the server */ >> >> > curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile); >> >> > >> >> > /* disconnect if we can't validate server's cert */ >> >> > curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L); >> >> > >> >> > >> >> > res = curl_easy_perform(curl); >> >> > /* always cleanup */ >> >> > curl_easy_cleanup(curl); >> >> > (*env)->ReleaseStringUTFChars(env, webpageJStr, webpage); >> >> > if(res == 0) { >> >> > if (buffer) { >> >> > page.data[page.len < 256 ? page.len : 256] = '\0'; >> >> > sprintf(buffer, "pagedata(%d): %s. done.\n", page.len, page.data); >> >> > return (*env)->NewStringUTF(env, buffer); >> >> > } >> >> > } >> >> > sprintf(buffer, "Result %d", res); >> >> > return (*env)->NewStringUTF(env, buffer); >> >> > } else { >> >> > return (*env)->NewStringUTF(env, "Unable to init cURL"); >> >> > } >> >> > } >> >> > >> >> > >> >> > I tried to run this but I get the response as just Result at the my >> >> > java >> >> > application code .. is the above method is the proper way to >> >> > include >> >> > the >> >> > openssl in android..? >> >> > in my java code I'm just loading System.loadLibrary("curl"); >> >> > >> >> > Rgds >> >> > Indu >> >> ______________________________________________________________________ >> >> OpenSSL Project http://www.openssl.org >> >> User Support Mailing List openssl-users@openssl.org >> >> Automated List Manager majord...@openssl.org >> > >> > >> ______________________________________________________________________ >> OpenSSL Project http://www.openssl.org >> User Support Mailing List openssl-users@openssl.org >> Automated List Manager majord...@openssl.org > > ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majord...@openssl.org