tdeio/tdeio
davjob.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <kurl.h>
00022
00023 #include <tqobject.h>
00024 #include <tqptrlist.h>
00025 #include <tqstring.h>
00026 #include <tqstringlist.h>
00027 #include <tqguardedptr.h>
00028 #include <tqdom.h>
00029
00030 #include <sys/types.h>
00031 #include <sys/stat.h>
00032
00033 #include <kdebug.h>
00034 #include <tdeio/jobclasses.h>
00035 #include <tdeio/global.h>
00036 #include <tdeio/http.h>
00037 #include <tdeio/davjob.h>
00038 #include <tdeio/job.h>
00039 #include <tdeio/slaveinterface.h>
00040
00041 #define TDEIO_ARGS TQByteArray packedArgs; TQDataStream stream( packedArgs, IO_WriteOnly ); stream
00042
00043 using namespace TDEIO;
00044
00045 class DavJob::DavJobPrivate
00046 {
00047 public:
00048 TQByteArray savedStaticData;
00049 TQByteArray str_response;
00050 };
00051
00052 DavJob::DavJob( const KURL& url, int method, const TQString& request, bool showProgressInfo )
00053 : TransferJob( url, TDEIO::CMD_SPECIAL, TQByteArray(), TQByteArray(), showProgressInfo )
00054 {
00055 d = new DavJobPrivate;
00056
00057
00058 TQDataStream stream( m_packedArgs, IO_WriteOnly );
00059 stream << (int) 7 << url << method;
00060
00061 if ( ! request.isEmpty() && ! request.isNull() ) {
00062 staticData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + request.utf8();
00063 staticData.truncate( staticData.size() - 1 );
00064 d->savedStaticData = staticData.copy();
00065 }
00066 }
00067
00068 void DavJob::slotData( const TQByteArray& data )
00069 {
00070 if(m_redirectionURL.isEmpty() || !m_redirectionURL.isValid() || m_error) {
00071 unsigned int oldSize = d->str_response.size();
00072 d->str_response.resize( oldSize + data.size() );
00073 memcpy( d->str_response.data() + oldSize, data.data(), data.size() );
00074 }
00075 }
00076
00077 void DavJob::slotFinished()
00078 {
00079
00080
00081 if (!m_redirectionURL.isEmpty() && m_redirectionURL.isValid() && (m_command == CMD_SPECIAL)) {
00082 TQDataStream istream( m_packedArgs, IO_ReadOnly );
00083 int s_cmd, s_method;
00084 KURL s_url;
00085 istream >> s_cmd;
00086 istream >> s_url;
00087 istream >> s_method;
00088
00089 if ( (s_cmd == 7) && (s_method == (int)TDEIO::DAV_PROPFIND) ) {
00090 m_packedArgs.truncate(0);
00091 TQDataStream stream( m_packedArgs, IO_WriteOnly );
00092 stream << (int)7 << m_redirectionURL << (int)TDEIO::DAV_PROPFIND;
00093 }
00094 } else if ( ! m_response.setContent( d->str_response, true ) ) {
00095
00096 TQDomElement root = m_response.createElementNS( "DAV:", "error-report" );
00097 m_response.appendChild( root );
00098
00099 TQDomElement el = m_response.createElementNS( "DAV:", "offending-response" );
00100 TQDomText textnode = m_response.createTextNode( d->str_response );
00101 el.appendChild( textnode );
00102 root.appendChild( el );
00103 delete d;
00104 d = 0;
00105 } else {
00106 delete d;
00107 d = 0;
00108 }
00109
00110 TransferJob::slotFinished();
00111 if( d ) staticData = d->savedStaticData.copy();
00112 }
00113
00114
00115
00116
00117 DavJob* TDEIO::davPropFind( const KURL& url, const TQDomDocument& properties, TQString depth, bool showProgressInfo )
00118 {
00119 DavJob *job = new DavJob( url, (int) TDEIO::DAV_PROPFIND, properties.toString(), showProgressInfo );
00120 job->addMetaData( "davDepth", depth );
00121 return job;
00122 }
00123
00124
00125 DavJob* TDEIO::davPropPatch( const KURL& url, const TQDomDocument& properties, bool showProgressInfo )
00126 {
00127 return new DavJob( url, (int) TDEIO::DAV_PROPPATCH, properties.toString(), showProgressInfo );
00128 }
00129
00130 DavJob* TDEIO::davSearch( const KURL& url, const TQString& nsURI, const TQString& qName, const TQString& query, bool showProgressInfo )
00131 {
00132 TQDomDocument doc;
00133 TQDomElement searchrequest = doc.createElementNS( "DAV:", "searchrequest" );
00134 TQDomElement searchelement = doc.createElementNS( nsURI, qName );
00135 TQDomText text = doc.createTextNode( query );
00136 searchelement.appendChild( text );
00137 searchrequest.appendChild( searchelement );
00138 doc.appendChild( searchrequest );
00139 return new DavJob( url, TDEIO::DAV_SEARCH, doc.toString(), showProgressInfo );
00140 }
00141
00142 #include "davjob.moc"