KDECore
kdatagramsocket.h
Go to the documentation of this file.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 KDATAGRAMSOCKET_H
00026 #define KDATAGRAMSOCKET_H
00027
00028 #include <qcstring.h>
00029
00030 #include "ksocketaddress.h"
00031 #include "kclientsocketbase.h"
00032
00033 namespace KNetwork {
00034
00035 class KResolverEntry;
00036
00051 class KDECORE_EXPORT KDatagramPacket
00052 {
00053 QByteArray m_data;
00054 KSocketAddress m_address;
00055
00056 public:
00060 KDatagramPacket()
00061 { }
00062
00066 KDatagramPacket(const QByteArray& content)
00067 : m_data(content)
00068 { }
00069
00075 KDatagramPacket(const char* content, uint length)
00076 { setData(content, length); }
00077
00081 KDatagramPacket(const QByteArray& content, const KSocketAddress& addr)
00082 : m_data(content), m_address(addr)
00083 { }
00084
00088 KDatagramPacket(const char *content, uint length, const KSocketAddress& addr)
00089 : m_address(addr)
00090 { setData(content, length); }
00091
00095 KDatagramPacket(const KDatagramPacket& other)
00096 { *this = other; }
00097
00101 ~KDatagramPacket()
00102 { }
00103
00107 const QByteArray& data() const
00108 { return m_data; }
00109
00113 uint length() const
00114 { return m_data.size(); }
00115
00119 uint size() const
00120 { return m_data.size(); }
00121
00125 bool isEmpty() const
00126 { return m_data.isEmpty(); }
00127
00131 bool isNull() const
00132 { return m_data.isNull(); }
00133
00137 const KSocketAddress& address() const
00138 { return m_address; }
00139
00143 void setAddress(const KSocketAddress& addr)
00144 { m_address = addr; }
00145
00150 void detach()
00151 { m_data.detach(); }
00152
00156 void setData(const QByteArray& data)
00157 { m_data = data; }
00158
00162 void setData(const char* data, uint length)
00163 { m_data.duplicate(data, length); }
00164 };
00165
00166 class KDatagramSocketPrivate;
00180 class KDECORE_EXPORT KDatagramSocket: public KClientSocketBase
00181 {
00182 Q_OBJECT
00183
00184 public:
00188 KDatagramSocket(QObject* parent = 0L, const char *name = 0L);
00189
00193 virtual ~KDatagramSocket();
00194
00198
00199
00208 virtual bool bind(const QString& node = QString::null,
00209 const QString& service = QString::null);
00210
00215 virtual bool bind(const KResolverEntry& entry)
00216 { return KClientSocketBase::bind(entry); }
00217
00230 virtual bool connect(const QString& node = QString::null,
00231 const QString& service = QString::null);
00232
00237 virtual bool connect(const KResolverEntry& entry)
00238 { return KClientSocketBase::connect(entry); }
00239
00243 virtual Q_LONG writeBlock(const char *data, Q_ULONG len, const KSocketAddress& to);
00244
00251 virtual KDatagramPacket receive();
00252
00263 virtual Q_LONG send(const KDatagramPacket& packet);
00264
00265 private slots:
00266 void lookupFinishedLocal();
00267 void lookupFinishedPeer();
00268
00269 private:
00270 bool doBind();
00271 void setupSignals();
00272
00273 KDatagramSocketPrivate *d;
00274 };
00275
00276 }
00277
00278 #endif