PTLib
Version 2.10.4
|
00001 /* 00002 * udpsock.h 00003 * 00004 * User Datagram Protocol socket I/O channel class. 00005 * 00006 * Portable Windows Library 00007 * 00008 * Copyright (c) 1993-1998 Equivalence Pty. Ltd. 00009 * 00010 * The contents of this file are subject to the Mozilla Public License 00011 * Version 1.0 (the "License"); you may not use this file except in 00012 * compliance with the License. You may obtain a copy of the License at 00013 * http://www.mozilla.org/MPL/ 00014 * 00015 * Software distributed under the License is distributed on an "AS IS" 00016 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 00017 * the License for the specific language governing rights and limitations 00018 * under the License. 00019 * 00020 * The Original Code is Portable Windows Library. 00021 * 00022 * The Initial Developer of the Original Code is Equivalence Pty. Ltd. 00023 * 00024 * Portions are Copyright (C) 1993 Free Software Foundation, Inc. 00025 * All Rights Reserved. 00026 * 00027 * Contributor(s): ______________________________________. 00028 * 00029 * $Revision: 26309 $ 00030 * $Author: ededu $ 00031 * $Date: 2011-08-14 18:01:01 -0500 (Sun, 14 Aug 2011) $ 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 ) const; 00119 PString GetSendAddress() const; 00120 00125 void GetLastReceiveAddress( 00126 Address & address, 00127 WORD & port 00128 ) const; 00129 PString GetLastReceiveAddress() const; 00130 00135 virtual PBoolean IsAlternateAddress( 00136 const Address & address, 00137 WORD port 00138 ); 00139 00146 virtual PBoolean DoPseudoRead(int & selectStatus); 00147 00150 virtual PBoolean ModifyQoSSpec( 00151 PQoS * qos 00152 ); 00153 00154 #if P_QOS 00155 00157 virtual PQoS & GetQoSSpec(); 00158 #endif 00159 00162 static PBoolean SupportQoS(const PIPSocket::Address & address); 00163 00166 static void EnableGQoS(); 00168 00169 protected: 00170 // Open an IPv4 socket (for backward compatibility) 00171 virtual PBoolean OpenSocket(); 00172 00173 // Open an IPv4 or IPv6 socket 00174 virtual PBoolean OpenSocket( 00175 int ipAdressFamily 00176 ); 00177 00178 // Create a QOS-enabled socket 00179 virtual PBoolean OpenSocketGQOS(int af, int type, int proto); 00180 00181 // Modify the QOS settings 00182 virtual PBoolean ApplyQoS(); 00183 00184 virtual const char * GetProtocolName() const; 00185 00186 Address sendAddress; 00187 WORD sendPort; 00188 00189 Address lastReceiveAddress; 00190 WORD lastReceivePort; 00191 00192 PQoS qosSpec; 00193 00194 // Include platform dependent part of class 00195 #ifdef _WIN32 00196 #include "msos/ptlib/udpsock.h" 00197 #else 00198 #include "unix/ptlib/udpsock.h" 00199 #endif 00200 }; 00201 00202 #if P_QOS 00203 00204 #ifdef _WIN32 00205 #include <winbase.h> 00206 #include <winreg.h> 00207 00208 class PWinQoS : public PObject 00209 { 00210 PCLASSINFO(PWinQoS,PObject); 00211 00212 public: 00213 PWinQoS(PQoS & pqos, struct sockaddr * to, char * inBuf, DWORD & bufLen); 00214 ~PWinQoS(); 00215 00216 //QOS qos; 00217 //QOS_DESTADDR qosdestaddr; 00218 protected: 00219 sockaddr * sa; 00220 }; 00221 00222 #endif // _WIN32 00223 #endif // P_QOS 00224 00225 00226 #endif // PTLIB_UDPSOCKET_H 00227 00228 00229 // End Of File ///////////////////////////////////////////////////////////////