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 >