+ virtual void setMyNick(const QString &mynick);
+
+ virtual void requestConnect() const;
+ virtual void requestDisconnect() const;
+ virtual void requestSetNetworkInfo(const NetworkInfo &info);
+
+ virtual void setUseAutoReconnect(bool);
+ virtual void setAutoReconnectInterval(quint32);
+ virtual void setAutoReconnectRetries(quint16);
+
+ void setPingInterval(int interval);
+
+ void connectToIrc(bool reconnecting = false);
+ /**
+ * Disconnect from the IRC server.
+ *
+ * Begin disconnecting from the IRC server, including optionally reconnecting.
+ *
+ * @param requested If true, user requested this disconnect; don't try to reconnect
+ * @param reason Reason for quitting, defaulting to the user-configured quit reason
+ * @param withReconnect Reconnect to the network after disconnecting (e.g. ping timeout)
+ * @param forceImmediate Immediately disconnect from network, skipping queue of other commands
+ */
+ void disconnectFromIrc(bool requested = true, const QString &reason = QString(),
+ bool withReconnect = false, bool forceImmediate = false);
+
+ /**
+ * Forcibly close the IRC server socket, waiting for it to close.
+ *
+ * Call CoreNetwork::disconnectFromIrc() first, allow the event loop to run, then if you need to
+ * be sure the network's disconencted (e.g. clean-up), call this.
+ *
+ * @param msecs Maximum time to wait for socket to close, in milliseconds.
+ * @return True if socket closes successfully; false if error occurs or timeout reached
+ */
+ bool forceDisconnect(int msecs = 1000);
+
+ void userInput(BufferInfo bufferInfo, QString msg);
+
+ /**
+ * Sends the raw (encoded) line, adding to the queue if needed, optionally with higher priority.
+ *
+ * @param[in] input QByteArray of encoded characters
+ * @param[in] prepend
+ * @parmblock
+ * If true, the line is prepended into the start of the queue, otherwise, it's appended to the
+ * end. This should be used sparingly, for if either the core or the IRC server cannot maintain
+ * PING/PONG replies, the other side will close the connection.
+ * @endparmblock
+ */
+ void putRawLine(const QByteArray input, const bool prepend = false);
+
+ /**
+ * Sends the command with encoded parameters, with optional prefix or high priority.
+ *
+ * @param[in] cmd Command to send, ignoring capitalization
+ * @param[in] params Parameters for the command, encoded within a QByteArray
+ * @param[in] prefix Optional command prefix
+ * @param[in] prepend
+ * @parmblock
+ * If true, the command is prepended into the start of the queue, otherwise, it's appended to
+ * the end. This should be used sparingly, for if either the core or the IRC server cannot
+ * maintain PING/PONG replies, the other side will close the connection.
+ * @endparmblock
+ */
+ void putCmd(const QString &cmd, const QList<QByteArray> ¶ms, const QByteArray &prefix = QByteArray(), const bool prepend = false);
+
+ /**
+ * Sends the command for each set of encoded parameters, with optional prefix or high priority.
+ *
+ * @param[in] cmd Command to send, ignoring capitalization
+ * @param[in] params
+ * @parmblock
+ * List of parameter lists for the command, encoded within a QByteArray. The command will be
+ * sent multiple times, once for each set of params stored within the outer list.
+ * @endparmblock
+ * @param[in] prefix Optional command prefix
+ * @param[in] prependAll
+ * @parmblock
+ * If true, ALL of the commands are prepended into the start of the queue, otherwise, they're
+ * appended to the end. This should be used sparingly, for if either the core or the IRC server
+ * cannot maintain PING/PONG replies, the other side will close the connection.
+ * @endparmblock
+ */
+ void putCmd(const QString &cmd, const QList<QList<QByteArray>> ¶ms, const QByteArray &prefix = QByteArray(), const bool prependAll = false);
+
+ void setChannelJoined(const QString &channel);
+ void setChannelParted(const QString &channel);
+ void addChannelKey(const QString &channel, const QString &key);
+ void removeChannelKey(const QString &channel);
+
+ // Blowfish stuff
+#ifdef HAVE_QCA2
+ Cipher *cipher(const QString &recipient);
+ QByteArray cipherKey(const QString &recipient) const;
+ void setCipherKey(const QString &recipient, const QByteArray &key);
+ bool cipherUsesCBC(const QString &target);
+#endif
+
+ // Custom rate limiting (can be connected to signals)
+
+ /**
+ * Update rate limiting according to Network configuration
+ *
+ * Updates the token bucket and message queue timer according to the network configuration, such
+ * as on first load, or after changing settings.
+ *
+ * Calling this will reset any ongoing queue delays. If messages exist in the queue when rate
+ * limiting is disabled, messages will be quickly sent (100 ms) with new messages queued to send
+ * until the queue is cleared.
+ *
+ * @see Network::useCustomMessageRate()
+ * @see Network::messageRateBurstSize()
+ * @see Network::messageRateDelay()
+ * @see Network::unlimitedMessageRate()
+ *
+ * @param[in] forceUnlimited
+ * @parmblock
+ * If true, override user settings to disable message rate limiting, otherwise apply rate limits
+ * set by the user. Use with caution and remember to re-enable configured limits when done.
+ * @endparmblock
+ */
+ void updateRateLimiting(const bool forceUnlimited = false);
+
+ /**
+ * Resets the token bucket up to the maximum
+ *
+ * Call this if the connection's been reset after calling updateRateLimiting() if needed.
+ *
+ * @see CoreNetwork::updateRateLimiting()
+ */
+ void resetTokenBucket();
+
+ // IRCv3 capability negotiation (can be connected to signals)
+
+ /**
+ * Indicates a capability is now available, with optional value in Network::capValue().
+ *
+ * @see Network::addCap()
+ *
+ * @param[in] capability Name of the capability
+ */
+ void serverCapAdded(const QString &capability);
+
+ /**
+ * Indicates a capability was acknowledged (enabled by the IRC server).
+ *
+ * @see Network::acknowledgeCap()
+ *
+ * @param[in] capability Name of the capability
+ */
+ void serverCapAcknowledged(const QString &capability);
+
+ /**
+ * Indicates a capability was removed from the list of available capabilities.
+ *
+ * @see Network::removeCap()
+ *
+ * @param[in] capability Name of the capability
+ */
+ void serverCapRemoved(const QString &capability);
+
+ /**
+ * Sends the next capability from the queue.
+ *
+ * During nick registration if any capabilities remain queued, this will take the next and
+ * request it. When no capabilities remain, capability negotiation is ended.
+ */
+ void sendNextCap();
+
+ void setAutoWhoEnabled(bool enabled);
+ void setAutoWhoInterval(int interval);
+ void setAutoWhoDelay(int delay);
+
+ /**
+ * Appends the given channel/nick to the front of the AutoWho queue.
+ *
+ * When 'away-notify' is enabled, this will trigger an immediate AutoWho since regular
+ * who-cycles are disabled as per IRCv3 specifications.
+ *
+ * @param[in] channelOrNick Channel or nickname to WHO
+ */
+ void queueAutoWhoOneshot(const QString &channelOrNick);
+
+ bool setAutoWhoDone(const QString &channel);
+
+ void updateIssuedModes(const QString &requestedModes);
+ void updatePersistentModes(QString addModes, QString removeModes);
+ void resetPersistentModes();
+
+ Server usedServer() const;
+
+ inline void resetPingTimeout() { _pingCount = 0; }
+
+ inline void displayMsg(Message::Type msgType, BufferInfo::Type bufferType, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None)
+ {
+ emit displayMsg(networkId(), msgType, bufferType, target, text, sender, flags);
+ }
+
+
+signals:
+ void recvRawServerMsg(QString);
+ void displayStatusMsg(QString);
+ void displayMsg(NetworkId, Message::Type, BufferInfo::Type, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None);
+ void disconnected(NetworkId networkId);
+ void connectionError(const QString &errorMsg);
+
+ void quitRequested(NetworkId networkId);
+ void sslErrors(const QVariant &errorData);
+
+ void newEvent(Event *event);
+ void socketInitialized(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);
+ void socketDisconnected(const CoreIdentity *identity, const QHostAddress &localAddress, quint16 localPort, const QHostAddress &peerAddress, quint16 peerPort);