(file) Return to pegasus_socket.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  1 karl  1.9 //%2003////////////////////////////////////////////////////////////////////////
  2 mday  1.2 //
  3 karl  1.9 // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development
  4           // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
  5           // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
  6           // IBM Corp.; EMC Corporation, The Open Group.
  7 mday  1.2 //
  8           // Permission is hereby granted, free of charge, to any person obtaining a copy
  9           // of this software and associated documentation files (the "Software"), to
 10           // deal in the Software without restriction, including without limitation the
 11           // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 12           // sell copies of the Software, and to permit persons to whom the Software is
 13           // furnished to do so, subject to the following conditions:
 14           // 
 15           // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 16           // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 17           // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 18           // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 19           // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 20           // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 21           // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 22           // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 23           //
 24           //==============================================================================
 25           //
 26           // Author: Mike Day (mdday@us.ibm.com)
 27           //
 28 mday  1.2 // Modified By:
 29           //
 30           //%/////////////////////////////////////////////////////////////////////////////
 31           
 32           
 33           #ifndef peg_socket_class_heirarchy_h
 34           #define peg_socket_class_heirarchy_h
 35           
 36           #include <Pegasus/Common/Config.h>
 37           #include <Pegasus/Common/IPC.h>
 38           #include <Pegasus/Common/TLS.h>
 39           #ifdef PEGASUS_OS_TYPE_WINDOWS
 40           #include <windows.h>
 41           # ifndef _WINSOCKAPI_
 42           #   include <winsock2.h>
 43           # endif
 44           #else
 45           # include <cctype>
 46           #ifndef PEGASUS_OS_OS400
 47 mday  1.4 //#   include <unistd.h>
 48 mday  1.2 #else
 49           #   include <Pegasus/Common/OS400ConvertChar.h>
 50           #   include <unistd.cleinc>
 51           #endif
 52           #ifdef PEGASUS_OS_ZOS
 53           #   include <string.h>  // added by rk for memcpy
 54           #endif
 55           # include <cstdlib>
 56           # include <errno.h>
 57           # include <fcntl.h>
 58           # include <netdb.h>
 59           # include <netinet/in.h>
 60           # include <arpa/inet.h>
 61           # include <sys/socket.h>
 62           #endif
 63 marek 1.7 #ifdef PEGASUS_OS_ZOS
 64           #   include <Pegasus/Common/SocketzOS_inline.h>
 65           #endif
 66 mday  1.2 #include <Pegasus/Common/Linkage.h>
 67           
 68           PEGASUS_NAMESPACE_BEGIN
 69           
 70           #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
 71           typedef size_t PEGASUS_SOCKLEN_SIZE;
 72           
 73 keith.petley 1.8 #elif defined(PEGASUS_PLATFORM_AIX_RS_IBMCXX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || (defined(PEGASUS_OS_SOLARIS) && !defined(SUNOS_5_6))
 74 mday         1.2 typedef socklen_t PEGASUS_SOCKLEN_SIZE;
 75                  #else
 76 mday         1.4 typedef int PEGASUS_SOCKLEN_SIZE;
 77 mday         1.2 #endif
 78                  
 79                  
 80                  
 81                  
 82                  //  <<< Thu Jul  3 13:50:29 2003 mdd >>> pep_88
 83                  /*****************************************************************
 84                   *
 85                   *  The socket support in pegasus is schizophrenic. Some code uses 
 86                   *  an Sint32 (fd) as a socket, while other code uses a pointer to an 
 87                   *  MP_Socket, which is kind of a container for either an Sint32 socket 
 88                   *  or an SSL socket. 
 89                   *
 90                   *  Then there is also the local socket. (AF_UNIX). 
 91                   *
 92                   *  What we need to make all of this coherent is a general-purpose
 93                   *  socket class that uses polymorphism to provide a good sockets
 94                   *  interface.
 95                   *  Because of what we are planning for the pep_88 connection management
 96                   *  code this general-purpose socket class should be reference counted.
 97                   *
 98 mday         1.2  *****************************************************************/ 
 99                  
