![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
CookieServer
Dependencies: EthernetInterface mbed-rtos mbed
Fork of TCP-TCPEchoServer by
Revision 6:9044de9736a1, committed 2014-05-13
- Comitter:
- sunilaluri6
- Date:
- Tue May 13 03:44:37 2014 +0000
- Parent:
- 5:0f0fdadab553
- Commit message:
- Cookie Server
Changed in this revision
main.cpp | Show diff for this revision Revisions of this file |
mbed_tcp_cookie_server_Sunil_Aluri.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 0f0fdadab553 -r 9044de9736a1 main.cpp --- a/main.cpp Fri Mar 01 15:37:15 2013 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -#include "mbed.h" -#include "EthernetInterface.h" - -#define ECHO_SERVER_PORT 7 - -int main (void) { - EthernetInterface eth; - eth.init(); //Use DHCP - eth.connect(); - printf("IP Address is %s\n", eth.getIPAddress()); - - TCPSocketServer server; - server.bind(ECHO_SERVER_PORT); - server.listen(); - - while (true) { - printf("\nWait for new connection...\n"); - TCPSocketConnection client; - server.accept(client); - client.set_blocking(false, 1500); // Timeout after (1.5)s - - printf("Connection from: %s\n", client.get_address()); - char buffer[256]; - while (true) { - int n = client.receive(buffer, sizeof(buffer)); - if (n <= 0) break; - - client.send_all(buffer, n); - if (n <= 0) break; - } - - client.close(); - } -}
diff -r 0f0fdadab553 -r 9044de9736a1 mbed_tcp_cookie_server_Sunil_Aluri.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed_tcp_cookie_server_Sunil_Aluri.cpp Tue May 13 03:44:37 2014 +0000 @@ -0,0 +1,116 @@ +/***********************************************************************/ +/******************************Prologue*********************************/ +/* University of California Santa Cruz Extension */ +/* */ +/* Internet of Things */ +/* Instructor: Avnish Aggarwal */ +/* Author: Sunil Aluri */ +/* Assignment 4 part2a */ +/* */ +/* File name: mbed_tcp_cookie_server_Sunil_Aluri.cpp */ +/* Date:5/12/2014 */ +/* Objective: Develop a program to */ +/* fetch cookies,date from internet and send them to client */ +/* each time it connects */ +/* Comments: Since, I do not have two Mbed boards, used a */ +/* telent client to get the server data */ +/***********************************************************************/ + + +#include "mbed.h" +#include "EthernetInterface.h" +#define ECHO_SERVER_PORT 7 // define the port which the clients can connect to + +// FetchCookies Class function is to , connect to a http web server and get the html header +// of the webiste, which contains Date and Set-Cookie fields. +class FetchCookies +{ +private: + char buffer[300],*key,*date,*cookie,*client_message; + int ret; + TCPSocketConnection sock; //create a socket for TCP connection on the server +public: + FetchCookies() { // initiate all the pointers and buffers + ret=0; + buffer[0]='\0'; + key =0; + date=0; + cookie=0; + client_message=0; + } + ~FetchCookies() { // destructor that frees the memory allocated + free(client_message); + } + + +// getCookie method, connects to a website and requests header. It fetches the date and cookie +// part of the received header and sends out the information to the caller function. + char* getCookie () { + sock.connect("google.com", 80); // connect to the webserver + //send the HEAD cmd to request header of the webpage + char http_cmd[] = "HEAD http://www.google.com/ HTTP/1.0\r\n\r\n"; + sock.send_all(http_cmd, sizeof(http_cmd)-1); + // receive the information from web server + ret = sock.receive(buffer, sizeof(buffer)-1); + // using strtok function, fetch for date and cookie part of header, which are + //delimited by \n charecter + if (ret > 0) { + buffer[ret] = '\0'; + key = strtok(buffer,"\n"); + date = strtok(NULL,"\n"); + while(key!=NULL) { + key=strtok(NULL,"\n"); + if(strstr(key,"Set")==NULL) { + continue; + } else { + cookie =key; + break; + } + } + // for string concatenation, assign memory + client_message = (char*)malloc(strlen(date)+strlen(cookie)+1); + // copy the date and cookie info into the message pointer + sprintf(client_message,"%s\r\n%s",date,cookie); + } + //close the webserver connection + sock.close(); + // send the TCP client message pointer. + return(client_message); + } +}; + + +int main (void) +{ + /**** ether net interface definition begin *****/ + EthernetInterface eth; + eth.init(); //Use DHCP + eth.connect(); + /**** ethernet interface definition end*******/ + FetchCookies FC; // create an object for Fetch Cookies class + printf("\r\nIP Address is %s\n", eth.getIPAddress()); //print the server IP address + TCPSocketServer server; //create a socket for server to listen to requests + server.bind(ECHO_SERVER_PORT); // bind the port to server + server.listen(); //listen for client requests + char *client_info=0; + //the following loop, listens for new connections, make them and send the response message to clients + while (true) { + printf("\r\nWait for new connection...\r\n"); + TCPSocketConnection client; + + server.accept(client); // accept the incoming connection + client.set_blocking(false, 5500); // Timeout after (1.5)s + client_info =FC.getCookie(); // fetch new cookie and date from webservers + printf("Connection from: %s\r\n", client.get_address()); + if(client_info == 0) // if no message was obtained, quit and start for new client connection + break; + printf("Sending Data to client...\r\n"); // if webserver gives the cookies, send them to client. + client.send_all(client_info,strlen(client_info)); + wait(5); + printf("Closing connection\r\n"); // after sending the message, close the connection + client.close(); + } + +} + +