Simple Client TCP for FRDM

Dependencies:   EthernetInterface-FRDM mbed-rtos mbed

Fork of CyaSSL-EchoClient by wolf SSL

Committer:
wolfSSL
Date:
Sat Feb 07 18:39:41 2015 +0000
Revision:
5:b74ac4acd827
Parent:
4:3cd5b93387c7
getline for server ip address

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 0:0c584b87ea42 1 #include "mbed.h"
wolfSSL 0:0c584b87ea42 2 #include "EthernetInterface.h"
wolfSSL 0:0c584b87ea42 3
wolfSSL 1:ac91b4f8d818 4 /*** SSL #include <cyassl/ssl.h> ***/
wolfSSL 0:0c584b87ea42 5
wolfSSL 1:ac91b4f8d818 6 const int PORT = 80 /*** SSL 443 end SSL ***/ ;
wolfSSL 0:0c584b87ea42 7
wolfSSL 1:ac91b4f8d818 8 #define err_sys(m) { puts(m) ; }
wolfSSL 0:0c584b87ea42 9
wolfSSL 0:0c584b87ea42 10 TCPSocketConnection socket;
wolfSSL 0:0c584b87ea42 11
wolfSSL 1:ac91b4f8d818 12 /*** SSL
wolfSSL 0:0c584b87ea42 13 static int SocketReceive(CYASSL* ssl, char *buf, int sz, void *ctx)
wolfSSL 0:0c584b87ea42 14 {
wolfSSL 0:0c584b87ea42 15 int n ;
wolfSSL 0:0c584b87ea42 16 int i ;
wolfSSL 0:0c584b87ea42 17 #define RECV_RETRY 3
wolfSSL 0:0c584b87ea42 18 for(i=0; i<RECV_RETRY; i++) {
wolfSSL 0:0c584b87ea42 19 n = socket.receive(buf, sz) ;
wolfSSL 0:0c584b87ea42 20 if(n >= 0)return n ;
wolfSSL 0:0c584b87ea42 21 }
wolfSSL 5:b74ac4acd827 22 printf("SocketReceive:%d/%d\n", n, sz) ;
wolfSSL 0:0c584b87ea42 23 return n ;
wolfSSL 0:0c584b87ea42 24 }
wolfSSL 0:0c584b87ea42 25
wolfSSL 0:0c584b87ea42 26 static int SocketSend(CYASSL* ssl, char *buf, int sz, void *ctx)
wolfSSL 0:0c584b87ea42 27 {
wolfSSL 0:0c584b87ea42 28 int n ;
wolfSSL 0:0c584b87ea42 29
wolfSSL 0:0c584b87ea42 30 n = socket.send(buf, sz);
wolfSSL 0:0c584b87ea42 31 if(n > 0) {
wolfSSL 0:0c584b87ea42 32 return n ;
wolfSSL 5:b74ac4acd827 33 } else printf("SocketSend:%d/%d\n", n, sz);
wolfSSL 0:0c584b87ea42 34 return n ;
wolfSSL 0:0c584b87ea42 35 }
wolfSSL 1:ac91b4f8d818 36 end SSL ***/
wolfSSL 0:0c584b87ea42 37
wolfSSL 5:b74ac4acd827 38 void getline(char *line, int size) {
wolfSSL 5:b74ac4acd827 39 for(int i=0; i<size; i++) {
wolfSSL 5:b74ac4acd827 40 if((line[i] = getchar()) == '\r') {
wolfSSL 5:b74ac4acd827 41 line[i] = '\0' ;
wolfSSL 5:b74ac4acd827 42 putchar('\n') ;
wolfSSL 5:b74ac4acd827 43 break ;
wolfSSL 5:b74ac4acd827 44 } else putchar(line[i]) ;
wolfSSL 5:b74ac4acd827 45 }
wolfSSL 5:b74ac4acd827 46 }
wolfSSL 5:b74ac4acd827 47
wolfSSL 1:ac91b4f8d818 48 EthernetInterface eth;
wolfSSL 1:ac91b4f8d818 49
wolfSSL 1:ac91b4f8d818 50 void net_main(void const *av)
wolfSSL 0:0c584b87ea42 51 {
wolfSSL 1:ac91b4f8d818 52 char server_ip[20] ;
wolfSSL 1:ac91b4f8d818 53 /*** SSL
wolfSSL 0:0c584b87ea42 54 CYASSL_CTX* ctx = 0;
wolfSSL 0:0c584b87ea42 55 CYASSL* ssl = 0;
wolfSSL 0:0c584b87ea42 56
wolfSSL 0:0c584b87ea42 57 CYASSL_METHOD* method = CyaTLSv1_2_client_method();
wolfSSL 1:ac91b4f8d818 58 end SSL ***/
wolfSSL 0:0c584b87ea42 59
wolfSSL 5:b74ac4acd827 60
wolfSSL 5:b74ac4acd827 61
wolfSSL 0:0c584b87ea42 62 /* Initialize CyaSSL Context */
wolfSSL 1:ac91b4f8d818 63 /*** SSL
wolfSSL 0:0c584b87ea42 64 ctx = CyaSSL_CTX_new(method);
wolfSSL 0:0c584b87ea42 65 if (ctx == NULL)
wolfSSL 0:0c584b87ea42 66 err_sys("unable to get ctx");
wolfSSL 0:0c584b87ea42 67 CyaSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
wolfSSL 0:0c584b87ea42 68 CyaSSL_SetIORecv(ctx, SocketReceive) ;
wolfSSL 0:0c584b87ea42 69 CyaSSL_SetIOSend(ctx, SocketSend) ;
wolfSSL 1:ac91b4f8d818 70 end SSL ***/
wolfSSL 0:0c584b87ea42 71
wolfSSL 0:0c584b87ea42 72 socket.set_blocking(false, 300) ;
wolfSSL 1:ac91b4f8d818 73 printf("Server IP: ") ;
wolfSSL 5:b74ac4acd827 74 getline(server_ip, sizeof(server_ip)) ;
wolfSSL 1:ac91b4f8d818 75
wolfSSL 1:ac91b4f8d818 76 while (socket.connect(server_ip, PORT) < 0) {
wolfSSL 1:ac91b4f8d818 77 printf("Unable to connect to (%s) on port (%d)\n", server_ip, PORT);
wolfSSL 0:0c584b87ea42 78 wait(1);
wolfSSL 0:0c584b87ea42 79 }
wolfSSL 0:0c584b87ea42 80 printf("TCP Connected\n") ;
wolfSSL 0:0c584b87ea42 81
wolfSSL 1:ac91b4f8d818 82 /*** SSL
wolfSSL 0:0c584b87ea42 83 ssl = CyaSSL_new(ctx);
wolfSSL 0:0c584b87ea42 84 if (ssl == NULL)
wolfSSL 0:0c584b87ea42 85 err_sys("unable to get SSL object");
wolfSSL 0:0c584b87ea42 86 if (CyaSSL_connect(ssl) != SSL_SUCCESS) {
wolfSSL 0:0c584b87ea42 87 int err = CyaSSL_get_error(ssl, 0);
wolfSSL 0:0c584b87ea42 88 printf("err = %d, %s\n", err,
wolfSSL 1:ac91b4f8d818 89 CyaSSL_ERR_error_string(err, "\n"));
wolfSSL 0:0c584b87ea42 90 err_sys("SSL Connection Error");
wolfSSL 0:0c584b87ea42 91 }
wolfSSL 0:0c584b87ea42 92 printf("SSL Connected\n") ;
wolfSSL 1:ac91b4f8d818 93 ***/
wolfSSL 0:0c584b87ea42 94
wolfSSL 5:b74ac4acd827 95 char msg[] = "GET /index.html HTTP/1.0\r\nConnection: Close\r\n\r\n" ;
wolfSSL 5:b74ac4acd827 96 printf("Client Request: \n%s\n",msg) ;
wolfSSL 1:ac91b4f8d818 97 if (/*** SSL CyaSSL_write(ssl, end SSL***/
wolfSSL 1:ac91b4f8d818 98 socket.send(msg, sizeof(msg)-1) != (sizeof(msg)-1))
wolfSSL 0:0c584b87ea42 99 err_sys("CyaSSL_write failed");
wolfSSL 5:b74ac4acd827 100
wolfSSL 0:0c584b87ea42 101 char buf[1024];
wolfSSL 0:0c584b87ea42 102 int n ;
wolfSSL 1:ac91b4f8d818 103 puts("Server Response:\n") ;
wolfSSL 1:ac91b4f8d818 104 do {
wolfSSL 1:ac91b4f8d818 105 n = /*** SSL CyaSSL_read(ssl, end SSL ***/
wolfSSL 1:ac91b4f8d818 106 socket.receive(buf, sizeof(buf)-1);
wolfSSL 5:b74ac4acd827 107 if (n >= 0) {
wolfSSL 1:ac91b4f8d818 108 buf[n] = 0;
wolfSSL 1:ac91b4f8d818 109 printf("%s", buf);
wolfSSL 1:ac91b4f8d818 110 } else
wolfSSL 5:b74ac4acd827 111 err_sys("CyaSSL_read failed");
wolfSSL 1:ac91b4f8d818 112 } while(n > 0) ;
wolfSSL 1:ac91b4f8d818 113 puts("=== === === ===") ;
wolfSSL 1:ac91b4f8d818 114 /*** SSL CyaSSL_free(ssl) ; ***/
wolfSSL 1:ac91b4f8d818 115 socket.close();
wolfSSL 1:ac91b4f8d818 116 /*** SSL CyaSSL_CTX_free(ctx) ; ***/
wolfSSL 1:ac91b4f8d818 117 eth.disconnect();
wolfSSL 1:ac91b4f8d818 118 }
wolfSSL 1:ac91b4f8d818 119
wolfSSL 0:0c584b87ea42 120
wolfSSL 1:ac91b4f8d818 121 main()
wolfSSL 1:ac91b4f8d818 122 {
wolfSSL 1:ac91b4f8d818 123
wolfSSL 1:ac91b4f8d818 124 printf("===== Simple TCP Client ========\n") ;
wolfSSL 1:ac91b4f8d818 125 /* CyaSSL_Debugging_ON() ; */
wolfSSL 0:0c584b87ea42 126
wolfSSL 1:ac91b4f8d818 127 eth.init(); //Use DHCP
wolfSSL 1:ac91b4f8d818 128 eth.connect();
wolfSSL 1:ac91b4f8d818 129 printf("Client IP: %s\n", eth.getIPAddress());
wolfSSL 1:ac91b4f8d818 130
wolfSSL 1:ac91b4f8d818 131 #define STACK_SIZE 12000
wolfSSL 1:ac91b4f8d818 132 Thread t(net_main, NULL, osPriorityNormal, STACK_SIZE);
wolfSSL 1:ac91b4f8d818 133
wolfSSL 1:ac91b4f8d818 134 while (true) {
wolfSSL 1:ac91b4f8d818 135 Thread::wait(1000);
wolfSSL 1:ac91b4f8d818 136 }
wolfSSL 1:ac91b4f8d818 137 }