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

KHTML

  • 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
31static const int DATA = 0;
32static const int FINISHED = 1;
33static const int ERRORCODE = 2;
34static const int HEADERS = 3;
35static const int REDIRECT = 4;
36static const int MIMETYPE = 5;
37static const int CONNECTED = 6;
38static const int REQUESTDATA = 7;
39
40static const int KJAS_STOP = 0;
41static const int KJAS_HOLD = 1;
42static const int KJAS_RESUME = 2;
43
44KJavaKIOJob::~KJavaKIOJob() {}
45
46void KJavaKIOJob::data( const QByteArray& )
47{
48 kError(6100) << "Job id mixup" << endl;
49}
50
51//-----------------------------------------------------------------------------
52
53class KJavaDownloaderPrivate
54{
55friend class KJavaDownloader;
56public:
57 KJavaDownloaderPrivate() : responseCode(0), isfirstdata(true) {}
58 ~KJavaDownloaderPrivate()
59 {
60 delete url;
61 if (job) job->kill(); // KIO::Job::kill deletes itself
62 }
63private:
64 int loaderID;
65 KUrl* url;
66 QByteArray file;
67 KIO::TransferJob* job;
68 int responseCode;
69 bool isfirstdata;
70};
71
72
73KJavaDownloader::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
94KJavaDownloader::~KJavaDownloader()
95{
96 delete d;
97}
98
99void 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
119void KJavaDownloader::slotConnected(KIO::Job*)
120{
121 kDebug(6100) << "slave connected";
122 d->responseCode = d->job->error();
123}
124
125void KJavaDownloader::slotMimetype(KIO::Job*, const QString & type) {
126 kDebug(6100) << "slave mimetype " << type;
127}
128
129void 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
157void 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
183class KJavaUploaderPrivate
184{
185public:
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
199KJavaUploader::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
211void 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
226KJavaUploader::~KJavaUploader()
227{
228 delete d;
229}
230
231void 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
251void 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
259void 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
284void 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"
KIO::Job
KIO::TransferJob
KJavaAppletServer
Definition: kjavaappletserver.h:43
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
KJavaAppletServer::removeDataJob
void removeDataJob(int loaderID)
Removes KJavaDownloader from the list (deletes it too).
Definition: kjavaappletserver.cpp:452
KJavaAppletServer::allocateJavaServer
static KJavaAppletServer * allocateJavaServer()
A factory method that returns the default server.
Definition: kjavaappletserver.cpp:178
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
KJavaDownloader
Definition: kjavadownloader.h:54
KJavaDownloader::slotMimetype
void slotMimetype(KIO::Job *, const QString &)
Definition: kjavadownloader.cpp:125
KJavaDownloader::slotConnected
void slotConnected(KIO::Job *)
Definition: kjavadownloader.cpp:119
KJavaDownloader::jobCommand
virtual void jobCommand(int cmd)
Definition: kjavadownloader.cpp:157
KJavaDownloader::~KJavaDownloader
~KJavaDownloader()
Definition: kjavadownloader.cpp:94
KJavaDownloader::KJavaDownloader
KJavaDownloader(int ID, const QString &url)
Definition: kjavadownloader.cpp:73
KJavaDownloader::slotResult
void slotResult(KJob *)
Definition: kjavadownloader.cpp:129
KJavaDownloader::slotData
void slotData(KIO::Job *, const QByteArray &)
Definition: kjavadownloader.cpp:99
KJavaKIOJob::~KJavaKIOJob
virtual ~KJavaKIOJob()
Definition: kjavadownloader.cpp:44
KJavaKIOJob::data
virtual void data(const QByteArray &qb)
Definition: kjavadownloader.cpp:46
KJavaUploader::KJavaUploader
KJavaUploader(int ID, const QString &url)
Definition: kjavadownloader.cpp:199
KJavaUploader::slotDataRequest
void slotDataRequest(KIO::Job *, QByteArray &)
Definition: kjavadownloader.cpp:231
KJavaUploader::data
virtual void data(const QByteArray &qb)
Definition: kjavadownloader.cpp:251
KJavaUploader::jobCommand
virtual void jobCommand(int cmd)
Definition: kjavadownloader.cpp:284
KJavaUploader::start
void start()
Definition: kjavadownloader.cpp:211
KJavaUploader::slotResult
void slotResult(KJob *)
Definition: kjavadownloader.cpp:259
KJavaUploader::~KJavaUploader
~KJavaUploader()
Definition: kjavadownloader.cpp:226
KJob
KUrl
kDebug
#define kDebug
job.h
jobclasses.h
kdebug.h
d
#define d
Definition: khtmlfind.cpp:42
kjavaappletserver.h
ERRORCODE
static const int ERRORCODE
Definition: kjavadownloader.cpp:33
KJAS_RESUME
static const int KJAS_RESUME
Definition: kjavadownloader.cpp:42
KJAS_STOP
static const int KJAS_STOP
Definition: kjavadownloader.cpp:40
KJAS_HOLD
static const int KJAS_HOLD
Definition: kjavadownloader.cpp:41
REDIRECT
static const int REDIRECT
Definition: kjavadownloader.cpp:35
MIMETYPE
static const int MIMETYPE
Definition: kjavadownloader.cpp:36
CONNECTED
static const int CONNECTED
Definition: kjavadownloader.cpp:37
HEADERS
static const int HEADERS
Definition: kjavadownloader.cpp:34
DATA
static const int DATA
Definition: kjavadownloader.cpp:31
REQUESTDATA
static const int REQUESTDATA
Definition: kjavadownloader.cpp:38
FINISHED
static const int FINISHED
Definition: kjavadownloader.cpp:32
kjavadownloader.h
kurl.h
KIO::put
TransferJob * put(const KUrl &url, int permissions, JobFlags flags=DefaultFlags)
KIO::get
TransferJob * get(const KUrl &url, LoadType reload=NoReload, JobFlags flags=DefaultFlags)
KIO::NoReload
NoReload
mimetype
MimetypeJob * mimetype(const KUrl &url, JobFlags flags=DefaultFlags)
KIO::HideProgressInfo
HideProgressInfo
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 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-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 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
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
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