LibreOffice
LibreOffice 4.1 SDK C/C++ API Reference
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
socket_decl.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #ifndef _OSL_SOCKET_DECL_HXX_
21 #define _OSL_SOCKET_DECL_HXX_
22 
23 #include <osl/socket.h>
24 #include <rtl/ustring.hxx>
25 #include <rtl/byteseq.hxx>
26 
27 namespace osl
28 {
30 
35  class SocketAddr
36  {
37  protected:
39  public:
40 
43  inline SocketAddr();
44 
47  inline SocketAddr(const SocketAddr& Addr);
48 
53  inline SocketAddr(const oslSocketAddr , __osl_socket_NoCopy nocopy );
54 
57  inline SocketAddr(oslSocketAddr Addr);
58 
64  inline SocketAddr( const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort );
65 
68  inline ~SocketAddr();
69 
74  inline sal_Bool is() const;
75 
84  inline ::rtl::OUString SAL_CALL getHostname( oslSocketResult *pResult = 0 ) const;
85 
88  inline sal_Bool SAL_CALL setHostname( const ::rtl::OUString &sDottedIpOrHostname );
89 
93  inline sal_Int32 SAL_CALL getPort() const;
94 
98  inline sal_Bool SAL_CALL setPort( sal_Int32 nPort );
99 
103  inline sal_Bool SAL_CALL setAddr( const ::rtl::ByteSequence & address );
104 
107  inline ::rtl::ByteSequence SAL_CALL getAddr( oslSocketResult *pResult = 0 ) const;
108 
111  inline SocketAddr & SAL_CALL operator= (oslSocketAddr Addr);
112 
115  inline SocketAddr & SAL_CALL operator= (const SocketAddr& Addr);
116 
121  inline SocketAddr & SAL_CALL assign( oslSocketAddr Addr, __osl_socket_NoCopy nocopy );
122 
125  inline sal_Bool SAL_CALL operator== (oslSocketAddr Addr) const;
126 
129  inline sal_Bool SAL_CALL operator== (const SocketAddr & Addr) const;
130 
133  inline oslSocketAddr SAL_CALL getHandle() const;
134 
140  static inline ::rtl::OUString SAL_CALL getLocalHostname( oslSocketResult *pResult = 0);
141 
146  static inline void SAL_CALL resolveHostname(
147  const ::rtl::OUString & strHostName , SocketAddr & Addr );
148 
155  static inline sal_Int32 SAL_CALL getServicePort(
156  const ::rtl::OUString& strServiceName,
157  const ::rtl::OUString & strProtocolName= ::rtl::OUString("tcp") );
158  };
159 
160 
161  class Socket
162  {
163  protected:
165  protected:
171  inline Socket(oslSocketType Type,
174  public:
175  inline Socket( );
176 
177  inline Socket( const Socket & socket );
178 
179  inline Socket( oslSocket socketHandle );
180 
186  inline Socket( oslSocket socketHandle, __sal_NoAcquire noacquire );
187 
190  inline ~Socket();
191 
195  inline Socket& SAL_CALL operator= ( oslSocket socketHandle);
196 
200  inline Socket& SAL_CALL operator= (const Socket& sock);
201 
206  inline sal_Bool SAL_CALL operator==( const Socket& rSocket ) const ;
207 
212  inline sal_Bool SAL_CALL operator==( const oslSocket socketHandle ) const;
213 
219  inline void SAL_CALL shutdown( oslSocketDirection Direction = osl_Socket_DirReadWrite );
220 
226  inline void SAL_CALL close();
227 
232  inline void SAL_CALL getLocalAddr( SocketAddr &Addr ) const;
233 
237  inline sal_Int32 SAL_CALL getLocalPort() const;
238 
242  inline ::rtl::OUString SAL_CALL getLocalHost() const;
243 
247  inline void SAL_CALL getPeerAddr( SocketAddr & Addr) const;
248 
252  inline sal_Int32 SAL_CALL getPeerPort() const;
253 
257  inline ::rtl::OUString SAL_CALL getPeerHost() const;
258 
263  inline sal_Bool SAL_CALL bind(const SocketAddr& LocalInterface);
264 
275  inline sal_Bool SAL_CALL isRecvReady(const TimeValue *pTimeout = 0) const;
276 
287  inline sal_Bool SAL_CALL isSendReady(const TimeValue *pTimeout = 0) const;
288 
289 
302  inline sal_Bool SAL_CALL isExceptionPending(const TimeValue *pTimeout = 0) const;
303 
304 
316  inline oslSocketType SAL_CALL getType() const;
317 
399  inline sal_Int32 SAL_CALL getOption(
400  oslSocketOption Option,
401  void* pBuffer,
402  sal_uInt32 BufferLen,
404 
446  inline sal_Bool SAL_CALL setOption( oslSocketOption Option,
447  void* pBuffer,
448  sal_uInt32 BufferLen,
450 
454  inline sal_Bool setOption( oslSocketOption option, sal_Int32 nValue );
455 
459  inline sal_Int32 getOption( oslSocketOption option ) const;
460 
467  inline sal_Bool SAL_CALL enableNonBlockingMode( sal_Bool bNonBlockingMode);
468 
472  inline sal_Bool SAL_CALL isNonBlockingMode() const;
473 
474 
477  inline void SAL_CALL clearError() const;
478 
486  inline oslSocketError getError() const;
487 
490  inline ::rtl::OUString getErrorAsString( ) const;
491 
494  inline oslSocket getHandle() const;
495  };
496 
497 
498  class StreamSocket : public Socket
499  {
500  public:
512 
513  inline StreamSocket( const StreamSocket & );
514 
515  inline StreamSocket( oslSocket Socket , __sal_NoAcquire noacquire );
516 
517  inline StreamSocket( oslSocket Socket );
518 
528  inline sal_Int32 SAL_CALL read(void* pBuffer, sal_uInt32 n);
529 
537  inline sal_Int32 SAL_CALL write(const void* pBuffer, sal_uInt32 n);
538 
539 
556  inline sal_Int32 SAL_CALL recv(void* pBuffer,
557  sal_uInt32 BytesToRead,
559 
576  sal_Int32 SAL_CALL send(const void* pBuffer,
577  sal_uInt32 BytesToSend,
579  };
580 
582  {
583  public:
595 
596 
606  oslSocketResult SAL_CALL connect(const SocketAddr& TargetHost, const TimeValue* pTimeout = 0);
607  };
608 
611  class AcceptorSocket : public Socket
612  {
613  public:
617 
625  inline sal_Bool SAL_CALL listen(sal_Int32 MaxPendingConnections= -1);
626 
634  inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection);
635 
645  inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection, SocketAddr & PeerAddr);
646  };
647 
648 
649 
652  class DatagramSocket : public Socket
653  {
654  public:
655 
664 
684  inline sal_Int32 SAL_CALL recvFrom(void* pBuffer,
685  sal_uInt32 BufferSize,
686  SocketAddr* pSenderAddr= 0,
688 
711  inline sal_Int32 SAL_CALL sendTo( const SocketAddr& ReceiverAddr,
712  const void* pBuffer,
713  sal_uInt32 BufferSize,
715  };
716 
717 }
718 
719 #endif
720 
721 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
oslSocketDirection
Used by shutdown to denote which end of the socket to "close".
Definition: socket.h:134
sal_Int32 write(const void *pBuffer, sal_uInt32 n)
Writes n bytes from pBuffer to the stream.
Definition: socket.hxx:434
SocketAddr()
Creates socket address of unknown type.
Definition: socket.hxx:27
Definition: socket_decl.hxx:581
oslSocketType getType() const
Queries the socket for its type.
Definition: socket.hxx:328
oslSocketMsgFlag
Represents flags to be used with send/recv-calls.
Definition: socket.h:121
This String class provides base functionality for C++ like Unicode character array handling...
Definition: ustring.hxx:87
Definition: socket.h:71
sal_Bool is() const
checks, if the SocketAddr was created successful.
Definition: socket.hxx:158
sal_Bool isSendReady(const TimeValue *pTimeout=0) const
Checks if send operations will block.
Definition: socket.hxx:316
Definition: time.h:42
Definition: socket.h:111
~SocketAddr()
destroys underlying oslSocketAddress
Definition: socket.hxx:71
Definition: socket_decl.hxx:161
SocketAddr & assign(oslSocketAddr Addr, __osl_socket_NoCopy nocopy)
Assigns the socket addr without copyconstructing it.
Definition: socket.hxx:138
struct oslSocketAddrImpl * oslSocketAddr
Opaque datatype SocketAddr.
Definition: socket.h:41
Definition: socket.h:58
ConnectorSocket(oslAddrFamily Family=osl_Socket_FamilyInet, oslProtocol Protocol=osl_Socket_ProtocolIp, oslSocketType Type=osl_Socket_TypeStream)
Creates a socket that can connect to a (remote) host.
Definition: socket.hxx:457
oslSocket m_handle
Definition: socket_decl.hxx:164
void close()
Closes a socket.
Definition: socket.hxx:254
sal_Int32 recv(void *pBuffer, sal_uInt32 BytesToRead, oslSocketMsgFlag flags=osl_Socket_MsgNormal)
Tries to receive BytesToRead data from the connected socket,.
Definition: socket.hxx:441
oslSocketOption
Represents socket-options.
Definition: socket.h:84
static inline::rtl::OUString getLocalHostname(oslSocketResult *pResult=0)
Get the hostname for the local interface.
Definition: socket.hxx:164
sal_Bool setOption(oslSocketOption Option, void *pBuffer, sal_uInt32 BufferLen, oslSocketOptionLevel Level=osl_Socket_LevelSocket) const
Sets the sockets attributes.
Definition: socket.hxx:344
SocketAddr & operator=(oslSocketAddr Addr)
assign the handle to this reference.
Definition: socket.hxx:122
Socket & operator=(oslSocket socketHandle)
Assignment operator.
Definition: socket.hxx:221
oslSocketType
Represents the type of a socket.
Definition: socket.h:70
void getLocalAddr(SocketAddr &Addr) const
Retrieves the address of the local interface of this socket.
Definition: socket.hxx:260
sal_Bool enableNonBlockingMode(sal_Bool bNonBlockingMode)
Enables/disables non-blocking mode of the socket.
Definition: socket.hxx:367
inline::rtl::OUString getErrorAsString() const
Builds a string with the last error-message for the socket.
Definition: socket.hxx:392
sal_Int32 send(const void *pBuffer, sal_uInt32 BytesToSend, oslSocketMsgFlag=osl_Socket_MsgNormal)
Tries to send BytesToSend data to the connected socket.
Definition: socket.hxx:449
A connectionless socket to send and receive datagrams.
Definition: socket_decl.hxx:652
__osl_socket_NoCopy
Definition: socket_decl.hxx:29
struct oslSocketImpl * oslSocket
Definition: socket.h:403
sal_Int32 sendTo(const SocketAddr &ReceiverAddr, const void *pBuffer, sal_uInt32 BufferSize, oslSocketMsgFlag Flag=osl_Socket_MsgNormal)
Tries to send one datagram with BytesToSend size to the given ReceiverAddr.
Definition: socket.hxx:549
AcceptorSocket(oslAddrFamily Family=osl_Socket_FamilyInet, oslProtocol Protocol=osl_Socket_ProtocolIp, oslSocketType Type=osl_Socket_TypeStream)
Definition: socket.hxx:471
sal_Int32 getPort() const
Returns the port number of the address.
Definition: socket.hxx:88
sal_Bool listen(sal_Int32 MaxPendingConnections=-1)
Prepare a socket for the accept-call.
Definition: socket.hxx:478
DatagramSocket(oslAddrFamily Family=osl_Socket_FamilyInet, oslProtocol Protocol=osl_Socket_ProtocolIp, oslSocketType Type=osl_Socket_TypeDgram)
Creates a datagram socket.
Definition: socket.hxx:520
Definition: socket_decl.hxx:498
oslSocketAddr m_handle
Definition: socket_decl.hxx:38
Definition: socket_decl.hxx:29
sal_Int32 getLocalPort() const
Get the local port of the socket.
Definition: socket.hxx:266
sal_Int32 recvFrom(void *pBuffer, sal_uInt32 BufferSize, SocketAddr *pSenderAddr=0, oslSocketMsgFlag Flag=osl_Socket_MsgNormal)
Tries to receives BufferSize data from the socket, if no error occurs.
Definition: socket.hxx:527
oslSocketError
Describes the various error socket error conditions, which may occur.
Definition: socket.h:144
sal_Bool isExceptionPending(const TimeValue *pTimeout=0) const
Checks if a request for out-of-band data will block.
Definition: socket.hxx:322
sal_Int32 read(void *pBuffer, sal_uInt32 n)
Retrieves n bytes from the stream and copies them into pBuffer.
Definition: socket.hxx:428
oslProtocol
represent a specific protocol within a address-family
Definition: socket.h:57
StreamSocket(oslAddrFamily Family=osl_Socket_FamilyInet, oslProtocol Protocol=osl_Socket_ProtocolIp, oslSocketType Type=osl_Socket_TypeStream)
Creates a socket.
Definition: socket.hxx:406
sal_Bool bind(const SocketAddr &LocalInterface)
Binds the socket to the specified (local) interface.
Definition: socket.hxx:304
static void resolveHostname(const ::rtl::OUString &strHostName, SocketAddr &Addr)
Tries to find an address for a host.
Definition: socket.hxx:174
oslSocketResult connect(const SocketAddr &TargetHost, const TimeValue *pTimeout=0)
Connects the socket to a (remote) host.
Definition: socket.hxx:464
oslSocket getHandle() const
Returns the underlying handle unacquired (The caller must acquire it to keep it). ...
Definition: socket.hxx:400
sal_Bool operator==(const Socket &rSocket) const
Definition: socket.hxx:236
oslSocketResult
Common return codes of socket related functions.
Definition: socket.h:183
Definition: socket.h:122
Definition: socket.h:48
~Socket()
Destructor.
Definition: socket.hxx:215
sal_Bool setHostname(const ::rtl::OUString &sDottedIpOrHostname)
Sets the ipaddress or hostname of the SocketAddress.
Definition: socket.hxx:99
oslSocketAddr getHandle() const
Returns the underlying SocketAddr handle without copyconstructing it.
Definition: socket.hxx:152
sal_Bool setPort(sal_Int32 nPort)
Sets the port number of the address.
Definition: socket.hxx:94
sal_Bool operator==(oslSocketAddr Addr) const
Returns true if the underlying handle is identical to the Addr handle.
Definition: socket.hxx:147
sal_Bool setAddr(const ::rtl::ByteSequence &address)
Sets the address of the underlying socket address struct in network byte order.
Definition: socket.hxx:106
oslAddrFamily
Represents the address-family of a socket.
Definition: socket.h:47
oslSocketOptionLevel
Represents the different socket-option levels.
Definition: socket.h:110
Definition: socket.h:72
unsigned char sal_Bool
Definition: types.h:37
inline::rtl::OUString getPeerHost() const
Get the hostname for the remote interface.
Definition: socket.hxx:296
void getPeerAddr(SocketAddr &Addr) const
Retrieves the address of the remote host of this socket.
Definition: socket.hxx:282
inline::rtl::ByteSequence getAddr(oslSocketResult *pResult=0) const
Returns the address of the underlying socket in network byte order.
Definition: socket.hxx:112
The class should be understood as a reference to a socket address handle ( struct sockaddr )...
Definition: socket_decl.hxx:35
sal_Bool isNonBlockingMode() const
Query blocking mode of the socket.
Definition: socket.hxx:373
void clearError() const
clears the error status
Definition: socket.hxx:379
void shutdown(oslSocketDirection Direction=osl_Socket_DirReadWrite)
Closes a definite or both directions of the bidirectional stream.
Definition: socket.hxx:248
sal_Int32 getPeerPort() const
Get the remote port of the socket.
Definition: socket.hxx:288
inline::rtl::OUString getLocalHost() const
Get the hostname for the local interface.
Definition: socket.hxx:274
sal_Int32 getOption(oslSocketOption Option, void *pBuffer, sal_uInt32 BufferLen, oslSocketOptionLevel Level=osl_Socket_LevelSocket) const
Retrieves option-attributes associated with the socket.
Definition: socket.hxx:334
sal_Bool isRecvReady(const TimeValue *pTimeout=0) const
Checks if read operations will block.
Definition: socket.hxx:310
inline::rtl::OUString getHostname(oslSocketResult *pResult=0) const
Converts the address to a (human readable) domain-name.
Definition: socket.hxx:78
static sal_Int32 getServicePort(const ::rtl::OUString &strServiceName, const ::rtl::OUString &strProtocolName=::rtl::OUString("tcp"))
Tries to find the port associated with the given service/protocol- pair (e.g.
Definition: socket.hxx:181
__sal_NoAcquire
Definition: types.h:370
oslSocketResult acceptConnection(StreamSocket &Connection)
Accepts incoming connections on the socket.
Definition: socket.hxx:484
oslSocketError getError() const
returns a constant decribing the last error for the socket system.
Definition: socket.hxx:386
Definition: socket.h:137
Allows to accept socket connections.
Definition: socket_decl.hxx:611