summaryrefslogtreecommitdiff
authorskyhusker <skyhusker>2005-06-09 20:06:01 (UTC)
committer skyhusker <skyhusker>2005-06-09 20:06:01 (UTC)
commitccc819750468aa161255e863dac4d2ca55ace253 (patch) (unidiff)
treedcd5f82590f051fe6c6efc6380cc4fc603bb1ae9
parent5173a392a1422add3e3ae2a38d6bd4eb5df3cf87 (diff)
downloadopie-ccc819750468aa161255e863dac4d2ca55ace253.zip
opie-ccc819750468aa161255e863dac4d2ca55ace253.tar.gz
opie-ccc819750468aa161255e863dac4d2ca55ace253.tar.bz2
Fix #1665
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircmessage.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/noncore/net/opieirc/ircmessage.cpp b/noncore/net/opieirc/ircmessage.cpp
index da8db77..f4b09bc 100644
--- a/noncore/net/opieirc/ircmessage.cpp
+++ b/noncore/net/opieirc/ircmessage.cpp
@@ -1,138 +1,138 @@
1#include <opie2/odebug.h> 1#include <opie2/odebug.h>
2 2
3using namespace Opie::Core; 3using namespace Opie::Core;
4 4
5 5
6#include <qtextstream.h> 6#include <qtextstream.h>
7#include <qstring.h> 7#include <qstring.h>
8#include <qstringlist.h> 8#include <qstringlist.h>
9#include <qregexp.h> 9#include <qregexp.h>
10 10
11#include "ircmessage.h" 11#include "ircmessage.h"
12 12
13/* 13/*
14 * Create a new IRCMessage by evaluating 14 * Create a new IRCMessage by evaluating
15 * a received string 15 * a received string
16 */ 16 */
17 17
18IRCMessage::IRCMessage(QString line) { 18IRCMessage::IRCMessage(QString line) {
19 /* Remove CRs from the message */ 19 /* Remove CRs from the message */
20 while((line.right(1) == "\n") || (line.right(1) == "\r")) 20 while((line.right(1) == "\n") || (line.right(1) == "\r"))
21 line = line.left(line.length() - 1); 21 line = line.left(line.length() - 1);
22 QTextIStream stream(&line); 22 QTextIStream stream(&line);
23 QString temp; 23 QString temp;
24 24
25 stream >> temp; 25 stream >> temp;
26 if (temp.startsWith(":")) { 26 if (temp.startsWith(":")) {
27 /* extract the prefix */ 27 /* extract the prefix */
28 m_prefix = temp.right(temp.length()-1); 28 m_prefix = temp.right(temp.length()-1);
29 stream >> temp; 29 stream >> temp;
30 m_command = temp.upper(); 30 m_command = temp.upper();
31 m_allParameters = line.right(line.length() - m_prefix.length() - m_command.length() - 3); 31 m_allParameters = line.right(line.length() - m_prefix.length() - m_command.length() - 3);
32 } else { 32 } else {
33 m_command = temp.upper(); 33 m_command = temp.upper();
34 m_allParameters = line.right(line.length() - m_command.length() - 1); 34 m_allParameters = line.right(line.length() - m_command.length() - 1);
35 } 35 }
36 36
37 /* Create a list of all parameters */ 37 /* Create a list of all parameters */
38 while(!(stream.atEnd())) { 38 while(!(stream.atEnd())) {
39 stream >> temp; 39 stream >> temp;
40 if (temp.startsWith(":")) { 40 if (temp.startsWith(":")) {
41 /* last parameter */ 41 /* last parameter */
42 m_trailing = line.right(line.length() - line.find(QChar(':'), 1) - 1); 42 m_trailing = line.right(line.length() - line.find(" :") - 2);
43 m_parameters << m_trailing; 43 m_parameters << m_trailing;
44 break; 44 break;
45 } else { 45 } else {
46 m_parameters << temp; 46 m_parameters << temp;
47 } 47 }
48 } 48 }
49 49
50 50
51 m_commandNumber = m_command.toInt(&m_isNumerical); 51 m_commandNumber = m_command.toInt(&m_isNumerical);
52 /* Is this a CTCP command */ 52 /* Is this a CTCP command */
53 if ((m_command == "PRIVMSG" || m_command == "NOTICE") && m_trailing.length()>0 && m_trailing.left(1) == QChar(1)) { 53 if ((m_command == "PRIVMSG" || m_command == "NOTICE") && m_trailing.length()>0 && m_trailing.left(1) == QChar(1)) {
54 m_ctcp = TRUE; 54 m_ctcp = TRUE;
55 55
56 m_ctcpRequest = (m_command == "PRIVMSG"); 56 m_ctcpRequest = (m_command == "PRIVMSG");
57 57
58 /* Strip CTCP \001 characters */ 58 /* Strip CTCP \001 characters */
59 m_allParameters = m_allParameters.replace(QRegExp(QChar(1)), ""); 59 m_allParameters = m_allParameters.replace(QRegExp(QChar(1)), "");
60 QTextIStream ctcpStream(&m_allParameters); 60 QTextIStream ctcpStream(&m_allParameters);
61 ctcpStream >> m_ctcpDestination; 61 ctcpStream >> m_ctcpDestination;
62 ctcpStream >> temp; 62 ctcpStream >> temp;
63 m_ctcpCommand = temp.upper().right(temp.length()-1); 63 m_ctcpCommand = temp.upper().right(temp.length()-1);
64 m_parameters.clear(); 64 m_parameters.clear();
65 int length = m_allParameters.length() - m_ctcpCommand.length() - 1; 65 int length = m_allParameters.length() - m_ctcpCommand.length() - 1;
66 length -= m_ctcpDestination.length() + 1; 66 length -= m_ctcpDestination.length() + 1;
67 if (length <= 0) { 67 if (length <= 0) {
68 m_allParameters = ""; 68 m_allParameters = "";
69 } 69 }
70 else { 70 else {
71 m_allParameters = m_allParameters.right(length); 71 m_allParameters = m_allParameters.right(length);
72 m_parameters << m_allParameters; 72 m_parameters << m_allParameters;
73 } 73 }
74 } 74 }
75 else { 75 else {
76 m_ctcp = FALSE; 76 m_ctcp = FALSE;
77 } 77 }
78 78
79 79
80 odebug << "Parsed: " << line << oendl; 80 odebug << "Parsed: " << line << oendl;
81 odebug << "Prefix: " << m_prefix << oendl; 81 odebug << "Prefix: " << m_prefix << oendl;
82 odebug << "Command: " << m_command << oendl; 82 odebug << "Command: " << m_command << oendl;
83 odebug << "Allparameters: " << m_allParameters << oendl; 83 odebug << "Allparameters: " << m_allParameters << oendl;
84 84
85 for (unsigned int i=0; i<m_parameters.count(); i++) { 85 for (unsigned int i=0; i<m_parameters.count(); i++) {
86 odebug << "Parameter " << i << ":" << m_parameters[i] << oendl; 86 odebug << "Parameter " << i << ":" << m_parameters[i] << oendl;
87 } 87 }
88 88
89 if(m_ctcp) { 89 if(m_ctcp) {
90 odebug << "CTCP " << (m_ctcpRequest? "Request" : "Reply") << ": " << m_ctcpCommand << oendl; 90 odebug << "CTCP " << (m_ctcpRequest? "Request" : "Reply") << ": " << m_ctcpCommand << oendl;
91 odebug << "CTCP Destination: " << m_ctcpDestination << oendl; 91 odebug << "CTCP Destination: " << m_ctcpDestination << oendl;
92 odebug << "CTCP param count is: " << m_parameters.count() << oendl; 92 odebug << "CTCP param count is: " << m_parameters.count() << oendl;
93 } 93 }
94 94
95} 95}
96 96
97QString IRCMessage::param(int param) { 97QString IRCMessage::param(int param) {
98 return m_parameters[param]; 98 return m_parameters[param];
99} 99}
100 100
101QStringList IRCMessage::params(const QString &paramstring) const { 101QStringList IRCMessage::params(const QString &paramstring) const {
102 QStringList params, retvalue; 102 QStringList params, retvalue;
103 params = QStringList::split(',', paramstring); 103 params = QStringList::split(',', paramstring);
104 QStringList::Iterator end = params.end(); 104 QStringList::Iterator end = params.end();
105 105
106 for (QStringList::Iterator it = params.begin(); it != end; ++it) { 106 for (QStringList::Iterator it = params.begin(); it != end; ++it) {
107 int pos = (*it).find(':'); 107 int pos = (*it).find(':');
108 if(pos < 0) { 108 if(pos < 0) {
109 if((*it).toUInt() < m_parameters.count()) 109 if((*it).toUInt() < m_parameters.count())
110 retvalue << m_parameters[(*it).toUInt()]; 110 retvalue << m_parameters[(*it).toUInt()];
111 } 111 }
112 112
113 else { 113 else {
114 unsigned int start, end; 114 unsigned int start, end;
115 start = (*it).left(pos).toUInt(); 115 start = (*it).left(pos).toUInt();
116 end = (*it).mid(pos+1).toUInt(); 116 end = (*it).mid(pos+1).toUInt();
117 for (unsigned int i=start;i<=end && i < m_parameters.count() ;++i) { 117 for (unsigned int i=start;i<=end && i < m_parameters.count() ;++i) {
118 retvalue << m_parameters[i]; 118 retvalue << m_parameters[i];
119 } 119 }
120 } 120 }
121 } 121 }
122 122
123 return retvalue; 123 return retvalue;
124} 124}
125 125
126QString IRCMessage::prefix() { 126QString IRCMessage::prefix() {
127 return m_prefix; 127 return m_prefix;
128} 128}
129 129
130QString IRCMessage::command() { 130QString IRCMessage::command() {
131 return m_command; 131 return m_command;
132} 132}
133 133
134QString IRCMessage::ctcpCommand() { 134QString IRCMessage::ctcpCommand() {
135 return m_ctcpCommand; 135 return m_ctcpCommand;
136} 136}
137 137
138QString IRCMessage::ctcpDestination() { 138QString IRCMessage::ctcpDestination() {