annotate sources/parser.cpp @ 7:8d54d9fdeca3

fixed comments removed daemonization verbose strings' size() -> length()
author Vlad Glagolev <enqlave@gmail.com>
date Sun, 03 Feb 2008 21:29:41 +0300
parents 9be05a31b7f9
children
rev   line source
7
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 6
diff changeset
1 /** parser.cpp (2007-05-13)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
2 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
3 * -- CABAL -- irc commands parser
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
4 *
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
5 * Copyright (c) 2007-2008 Vlad Glagolev <enqlave@gmail.com>
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
6 * All rights reserved.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
7 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
8 * Permission to use, copy, modify, and distribute this software for any
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
9 * purpose with or without fee is hereby granted, provided that the above
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
10 * copyright notice and this permission notice appear in all copies.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
11 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
19 */
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
20
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
21 #include "cabal.hpp" // required: parser.hpp
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
22
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
23 Parser::Parser(Connection *S, string parsing)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
24 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
25 if (parsing.substr(0, 6) == "PING :") {
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
26 parsing[1] = 'O';
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
27 S->sendMsg(parsing);
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
28 } else {
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
29 char *line = new char[parsing.length() + 1];
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
30
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
31 strcpy(line, parsing.c_str());
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
32
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
33 char *who = strtok(line, " ");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
34 char *what = strtok(NULL, " ");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
35 char *where = strtok(NULL, " ");
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
36 char *data = strtok(NULL, "\n");
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
37
7
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 6
diff changeset
38 if (strchr(who, '!'))
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 6
diff changeset
39 id = strchr(who, '!'), id = id.substr(1);
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
40
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
41 if (strtok(who, "!"))
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
42 name = strtok(who, "!");
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
43
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
44 action = what;
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
45
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
46 if (*where == ':')
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
47 place = ++where;
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
48 else {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
49 place = where;
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
50
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
51 if (data) {
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
52 if (place == S->nick)
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
53 place = name;
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
54
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
55 message = (*data == ':') ? ++data: data;
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
56
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
57 if (*data == CABAL->commander && ++data) {
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
58 if (strchr(data, ' ')) {
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
59 command = strtok(data, " ");
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
60 message = strtok(NULL, "\n");
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
61 } else
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
62 command = data;
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
63 }
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
64 }
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
65 }
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
66
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
67 delete[] line;
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
68 }
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
69 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
70
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
71 void Parser::Parse(Connection *S)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
72 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
73 if (command == "die" && id == "stealth@ru.raver")
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
74 shut("Requested shutdown");
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
75 }