A simple HTTP server echoing received requests. Ethernet connection is over an ENC28J60 board. Usage: Type the server's IP address into you web browser and hit <ENTER>.

Dependencies:   UIPEthernet

main.cpp

Committer:
hudakz
Date:
2015-11-27
Revision:
3:f3bfd257e138
Parent:
2:519b6ae198ae
Child:
4:06fcbe983e24

File content as of revision 3:f3bfd257e138:

/*
 * In this example the HTTP request (text) received from a browser is echoed (sent back) to the browser.
 * Ethernet connection is via an ENC28J60 Ethernet board driven by the UIPEthernet library
 */
#include "mbed.h"
#include <UIPEthernet.h>
#include <UIPServer.h>
#include <UIPClient.h>

Serial  pc(USBTX, USBRX);

#define DHCP    1   // comment out this line if you are not using DHCP

// UIPEthernet is the name of a global instance of UIPEthernetClass.

// Do not change the name! It is used within the UIPEthernet library.
// Adapt the SPI pin names to your mbed platform/board if not present yet.
#if defined(TARGET_LPC1768)
UIPEthernetClass    UIPEthernet(p11, p12, p13, p8);         // mosi, miso, sck, cs
#elif defined(TARGET_LPC1114)
UIPEthernetClass    UIPEthernet(dp2, dp1, dp6, dp25);       // mosi, miso, sck, cs
#elif defined(TARGET_LPC11U68)
UIPEthernetClass    UIPEthernet(P0_9, P0_8, P1_29, P0_2);   // mosi, miso, sck, cs
#elif defined(TARGET_NUCLEO_F103RB)
UIPEthernetClass    UIPEthernet(D11, D12, D13, D10);        // mosi, miso, sck, cs
#elif defined(TARGET_NUCLEO_F103RB)
UIPEthernetClass    UIPEthernet(D11, D12, D13, D10);        // mosi, miso, sck, cs
#elif defined(TARGET_NUCLEO_F401RE)
UIPEthernetClass    UIPEthernet(D11, D12, D13, D10);        // mosi, miso, sck, cs
#elif defined(TARGET_NUCLEO_F411RE)
UIPEthernetClass    UIPEthernet(D11, D12, D13, D10);        // mosi, miso, sck, cs
#endif

// MAC number must be unique within the connected network. Modify as appropriate.
const uint8_t       MY_MAC[6] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };

#if !defined(DHCP)
// IP address must be unique and compatible with your network. Change as appropriate.
const IPAddress MY_IP(192, 168, 1, 181);
#endif

const uint16_t  MY_PORT = 80;   // for HTTP connection
EthernetServer  myServer = EthernetServer(MY_PORT);
Serial          serial(USBTX, USBRX);

/**
 * @brief
 * @note
 * @param
 * @retval
 */

int main(void) {

#if defined(DHCP)
    pc.printf("Searching for DHCP server.\r\n");
    pc.printf("It takes some time. Please wait..\r\n");

    if(UIPEthernet.begin(MY_MAC) != 1) {
        pc.printf("No DHCP server found.\r\n");
        pc.printf("Exiting application\r\n");
        return 0;
    }

    pc.printf("DHCP server found and configuration info received\r\n");

    IPAddress   localIP = UIPEthernet.localIP();
    pc.printf("Local IP = ");
    for(uint8_t i = 0; i < 3; i++)
        pc.printf("%d.", localIP[i]);
    pc.printf("%d\r\n", localIP[3]);
#else
    UIPEthernet.begin(MY_MAC, MY_IP);
#endif

    myServer.begin();
    while(1) {
        EthernetClient  client = myServer.available();
        if(client) {
            size_t  size = client.available();
            if(size > 0) {
                char*   buf = (char*)malloc(size);
                size = client.read((uint8_t*)buf, size);
                if(buf[0] == 'G' && buf[1] == 'E' && buf[2] == 'T') {
                    serial.printf("GET request received:\n\r");
                    serial.printf(buf);
                    char    echoHeader[256] = { };
                    sprintf
                    (
                        echoHeader,
                        "HTTP/1.1 200 OK\r\nContent-Length: %d\r\nContent-Type: text\r\nConnection: About to close\r\n\r\n",
                        size
                    );
                    client.write((uint8_t*)echoHeader, strlen(echoHeader));
                    client.write((uint8_t*)buf, size);
                    serial.printf("Echo done.\r\n");
                }
                free(buf);
            }
        }
    }
}