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
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef PTLIB_UDPSOCKET_H
00035 #define PTLIB_UDPSOCKET_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 #include <ptlib/ipdsock.h>
00042 #include <ptlib/qos.h>
00043
00047 class PUDPSocket : public PIPDatagramSocket
00048 {
00049 PCLASSINFO(PUDPSocket, PIPDatagramSocket);
00050
00051 public:
00057 PUDPSocket(
00058 WORD port = 0,
00059 int iAddressFamily = AF_INET
00060 );
00061 PUDPSocket(
00062 PQoS * qos,
00063 WORD port = 0,
00064 int iAddressFamily = AF_INET
00065 );
00066 PUDPSocket(
00067 const PString & service,
00068 PQoS * qos = NULL,
00069 int iAddressFamily = AF_INET
00070 );
00071 PUDPSocket(
00072 const PString & address,
00073 WORD port
00074 );
00075 PUDPSocket(
00076 const PString & address,
00077 const PString & service
00078 );
00080
00085 PBoolean Read(
00086 void * buf,
00087 PINDEX len
00088 );
00089
00092 PBoolean Write(
00093 const void * buf,
00094 PINDEX len
00095 );
00096
00099 PBoolean Connect(
00100 const PString & address
00101 );
00103
00108 void SetSendAddress(
00109 const Address & address,
00110 WORD port
00111 );
00112
00115 void GetSendAddress(
00116 Address & address,
00117 WORD & port
00118 );
00119
00120
00123 virtual PBoolean ModifyQoSSpec(
00124 PQoS * qos
00125 );
00126
00127 #if P_QOS
00128
00130 virtual PQoS & GetQoSSpec();
00131 #endif
00132
00136 void GetLastReceiveAddress(
00137 Address & address,
00138 WORD & port
00139 );
00140
00145 virtual PBoolean IsAlternateAddress(
00146 const Address & address,
00147 WORD port
00148 );
00149
00150
00157 virtual PBoolean DoPseudoRead(int & selectStatus);
00158
00161 static PBoolean SupportQoS(const PIPSocket::Address & address);
00162
00165 static void EnableGQoS();
00167
00168 protected:
00169
00170 virtual PBoolean OpenSocket();
00171
00172
00173 virtual PBoolean OpenSocket(
00174 int ipAdressFamily
00175 );
00176
00177
00178 virtual PBoolean OpenSocketGQOS(int af, int type, int proto);
00179
00180
00181 virtual PBoolean ApplyQoS();
00182
00183 virtual const char * GetProtocolName() const;
00184
00185 Address sendAddress;
00186 WORD sendPort;
00187
00188 Address lastReceiveAddress;
00189 WORD lastReceivePort;
00190
00191 PQoS qosSpec;
00192
00193
00194 #ifdef _WIN32
00195 #include "msos/ptlib/udpsock.h"
00196 #else
00197 #include "unix/ptlib/udpsock.h"
00198 #endif
00199 };
00200
00201 #if P_QOS
00202
00203 #ifdef _WIN32
00204 #include <winbase.h>
00205 #include <winreg.h>
00206
00207 class PWinQoS : public PObject
00208 {
00209 PCLASSINFO(PWinQoS,PObject);
00210
00211 public:
00212 PWinQoS(PQoS & pqos, struct sockaddr * to, char * inBuf, DWORD & bufLen);
00213 ~PWinQoS();
00214
00215
00216
00217 protected:
00218 sockaddr * sa;
00219 };
00220
00221 #endif // _WIN32
00222 #endif // P_QOS
00223
00224
00225 #endif // PTLIB_UDPSOCKET_H
00226
00227
00228