KVIrc 5.2.4
Developer APIs
KviIrcMessage.h
Go to the documentation of this file.
1#ifndef _KVI_IRCMESSAGE_H_
2#define _KVI_IRCMESSAGE_H_
3//=============================================================================
4//
5// File : KviIrcMessage.h
6// Creation date : Fri Aug 2 23:08:55 2002 GMT by Szymon Stefanek
7//
8// This file is part of the KVIrc IRC client distribution
9// Copyright (C) 2002-2010 Szymon Stefanek (pragma at kvirc dot net)
10//
11// This program is FREE software. You can redistribute it and/or
12// modify it under the terms of the GNU General Public License
13// as published by the Free Software Foundation; either version 2
14// of the License, or (at your option) any later version.
15//
16// This program is distributed in the HOPE that it will be USEFUL,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19// See the GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program. If not, write to the Free Software Foundation,
23// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24//
25//=============================================================================
26
27#include "kvi_settings.h"
28#include "KviCString.h"
29#include "KviConsoleWindow.h"
30
31#include <QDateTime>
32#include <QString>
33#include <vector>
34
35class KviConneciton;
37class KviIrcContext;
38class KviKvsHash;
39
40//
41// This is a single IRC message received from the server.
42// The message is strictly associated to the connection it came from.
43//
44// The IRC protocol is strictly 8 bit and thus the strings
45// are all 8 bit strings. The decoding of these strings should
46// be done on the targeting context (mainly channel or query...)
47//
48
50{
51public:
52 KviIrcMessage(const char * message, KviIrcConnection * pConnection);
53 KviIrcMessage(const KviIrcMessage &) = delete;
54 KviIrcMessage & operator=(const KviIrcMessage & other) = delete;
56
57public:
61 enum Flags
62 {
67 HaltOutput = 1,
71 Unrecognized = 2
72 };
73
74private:
75 const char * m_ptr; // shallow! never null
76 KviCString m_szPrefix; // the extracted prefix string
77 KviCString m_szMessageTags; // the extracted message tags
78 KviCString m_szCommand; // the extracted command (may be numeric)
79 std::vector<KviCString> m_pParams; // the list of parameters
80 QHash<QString, QString> m_ParsedMessageTags; // parsed messaged tags
81 KviConsoleWindow * m_pConsole; // the console we're attacched to
82 KviIrcConnection * m_pConnection; // the connection we're attacched to
83 int m_iNumericCommand; // the numeric of the command (0 if non numeric)
84 int m_iFlags; // yes.. flags :D
85 QDateTime m_time; // from server-time tag, if presented
86public:
87 KviConsoleWindow * console() { return m_pConsole; };
88 KviIrcConnection * connection() { return m_pConsole->connection(); };
89
90 bool isNumeric() { return (m_iNumericCommand >= 0); };
91 const char * command() { return m_szCommand.ptr(); };
92 KviCString * commandPtr() { return &m_szCommand; };
93 int numeric() { return m_iNumericCommand; };
94
95 KviCString * prefixPtr() { return &m_szPrefix; };
96 const char * prefix() { return m_szPrefix.ptr(); };
97 const char * safePrefix();
98 bool hasPrefix() { return m_szPrefix.hasData(); };
99
100 KviCString * messageTagsPtr() { return &m_szMessageTags; };
101 const char * messageTags() { return m_szMessageTags.ptr(); };
102 bool hasMessageTags() { return m_szMessageTags.hasData(); };
103
104 QString * messageTagPtr(const QString & szTag);
105 bool hasMessageTag(const QString & szTag) { return m_ParsedMessageTags.contains(szTag); };
106 QHash<QString, QString> & messageTagsMap() { return m_ParsedMessageTags; };
107 KviKvsHash * messageTagsKvsHash();
108
109 QDateTime serverTime() { return m_time; }
110
111 bool isEmpty() { return (m_szPrefix.isEmpty() && m_szCommand.isEmpty() && m_pParams.empty()); };
112
113 int paramCount() { return m_pParams.size(); };
114
115 const char * param(unsigned int idx) { return (idx < m_pParams.size()) ? m_pParams[idx].ptr() : 0; };
116
117 const char * safeParam(unsigned int idx) { return (idx < m_pParams.size()) ? m_pParams[idx].ptr() : KviCString::emptyString().ptr(); };
118
119 KviCString paramString(unsigned int idx) { return m_pParams[idx]; };
120
121 const char * trailing()
122 {
123 if(m_pParams.empty())
124 return nullptr;
125 return m_pParams.back();
126 };
127 KviCString trailingString() { return m_pParams.back(); };
129 {
130 if(m_pParams.empty())
132 return m_pParams.back();
133 };
134 const char * safeTrailing()
135 {
136 if(m_pParams.empty())
137 return KviCString::emptyString().ptr();
138 return m_pParams.back().ptr();
139 };
140
141 const char * allParams() { return m_ptr; };
142
143 KviCString firstParam() { return m_pParams.front(); };
144 std::vector<KviCString> const & params() const { return m_pParams; };
145
146 void setHaltOutput() { m_iFlags |= HaltOutput; };
147 bool haltOutput() { return (m_iFlags & HaltOutput); };
148 void setUnrecognized() { m_iFlags |= Unrecognized; };
149 bool unrecognized() { return (m_iFlags & Unrecognized); };
150
151 void decodeAndSplitPrefix(QString & szNick, QString & szUser, QString & szHost);
152 void decodeAndSplitMask(char * mask, QString & szNick, QString & szUser, QString & szHost);
153
154private:
155 void parseMessageTags();
156};
157
158#endif //_KVI_IRCMESSAGE_H_
Definition KviCString.h:102
bool hasData() const
Definition KviCString.h:172
char * ptr() const
Definition KviCString.h:163
bool isEmpty() const
Definition KviCString.h:171
static KviCString & emptyString()
Definition KviCString.cpp:3171
Definition KviConsoleWindow.h:74
An abstraction of a connection to an IRC server.
Definition KviIrcConnection.h:97
Definition KviIrcContext.h:60
Definition KviIrcMessage.h:50
bool isNumeric()
Definition KviIrcMessage.h:90
const char * command()
Definition KviIrcMessage.h:91
void setUnrecognized()
Definition KviIrcMessage.h:148
bool haltOutput()
Definition KviIrcMessage.h:147
const char * safeTrailing()
Definition KviIrcMessage.h:134
std::vector< KviCString > const & params() const
Definition KviIrcMessage.h:144
KviCString paramString(unsigned int idx)
Definition KviIrcMessage.h:119
bool unrecognized()
Definition KviIrcMessage.h:149
QDateTime m_time
Definition KviIrcMessage.h:85
KviIrcConnection * m_pConnection
Definition KviIrcMessage.h:82
KviCString * messageTagsPtr()
Definition KviIrcMessage.h:100
bool hasMessageTags()
Definition KviIrcMessage.h:102
KviCString & safeTrailingString()
Definition KviIrcMessage.h:128
const char * param(unsigned int idx)
Definition KviIrcMessage.h:115
KviCString * commandPtr()
Definition KviIrcMessage.h:92
KviCString firstParam()
Definition KviIrcMessage.h:143
std::vector< KviCString > m_pParams
Definition KviIrcMessage.h:79
int numeric()
Definition KviIrcMessage.h:93
const char * allParams()
Definition KviIrcMessage.h:141
const char * prefix()
Definition KviIrcMessage.h:96
KviCString m_szCommand
Definition KviIrcMessage.h:78
KviIrcMessage(const KviIrcMessage &)=delete
KviConsoleWindow * console()
Definition KviIrcMessage.h:87
KviCString * prefixPtr()
Definition KviIrcMessage.h:95
KviIrcMessage & operator=(const KviIrcMessage &other)=delete
bool isEmpty()
Definition KviIrcMessage.h:111
KviIrcConnection * connection()
Definition KviIrcMessage.h:88
const char * messageTags()
Definition KviIrcMessage.h:101
KviCString m_szPrefix
Definition KviIrcMessage.h:76
int paramCount()
Definition KviIrcMessage.h:113
int m_iNumericCommand
Definition KviIrcMessage.h:83
bool hasMessageTag(const QString &szTag)
Definition KviIrcMessage.h:105
KviCString trailingString()
Definition KviIrcMessage.h:127
void setHaltOutput()
Definition KviIrcMessage.h:146
QHash< QString, QString > & messageTagsMap()
Definition KviIrcMessage.h:106
QHash< QString, QString > m_ParsedMessageTags
Definition KviIrcMessage.h:80
KviCString m_szMessageTags
Definition KviIrcMessage.h:77
const char * trailing()
Definition KviIrcMessage.h:121
KviConsoleWindow * m_pConsole
Definition KviIrcMessage.h:81
const char * safeParam(unsigned int idx)
Definition KviIrcMessage.h:117
Flags
Definition KviIrcMessage.h:62
const char * m_ptr
Definition KviIrcMessage.h:75
QDateTime serverTime()
Definition KviIrcMessage.h:109
bool hasPrefix()
Definition KviIrcMessage.h:98
int m_iFlags
Definition KviIrcMessage.h:84
This class defines a new data type which contains hash data.
Definition KviKvsHash.h:48
KviIrcConnection * connection()
Returns the current IRC connection (if any)
Definition KviWindow.cpp:1373
This file contains compile time settings.
#define KVIRC_API
Definition kvi_settings.h:127
QString szHost
Definition libkvisetup.cpp:48