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.
Diff: irc.cpp
- Revision:
- 1:cf586c9bbb52
- Parent:
- 0:b8fb2df56652
- Child:
- 2:e4c74eb20586
diff -r b8fb2df56652 -r cf586c9bbb52 irc.cpp
--- a/irc.cpp Sat Aug 02 12:09:10 2014 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-#include "irc.h"
-
-IrcMessage::IrcMessage(char * f, char * t, char * m) {
- sprintf(from, "%s", f);
- sprintf(to, "%s", t);
- sprintf(msg, "%s", m);
-}
-
-IrcMessage::IrcMessage() {
- from[0] = '\0';
- to[0] = '\0';
- msg[0] = '\0';
-}
-
-Irc::Irc(char * nick, char * net, int p, char * chan) :
- pc(USBTX, USBRX), sock(), port(p), ident(false), connected(false),
- setup(false), joined(false), parseindex(0)
-{
- sprintf(nickname, "%s", nick);
- sprintf(password, "%s", "");
- sprintf(network, "%s", net);
- sprintf(channel, "%s", chan);
- pc.printf("Created Irc obj for %s.\n", nickname);
-}
-
-void Irc::identify(char * pass) {
- ident = true;
- sprintf(password, "%s", pass);
-}
-
-void Irc::join(char * chan) {
- char cmd[64];
- sprintf(cmd, ":source JOIN :%s\r\n", chan);
- send(cmd);
-}
-
-void Irc::connect() {
- pc.printf("Connecting to %s:%d...\n", network, port);
- sock.connect(network, port);
- pc.printf("Done.\n");
- connected = true;
-}
-
-void Irc::disconnect() {
- if (connected) {
- pc.printf("Disconnecting.\n");
- sock.close();
- connected = false;
- }
-}
-
-void Irc::add(MessageHandler * handler) {
- handlers.push_back(handler);
-}
-
-bool Irc::read() {
- if (!connected) return 0;
- int ret = sock.receive(readbuffer, sizeof(readbuffer) - 1);
- bool parsed = false;
- if (ret >= 0) {
- readbuffer[ret] = '\0';
- pc.printf("Received %d chars: ---%s--\n", ret, readbuffer);
- for (int i = 0; i < ret; i++) {
- parsebuffer[parseindex] = readbuffer[i];
- parseindex++;
- if (readbuffer[i] == '\n') {
- parsebuffer[parseindex] = '\0';
- parse();
- parsed = true;
- parseindex = 0;
- }
- }
- }
- return parsed;
-}
-
-void Irc::send(char * cmd) {
- if (!connected) return;
- int i = 0;
- bool ok = true;
- while (cmd[i] != '\0') {
- i++;
- if (i > 512) {
- ok = false;
- break;
- }
- }
- if (!ok) return;
- pc.printf("Sending: ---%s---\n", cmd);
- sock.send_all(cmd, i);
-}
-
-void Irc::handle(IrcMessage msg) {
- pc.printf("Handling message from %s, to %s: %s\n", msg.from, msg.to, msg.msg);
- for (int i = 0; i < handlers.size(); i++) {
- IrcMessage out = handlers.at(i)->handle(msg);
- if (out.to[0] != '\0') {
- sprintf(out.from, "%s", nickname);
- pc.printf("Need to send: ---%s--- from %s to %s.\n", out.msg, out.from, out.to);
- char cmd[512];
- sprintf(cmd, "PRIVMSG %s :%s\r\n", out.to, out.msg);
- send(cmd);
- }
- }
-}
-
-void Irc::parse() {
- pc.printf("Parsing: --%s--\n", parsebuffer);
- if (setup && (!joined)) {
- char cmd[256];
- sprintf(cmd, ":source JOIN :%s\r\n", channel);
- send(cmd);
- joined = true;
- return;
- }
- if (!setup) {
- char cmd[256];
- sprintf(cmd, "NICK %s\r\nUSER %s 0 * :Lester\r\n", nickname, nickname);
- send(cmd);
- setup = true;
- return;
- }
- char * c = NULL;
- c = strstr(parsebuffer, "PING");
- if (c != NULL) {
- char cmd[] = "PONG\r\n";
- send(cmd);
- }
- c = strstr(parsebuffer, "PRIVMSG");
- if (c != NULL) {
- char f[32];
- char t[32];
- char m[256];
- int i;
- for (i = 1; i < 32; i++) {
- if (parsebuffer[i] == '!') {
- f[i - 1] = '\0';
- break;
- }
- f[i - 1] = parsebuffer[i];
- }
- int nspace = 0;
- bool inmsg = false;
- int toindex = 0, msgindex = 0;
- for (; i < sizeof(parsebuffer); i++) {
- if (parsebuffer[i] == '\r') break;
- if (parsebuffer[i] == '\n') break;
- if (parsebuffer[i] == '\0') break;
- if (parsebuffer[i] == ' ') {
- nspace++;
- }
- if ((nspace == 2) && (parsebuffer[i] != ' ')) {
- t[toindex] = parsebuffer[i];
- toindex++;
- }
- if (inmsg) {
- m[msgindex] = parsebuffer[i];
- msgindex++;
- }
- if ((parsebuffer[i] == ':') && (!inmsg)) {
- inmsg = true;
- }
- }
- t[toindex] = '\0';
- m[msgindex] = '\0';
- IrcMessage msg(f, t, m);
- handle(msg);
- }
-}
\ No newline at end of file