100                  class abstract_socket;
101                  class socket_factory;
102                  
103                  
104                  class PEGASUS_COMMON_LINKAGE pegasus_socket 
105                  {
106                  
107 mday         1.3 public:
108                    
109                    pegasus_socket(void);
110                    pegasus_socket(socket_factory *);
111 konrad.r     1.10   pegasus_socket(socket_factory *, SSLContext *);
112 mday         1.3    pegasus_socket(abstract_socket *);
113                     pegasus_socket(const pegasus_socket& s);
114                     ~pegasus_socket(void);
115 mday         1.2        
116 mday         1.3    pegasus_socket& operator=(const pegasus_socket& s);
117                     Boolean operator==(const pegasus_socket& s);
118                     
119                     operator Sint32() const;
120 mday         1.2  
121 mday         1.3    int socket(int type, int style, int protocol, void *ssl_context = 0);
122 mday         1.2                  
123 mday         1.3    Sint32 read(void* ptr, Uint32 size);
124                     Sint32 write(const void* ptr, Uint32 size);
125                     int close(void);
126                     int enableBlocking(void);
127                     int disableBlocking(void);
128 mday         1.2  
129 mday         1.3    int getsockname (struct sockaddr *addr, PEGASUS_SOCKLEN_SIZE *length_ptr);
130                     int bind (struct sockaddr *addr, PEGASUS_SOCKLEN_SIZE length);
131 mday         1.2       
132 mday         1.3    // change size_t to size_t for ZOS and windows
133                     pegasus_socket accept(struct sockaddr *addr, PEGASUS_SOCKLEN_SIZE *length_ptr);
134                     int connect (struct sockaddr *addr, PEGASUS_SOCKLEN_SIZE length);
135                     int shutdown(int how);
136                     int listen(int q);
137                     int getpeername (struct sockaddr *addr, PEGASUS_SOCKLEN_SIZE *length_ptr);
138                     int send (void *buffer, PEGASUS_SOCKLEN_SIZE size, int flags);
139                     int recv (void *buffer, PEGASUS_SOCKLEN_SIZE size, int flags);
140                     int sendto(void *buffer, PEGASUS_SOCKLEN_SIZE size, int flags, struct sockaddr *addr, PEGASUS_SOCKLEN_SIZE length);
141                     int recvfrom(void *buffer, PEGASUS_SOCKLEN_SIZE size, int flags, struct sockaddr *addr, PEGASUS_SOCKLEN_SIZE *length_ptr);
142                     int setsockopt (int level, int optname, void *optval, PEGASUS_SOCKLEN_SIZE optlen);
143                     int getsockopt (int level, int optname, void *optval, PEGASUS_SOCKLEN_SIZE *optlen_ptr);
144                   
145                   
146                     Boolean incompleteReadOccurred(Sint32 retCode);
147                     Boolean is_secure(void);
148 mday         1.5      void set_close_on_exec(void);
149 mday         1.2        
150 mday         1.3    const char* get_err_string(void);
151                     
152                   private:
153 mday         1.2  
154 mday         1.3    abstract_socket * _rep;
155 mday         1.2  
156                   };
157                   
158                   
159                   class PEGASUS_COMMON_LINKAGE socket_factory 
160                   {
161 mday         1.3  public:
162                     socket_factory(void)
163                     {
164                     }
165 mday         1.2        
166 mday         1.3    virtual ~socket_factory(void)
167                     {
168                     }
169 mday         1.2        
170 mday         1.3    virtual abstract_socket *make_socket(void) = 0;
171 mday         1.2  #ifdef PEGASUS_HAS_SSL
172 mday         1.3    virtual abstract_socket *make_socket(SSLContext *) = 0;
173 mday         1.2  #endif
174                   };
175                   
176                   
177                   
178                   /**
179                    *  factory class for creating the bsd socket object 
180                    **/
181                   class PEGASUS_COMMON_LINKAGE bsd_socket_factory : public socket_factory
182                   {
183 mday         1.3  public:
184                     bsd_socket_factory(void);
185                     ~bsd_socket_factory(void);
186                     abstract_socket *make_socket(void);
187 mday         1.2  #ifdef PEGASUS_HAS_SSL
188 mday         1.3    abstract_socket *make_socket(SSLContext* );
189 mday         1.2  #endif
190                   };
191                   
192                   
193                   
194                   #ifdef PEGASUS_HAS_SSL
195                   
196                   class PEGASUS_COMMON_LINKAGE ssl_socket_factory : public socket_factory
197                   {
198                   
199 mday         1.3  public:
200                     ssl_socket_factory(void);
201                     ~ssl_socket_factory(void);
202                     abstract_socket* make_socket(void);
203                     abstract_socket* make_socket(SSLContext* );
204 mday         1.2  };
205                   
206                   
207                   
208                   #endif 
209                   
210                   
211                   # ifdef PEGASUS_LOCAL_DOMAIN_SOCKET
212                   // << Thu Aug 14 15:01:30 2003 mdd >> domain sockets work 
213                   class PEGASUS_COMMON_LINKAGE unix_socket_factory : public socket_factory
214                   {
215 mday         1.3  public:
216                     unix_socket_factory(void);
217                     ~unix_socket_factory(void);
218                     abstract_socket* make_socket(void);
219 kumpf        1.6  #ifdef PEGASUS_HAS_SSL
220                     abstract_socket *make_socket(SSLContext*);  // Do not use
221                   #endif
222 mday         1.2  };
223                   
224                   
225                   #endif
226                   
227                   PEGASUS_NAMESPACE_END
228                   
229                   #endif /* peg_socket_class_heirarchy_h */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2