00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef QWEBDAV_H
00022 #define QWEBDAV_H
00023
00024 #include "webdav_export.h"
00025
00026 #include <QHttp>
00027 #include <QHttpRequestHeader>
00028 #include <QUrlInfo>
00029 #include <QDateTime>
00030 #include <QDomNodeList>
00031
00032 class QWebdavUrlInfo;
00033
00037 class QWEBDAV_EXPORT QWebdav : virtual public QHttp
00038 {
00039 Q_OBJECT
00040 public:
00041 QWebdav ( QObject * parent = 0 );
00042 QWebdav ( const QString & hostName, quint16 port = 80, QObject * parent = 0 );
00043 QWebdav ( const QString & hostName, ConnectionMode mode, quint16 port = 0,
00044 QObject * parent = 0 );
00045 ~QWebdav ();
00046
00047 typedef QMap < QString, QMap < QString, QVariant > > PropValues;
00048 typedef QMap < QString , QStringList > PropNames;
00049
00050 int list ( const QString & dir = QString() );
00051 int search ( const QString & path, const QString & query );
00052 int put ( const QString & path, QIODevice *data );
00053 int put ( const QString & path, const QByteArray & data );
00054
00055 int mkcol ( const QString & dir );
00056
00057 int mkdir ( const QString & dir );
00058 int copy ( const QString & oldname, const QString & newname,
00059 bool overwrite = false );
00060 int rename ( const QString & oldname, const QString & newname,
00061 bool overwrite = false );
00062 int move ( const QString & oldname, const QString & newname,
00063 bool overwrite = false );
00064 int rmdir ( const QString & dir );
00065 int remove ( const QString & path );
00066
00067 int propfind ( const QString & path, const QByteArray & query, int depth = 0 );
00068 int propfind ( const QString & path, const QWebdav::PropNames & props,
00069 int depth = 0 );
00070
00071 int proppatch ( const QString & path, const QWebdav::PropValues & props);
00072 int proppatch ( const QString & path, const QByteArray & query );
00073
00074 int setHost ( const QString &, quint16 );
00075 int setHost ( const QString &, ConnectionMode, quint16 );
00076
00077
00078 signals:
00079 void listInfo ( const QWebdavUrlInfo & i );
00080
00081 private slots:
00082 void readyRead ( const QHttpResponseHeader & resp );
00083 void requestFinished ( int id, bool error );
00084 void responseHeaderReceived( const QHttpResponseHeader & resp );
00085
00086 private:
00087 void init(const QString & hostName);
00088 void emitListInfos();
00089 void davParsePropstats( const QDomNodeList & propstat );
00090 int codeFromResponse( const QString& response );
00091 QDateTime parseDateTime( const QString& input, const QString& type );
00092 int davRequest(QHttpRequestHeader & req,
00093 const QByteArray & data = QByteArray());
00094 int davRequest(QHttpRequestHeader & req,
00095 QIODevice * data);
00096 void setupHeaders(QHttpRequestHeader & req, quint64 size);
00097
00098 private:
00099 Q_DISABLE_COPY(QWebdav);
00100 bool emitListInfo;
00101 QByteArray buffer;
00102 QString host;
00103 };
00104
00105 #endif // QWEBDAV_H