http accsess

Dependencies:   CyaSSL EthernetInterface mbed-rtos mbed

Fork of SimpleTCPClient by wolf SSL

main.cpp

Committer:
wolfSSL
Date:
2014-05-25
Revision:
0:0c584b87ea42
Child:
1:ac91b4f8d818

File content as of revision 0:0c584b87ea42:

#include "mbed.h"
#include "EthernetInterface.h"

#include <cyassl/ssl.h>

const char* ECHO_SERVER_ADDRESS = "192.168.137.1";
const int ECHO_SERVER_PORT = 443;

#define err_sys(m) { puts(m) ; return -1 ; }

TCPSocketConnection socket;

static int SocketReceive(CYASSL* ssl, char *buf, int sz, void *ctx)
{
    int n ;
    int i ;
#define RECV_RETRY 3
    for(i=0; i<RECV_RETRY; i++) {
        n = socket.receive(buf, sz) ;
        if(n >= 0)return n  ;
    }
    printf("SocketReceive:%d/%d\n", n, sz)  ;
    return n ;
}

static int SocketSend(CYASSL* ssl, char *buf, int sz, void *ctx)
{
    int n ;

    n = socket.send(buf, sz);
    if(n > 0) {
        return n ;
    } else  printf("SocketSend:%d/%d\n", n, sz);
    return n ;
}

int main()
{
    CYASSL_CTX*     ctx     = 0;
    CYASSL*         ssl     = 0;

    CYASSL_METHOD* method = CyaTLSv1_2_client_method();
    EthernetInterface eth;

    printf("===== ECHO CLIENT ========\n") ;
    /* CyaSSL_Debugging_ON() ; */

    eth.init(); //Use DHCP
    eth.connect();
    printf("Client IP: %s\n", eth.getIPAddress());

    /* Initialize CyaSSL Context */
    ctx = CyaSSL_CTX_new(method);
    if (ctx == NULL)
        err_sys("unable to get ctx");
    CyaSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
    CyaSSL_SetIORecv(ctx, SocketReceive) ;
    CyaSSL_SetIOSend(ctx, SocketSend) ;

    socket.set_blocking(false, 300) ;
    while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) {
        printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
        wait(1);
    }
    printf("TCP Connected\n") ;

    ssl = CyaSSL_new(ctx);
    if (ssl == NULL)
        err_sys("unable to get SSL object");
    if (CyaSSL_connect(ssl) != SSL_SUCCESS) {
        int  err = CyaSSL_get_error(ssl, 0);
        printf("err = %d, %s\n", err,
               CyaSSL_ERR_error_string(err, "\n" /*buffer*/));
        err_sys("SSL Connection Error");
    }
    printf("SSL Connected\n") ;

    const char msg[] = "GET / HTTP/1.0\r\n\r\n" ;
    // const char msg[] = "Hello World\r\n" ;

    if (CyaSSL_write(ssl, msg, sizeof(msg)-1) != (sizeof(msg)-1))
        err_sys("CyaSSL_write failed");

    char buf[1024];
    int n ;

    n = CyaSSL_read(ssl, buf, sizeof(buf)-1);
    if (n > 0) {
        puts("Server Response") ;
        buf[n] = 0;
        puts(buf);
        puts("=== === === ===") ;
    } else
        err_sys("CyaSSL_read failed");

    CyaSSL_free(ssl) ;
    socket.close();

    CyaSSL_CTX_free(ctx) ;
    eth.disconnect();
    while(true) {}
}