00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#ifndef KRESOLVERWORKERBASE_H
00026
#define KRESOLVERWORKERBASE_H
00027
00028
#include "kresolver.h"
00029
00030
00031
class QString;
00032
template <
class T>
class QValueList;
00033
00034
namespace KNetwork {
00035
00036
namespace Internal
00037 {
00038
class KResolverThread;
00039
struct InputData;
00040 }
00041
00060
class KResolverWorkerBase
00061 {
00062
public:
00063
00071 class ResolverLocker
00072 {
00073
public:
00077 ResolverLocker(KResolverWorkerBase* parent)
00078 : parent( parent )
00079 {
00080 parent->acquireResolver();
00081 }
00082
00086 ~ResolverLocker()
00087 {
00088 parent->releaseResolver();
00089 }
00090
00096 void openClose()
00097 {
00098 parent->releaseResolver();
00099 parent->acquireResolver();
00100 }
00101
00102
private:
00104 KResolverWorkerBase* parent;
00105 };
00106
private:
00107
00108 KNetwork::Internal::KResolverThread *th;
00109
const KNetwork::Internal::InputData *input;
00110
friend class KNetwork::Internal::KResolverThread;
00111
friend class KNetwork::Internal::KResolverManager;
00112
friend class KResolverWorkerBase::ResolverLocker;
00113
00114
int m_finished : 1;
00115
int m_reserved : 31;
00116
00117
public:
00125
KResolverResults results;
00126
00127
public:
00128
00129 KResolverWorkerBase();
00130
00131
00132
virtual ~KResolverWorkerBase();
00133
00137
QString nodeName() const;
00138
00142
QString serviceName() const;
00143
00147
int flags() const;
00148
00152
int familyMask() const;
00153
00157
int socketType() const;
00158
00162
int protocol() const;
00163
00167
QCString protocolName() const;
00168
00175
void finished();
00176
00177 protected:
00178
00191 virtual
bool run() = 0;
00192
00212 virtual
bool preprocess() = 0;
00213
00222 virtual
bool postprocess();
00223
00227 inline
void setError(
int errorcode,
int syserror = 0)
00228 { results.setError(errorcode, syserror); }
00229
00245
bool enqueue(
KResolver* other);
00246
00250
bool enqueue(KResolverWorkerBase* worker);
00251
00259
bool checkResolver();
00260
00272
void acquireResolver();
00273
00280
void releaseResolver();
00281
00282 };
00283
00289
class KResolverWorkerFactoryBase
00290 {
00291
public:
00292
virtual KResolverWorkerBase*
create() const = 0;
00293
00299 static
void registerNewWorker(KResolverWorkerFactoryBase* factory);
00300 };
00301
00307 template<class Worker>
00308 class KResolverWorkerFactory: public KResolverWorkerFactoryBase
00309 {
00310
public:
00311
virtual KResolverWorkerBase*
create()
const
00312
{
return new Worker; }
00313 };
00314
00315 }
00316
00317
#endif