summaryrefslogtreecommitdiff
authorskyhusker <skyhusker>2005-05-31 21:08:33 (UTC)
committer skyhusker <skyhusker>2005-05-31 21:08:33 (UTC)
commitb30f28de8d5fa29001bc73a0a0e56ef653f1269f (patch) (unidiff)
treebd6530f1ba36fb7bf96c1d8c2962446cab416da8
parent89417179ed4d38875dc3edce0f4e184edf13f1f2 (diff)
downloadopie-b30f28de8d5fa29001bc73a0a0e56ef653f1269f.zip
opie-b30f28de8d5fa29001bc73a0a0e56ef653f1269f.tar.gz
opie-b30f28de8d5fa29001bc73a0a0e56ef653f1269f.tar.bz2
Fix channel name validation. Thanks to hrw for reporting.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircservertab.cpp5
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
47void IRCServerTab::scrolling(){ 47void IRCServerTab::scrolling(){
48 m_textview->ensureVisible(0, m_textview->contentsHeight()); 48 m_textview->ensureVisible(0, m_textview->contentsHeight());
49} 49}
50 50
51 51
52void IRCServerTab::appendText(QString text) { 52void 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
71IRCServerTab::~IRCServerTab() { 71IRCServerTab::~IRCServerTab() {
72 delete m_session; 72 delete m_session;
73} 73}
74 74
75void IRCServerTab::removeChannelTab(IRCChannelTab *tab) { 75void IRCServerTab::removeChannelTab(IRCChannelTab *tab) {
76 m_channelTabs.remove(tab); 76 m_channelTabs.remove(tab);
77} 77}
78 78
79void IRCServerTab::removeQueryTab(IRCQueryTab *tab) { 79void IRCServerTab::removeQueryTab(IRCQueryTab *tab) {
80 m_queryTabs.remove(tab); 80 m_queryTabs.remove(tab);
81} 81}
82 82
83void IRCServerTab::addQueryTab(IRCQueryTab *tab) { 83void IRCServerTab::addQueryTab(IRCQueryTab *tab) {
84 m_queryTabs.append(tab); 84 m_queryTabs.append(tab);
85} 85}
86 86
87QString IRCServerTab::title() { 87QString IRCServerTab::title() {
88 return "Server"; 88 return "Server";
89} 89}
90 90
91IRCSession *IRCServerTab::session() { 91IRCSession *IRCServerTab::session() {
92 return m_session; 92 return m_session;
93} 93}
94/* 94/*
95QString *IRCServerTab::mynick() { 95QString *IRCServerTab::mynick() {
96 return (*m_server->nick()); 96 return (*m_server->nick());
97} */ 97} */
98 98
99IRCServer *IRCServerTab::server() { 99IRCServer *IRCServerTab::server() {
100 return &m_server; 100 return &m_server;
101} 101}
102 102
103void IRCServerTab::settingsChanged() { 103void 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
108void IRCServerTab::executeCommand(IRCTab *tab, QString line) { 108void 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);