Mercurial > cabal
annotate sources/connection.cpp @ 5:0faceb076254
code clean up
added PID to the default Core argument
bool => true|false
| author | Vlad Glagolev <enqlave@gmail.com> |
|---|---|
| date | Thu, 24 Jan 2008 21:00:52 +0300 |
| parents | a7051ac7118b |
| children | 9be05a31b7f9 |
| 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 | 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 |
|
4
a7051ac7118b
added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents:
2
diff
changeset
|
22 #include "cabal.hpp" // required: core.h |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
23 |
| 2 | 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 { |
|
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
31 hosts = current = 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 | 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 | 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 | 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 |
| 2 | 99 void Connection::ircPass(string pass) |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
100 { |
| 2 | 101 sendMsg("PASS " + pass); |
|
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 |
| 2 | 104 void Connection::ircNick(string nnick) |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
105 { |
| 2 | 106 sendMsg("NICK " + (nnick != "" ? nnick : 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 |
| 2 | 109 void Connection::ircUser(string nuser, string nname) |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
110 { |
| 2 | 111 sendMsg("USER " + nuser + (virtualhost != 0 ? " " + (string)virtualhost + \ |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
112 " " : " 0 ") + (string)current->host + " :" + nname); |
|
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 |
| 2 | 115 void Connection::ircAway(string away) |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
116 { |
| 2 | 117 sendMsg("AWAY :" + away); |
|
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 |
| 5 | 120 void Connection::ircJoin(string chan, string key) |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
121 { |
| 5 | 122 sendMsg("JOIN " + chan + (key != "" ? " " + key : "")); |
|
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 |
| 5 | 125 void Connection::ircPart(string chan) |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
126 { |
| 5 | 127 sendMsg("PART " + chan); |
|
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 |
| 5 | 130 void Connection::ircCycle(string chan) |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
131 { |
| 5 | 132 sendMsg("PART " + chan); |
| 133 sendMsg("JOIN " + chan); | |
|
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 | 136 Connection::host_type *Connection::addHost(host_type *list, pchar host, \ |
| 137 int port, pchar password) | |
|
0
bafff9de2a76
Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff
changeset
|
138 { |
| 2 | 139 if (!list) |
| 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 | 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 | 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 } |
