diff --git a/mbtk/mbtk_lib/src/mbtk_sock2.c b/mbtk/mbtk_lib/src/mbtk_sock2.c
index bb1ddb8..0e65992 100755
--- a/mbtk/mbtk_lib/src/mbtk_sock2.c
+++ b/mbtk/mbtk_lib/src/mbtk_sock2.c
@@ -10,6 +10,8 @@
 #include <sys/time.h>
 #include <fcntl.h>
 #include <netdb.h>
+
+#ifdef MBTK_POLARSSL_SUPPORT
 #include <polarssl/net.h>
 #include <polarssl/ssl.h>
 #include <polarssl/entropy.h>
@@ -19,6 +21,9 @@
 #include <polarssl/error.h>
 #include <polarssl/debug.h>
 #include <polarssl/config.h>
+#else
+
+#endif
 #include <sys/ioctl.h>
 
 #ifdef LOG_TAG
@@ -272,7 +277,8 @@
     return handle;
 }
 
-static int mbtk_ssl_init(int fd ,bool ingnore_cert,mbtk_sock_inter_info_s* inter_info)
+#ifdef MBTK_POLARSSL_SUPPORT
+static int mbtk_polarssl_open(int fd ,bool ingnore_cert,mbtk_sock_inter_info_s* inter_info)
 {
     LOGE("8\n");
     int ret = 0, len, tail_len, i, written, frags;
@@ -477,7 +483,7 @@
     return 0;
 }
 
-int mbtk_ssl_close(mbtk_sock_inter_info_s *inter_info)
+static int mbtk_polarssl_close(mbtk_sock_inter_info_s *inter_info)
 {
     if (inter_info == NULL)
     {
@@ -512,6 +518,24 @@
     return 0;
 }
 
+static int mbtk_polarssl_write( ssl_context *ssl, const unsigned char *buf, size_t len )
+{
+    return ssl_write(ssl, buf, len);
+}
+
+static int mbtk_polarssl_read( ssl_context *ssl, unsigned char *buf, size_t len )
+{
+    return ssl_read(ssl, buf, len);
+}
+
+#else
+
+
+
+
+
+#endif
+
 extern mbtk_sock_session mbtk_sock_open(mbtk_sock_handle handle,mbtk_sock_info *info,
                 unsigned int timeout,
                 int *mbtk_errno)
@@ -703,11 +727,14 @@
     }
 #endif
     if(info->is_support_ssl){
-        if(mbtk_ssl_init(mbtk_sock[handle]->inter_infos[index_free].fd,info->ingnore_cert,&mbtk_sock[handle]->inter_infos[index_free]) == -1){
+#ifdef MBTK_POLARSSL_SUPPORT
+        if(mbtk_polarssl_open(mbtk_sock[handle]->inter_infos[index_free].fd,info->ingnore_cert,&mbtk_sock[handle]->inter_infos[index_free]) == -1){
             LOGE("mbtk_openssl_init fail");
             goto result_fail_with_close;
         }
+#else
 
+#endif
     }
 
     *mbtk_errno = MBTK_SOCK_SUCCESS;
@@ -736,7 +763,11 @@
             break;
         }
     }
-    return mbtk_ssl_init(mbtk_sock[handle]->inter_infos[index_free].fd,ingnore_cert,&mbtk_sock[handle]->inter_infos[index_free]);
+#ifdef MBTK_POLARSSL_SUPPORT
+    return mbtk_polarssl_open(mbtk_sock[handle]->inter_infos[index_free].fd,ingnore_cert,&mbtk_sock[handle]->inter_infos[index_free]);
+#else
+    return 0;
+#endif
 }
 extern int mbtk_ssl_close_func(mbtk_sock_handle handle ,bool ingnore_cert,mbtk_sock_session fd)
 {
@@ -751,9 +782,14 @@
             break;
         }
     }
+
+#ifdef MBTK_POLARSSL_SUPPORT
     if(mbtk_sock[handle]->inter_infos[index_free].ssl!=NULL);
         printf("\nmbtk_sock[handle]->inter_infos[index_free].ssl not empty\n");
