All pastes #2119383 Raw Edit

Stuff

public cpp v1 · immutable
#2119383 ·published 2012-02-18 03:41 UTC
rendered paste body
#include <SPI.h>#include <Ethernet.h>// Enter a MAC address and IP address for your controller below.// The IP address will be dependent on your local network:byte mac[] = {    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };IPAddress ip(192,168,2,2);// Enter the IP address of the server you're connecting to:\\//IPAddress server(192,168,2,1);IPAddress server(38,229,70,20);// Initialize the Ethernet client library// with the IP address and port of the server // that you want to connect to (port 23 is default for telnet;// if you're using Processing's ChatServer, use  port 10002):EthernetClient client;void setup() {  // start the Ethernet connection:  Ethernet.begin(mac, ip);  delay(2000);  // start the serial library:  Serial.begin(9600);}void loop(){  if (!client.connected()) {    Serial.println("connecting ...");    if (client.connect(server, 6667)) {      Serial.println("connected");      delay(1000);      client.println("USER  uk 8 *  : Uwe Kamper\r");      delay(500);      client.println("NICK arduinoirc2\r");      delay(500);      client.println("JOIN #arduino\r");      delay(500);      handle_irc_connection();    }     else {      // if you didn't get a connection to the server:      Serial.println("connection failed");      delay(2000);    }  }}  #define IRC_BUFSIZE  32char from[IRC_BUFSIZE];char type[IRC_BUFSIZE];char to[IRC_BUFSIZE];void handle_irc_connection() {  char c;  // if there are incoming bytes available   // from the server, read them and print them:  while(true) {    if (!client.connected()) {      return;    }    if(client.available()) {      c = client.read();    }    else {      continue;    }        if(c == ':') {      memset(from, 0, sizeof(from));      memset(type, 0, sizeof(type));      memset(to, 0, sizeof(to));            read_until(' ', from);      read_until(' ', type);      read_until(' ', to);           if(strcmp(type, "PRIVMSG") == 0) {        print_nick(from);        ignore_until(':');        print_until('\r');      }      else {                ignore_until('\r');      }     }    // could be a PING request by the server.    else if (c == 'P') {      char buf[5];      memset(buf, 0, sizeof(buf));      buf[0] = c;      for(int i = 1; i < 4; i++) {        c = client.read();        buf[i] = c;      }      ignore_until('\r');      if(strcmp(buf, "PING") == 0) {        client.println("PONG\r");        Serial.println("PING->PONG");      }    }  } // end while   }void print_nick(char buffer[]) {  Serial.print("<");  for(int i = 0; i < IRC_BUFSIZE - 1; i++) {    if(buffer[i] == '!') {       break;     }        Serial.print(buffer[i]);  }  Serial.print(">");}int read_until(char abort_c, char buffer[]) {  int bytes_read = 0;  memset(buffer, 0, sizeof(buffer));  for(int i = 0; i < IRC_BUFSIZE - 1; i++) {    if (client.available()) {      char c = client.read();        bytes_read++;      if(c == abort_c) {        return bytes_read;      }      else if (c == '\n') {        return bytes_read;      }      buffer[i] = c;    }  }  ignore_until(abort_c);  return bytes_read;}// reads characters from the connection until// it hits the given character.void ignore_until(char c) {  while(true){    if (client.available()) {      char curr_c = client.read();      if (curr_c == c) {        return;        }    }  }}// reads characters from the connection until// it hits the given character.void print_until(char c) {  while(true){    if (client.available()) {      char curr_c = client.read();      if (curr_c == c) {        Serial.println("");        return;      }      Serial.print(curr_c);    }  }}// reads characters from the connection until// it hits the given character.void print_until_endline() {  while(true){    if (client.available()) {      char curr_c = client.read();      if (curr_c == '\r') {        curr_c = client.read();        if (curr_c == '\n') { return; }      }      Serial.print(curr_c);    }  }}