Client TCP example with scket. Starting point for TLS example with wolfSSL, client-tls

Dependencies:   EthernetInterface mbed-rtos mbed

Committer:
wolfSSL
Date:
Fri Jul 24 04:29:20 2015 +0000
Revision:
3:8be99be7f325
Parent:
2:f6177f2fc898
retry eth.connect

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 0:3827d202644b 1 /* client-tcp.c
wolfSSL 0:3827d202644b 2 *
wolfSSL 0:3827d202644b 3 * Copyright (C) 2006-2015 wolfSSL Inc.
wolfSSL 0:3827d202644b 4 *
wolfSSL 0:3827d202644b 5 * This file is part of wolfSSL. (formerly known as CyaSSL)
wolfSSL 0:3827d202644b 6 *
wolfSSL 0:3827d202644b 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 0:3827d202644b 8 * it under the terms of the GNU General Public License as published by
wolfSSL 0:3827d202644b 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 0:3827d202644b 10 * (at your option) any later version.
wolfSSL 0:3827d202644b 11 *
wolfSSL 0:3827d202644b 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 0:3827d202644b 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 0:3827d202644b 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 0:3827d202644b 15 * GNU General Public License for more details.
wolfSSL 0:3827d202644b 16 *
wolfSSL 0:3827d202644b 17 * You should have received a copy of the GNU General Public License
wolfSSL 0:3827d202644b 18 * along with this program; if not, write to the Free Software
wolfSSL 0:3827d202644b 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
wolfSSL 0:3827d202644b 20 */
wolfSSL 0:3827d202644b 21
wolfSSL 0:3827d202644b 22 #include "mbed.h"
wolfSSL 0:3827d202644b 23 #include "EthernetInterface.h"
wolfSSL 0:3827d202644b 24 #include <stdio.h>
wolfSSL 0:3827d202644b 25 #include <stdlib.h>
wolfSSL 0:3827d202644b 26 #include <string.h>
wolfSSL 0:3827d202644b 27
wolfSSL 0:3827d202644b 28 #define MAXDATASIZE (1024*4)
wolfSSL 0:3827d202644b 29
wolfSSL 0:3827d202644b 30 static int getline(char *prompt, char *buff, int size)
wolfSSL 0:3827d202644b 31 {
wolfSSL 0:3827d202644b 32 int sz ;
wolfSSL 0:3827d202644b 33
wolfSSL 0:3827d202644b 34 printf("%s", prompt) ;
wolfSSL 0:3827d202644b 35 for(sz = 0 ; (sz < size) && ((*buff = getchar()) != '\r'); sz++, buff++) {
wolfSSL 0:3827d202644b 36 putchar(*buff) ;
wolfSSL 0:3827d202644b 37 if(*buff == '\\') {
wolfSSL 0:3827d202644b 38 if(++sz >= size)break ;
wolfSSL 0:3827d202644b 39 *buff = getchar() ;
wolfSSL 0:3827d202644b 40 putchar(*buff) ;
wolfSSL 0:3827d202644b 41 switch(*buff) {
wolfSSL 0:3827d202644b 42 case 'n' :
wolfSSL 0:3827d202644b 43 *buff = '\n' ;
wolfSSL 0:3827d202644b 44 break ;
wolfSSL 0:3827d202644b 45 case 'r' :
wolfSSL 0:3827d202644b 46 *buff = '\r' ;
wolfSSL 0:3827d202644b 47 break ;
wolfSSL 0:3827d202644b 48 case 't' :
wolfSSL 0:3827d202644b 49 *buff = '\t' ;
wolfSSL 0:3827d202644b 50 break ;
wolfSSL 0:3827d202644b 51 case '\\':
wolfSSL 0:3827d202644b 52 *buff = '\\' ;
wolfSSL 0:3827d202644b 53 break ;
wolfSSL 0:3827d202644b 54 default:
wolfSSL 0:3827d202644b 55 buff[1] = buff[0] ;
wolfSSL 0:3827d202644b 56 buff[0] = '\\' ;
wolfSSL 0:3827d202644b 57 buff++ ;
wolfSSL 0:3827d202644b 58 }
wolfSSL 0:3827d202644b 59 } else if(*buff == '\b') {
wolfSSL 0:3827d202644b 60 if(sz >= 2) {
wolfSSL 0:3827d202644b 61 buff-=2 ;
wolfSSL 0:3827d202644b 62 sz-=2;
wolfSSL 0:3827d202644b 63 }
wolfSSL 0:3827d202644b 64 }
wolfSSL 0:3827d202644b 65 } ;
wolfSSL 0:3827d202644b 66 putchar('\n') ;
wolfSSL 0:3827d202644b 67 *buff = '\0' ;
wolfSSL 0:3827d202644b 68 return sz ;
wolfSSL 0:3827d202644b 69 }
wolfSSL 0:3827d202644b 70
wolfSSL 0:3827d202644b 71 /*
wolfSSL 0:3827d202644b 72 * clients initial contact with server. Socket to connect to: sock
wolfSSL 0:3827d202644b 73 */
wolfSSL 0:3827d202644b 74 int ClientGreet(TCPSocketConnection *socket)
wolfSSL 0:3827d202644b 75 {
wolfSSL 0:3827d202644b 76 /* data to send to the server, data recieved from the server */
wolfSSL 0:3827d202644b 77 char sendBuff[MAXDATASIZE], rcvBuff[MAXDATASIZE] = {0};
wolfSSL 0:3827d202644b 78 int ret ;
wolfSSL 0:3827d202644b 79
wolfSSL 0:3827d202644b 80 ret = getline("Message for server: ", sendBuff, MAXDATASIZE);
wolfSSL 0:3827d202644b 81 printf("Send[%d]:\n%s\n", ret, sendBuff) ;
wolfSSL 2:f6177f2fc898 82 if ((ret = socket->send(sendBuff, strlen(sendBuff))) < 0) {
wolfSSL 0:3827d202644b 83 printf("Send error: %i", ret);
wolfSSL 0:3827d202644b 84 return EXIT_FAILURE;
wolfSSL 0:3827d202644b 85 }
wolfSSL 0:3827d202644b 86 printf("Recieved:\n");
wolfSSL 0:3827d202644b 87 while(1) {
wolfSSL 0:3827d202644b 88 if ((ret = socket->receive(rcvBuff, sizeof(rcvBuff)-1)) < 0) {
wolfSSL 0:3827d202644b 89 if(ret == 0)break ;
wolfSSL 0:3827d202644b 90 printf("Read error. Error: %i\n", ret);
wolfSSL 0:3827d202644b 91 return EXIT_FAILURE;
wolfSSL 0:3827d202644b 92 }
wolfSSL 0:3827d202644b 93 rcvBuff[ret] = '\0' ;
wolfSSL 0:3827d202644b 94 printf("%s", rcvBuff);
wolfSSL 0:3827d202644b 95 if((rcvBuff[ret-3] == '\n')&&
wolfSSL 0:3827d202644b 96 (rcvBuff[ret-2] == '\n')&&
wolfSSL 0:3827d202644b 97 (rcvBuff[ret-1] == '\n'))break ;
wolfSSL 0:3827d202644b 98 }
wolfSSL 0:3827d202644b 99 return ret;
wolfSSL 0:3827d202644b 100 }
wolfSSL 0:3827d202644b 101
wolfSSL 0:3827d202644b 102 /*
wolfSSL 0:3827d202644b 103 * command line argumentCount and argumentValues
wolfSSL 0:3827d202644b 104 */
wolfSSL 1:81dead2c2744 105 void net_main(const void *av)
wolfSSL 0:3827d202644b 106 {
wolfSSL 1:81dead2c2744 107 char server_addr[40] ;
wolfSSL 1:81dead2c2744 108 char server_port[10] ;
wolfSSL 1:81dead2c2744 109
wolfSSL 0:3827d202644b 110 EthernetInterface eth;
wolfSSL 0:3827d202644b 111 TCPSocketConnection socket;
wolfSSL 0:3827d202644b 112
wolfSSL 0:3827d202644b 113 eth.init(); //Use DHCP
wolfSSL 3:8be99be7f325 114 while(1) {
wolfSSL 3:8be99be7f325 115 if(eth.connect() == 0)break ;
wolfSSL 3:8be99be7f325 116 printf("Retry\n") ;
wolfSSL 3:8be99be7f325 117 }
wolfSSL 0:3827d202644b 118 printf("Client Addr: %s\n", eth.getIPAddress());
wolfSSL 0:3827d202644b 119
wolfSSL 0:3827d202644b 120 getline("Server Addr: ", server_addr, sizeof(server_addr)) ;
wolfSSL 0:3827d202644b 121 getline("Server Port: ", server_port, sizeof(server_port)) ;
wolfSSL 0:3827d202644b 122
wolfSSL 0:3827d202644b 123 while (socket.connect(server_addr, atoi(server_port)) < 0) {
wolfSSL 2:f6177f2fc898 124 printf("Unable to connect to (%s) on port (%s)\n", server_addr, server_port);
wolfSSL 0:3827d202644b 125 wait(1.0);
wolfSSL 0:3827d202644b 126 }
wolfSSL 0:3827d202644b 127 printf("TCP Connected\n") ;
wolfSSL 0:3827d202644b 128
wolfSSL 0:3827d202644b 129 ClientGreet(&socket);
wolfSSL 1:81dead2c2744 130 return ;
wolfSSL 1:81dead2c2744 131 }
wolfSSL 1:81dead2c2744 132
wolfSSL 1:81dead2c2744 133 int main(void)
wolfSSL 1:81dead2c2744 134 {
wolfSSL 1:81dead2c2744 135 #define STACK_SIZE 24000
wolfSSL 1:81dead2c2744 136 Thread t(net_main, NULL, osPriorityNormal, STACK_SIZE);
wolfSSL 1:81dead2c2744 137 while(1)wait(1.0) ;
wolfSSL 0:3827d202644b 138 }