annotate sources/connection.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 0faceb076254
children 8d54d9fdeca3
rev   line source
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
1 /**
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
2 * connection.cpp (2007-04-12)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
3 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
4 * -- CABAL -- connection base (servers usage)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
5 *
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
6 * Copyright (c) 2007-2008 Vlad Glagolev <enqlave@gmail.com>
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
7 * All rights reserved.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
8 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
9 * 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
10 * 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
11 * copyright notice and this permission notice appear in all copies.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
12 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
13 * 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
14 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
15 * 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
16 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
17 * 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
18 * 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
19 * 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
20 */
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
21
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
22 #include "cabal.hpp" // required: core.hpp
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
23
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
24 Connection::Connection():
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
25 nick(NICK),
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
26 user(USER),
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
27 name(NAME),
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
28 chan(CHANNEL),
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
29 key(CHANNEL_KEY)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
30 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
31 hosts = current = NULL;
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
32
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
33 now = CABAL->now;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
34
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
35 uptime = 0;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
36
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
37 cout << "CONNECTION: opening...\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
38 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
39
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
40 Connection::~Connection()
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
41 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
42 cout << "CONNECTION: closed\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
43 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
44
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
45 void Connection::ircConnect()
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
46 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
47 if (!current)
5
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
48 shut("no hosts defined");
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
49
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
50 if (!connected && !connecting) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
51 cout << "CONNECTION: connecting to server: " << current->host << endl;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
52
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
53 if (!resolveHost(current->host, &address)) {
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
54 cout << "Error: unable to resolve host " << current->host << endl;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
55
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
56 current = current->next;
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
57 } else if (!activateTCP(current->port, virtualhost)) {
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
58 cout << "Error: unable to open socket\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
59
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
60 return;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
61 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
62 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
63
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
64 if (!openHost())
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
65 current = current->next;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
66
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
67 if (!connected)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
68 return;
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 uptime = now;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
71
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
72 if (current->password)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
73 ircPass(current->password);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
74
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
75 ircNick(nick);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
76 ircUser(user, name);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
77 ircJoin(chan, key);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
78 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
79
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
80 void Connection::establish()
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
81 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
82 if (!connected) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
83 ircConnect();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
84
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
85 return;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
86 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
87
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
88 string buffer = receiveMsg();
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
89
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
90 if (buffer != "") {
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
91 Parser *DATA = new Parser(this, buffer);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
92
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
93 DATA->Parse(this);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
94
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
95 delete DATA;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
96 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
97 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
98
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
99 void Connection::ircPass(string p)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
100 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
101 sendMsg("PASS " + p);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
102 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
103
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
104 void Connection::ircNick(string n)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
105 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
106 sendMsg("NICK " + (n != "" ? n: NICK));
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
107 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
108
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
109 void Connection::ircUser(string u, string n)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
110 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
111 sendMsg("USER " + u + (virtualhost ? " " + (string)virtualhost + " ": \
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
112 " 0 ") + (string)current->host + " :" + n);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
113 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
114
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
115 void Connection::ircAway(string m)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
116 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
117 sendMsg("AWAY :" + m);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
118 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
119
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
120 void Connection::ircJoin(string c, string k)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
121 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
122 sendMsg("JOIN " + c + (k != "" ? " " + k: ""));
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
123 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
124
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
125 void Connection::ircPart(string c)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
126 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
127 sendMsg("PART " + c);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
128 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
129
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
130 void Connection::ircCycle(string c)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
131 {
6
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
132 sendMsg("PART " + c);
9be05a31b7f9 Enqlave IRC Network => Vaygr IRC Network
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
133 sendMsg("JOIN " + c);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
134 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
135
5
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
136 Connection::host_type *Connection::addHost(host_type *list, pchar host, \
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
137 int port, pchar password)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
138 {
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
139 if (!list)
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
140 current = list = new host_type(host, port, password);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
141 else if (list->next == current)
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
142 list->next = new host_type(host, port, password, current);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
143 else
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
144 return addHost(list->next, host, port, password);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
145
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
146 return list;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
147 }