view sources/parser.cpp @ 6:9be05a31b7f9

Enqlave IRC Network => Vaygr IRC Network -Os optimizations by default temporary functions' arguments rename *char => NULL bool => true|false renamed some global vars, removed debug info
author Vlad Glagolev <enqlave@gmail.com>
date Sun, 27 Jan 2008 17:23:14 +0300
parents a7051ac7118b
children 8d54d9fdeca3
line wrap: on
line source

/**
 * parser.cpp (2007-05-13)
 *
 * -- CABAL -- irc commands parser
 *
 * Copyright (c) 2007-2008 Vlad Glagolev <enqlave@gmail.com>
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#include "cabal.hpp" // required: parser.hpp

Parser::Parser(Connection *S, string parsing)
{
	if (parsing.substr(0, 6) == "PING :") {
		parsing[1] = 'O';
		S->sendMsg(parsing);
	} else {
		char *line = new char[parsing.length() + 1];

		strcpy(line, parsing.c_str());

		char *who = strtok(line, " ");
		char *what = strtok(NULL, " ");
		char *where = strtok(NULL, " ");
		char *data = strtok(NULL, "\n");

		if (strchr(who, '!')) {
			id = strchr(who, '!');
			id = id.substr(1);
		}

		if (strtok(who, "!"))
			name = strtok(who, "!");

		action = what;

		if (*where == ':')
			place = ++where;
		else {
			place = where;

			if (data) {
				if (place == S->nick)
					place = name;

				message = (*data == ':') ? ++data: data;

				if (*data == CABAL->commander && ++data) {
					if (strchr(data, ' ')) {
						command = strtok(data, " ");
						message = strtok(NULL, "\n");
					} else
						command = data;
				}
			}
		}

		delete[] line;
	}
}

void Parser::Parse(Connection *S)
{
	if (command == "die" && id == "stealth@ru.raver")
		shut("Requested shutdown");
}