Hi,

            I have used the curl options properly. And I can able to get
application data continuously from specific server if I do following
modification in s3_pkt.c file. Please refer if condition from s3_lib.c file.
This -1 is returning from s3_pkt.c file(SSL_MODE_AUTO_RETRY). It is
returning -1 while receiving handshake data instead of application data.
Whether we need to set s->s3->in_read_app_data=2  in the second module.
Please let me know whether it will create any problem or not.

 

Module 1:

static int ssl3_read_internal(SSL *s, void *buf, int len, int peek)

            {

            int ret;   

            clear_sys_error();

            if (s->s3->renegotiate) ssl3_renegotiate_check(s);

            //s->s3->in_read_app_data=1;

 
ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);   

            if ((ret == -1) && (s->s3->in_read_app_data == 2))
//Original

                        {

                        /* ssl3_read_bytes decided to call
s->handshake_func, which

                         * called ssl3_read_bytes to read handshake data.

                         * However, ssl3_read_bytes actually found
application data

                         * and thinks that application data makes sense
here; so disable

                         * handshake processing and try to read application
data again. */

                        s->in_handshake++;

 
ret=s->method->ssl_read_bytes(s,SSL3_RT_APPLICATION_DATA,buf,len,peek);

                        s->in_handshake--;

                        }

                        .           

                        .

                        .

                        Etc

}

 

Module 2:

if (!(s->mode & SSL_MODE_AUTO_RETRY))

            {

            if (s->s3->rbuf.left == 0) /* no read-ahead left? */

                        {

                        BIO *bio;

                        /* In the case where we try to read application
data,

                         * but we trigger an SSL handshake, we return -1
with

                         * the retry option set.  Otherwise renegotiation
may

                         * cause nasty problems in the blocking world */

                        s->rwstate=SSL_READING;

                        bio=SSL_get_rbio(s);

                        BIO_clear_retry_flags(bio);

                        BIO_set_retry_read(bio);

                        s->s3->in_read_app_data=2;                   //
Added statement

                        return(-1);

                        }

            }

 

                                                

 

Reply via email to