author | skyhusker <skyhusker> | 2005-05-31 21:08:33 (UTC) |
---|---|---|
committer | skyhusker <skyhusker> | 2005-05-31 21:08:33 (UTC) |
commit | b30f28de8d5fa29001bc73a0a0e56ef653f1269f (patch) (unidiff) | |
tree | bd6530f1ba36fb7bf96c1d8c2962446cab416da8 | |
parent | 89417179ed4d38875dc3edce0f4e184edf13f1f2 (diff) | |
download | opie-b30f28de8d5fa29001bc73a0a0e56ef653f1269f.zip opie-b30f28de8d5fa29001bc73a0a0e56ef653f1269f.tar.gz opie-b30f28de8d5fa29001bc73a0a0e56ef653f1269f.tar.bz2 |
Fix channel name validation. Thanks to hrw for reporting.
-rw-r--r-- | noncore/net/opieirc/ircservertab.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/noncore/net/opieirc/ircservertab.cpp b/noncore/net/opieirc/ircservertab.cpp index d3c0448..5eb1758 100644 --- a/noncore/net/opieirc/ircservertab.cpp +++ b/noncore/net/opieirc/ircservertab.cpp | |||
@@ -24,195 +24,196 @@ IRCServerTab::IRCServerTab(IRCServer server, MainWindow *mainWindow, QWidget *pa | |||
24 | m_textview->setVScrollBarMode(QScrollView::AlwaysOn); | 24 | m_textview->setVScrollBarMode(QScrollView::AlwaysOn); |
25 | m_textview->setTextFormat(RichText); | 25 | m_textview->setTextFormat(RichText); |
26 | QWhatsThis::add(m_textview, tr("Server messages")); | 26 | QWhatsThis::add(m_textview, tr("Server messages")); |
27 | m_layout->add(m_textview); | 27 | m_layout->add(m_textview); |
28 | m_field = new IRCHistoryLineEdit(this); | 28 | m_field = new IRCHistoryLineEdit(this); |
29 | connect(m_field, SIGNAL(nextTab()), this, SIGNAL(nextTab())); | 29 | connect(m_field, SIGNAL(nextTab()), this, SIGNAL(nextTab())); |
30 | connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); | 30 | connect(m_field, SIGNAL(prevTab()), this, SIGNAL(prevTab())); |
31 | connect(m_field, SIGNAL(closeTab()), this, SIGNAL(closeTab())); | 31 | connect(m_field, SIGNAL(closeTab()), this, SIGNAL(closeTab())); |
32 | connect(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); | 32 | connect(this, SIGNAL(editFocus()), m_field, SLOT(setEditFocus())); |
33 | 33 | ||
34 | QWhatsThis::add(m_field, tr("Type commands here. A list of available commands can be found inside the OpieIRC help")); | 34 | QWhatsThis::add(m_field, tr("Type commands here. A list of available commands can be found inside the OpieIRC help")); |
35 | m_layout->add(m_field); | 35 | m_layout->add(m_field); |
36 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); | 36 | connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); |
37 | connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); | 37 | connect(m_session, SIGNAL(outputReady(IRCOutput)), this, SLOT(display(IRCOutput))); |
38 | connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); | 38 | connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); |
39 | connect(m_session, SIGNAL(updateChannels()), this, SLOT(slotUpdateChannels())); | 39 | connect(m_session, SIGNAL(updateChannels()), this, SLOT(slotUpdateChannels())); |
40 | settingsChanged(); | 40 | settingsChanged(); |
41 | 41 | ||
42 | m_field->setFocus(); | 42 | m_field->setFocus(); |
43 | m_field->setActiveWindow(); | 43 | m_field->setActiveWindow(); |
44 | 44 | ||
45 | } | 45 | } |
46 | 46 | ||
47 | void IRCServerTab::scrolling(){ | 47 | void IRCServerTab::scrolling(){ |
48 | m_textview->ensureVisible(0, m_textview->contentsHeight()); | 48 | m_textview->ensureVisible(0, m_textview->contentsHeight()); |
49 | } | 49 | } |
50 | 50 | ||
51 | 51 | ||
52 | void IRCServerTab::appendText(QString text) { | 52 | void IRCServerTab::appendText(QString text) { |
53 | /* not using append because it creates layout problems */ | 53 | /* not using append because it creates layout problems */ |
54 | QString txt = m_textview->text() + IRCTab::appendTimestamp( text ); | 54 | QString txt = m_textview->text() + IRCTab::appendTimestamp( text ); |
55 | 55 | ||
56 | 56 | ||
57 | 57 | ||
58 | if (m_maxLines > 0 && m_lines >= m_maxLines) { | 58 | if (m_maxLines > 0 && m_lines >= m_maxLines) { |
59 | int firstBreak = txt.find('\n'); | 59 | int firstBreak = txt.find('\n'); |
60 | if (firstBreak != -1) { | 60 | if (firstBreak != -1) { |
61 | txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1)); | 61 | txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1)); |
62 | } | 62 | } |
63 | } else { | 63 | } else { |
64 | m_lines++; | 64 | m_lines++; |
65 | } | 65 | } |
66 | m_textview->setText(txt); | 66 | m_textview->setText(txt); |
67 | m_textview->ensureVisible(0, m_textview->contentsHeight()); | 67 | m_textview->ensureVisible(0, m_textview->contentsHeight()); |
68 | emit changed(this); | 68 | emit changed(this); |
69 | } | 69 | } |
70 | 70 | ||
71 | IRCServerTab::~IRCServerTab() { | 71 | IRCServerTab::~IRCServerTab() { |
72 | delete m_session; | 72 | delete m_session; |
73 | } | 73 | } |
74 | 74 | ||
75 | void IRCServerTab::removeChannelTab(IRCChannelTab *tab) { | 75 | void IRCServerTab::removeChannelTab(IRCChannelTab *tab) { |
76 | m_channelTabs.remove(tab); | 76 | m_channelTabs.remove(tab); |
77 | } | 77 | } |
78 | 78 | ||
79 | void IRCServerTab::removeQueryTab(IRCQueryTab *tab) { | 79 | void IRCServerTab::removeQueryTab(IRCQueryTab *tab) { |
80 | m_queryTabs.remove(tab); | 80 | m_queryTabs.remove(tab); |
81 | } | 81 | } |
82 | 82 | ||
83 | void IRCServerTab::addQueryTab(IRCQueryTab *tab) { | 83 | void IRCServerTab::addQueryTab(IRCQueryTab *tab) { |
84 | m_queryTabs.append(tab); | 84 | m_queryTabs.append(tab); |
85 | } | 85 | } |
86 | 86 | ||
87 | QString IRCServerTab::title() { | 87 | QString IRCServerTab::title() { |
88 | return "Server"; | 88 | return "Server"; |
89 | } | 89 | } |
90 | 90 | ||
91 | IRCSession *IRCServerTab::session() { | 91 | IRCSession *IRCServerTab::session() { |
92 | return m_session; | 92 | return m_session; |
93 | } | 93 | } |
94 | /* | 94 | /* |
95 | QString *IRCServerTab::mynick() { | 95 | QString *IRCServerTab::mynick() { |
96 | return (*m_server->nick()); | 96 | return (*m_server->nick()); |
97 | } */ | 97 | } */ |
98 | 98 | ||
99 | IRCServer *IRCServerTab::server() { | 99 | IRCServer *IRCServerTab::server() { |
100 | return &m_server; | 100 | return &m_server; |
101 | } | 101 | } |
102 | 102 | ||
103 | void IRCServerTab::settingsChanged() { | 103 | void IRCServerTab::settingsChanged() { |
104 | m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>"); | 104 | m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>"); |
105 | m_lines = 0; | 105 | m_lines = 0; |
106 | } | 106 | } |
107 | 107 | ||
108 | void IRCServerTab::executeCommand(IRCTab *tab, QString line) { | 108 | void IRCServerTab::executeCommand(IRCTab *tab, QString line) { |
109 | QTextIStream stream(&line); | 109 | QTextIStream stream(&line); |
110 | QString command; | 110 | QString command; |
111 | stream >> command; | 111 | stream >> command; |
112 | command = command.upper().right(command.length()-1); | 112 | command = command.upper().right(command.length()-1); |
113 | 113 | ||
114 | //JOIN | 114 | //JOIN |
115 | if (command == "JOIN" || command == "J") { | 115 | if (command == "JOIN" || command == "J") { |
116 | QString channel; | 116 | QString channel; |
117 | stream >> channel; | 117 | stream >> channel; |
118 | /* According to RFC 1459 */ | 118 | /* According to RFC 1459 */ |
119 | if (channel.length() > 0 && channel.length() < 200 && | 119 | if (channel.length() > 0 && channel.length() < 200 && |
120 | channel.find(",") == -1 && channel.find("") == -1) { | 120 | channel.find(",") == -1 && channel.find('\007') == -1) { |
121 | 121 | ||
122 | if (!channel.startsWith("#") && !channel.startsWith("&")) { | 122 | if (!channel.startsWith("#") && !channel.startsWith("&") |
123 | && !channel.startsWith("+") && !channel.startsWith("!")) { | ||
123 | channel = channel.prepend("#"); | 124 | channel = channel.prepend("#"); |
124 | } | 125 | } |
125 | m_session->join(channel); | 126 | m_session->join(channel); |
126 | } else { | 127 | } else { |
127 | tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>"); | 128 | tab->appendText("<font color=\"" + m_errorColor + "\">Unknown channel format!</font><br>"); |
128 | } | 129 | } |
129 | } | 130 | } |
130 | 131 | ||
131 | //KICK | 132 | //KICK |
132 | else if (command == "KICK"){ | 133 | else if (command == "KICK"){ |
133 | QString nickname; | 134 | QString nickname; |
134 | stream >> nickname; | 135 | stream >> nickname; |
135 | if (nickname.length() > 0) { | 136 | if (nickname.length() > 0) { |
136 | if (line.length() > 7 + nickname.length()) { | 137 | if (line.length() > 7 + nickname.length()) { |
137 | QString text = line.right(line.length()-nickname.length()-7); | 138 | QString text = line.right(line.length()-nickname.length()-7); |
138 | IRCPerson person; | 139 | IRCPerson person; |
139 | person.setNick(nickname); | 140 | person.setNick(nickname); |
140 | m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text); | 141 | m_session->kick(((IRCChannelTab *)tab)->channel(), &person, text); |
141 | } else { | 142 | } else { |
142 | IRCPerson person; | 143 | IRCPerson person; |
143 | person.setNick(nickname); | 144 | person.setNick(nickname); |
144 | m_session->kick(((IRCChannelTab *)tab)->channel(), &person); | 145 | m_session->kick(((IRCChannelTab *)tab)->channel(), &person); |
145 | } | 146 | } |
146 | } | 147 | } |
147 | } | 148 | } |
148 | 149 | ||
149 | else if (command == "OP"){ | 150 | else if (command == "OP"){ |
150 | QString nickname; | 151 | QString nickname; |
151 | stream >> nickname; | 152 | stream >> nickname; |
152 | if (nickname.length() > 0) { | 153 | if (nickname.length() > 0) { |
153 | QString text = line.right(line.length()-nickname.length()-5); | 154 | QString text = line.right(line.length()-nickname.length()-5); |
154 | IRCPerson person; | 155 | IRCPerson person; |
155 | person.setNick(nickname); | 156 | person.setNick(nickname); |
156 | m_session->op(((IRCChannelTab *)tab)->channel(), &person); | 157 | m_session->op(((IRCChannelTab *)tab)->channel(), &person); |
157 | } | 158 | } |
158 | } | 159 | } |
159 | 160 | ||
160 | //SEND MODES | 161 | //SEND MODES |
161 | else if (command == "MODE"){ | 162 | else if (command == "MODE"){ |
162 | QString text = line.right(line.length()-6); | 163 | QString text = line.right(line.length()-6); |
163 | if (text.length() > 0) { | 164 | if (text.length() > 0) { |
164 | m_session->mode(text); | 165 | m_session->mode(text); |
165 | } else { | 166 | } else { |
166 | tab->appendText("<font color=\"" + m_errorColor + "\">/mode channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask]<br>/mode nickname {[+|-]|i|w|s|o}</font><br>"); | 167 | tab->appendText("<font color=\"" + m_errorColor + "\">/mode channel {[+|-]|o|p|s|i|t|n|b|v} [limit] [user] [ban mask]<br>/mode nickname {[+|-]|i|w|s|o}</font><br>"); |
167 | } | 168 | } |
168 | } | 169 | } |
169 | //SEND RAW MESSAGE TO SERVER, COMPLETELY UNCHECKED - anything in the RFC...or really anything you want | 170 | //SEND RAW MESSAGE TO SERVER, COMPLETELY UNCHECKED - anything in the RFC...or really anything you want |
170 | else if (command == "RAW"){ | 171 | else if (command == "RAW"){ |
171 | QString text = line.right(line.length()-5); | 172 | QString text = line.right(line.length()-5); |
172 | if (text.length() > 0) { | 173 | if (text.length() > 0) { |
173 | m_session->raw(text); | 174 | m_session->raw(text); |
174 | } | 175 | } |
175 | } | 176 | } |
176 | else if (command == "SUSPEND"){ | 177 | else if (command == "SUSPEND"){ |
177 | QString text = line.right(line.length()-9); | 178 | QString text = line.right(line.length()-9); |
178 | if (text.upper() == "ON") { | 179 | if (text.upper() == "ON") { |
179 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | 180 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; |
180 | } | 181 | } |
181 | else if (text.upper() == "OFF"){ | 182 | else if (text.upper() == "OFF"){ |
182 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; | 183 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; |
183 | } else { | 184 | } else { |
184 | tab->appendText("<font color=\"" + m_errorColor + "\">Line: "+ line +"</font><br>Text: "+text); | 185 | tab->appendText("<font color=\"" + m_errorColor + "\">Line: "+ line +"</font><br>Text: "+text); |
185 | } | 186 | } |
186 | } | 187 | } |
187 | 188 | ||
188 | else if (command == "QUIT"){ | 189 | else if (command == "QUIT"){ |
189 | QString text = line.right(line.length()-6); | 190 | QString text = line.right(line.length()-6); |
190 | if (text.length() > 0) { | 191 | if (text.length() > 0) { |
191 | m_session->quit(text); | 192 | m_session->quit(text); |
192 | } else { | 193 | } else { |
193 | m_session->quit(); | 194 | m_session->quit(); |
194 | } | 195 | } |
195 | } | 196 | } |
196 | 197 | ||
197 | //SEND ACTION | 198 | //SEND ACTION |
198 | else if (command == "ME") { | 199 | else if (command == "ME") { |
199 | QString text = line.right(line.length()-4); | 200 | QString text = line.right(line.length()-4); |
200 | if (text.length() > 0) { | 201 | if (text.length() > 0) { |
201 | if (tab->isA("IRCChannelTab")) { | 202 | if (tab->isA("IRCChannelTab")) { |
202 | tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); | 203 | tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); |
203 | m_session->sendAction(((IRCChannelTab *)tab)->channel(), text); | 204 | m_session->sendAction(((IRCChannelTab *)tab)->channel(), text); |
204 | } else if (tab->isA("IRCQueryTab")) { | 205 | } else if (tab->isA("IRCQueryTab")) { |
205 | tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); | 206 | tab->appendText("<font color=\"" + m_selfColor + "\">*" + IRCOutput::toHTML(m_server.nick()) + " " + IRCOutput::toHTML(text) + "</font><br>"); |
206 | m_session->sendAction(((IRCQueryTab *)tab)->person(), text); | 207 | m_session->sendAction(((IRCQueryTab *)tab)->person(), text); |
207 | } else { | 208 | } else { |
208 | tab->appendText("<font color=\"" + m_errorColor + "\">Invalid tab for this command</font><br>"); | 209 | tab->appendText("<font color=\"" + m_errorColor + "\">Invalid tab for this command</font><br>"); |
209 | } | 210 | } |
210 | } | 211 | } |
211 | } | 212 | } |
212 | //SEND PRIVMSG | 213 | //SEND PRIVMSG |
213 | else if (command == "MSG") { | 214 | else if (command == "MSG") { |
214 | QString nickname; | 215 | QString nickname; |
215 | stream >> nickname; | 216 | stream >> nickname; |
216 | if (nickname.length() > 0) { | 217 | if (nickname.length() > 0) { |
217 | if (line.length() > 6 + nickname.length()) { | 218 | if (line.length() > 6 + nickname.length()) { |
218 | QString text = line.right(line.length()-nickname.length()-6); | 219 | QString text = line.right(line.length()-nickname.length()-6); |