-    return mbtk_ssl_close(&mbtk_sock[handle]->inter_infos[index_free]);
+    return mbtk_polarssl_close(&mbtk_sock[handle]->inter_infos[index_free]);
+#else
+    return 0;
+#endif
 }
 
 extern int mbtk_sock_write(mbtk_sock_handle handle,mbtk_sock_session session,
@@ -800,9 +836,13 @@
     unsigned int count = 0;
     if(mbtk_sock[handle]->infos[index].type == MBTK_SOCK_TCP) {
         while(count < buf_len){
-            if(mbtk_sock[handle]->infos[index].is_support_ssl)
-                len = ssl_write(inter_info->ssl,(char*)buffer + count,buf_len - count);
-            else
+            if(mbtk_sock[handle]->infos[index].is_support_ssl) {
+#ifdef MBTK_POLARSSL_SUPPORT
+                len = mbtk_polarssl_write(inter_info->ssl,(char*)buffer + count,buf_len - count);
+#else
+
+#endif
+            } else
                 len = write(inter_info->fd,(char*)buffer + count,buf_len - count);
             if(len < 0){
                 if(errno == EWOULDBLOCK){
@@ -904,9 +944,13 @@
         memset(buffer,0x0,buf_len);
         while(count < buf_len){
             try_count++;
-            if(mbtk_sock[handle]->infos[index].is_support_ssl)
-                len = ssl_read(inter_info->ssl,(char*)buffer + count,buf_len - count);
-            else
+            if(mbtk_sock[handle]->infos[index].is_support_ssl) {
+#ifdef MBTK_POLARSSL_SUPPORT
+                len = mbtk_polarssl_read(inter_info->ssl,(char*)buffer + count,buf_len - count);
+#else
+
+#endif
+            } else
                 len = read(inter_info->fd,(char*)buffer + count,buf_len - count);
             if(len < 0){
                 if(errno == EWOULDBLOCK){
@@ -1075,11 +1119,13 @@
             memset(buffer,0x0,buf_len);
             while(count < buf_len){
                 try_count++;
-                if( inter_info->ssl == NULL)
-                    printf("\ninter_info->ssl == NULL\n");
-                if(mbtk_sock[handle]->infos[index].is_support_ssl)
-                    len = ssl_read(inter_info->ssl,(char*)buffer + count,buf_len - count);
-                else
+                if(mbtk_sock[handle]->infos[index].is_support_ssl) {
+#ifdef MBTK_POLARSSL_SUPPORT
+                    len = mbtk_polarssl_read(inter_info->ssl,(char*)buffer + count,buf_len - count);
+#else
+
+#endif
+                } else
                     len = read(inter_info->fd,(char*)buffer + count,buf_len - count);
                 *read_line_count = len;
                 if(len < 0){
@@ -1249,9 +1295,13 @@
     if(mbtk_sock[handle]->infos[index].type == MBTK_SOCK_TCP) {
         memset(buffer,0x0,buf_len);
         while(read_count < buf_len) {
-            if(mbtk_sock[handle]->infos[index].is_support_ssl)
+            if(mbtk_sock[handle]->infos[index].is_support_ssl) {
+#ifdef MBTK_POLARSSL_SUPPORT
                 len = ssl_read(inter_info->ssl,(char*)buffer + read_count,buf_len - read_count);
-            else
+#else
+
+#endif
+            } else
                 len = read(inter_info->fd,(char*)buffer  + read_count,buf_len - read_count);
 
             if(len > 0) {
@@ -1335,9 +1385,13 @@
     if(mbtk_sock[handle]->infos[index].type == MBTK_SOCK_TCP) {
 TCP_READ_AGAIN:
         memset(buffer,0x0,buf_len);
-        if(mbtk_sock[handle]->infos[index].is_support_ssl)
+        if(mbtk_sock[handle]->infos[index].is_support_ssl) {
+#ifdef MBTK_POLARSSL_SUPPORT
             len = ssl_read(inter_info->ssl,(char*)buffer,buf_len);
-        else
+#else
+
+#endif
+        } else
             len = read(inter_info->fd,(char*)buffer,buf_len);
         if(len < 0){
             if(errno == EWOULDBLOCK){
@@ -1430,11 +1484,15 @@
     }
 
     if(mbtk_sock[handle]->infos[index].is_support_ssl){
-        if(mbtk_ssl_close(inter_info)== -1)
+#ifdef MBTK_POLARSSL_SUPPORT
+        if(mbtk_polarssl_close(inter_info)== -1)
         {
             LOGE("close ssl fail");
             return -1;
         }
+#else
+
+#endif
     }
 
     *mbtk_errno = MBTK_SOCK_SUCCESS;
