Requests an URL from the Internet and transfers the HTML source code to the serial device.
Your local Ethernet network must provide Internet access. Connect the RS232 port of the Ethernut with a free COM port of your PC and run a terminal emulator at 115200 Baud.
If your local network does not support DHCP, it may be required to modify the MY_IP, MY_MASK and MY_GATE below.
This sample demonstrates DNS query and default route usage.
#define DNSSERVERIP "192.168.192.2"
#define INETSERVER "www.kornet.net"
#define INETSERVERPORT 80
#define INETURL "/"
#define MY_MAC {0x00,0x06,0x98,0x20,0x00,0x00}
#define MY_IP "192.168.192.100"
#define MY_MASK "255.255.255.0"
#define MY_GATE "192.168.192.3"
#include <string.h>
#include <stdio.h>
#include <io.h>
#include <dev/debug.h>
#ifdef ETHERNUT2
#include <dev/lanc111.h>
#else
#include <dev/nicrtl.h>
#endif
#include <sys/heap.h>
#include <sys/thread.h>
#include <sys/timer.h>
#include <sys/socket.h>
#include <sys/confnet.h>
#include <arpa/inet.h>
#include <net/route.h>
#include <netdb.h>
#include <pro/dhcp.h>
static u_char buff[1024];
static u_char my_mac[] = MY_MAC;
int main(void)
{
u_long baud = 115200;
TCPSOCKET *sock;
FILE *stream;
u_long rip;
u_long ip_addr;
int bite;
size_t rc;
size_t len;
u_long start_time;
u_long total_bytes;
NutRegisterDevice(&devDebug0, 0, 0);
freopen("uart0", "w", stdout);
_ioctl(_fileno(stdout), UART_SETSPEED, &baud);
puts("\nInetQuery 1.0");
puts("Configuring Ethernet interface");
NutRegisterDevice(&DEV_ETHER, 0x8300, 5);
if (NutDhcpIfConfig("eth0", 0, 60000) && NutDhcpIfConfig("eth0", my_mac, 60000)) {
ip_addr = inet_addr(MY_IP);
NutNetIfConfig("eth0", my_mac, ip_addr, inet_addr(MY_MASK));
NutIpRouteAdd(0, 0, inet_addr(MY_GATE), &DEV_ETHER);
NutDnsConfig(0, 0, inet_addr(DNSSERVERIP));
} else
ip_addr = confnet.cdn_ip_addr;
printf("%s ready\n", inet_ntoa(ip_addr));
if ((rip = NutDnsGetHostByName(INETSERVER)) != 0) {
if ((sock = NutTcpCreateSocket()) != 0) {
printf("Connecting %s:%u\r\n", inet_ntoa(rip), INETSERVERPORT);
if (NutTcpConnect(sock, rip, INETSERVERPORT) == 0) {
if ((stream = _fdopen((int) sock, "r+b")) != 0) {
fprintf(stream, "GET %s HTTP/1.0\r\n", INETURL);
fputs("User-Agent: Ethernut [en] (NutOS)\r\n", stream);
fputs("\r\n", stream);
fflush(stream);
start_time = NutGetTickCount();
total_bytes = 0;
while (fgets(buff, sizeof(buff), stream)) {
puts(buff);
total_bytes += strlen(buff);
}
printf("Transfered %lu bytes in %lu seconds\n", total_bytes, (NutGetTickCount() - start_time) / 16UL);
fclose(stream);
} else
puts("Creating stream device failed");
} else {
printf("Bad news, %s refuses the connection.\n", INETSERVER);
}
printf("Disconnecting %s:%u\n", inet_ntoa(rip), INETSERVERPORT);
NutTcpCloseSocket(sock);
}
NutSleep(5000);
if ((sock = NutTcpCreateSocket()) != 0) {
printf("Connecting %s:%u\r\n", inet_ntoa(rip), INETSERVERPORT);
if (NutTcpConnect(sock, rip, INETSERVERPORT) == 0) {
strcpy(buff, "GET " INETURL " HTTP/1.0\r\nUser-Agent: Ethernut [en] (NutOS)\r\n\r\n");
len = (int) strlen(buff);
for (rc = 0; rc < len; rc += bite)
if ((bite = NutTcpSend(sock, buff + rc, len - rc)) <= 0)
break;
start_time = NutGetTickCount();
total_bytes = 0;
while ((bite = NutTcpReceive(sock, buff, sizeof(buff) - 1)) > 0) {
total_bytes += bite;
buff[bite] = 0;
puts(buff);
}
printf("Transfered %lu bytes in %lu seconds\n", total_bytes, (NutGetTickCount() - start_time) / 16UL);
} else {
printf("Bad news, %s refuses the connection.\n", INETSERVER);
}
printf("Disconnecting %s:%u\n", inet_ntoa(rip), INETSERVERPORT);
NutTcpCloseSocket(sock);
}
} else
printf("Great news, %s has been removed!\n", INETSERVER);
for (;;)
NutSleep(1000);
}