Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: CyaSSL EthernetInterface mbed-rtos mbed
Fork of SimpleClient-TCP-FRDM by
main.cpp
- Committer:
- wolfSSL
- Date:
- 2014-10-08
- Revision:
- 1:ac91b4f8d818
- Parent:
- 0:0c584b87ea42
- Child:
- 2:29a1370416cb
File content as of revision 1:ac91b4f8d818:
#include "mbed.h"
#include "EthernetInterface.h"
/*** SSL #include <cyassl/ssl.h> ***/
const int PORT = 80 /*** SSL 443 end SSL ***/ ;
#define err_sys(m) { puts(m) ; }
TCPSocketConnection socket;
/*** SSL
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 ;
}
end SSL ***/
EthernetInterface eth;
void net_main(void const *av)
{
char server_ip[20] ;
/*** SSL
CYASSL_CTX* ctx = 0;
CYASSL* ssl = 0;
CYASSL_METHOD* method = CyaTLSv1_2_client_method();
end SSL ***/
/* Initialize CyaSSL Context */
/*** SSL
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) ;
end SSL ***/
socket.set_blocking(false, 300) ;
printf("Server IP: ") ;
scanf("%s", server_ip) ;
puts(server_ip) ;
while (socket.connect(server_ip, PORT) < 0) {
printf("Unable to connect to (%s) on port (%d)\n", server_ip, PORT);
wait(1);
}
printf("TCP Connected\n") ;
/*** SSL
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"));
err_sys("SSL Connection Error");
}
printf("SSL Connected\n") ;
***/
char msg[] = "GET / HTTP/1.0\r\nConnection: Close\r\n\r\n" ;
// const char msg[] = "Hello World\r\n" ;
if (/*** SSL CyaSSL_write(ssl, end SSL***/
socket.send(msg, sizeof(msg)-1) != (sizeof(msg)-1))
err_sys("CyaSSL_write failed");
char buf[1024];
int n ;
puts("Server Response:\n") ;
do {
n = /*** SSL CyaSSL_read(ssl, end SSL ***/
socket.receive(buf, sizeof(buf)-1);
if (n >= 0) {
buf[n] = 0;
//printf("%d,", n) ;
printf("%s", buf);
} else
err_sys("CyaSSL_read failed");
} while(n > 0) ;
puts("=== === === ===") ;
/*** SSL CyaSSL_free(ssl) ; ***/
socket.close();
/*** SSL CyaSSL_CTX_free(ctx) ; ***/
eth.disconnect();
}
main()
{
printf("===== Simple TCP Client ========\n") ;
/* CyaSSL_Debugging_ON() ; */
eth.init(); //Use DHCP
eth.connect();
printf("Client IP: %s\n", eth.getIPAddress());
#define STACK_SIZE 12000
Thread t(net_main, NULL, osPriorityNormal, STACK_SIZE);
while (true) {
Thread::wait(1000);
}
}
