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
>

Reply via email to