1 /* 2 sieve.h 3 4 SPDX-FileCopyrightText: 2001 Hamish Rodda <meddie@yoyo.cc.monash.edu.au> 5 6 SPDX-License-Identifier: GPL-2.0-only 7 */ 8 9 #pragma once 10 11 #include <KIO/AuthInfo> 12 #include <KIO/TCPSlaveBase> 13 14 #include <QByteArray> 15 #include <QString> 16 #include <QStringList> 17 18 class kio_sieveResponse 19 { 20 public: 21 enum responses { NONE, KEY_VAL_PAIR, ACTION, QUANTITY }; 22 23 kio_sieveResponse(); 24 25 const uint &getType() const; 26 27 const QByteArray &getAction() const; 28 uint getQuantity() const; 29 const QByteArray &getKey() const; 30 const QByteArray &getVal() const; 31 const QByteArray &getExtra() const; 32 33 void setQuantity(uint quantity); 34 void setAction(const QByteArray &newAction); 35 void setKey(const QByteArray &newKey); 36 void setVal(const QByteArray &newVal); 37 void setExtra(const QByteArray &newExtra); 38 39 void clear(); 40 41 protected: 42 uint rType; 43 uint quantity; 44 QByteArray key; 45 QByteArray val; 46 QByteArray extra; 47 }; 48 49 class kio_sieveProtocol : public KIO::TCPSlaveBase 50 { 51 public: 52 enum connectionModes { NORMAL, CONNECTION_ORIENTED }; 53 enum Results { OK, NO, BYE, OTHER }; 54 55 kio_sieveProtocol(const QByteArray &pool_socket, const QByteArray &app_socket); 56 ~kio_sieveProtocol() override; 57 58 void mimetype(const QUrl &url) override; 59 void get(const QUrl &url) override; 60 void put(const QUrl &url, int permissions, KIO::JobFlags flags) override; 61 void del(const QUrl &url, bool isfile) override; 62 63 void listDir(const QUrl &url) override; 64 void chmod(const QUrl &url, int permissions) override; 65 virtual void urlStat(const QUrl &url); 66 67 void setHost(const QString &host, quint16 port, const QString &user, const QString &pass) override; 68 void openConnection() override; 69 void closeConnection() override; 70 // virtual void slave_status(); 71 72 /** 73 * Special commands supported by this slave: 74 * 1 - activate script 75 * 2 - deactivate (all - only one active at any one time) scripts 76 * 3 - request capabilities, returned as metadata 77 */ 78 void special(const QByteArray &data) override; 79 bool activate(const QUrl &url); 80 bool deactivate(); 81 82 protected: 83 bool connect(bool useTLSIfAvailable = true); 84 bool authenticate(); 85 void disconnect(bool forcibly = false); 86 void changeCheck(const QUrl &url); 87 88 bool sendData(const QByteArray &data); 89 bool receiveData(bool waitForData = true, const QByteArray &reparse = QByteArray()); 90 bool operationSuccessful(); 91 int operationResult(); 92 93 bool parseCapabilities(bool requestCapabilities = false); 94 bool saslInteract(void *in, KIO::AuthInfo &ai); 95 96 // IOSlave global data 97 uint m_connMode; 98 99 // Host-specific data 100 QStringList m_sasl_caps; 101 bool m_supportsTLS; 102 103 // Global server response class 104 kio_sieveResponse r; 105 106 // connection details 107 QString m_sServer; 108 QString m_sUser; 109 QString m_sPass; 110 QString m_sAuth; 111 bool m_shouldBeConnected; 112 bool m_allowUnencrypted; 113 quint16 m_port; 114 115 private: 116 bool requestCapabilitiesAfterStartTLS() const; 117 118 QString m_implementation; 119 }; 120 121