• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

KHTML

  • sources
  • kde-4.12
  • kdelibs
  • khtml
  • java
kjavadownloader.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2  *
3  * Copyright (C) 2000 Richard Moore <rich@kde.org>
4  * 2000 Wynn Wilkes <wynnw@caldera.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library 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 GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB. If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21 
22 #include "kjavadownloader.h"
23 #include "kjavaappletserver.h"
24 
25 #include <kurl.h>
26 #include <kio/job.h>
27 #include <kio/jobclasses.h>
28 #include <kdebug.h>
29 #include <QtCore/QFile>
30 
31 static const int DATA = 0;
32 static const int FINISHED = 1;
33 static const int ERRORCODE = 2;
34 static const int HEADERS = 3;
35 static const int REDIRECT = 4;
36 static const int MIMETYPE = 5;
37 static const int CONNECTED = 6;
38 static const int REQUESTDATA = 7;
39 
40 static const int KJAS_STOP = 0;
41 static const int KJAS_HOLD = 1;
42 static const int KJAS_RESUME = 2;
43 
44 KJavaKIOJob::~KJavaKIOJob() {}
45 
46 void KJavaKIOJob::data( const QByteArray& )
47 {
48  kError(6100) << "Job id mixup" << endl;
49 }
50 
51 //-----------------------------------------------------------------------------
52 
53 class KJavaDownloaderPrivate
54 {
55 friend class KJavaDownloader;
56 public:
57  KJavaDownloaderPrivate() : responseCode(0), isfirstdata(true) {}
58  ~KJavaDownloaderPrivate()
59  {
60  delete url;
61  if (job) job->kill(); // KIO::Job::kill deletes itself
62  }
63 private:
64  int loaderID;
65  KUrl* url;
66  QByteArray file;
67  KIO::TransferJob* job;
68  int responseCode;
69  bool isfirstdata;
70 };
71 
72 
73 KJavaDownloader::KJavaDownloader( int ID, const QString& url )
74  :d(new KJavaDownloaderPrivate)
75 {
76  kDebug(6100) << "KJavaDownloader(" << ID << ") = " << url;
77 
78 
79  d->loaderID = ID;
80  d->url = new KUrl( url );
81 
82  d->job = KIO::get( *d->url, KIO::NoReload, KIO::HideProgressInfo );
83  d->job->addMetaData("PropagateHttpHeader", "true");
84  connect( d->job, SIGNAL(data(KIO::Job*,QByteArray)),
85  this, SLOT(slotData(KIO::Job*,QByteArray)) );
86  connect( d->job, SIGNAL(connected(KIO::Job*)),
87  this, SLOT(slotConnected(KIO::Job*)));
88  connect( d->job, SIGNAL(mimetype(KIO::Job*,QString)),
89  this, SLOT(slotMimetype(KIO::Job*,QString)));
90  connect( d->job, SIGNAL(result(KJob*)),
91  this, SLOT(slotResult(KJob*)) );
92 }
93 
94 KJavaDownloader::~KJavaDownloader()
95 {
96  delete d;
97 }
98 
99 void KJavaDownloader::slotData( KIO::Job*, const QByteArray& qb )
100 {
101  //kDebug(6100) << "slotData(" << d->loaderID << ")";
102 
103  KJavaAppletServer* server = KJavaAppletServer::allocateJavaServer();
104  if (d->isfirstdata) {
105  QString headers = d->job->queryMetaData("HTTP-Headers");
106  if (!headers.isEmpty()) {
107  d->file.resize( headers.length() );
108  memcpy( d->file.data(), headers.toLatin1().constData(), headers.length() );
109  server->sendURLData( d->loaderID, HEADERS, d->file );
110  d->file.resize( 0 );
111  }
112  d->isfirstdata = false;
113  }
114  if ( qb.size() )
115  server->sendURLData( d->loaderID, DATA, qb );
116  KJavaAppletServer::freeJavaServer();
117 }
118 
119 void KJavaDownloader::slotConnected(KIO::Job*)
120 {
121  kDebug(6100) << "slave connected";
122  d->responseCode = d->job->error();
123 }
124 
125 void KJavaDownloader::slotMimetype(KIO::Job*, const QString & type) {
126  kDebug(6100) << "slave mimetype " << type;
127 }
128 
129 void KJavaDownloader::slotResult( KJob* )
130 {
131  kDebug(6100) << "slotResult(" << d->loaderID << ")";
132 
133  KJavaAppletServer* server = KJavaAppletServer::allocateJavaServer();
134  if( d->job->error())
135  {
136  kDebug(6100) << "slave had an error = " << d->job->errorString();
137  int code = d->job->error();
138  if (!code)
139  code = 404;
140  QString codestr = QString::number(code);
141  d->file.resize(codestr.length());
142  memcpy( d->file.data(), codestr.toLatin1().constData(), codestr.length() );
143  kDebug(6100) << "slave had an error = " << code;
144 
145  server->sendURLData( d->loaderID, ERRORCODE, d->file );
146  d->file.resize( 0 );
147  }
148  else
149  {
150  server->sendURLData( d->loaderID, FINISHED, d->file );
151  }
152  d->job = 0L; // signal KIO::Job::result deletes itself
153  server->removeDataJob( d->loaderID ); // will delete this
154  KJavaAppletServer::freeJavaServer();
155 }
156 
157 void KJavaDownloader::jobCommand( int cmd )
158 {
159  if (!d->job) return;
160  switch (cmd) {
161  case KJAS_STOP: {
162  kDebug(6100) << "jobCommand(" << d->loaderID << ") stop";
163  d->job->kill();
164  d->job = 0L; // KIO::Job::kill deletes itself
165  KJavaAppletServer* server = KJavaAppletServer::allocateJavaServer();
166  server->removeDataJob( d->loaderID ); // will delete this
167  KJavaAppletServer::freeJavaServer();
168  break;
169  }
170  case KJAS_HOLD:
171  kDebug(6100) << "jobCommand(" << d->loaderID << ") hold";
172  d->job->suspend();
173  break;
174  case KJAS_RESUME:
175  kDebug(6100) << "jobCommand(" << d->loaderID << ") resume";
176  d->job->resume();
177  break;
178  }
179 }
180 
181 //-----------------------------------------------------------------------------
182 
183 class KJavaUploaderPrivate
184 {
185 public:
186  KJavaUploaderPrivate() {}
187  ~KJavaUploaderPrivate()
188  {
189  delete url;
190  if (job) job->kill(); // KIO::Job::kill deletes itself
191  }
192  int loaderID;
193  KUrl* url;
194  QByteArray file;
195  KIO::TransferJob* job;
196  bool finished;
197 };
198 
199 KJavaUploader::KJavaUploader( int ID, const QString& url )
200  :d(new KJavaUploaderPrivate)
201 {
202  kDebug(6100) << "KJavaUploader(" << ID << ") = " << url;
203 
204 
205  d->loaderID = ID;
206  d->url = new KUrl( url );
207  d->job = 0L;
208  d->finished = false;
209 }
210 
211 void KJavaUploader::start()
212 {
213  kDebug(6100) << "KJavaUploader::start(" << d->loaderID << ")";
214  KJavaAppletServer* server = KJavaAppletServer::allocateJavaServer();
215  // create a suspended job
216  d->job = KIO::put( *d->url, -1, KIO::HideProgressInfo );
217  d->job->suspend();
218  connect( d->job, SIGNAL(dataReq(KIO::Job*,QByteArray&)),
219  this, SLOT(slotDataRequest(KIO::Job*,QByteArray&)) );
220  connect( d->job, SIGNAL(result(KJob*)),
221  this, SLOT(slotResult(KJob*)) );
222  server->sendURLData( d->loaderID, CONNECTED, d->file );
223  KJavaAppletServer::freeJavaServer();
224 }
225 
226 KJavaUploader::~KJavaUploader()
227 {
228  delete d;
229 }
230 
231 void KJavaUploader::slotDataRequest( KIO::Job*, QByteArray& qb )
232 {
233  // send our data and suspend
234  kDebug(6100) << "slotDataRequest(" << d->loaderID << ") finished:" << d->finished;
235  qb.resize( d->file.size() );
236  KJavaAppletServer* server = KJavaAppletServer::allocateJavaServer();
237  if (d->file.size() == 0) {
238  d->job = 0L; // eof, job deletes itself
239  server->removeDataJob( d->loaderID ); // will delete this
240  } else {
241  memcpy( qb.data(), d->file.data(), d->file.size() );
242  d->file.resize( 0 );
243  if (!d->finished) {
244  server->sendURLData( d->loaderID, REQUESTDATA, d->file );
245  d->job->suspend();
246  }
247  }
248  KJavaAppletServer::freeJavaServer();
249 }
250 
251 void KJavaUploader::data( const QByteArray& qb )
252 {
253  kDebug(6100) << "KJavaUploader::data(" << d->loaderID << ")";
254  d->file.resize( qb.size() );
255  memcpy( d->file.data(), qb.data(), qb.size() );
256  d->job->resume();
257 }
258 
259 void KJavaUploader::slotResult( KJob* )
260 {
261  kDebug(6100) << "slotResult(" << d->loaderID << ") job:" << d->job;
262 
263  if (!d->job)
264  return;
265  KJavaAppletServer* server = KJavaAppletServer::allocateJavaServer();
266  if (d->job->error())
267  {
268  int code = d->job->error();
269  QString codestr = QString::number(code);
270  d->file.resize(codestr.length());
271  memcpy( d->file.data(), codestr.toLatin1().constData(), codestr.length() );
272  kDebug(6100) << "slave had an error " << code << ": " << d->job->errorString();
273 
274  server->sendURLData( d->loaderID, ERRORCODE, d->file );
275  d->file.resize( 0 );
276  }
277  else // shouldn't come here
278  kError(6100) << "slotResult(" << d->loaderID << ") job:" << d->job << endl;
279  d->job = 0L; // signal KIO::Job::result deletes itself
280  server->removeDataJob( d->loaderID ); // will delete this
281  KJavaAppletServer::freeJavaServer();
282 }
283 
284 void KJavaUploader::jobCommand( int cmd )
285 {
286  if (!d->job) return;
287  switch (cmd) {
288  case KJAS_STOP: {
289  kDebug(6100) << "jobCommand(" << d->loaderID << ") stop";
290  d->finished = true;
291  if (d->job->isSuspended())
292  d->job->resume();
293  break;
294  }
295  }
296 }
297 
298 #include "kjavadownloader.moc"
KJavaUploader::KJavaUploader
KJavaUploader(int ID, const QString &url)
Definition: kjavadownloader.cpp:199
DATA
static const int DATA
Definition: kjavadownloader.cpp:31
kjavaappletserver.h
KIO::put
TransferJob * put(const KUrl &url, int permissions, JobFlags flags=DefaultFlags)
kdebug.h
KJavaKIOJob::~KJavaKIOJob
virtual ~KJavaKIOJob()
Definition: kjavadownloader.cpp:44
REQUESTDATA
static const int REQUESTDATA
Definition: kjavadownloader.cpp:38
kurl.h
KJavaDownloader::slotMimetype
void slotMimetype(KIO::Job *, const QString &)
Definition: kjavadownloader.cpp:125
KJAS_HOLD
static const int KJAS_HOLD
Definition: kjavadownloader.cpp:41
KJavaUploader::start
void start()
Definition: kjavadownloader.cpp:211
d
#define d
Definition: khtmlfind.cpp:42
mimetype
MimetypeJob * mimetype(const KUrl &url, JobFlags flags=DefaultFlags)
KIO::HideProgressInfo
MIMETYPE
static const int MIMETYPE
Definition: kjavadownloader.cpp:36
KJavaAppletServer::removeDataJob
void removeDataJob(int loaderID)
Removes KJavaDownloader from the list (deletes it too).
Definition: kjavaappletserver.cpp:452
KIO::get
TransferJob * get(const KUrl &url, LoadType reload=NoReload, JobFlags flags=DefaultFlags)
kError
static QDebug kError(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
KJavaUploader::~KJavaUploader
~KJavaUploader()
Definition: kjavadownloader.cpp:226
KJavaDownloader::KJavaDownloader
KJavaDownloader(int ID, const QString &url)
Definition: kjavadownloader.cpp:73
ERRORCODE
static const int ERRORCODE
Definition: kjavadownloader.cpp:33
QString
KJavaDownloader::slotResult
void slotResult(KJob *)
Definition: kjavadownloader.cpp:129
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
KUrl
KJavaUploader::data
virtual void data(const QByteArray &qb)
Definition: kjavadownloader.cpp:251
KJAS_STOP
static const int KJAS_STOP
Definition: kjavadownloader.cpp:40
KJAS_RESUME
static const int KJAS_RESUME
Definition: kjavadownloader.cpp:42
KJavaDownloader
Definition: kjavadownloader.h:53
KJavaUploader::slotDataRequest
void slotDataRequest(KIO::Job *, QByteArray &)
Definition: kjavadownloader.cpp:231
KJavaAppletServer
Definition: kjavaappletserver.h:42
KJavaDownloader::slotConnected
void slotConnected(KIO::Job *)
Definition: kjavadownloader.cpp:119
KJavaKIOJob::data
virtual void data(const QByteArray &qb)
Definition: kjavadownloader.cpp:46
HEADERS
static const int HEADERS
Definition: kjavadownloader.cpp:34
KJavaAppletServer::sendURLData
void sendURLData(int loaderID, int code, const QByteArray &data)
Send data we got back from a KJavaDownloader back to the appropriate class loader.
Definition: kjavaappletserver.cpp:443
KJavaUploader::jobCommand
virtual void jobCommand(int cmd)
Definition: kjavadownloader.cpp:284
job.h
KJavaDownloader::slotData
void slotData(KIO::Job *, const QByteArray &)
Definition: kjavadownloader.cpp:99
KJavaUploader::slotResult
void slotResult(KJob *)
Definition: kjavadownloader.cpp:259
jobclasses.h
FINISHED
static const int FINISHED
Definition: kjavadownloader.cpp:32
KJavaDownloader::jobCommand
virtual void jobCommand(int cmd)
Definition: kjavadownloader.cpp:157
KIO::Job
KIO::NoReload
CONNECTED
static const int CONNECTED
Definition: kjavadownloader.cpp:37
KJavaAppletServer::freeJavaServer
static void freeJavaServer()
When you are done using your reference to the AppletServer, you must dereference it by calling freeJa...
Definition: kjavaappletserver.cpp:190
KIO::TransferJob
kjavadownloader.h
REDIRECT
static const int REDIRECT
Definition: kjavadownloader.cpp:35
KJob
KJavaAppletServer::allocateJavaServer
static KJavaAppletServer * allocateJavaServer()
A factory method that returns the default server.
Definition: kjavaappletserver.cpp:178
KJavaDownloader::~KJavaDownloader
~KJavaDownloader()
Definition: kjavadownloader.cpp:94
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:51:22 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KHTML

Skip menu "KHTML"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal