1 /* 2 * ircengine.h 3 * 4 * Copyright 2010 David Vachulka <arch_dvx@users.sourceforge.net> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 19 * MA 02110-1301, USA. 20 */ 21 22 23 #ifndef IRCENGINE_H 24 #define IRCENGINE_H 25 26 #ifndef DXSOCKET_H 27 #include "dxsocket.h" 28 #endif 29 #include "defs.h" 30 #include "config.h" 31 #include "dxutils.h" 32 33 class IrcEngine: public FXObject 34 { 35 FXDECLARE(IrcEngine) 36 friend class IrcTabItem; 37 public: 38 IrcEngine(FXApp*, FXObject*, FXString, FXString); 39 virtual ~IrcEngine(); 40 41 void startConnection(); 42 void disconnect(); 43 void disconnect(const FXString &reason); 44 void reconnect(); 45 void closeConnection(FXbool disableReconnect=FALSE); 46 void appendTarget(FXObject*); 47 void removeTarget(FXObject*); 48 FXbool findTarget(FXObject*); 49 FXbool clearTarget(); clearAttempts()50 void clearAttempts() { m_attempts = 0; } setServerName(const FXString & name)51 void setServerName(const FXString &name) { m_serverName = name; } getServerName()52 FXString getServerName() const { return m_serverName; } getNetworkName()53 FXString getNetworkName() const { return m_networkName; } setServerPort(FXint port)54 void setServerPort(FXint port) { m_serverPort = port; } getServerPort()55 FXint getServerPort() const { return m_serverPort; } setServerPassword(const FXString & pass)56 void setServerPassword(const FXString &pass) { m_serverPassword = pass; } setNickName(const FXString & nick)57 void setNickName(const FXString &nick) { m_nickName = nick; } getNickName()58 FXString getNickName() const { return m_nickName; } 59 void setUserName(const FXString &user); setRealName(const FXString & realname)60 void setRealName(const FXString &realname) { m_realName = realname; } setStartChannels(const FXString & channels)61 void setStartChannels(const FXString &channels) { m_startChannels = dxutils::removeSpaces(channels); } setStartCommands(const FXString & commands)62 void setStartCommands(const FXString &commands) { m_startCommands = commands; } setUseSsl(const FXbool & usessl)63 void setUseSsl(const FXbool &usessl) { m_useSsl = usessl; } getConnected()64 FXbool getConnected() const { return m_connected; } getConnecting()65 FXbool getConnecting() const { return m_connecting; } getUseSsl()66 FXbool getUseSsl() const { return m_useSsl; } getNickLen()67 FXint getNickLen() const { return m_nickLen; } getTopicLen()68 FXint getTopicLen() const { return m_topicLen; } getKickLen()69 FXint getKickLen() const { return m_kickLen; } getAwayLen()70 FXint getAwayLen() const { return m_awayLen; } getAdminPrefix()71 FXchar getAdminPrefix() const { return m_adminPrefix; } getOwnerPrefix()72 FXchar getOwnerPrefix() const { return m_ownerPrefix; } getOpPrefix()73 FXchar getOpPrefix() const { return m_opPrefix; } getVoicePrefix()74 FXchar getVoicePrefix() const { return m_voicePrefix; } getHalfopPrefix()75 FXchar getHalfopPrefix() const { return m_halfopPrefix; } getChanTypes()76 FXString getChanTypes() const { return m_chanTypes; } getLocalIP()77 FXString getLocalIP() { return m_socket->getLocalIP(); } 78 FXString getLocalIPBinary(); 79 FXString getHostname(const FXString &address); getRemoteIP()80 FXString getRemoteIP() { return m_socket->getRemoteIP(); } 81 void addIgnoreWho(const FXString &who); 82 void addNick(const FXString &nick, const FXString &user, const FXString &real, const FXString &host, const FXbool &away); 83 void addNick(const FXString &nick, const FXString &user, const FXString &real, const FXString &host); 84 void removeNick(const FXString &nick); 85 NickInfo getNickInfo(const FXString &nick) const; 86 FXString getBannedNick(const FXString &banmask) const; 87 dxStringArray getChannelsList() const; 88 void clearChannelsList(); 89 FXbool sendAdmin(const FXString ¶ms); 90 FXbool sendAway(const FXString ¶ms); 91 FXbool sendBanlist(const FXString &channel); 92 FXbool sendCtcp(const FXString &to, const FXString ¶ms); 93 FXbool sendCtcpNotice(const FXString &to, const FXString ¶ms); 94 FXbool sendMode(const FXString ¶ms); 95 FXbool sendInvite(const FXString &to, const FXString ¶ms); 96 FXbool sendJoin(const FXString &chan); 97 FXbool sendKick(const FXString &chan, const FXString &nick, const FXString &reason); 98 FXbool sendKill(const FXString &nick, const FXString &reason); 99 FXbool sendList(const FXString ¶ms); 100 FXbool sendMe(const FXString &to, const FXString &message); 101 FXbool sendMsg(const FXString &to, const FXString &message); 102 /** Send names request 103 * 104 * @param channel name of channel 105 * @param list true if command answer could be show 106 * @return true is command was succesfull 107 */ 108 FXbool sendNames(const FXString &channel, FXbool list); 109 FXbool sendNick(const FXString &nick); 110 FXbool sendNotice(const FXString &to, const FXString &message); 111 FXbool sendOper(const FXString &login, const FXString &password); 112 FXbool sendPart(const FXString &chan); 113 FXbool sendPart(const FXString &chan, const FXString &reason); 114 FXbool sendQuote(const FXString &text); 115 FXbool sendStats(const FXString &type); 116 FXbool sendTopic(const FXString &chan, const FXString &topic); 117 FXbool sendTopic(const FXString &chan); 118 FXbool sendVersion(const FXString &to); 119 FXbool sendWallops(const FXString &msg); 120 FXbool sendWho(const FXString &mask); 121 FXbool sendWhoami(); 122 FXbool sendWhois(const FXString ¶ms); 123 FXbool sendWhowas(const FXString ¶ms); 124 FXbool isUserIgnored(FXString nick, FXString user, FXString host, FXString on); 125 FXbool isUserIgnored(FXString nick, FXString on); 126 FXbool isAway(const FXString &nick); getMyUserHost()127 FXString getMyUserHost() const { return m_myUserHost; } 128 129 long onSocketCanRead(FXObject*, FXSelector, void*); 130 long onSocketConnected(FXObject*, FXSelector, void*); 131 long onSocketDisconnected(FXObject*, FXSelector, void*); 132 long onSocketError(FXObject*, FXSelector, void*); 133 long onReconnectTimeout(FXObject*, FXSelector, void*); 134 long onTryAgainTimeout(FXObject*, FXSelector, void*); 135 long onPingTimeout(FXObject*, FXSelector, void*); 136 long onJoinDelayTimeout(FXObject*, FXSelector, void*); 137 private: IrcEngine()138 IrcEngine():m_application(NULL),m_connected(FALSE),m_useSsl(FALSE),m_connecting(FALSE) 139 ,m_endmotd(FALSE),m_ignoreUserHost(FALSE),m_serverPort(0),m_attempts(0),m_nickLen(0) 140 ,m_topicLen(0),m_kickLen(0),m_awayLen(0),m_adminPrefix(' '),m_ownerPrefix(' '),m_opPrefix(' '),m_voicePrefix(' ') 141 ,m_halfopPrefix(' '),m_socket(NULL),m_ping(0) 142 {} 143 144 FXApp *m_application; 145 FXbool m_connected, m_useSsl, m_connecting, m_endmotd; 146 FXbool m_ignoreUserHost, m_storeChannelList; 147 FXint m_serverPort, m_attempts; 148 FXint m_nickLen, m_topicLen, m_kickLen, m_awayLen; 149 FXString m_serverName, m_networkName, m_serverPassword, m_nickName; 150 FXString m_realName, m_userName, m_startChannels, m_startCommands; 151 FXString m_receiveRest; 152 FXString m_chanTypes; //channel prefixes 153 FXString m_myUserHost; //usefull for dcc 154 FXString m_ignoreWho; 155 FXchar m_adminPrefix, m_ownerPrefix, m_opPrefix, m_voicePrefix, m_halfopPrefix; //prefix for nick modes 156 dxTargetsArray m_targets; 157 dxStringArray m_ignoreWhoQueue, m_namesQueue, m_channelsList; 158 dxNickInfoArray m_nicks; 159 dxSocket *m_socket; 160 FXTime m_ping; 161 162 void readData(); 163 FXbool sendLine(const FXString &line); 164 void sendCommands(); 165 FXbool sendCommand(const FXString &commandtext); 166 void parseLine(const FXString &line); 167 void sendEvent(IrcEventType); 168 void sendEvent(IrcEventType, const FXString&); 169 void sendEvent(IrcEventType, const FXString&, const FXString&); 170 void sendEvent(IrcEventType, const FXString&, const FXString&, const FXString&); 171 void sendEvent(IrcEventType, const FXString&, const FXString&, const FXString&, const FXString&); 172 void numeric(const FXint&, const FXString&); 173 void privmsg(const FXString&, const FXString&); 174 void ctcp(const FXString&, const FXString&); 175 void join(const FXString&, const FXString&); 176 void quitirc(const FXString&, const FXString&); 177 void part(const FXString&, const FXString&); 178 void ping(const FXString&); 179 void pong(const FXString&, const FXString&); 180 void notice(const FXString&, const FXString&); 181 void nick(const FXString&, const FXString&); 182 void topic(const FXString&, const FXString&); 183 void invite(const FXString&, const FXString&); 184 void kick(const FXString&, const FXString&); 185 void mode(const FXString&, const FXString&); 186 void error(const FXString&); 187 void unknown(const FXString&, const FXString&); 188 void parseRplsupport(FXString); 189 void makeStartChannels(); 190 void clearChannelsCommands(FXbool); 191 void resetReconnect(); 192 void sendPingTimeout(); 193 bool hasReconnectAttempt(); 194 }; 195 196 #endif // IRCENGINE_H 197