diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2010-10-11 00:10:33 -0500 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2010-10-11 00:10:33 -0500 |
commit | 18542233ceb0ac89483fe4898e2f01cbcc02ceb3 (patch) | |
tree | b05a231309fcb7ba5f43ffdc2ac8089dffcf2751 | |
parent | f744968454477935f7396b495a2426cf5e70546b (diff) |
merge vosremoval-socket patch
-rw-r--r-- | vos/inc/vos/process.hxx | 1 | ||||
-rw-r--r-- | vos/inc/vos/socket.hxx | 1130 | ||||
-rw-r--r-- | vos/source/makefile.mk | 2 | ||||
-rw-r--r-- | vos/source/socket.cxx | 1721 |
4 files changed, 0 insertions, 2854 deletions
diff --git a/vos/inc/vos/process.hxx b/vos/inc/vos/process.hxx index e41a050acaa0..60b42d437f14 100644 --- a/vos/inc/vos/process.hxx +++ b/vos/inc/vos/process.hxx @@ -32,7 +32,6 @@ # include <vos/mutex.hxx> # include <vos/security.hxx> # include <vos/object.hxx> -# include <vos/socket.hxx> # include <osl/process.h> namespace vos diff --git a/vos/inc/vos/socket.hxx b/vos/inc/vos/socket.hxx deleted file mode 100644 index cfd51fbb069b..000000000000 --- a/vos/inc/vos/socket.hxx +++ /dev/null @@ -1,1130 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _VOS_SOCKET_HXX_ -#define _VOS_SOCKET_HXX_ - -# include <vos/types.hxx> -# include <vos/object.hxx> -# include <vos/istream.hxx> -#ifndef _VOS_REFERMCE_HXX_ -# include <vos/refernce.hxx> -#endif -# include <vos/refobj.hxx> -# include <rtl/ustring.hxx> -# include <osl/socket.h> - -#include <osl/time.h> - -namespace vos -{ - -/** Base data types -*/ -class ISocketTypes -{ -public: - - ISocketTypes() { } - virtual ~ISocketTypes() { } - - /* - Represents the address-family of a socket - */ - enum TAddrFamily { - TFamily_Inet = osl_Socket_FamilyInet, /* IP */ - TFamily_Ipx = osl_Socket_FamilyIpx, /* Novell IPX/SPX */ - TFamily_Invalid = osl_Socket_FamilyInvalid - }; - - /* - represent a specific protocol within a address-family - */ - enum TProtocol { - TProtocol_Ip = osl_Socket_ProtocolIp, /* for all af_inet */ - TProtocol_Ipx = osl_Socket_ProtocolIpx, /* af_ipx datagram sockets (IPX) */ - TProtocol_Spx = osl_Socket_ProtocolSpx, /* af_ipx seqpacket or stream for SPX */ - TProtocol_SpxII = osl_Socket_ProtocolSpxII, /* af_ipx seqpacket or stream for SPX II */ - TProtocol_Invalid = osl_Socket_ProtocolInvalid - }; - - /* - Represents the type of a socket - */ - enum TSocketType { - TType_Stream = osl_Socket_TypeStream, - TType_Dgram = osl_Socket_TypeDgram, - TType_Raw = osl_Socket_TypeRaw, - TType_Rdm = osl_Socket_TypeRdm, - TType_SeqPacket = osl_Socket_TypeSeqPacket, - TType_Invalid = osl_Socket_TypeInvalid - }; - - /* - Represents socket-options - */ - enum TSocketOption { - TOption_Debug = osl_Socket_OptionDebug, - TOption_AcceptConn = osl_Socket_OptionAcceptConn, - TOption_ReuseAddr = osl_Socket_OptionReuseAddr, - TOption_KeepAlive = osl_Socket_OptionKeepAlive, - TOption_DontRoute = osl_Socket_OptionDontRoute, - TOption_Broadcast = osl_Socket_OptionBroadcast, - TOption_UseLoopback = osl_Socket_OptionUseLoopback, - TOption_Linger = osl_Socket_OptionLinger, - TOption_OOBinLine = osl_Socket_OptionOOBinLine, - TOption_SndBuf = osl_Socket_OptionSndBuf, - TOption_RcvBuf = osl_Socket_OptionRcvBuf, - TOption_SndLowat = osl_Socket_OptionSndLowat, - TOption_RcvLowat = osl_Socket_OptionRcvLowat, - TOption_SndTimeo = osl_Socket_OptionSndTimeo, - TOption_RcvTimeo = osl_Socket_OptionRcvTimeo, - TOption_Error = osl_Socket_OptionError, - TOption_Type = osl_Socket_OptionType, - TOption_TcpNoDelay = osl_Socket_OptionTcpNoDelay, - TOption_Invalid = osl_Socket_OptionInvalid - }; - - /* - Represents the different socket-option levels - */ - enum TSocketOptionLevel { - TLevel_Socket = osl_Socket_LevelSocket, - TLevel_Tcp = osl_Socket_LevelTcp, - TLevel_Invalid = osl_Socket_LevelInvalid - }; - - /* - Represents flags to be used with send/recv-calls. - */ - enum TSocketMsgFlag { - TMsg_Normal = osl_Socket_MsgNormal, - TMsg_OOB = osl_Socket_MsgOOB, - TMsg_Peek = osl_Socket_MsgPeek, - TMsg_DontRoute = osl_Socket_MsgDontRoute, - TMsg_MaxIOVLen = osl_Socket_MsgMaxIOVLen, - TMsg_Invalid = osl_Socket_MsgInvalid - }; - - /* - Used by shutdown to denote which end of the socket to "close". - */ - enum TSocketDirection { - TDirection_Read = osl_Socket_DirRead, - TDirection_Write = osl_Socket_DirWrite, - TDirection_ReadWrite = osl_Socket_DirReadWrite, - TDirection_Invalid = osl_Socket_DirInvalid - }; - - enum TSocketError { - E_None = osl_Socket_E_None, /* no error */ - E_NotSocket = osl_Socket_E_NotSocket, /* Socket operation on non-socket */ - E_DestAddrReq = osl_Socket_E_DestAddrReq, /* Destination address required */ - E_MsgSize = osl_Socket_E_MsgSize, /* Message too sal_Int32 */ - E_Prototype = osl_Socket_E_Prototype, /* Protocol wrong type for socket */ - E_NoProtocol = osl_Socket_E_NoProtocol, /* Protocol not available */ - E_ProtocolNoSupport = osl_Socket_E_ProtocolNoSupport, /* Protocol not supported */ - E_TypeNoSupport = osl_Socket_E_TypeNoSupport, /* Socket type not supported */ - E_OpNotSupport = osl_Socket_E_OpNotSupport, /* Operation not supported on socket */ - E_PfNoSupport = osl_Socket_E_PfNoSupport, /* Protocol family not supported */ - E_AfNoSupport = osl_Socket_E_AfNoSupport, /* Address family not supported by */ - /* protocol family */ - E_AddrInUse = osl_Socket_E_AddrInUse, /* Address already in use */ - E_AddrNotAvail = osl_Socket_E_AddrNotAvail, /* Can't assign requested address */ - E_NetDown = osl_Socket_E_NetDown, /* Network is down */ - E_NetUnreachable = osl_Socket_E_NetUnreachable, /* Network is unreachable */ - E_NetReset = osl_Socket_E_NetReset, /* Network dropped connection because */ - /* of reset */ - E_ConnAborted = osl_Socket_E_ConnAborted, /* Software caused connection abort */ - E_ConnReset = osl_Socket_E_ConnReset, /* Connection reset by peer */ - E_NoBufferSpace = osl_Socket_E_NoBufferSpace, /* No buffer space available */ - E_IsConnected = osl_Socket_E_IsConnected, /* Socket is already connected */ - E_NotConnected = osl_Socket_E_NotConnected, /* Socket is not connected */ - E_Shutdown = osl_Socket_E_Shutdown, /* Can't send after socket shutdown */ - E_TooManyRefs = osl_Socket_E_TooManyRefs, /* Too many references: can't splice */ - E_TimedOut = osl_Socket_E_TimedOut, /* Connection timed out */ - E_ConnRefused = osl_Socket_E_ConnRefused, /* Connection refused */ - E_HostDown = osl_Socket_E_HostDown, /* Host is down */ - E_HostUnreachable = osl_Socket_E_HostUnreachable, /* No route to host */ - E_WouldBlock = osl_Socket_E_WouldBlock, /* call would block on non-blocking socket */ - E_Already = osl_Socket_E_Already, /* operation already in progress */ - E_InProgress = osl_Socket_E_InProgress, /* operation now in progress */ - - E_Invalid = osl_Socket_E_InvalidError /* unmapped error */ - }; - - enum TResult { - TResult_Ok = osl_Socket_Ok, /* successful completion */ - TResult_Error = osl_Socket_Error, /* error occured, check osl_getLastSocketError() for details */ - TResult_TimedOut = osl_Socket_TimedOut, /* blocking operation timed out */ - TResult_Interrupted = osl_Socket_Interrupted, /* blocking operation was interrupted */ - TResult_InProgress = osl_Socket_InProgress /* nonblocking operation is in progress */ - }; -}; - - -/** Base class for socket addresses. -*/ -class ISocketAddr : public NAMESPACE_VOS(ISocketTypes) -{ -public: - virtual ~ISocketAddr() { } - - - virtual TAddrFamily SAL_CALL getFamily() const= 0; - virtual TResult SAL_CALL getHostname(::rtl::OUString& strHostName) const= 0; - virtual SAL_CALL operator oslSocketAddr() const= 0; - virtual void SAL_CALL operator= (oslSocketAddr Addr)= 0; - virtual sal_Bool SAL_CALL operator== (oslSocketAddr Addr)= 0; -}; - -class OSocketAddr : public NAMESPACE_VOS(ISocketAddr), - public NAMESPACE_VOS(OObject) - -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(OSocketAddr)); -public: - - /** Creates socket address of unknown type. - */ - OSocketAddr(); - - /** Copy constructor. - */ - OSocketAddr(const OSocketAddr& Addr); - - /** - */ - OSocketAddr(oslSocketAddr Addr); - - /** destroys underlying oslSocketAddress - */ - virtual ~OSocketAddr(); - - /** Queries the socket for its address family. - @return the address family of the socket. - */ - virtual TAddrFamily SAL_CALL getFamily() const; - - /** Cast Object to the underlying oslSocketAddr. - */ - virtual SAL_CALL operator oslSocketAddr() const; - - /** Converts the address to a (human readable) domain-name. - @return the hostname represented by the address. - On failure returns the empty string. - */ - virtual TResult SAL_CALL getHostname(::rtl::OUString& strHostName) const; - - /** Get the hostname for the local interface. - @return the hostname or an error. - */ - static TResult SAL_CALL getLocalHostname(::rtl::OUString& strLocalHostName); - - /** Tries to find an address for a host. - @return A new created socket-address or 0 if the name could not be found. - */ - static oslSocketAddr SAL_CALL resolveHostname(const ::rtl::OUString& strHostName); - - /** Wraps itself around the osl Socket-Address. - The object assumes ownership of the Addr, it - will be destroyed by destructor(). If the socket is already attached to - an oslSocketAddr, the existing one will be destroyed. - */ - virtual void SAL_CALL operator= (oslSocketAddr Addr); - - /** Compares to Addr - */ - virtual sal_Bool SAL_CALL operator== (oslSocketAddr Addr); - - /** Makes a copy of Addr. - */ - OSocketAddr& SAL_CALL operator= (const OSocketAddr& Addr); - - -protected: - - oslSocketAddr m_SockAddr; -}; - - -/** Represents an internet-address. -*/ -class OInetSocketAddr : public NAMESPACE_VOS(OSocketAddr) -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(OInetSocketAddr)); -public: - - /** Creates an empty internet-address (INADDR_ANY). - */ - OInetSocketAddr(); - - /** Wraps itself around the osl Socket-Address. - The object assumes ownership of the Addr, it - will be destroyed by ~OInetSocketAddr(). - */ - OInetSocketAddr(oslSocketAddr Addr); - - /** - Create a socket address either from a dotted decimal address - (e.g. 141.99.128.50) or a hostname (e.g. www.stardiv.de). - */ - OInetSocketAddr(const ::rtl::OUString& strAddrOrHostName, sal_Int32 Port); - - /** - Copy constructor. - */ - OInetSocketAddr(const OInetSocketAddr& Addr); - - /** - */ - OInetSocketAddr(const OSocketAddr& Addr); - - - virtual ~OInetSocketAddr(); - - /** - */ - virtual void SAL_CALL operator= (oslSocketAddr Addr); - - /** - */ - virtual sal_Bool SAL_CALL operator== (oslSocketAddr Addr); - - /** - */ - OInetSocketAddr& SAL_CALL operator= (const OInetSocketAddr& Addr); - - /** - */ - OInetSocketAddr& SAL_CALL operator= (const OSocketAddr& Addr); - - /** - Tries to find the port associated with the given service/protocol- - pair (e.g. "ftp"/"tcp"). - @return the port number in host-byte order or CVOS_PORT_NONE - if no service/protocol pair could be found. - */ - static sal_Int32 SAL_CALL getServicePort(const ::rtl::OUString& strServiceName, - const ::rtl::OUString& strProtocolName= ::rtl::OUString::createFromAscii( "tcp" ) ); - - - /** Delivers the port number of the address. - @return the port in host-byte order or or OSL_INVALID_PORT on errors. - */ - sal_Int32 SAL_CALL getPort() const; - - /** Sets the port number of the address. - @return False if the port couldn't be set - (e.g because the address is not of family TFamily_Inet). - */ - sal_Bool SAL_CALL setPort(sal_Int32 Port); - - /** @return the dotted-address-form (141.99.128.90) of this address. - On failure returns the empty string. - */ - TResult SAL_CALL getDottedAddr(::rtl::OUString& strDottedAddr) const; - - /** Sets the host-part of the address from the dotted-address-form (141.99.128.90) - or from a hostname. - @param strDottedAddrOrHostname the address in dotted form or a hostname. - */ - sal_Bool SAL_CALL setAddr(const ::rtl::OUString& strDottedAddrOrHostname); - -}; - -/** Represents an IPX/SPX address. -*/ -class OIpxSocketAddr : public NAMESPACE_VOS(OSocketAddr) -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(OIpxSocketAddr)); -public: - - typedef oslSocketIpxNetNumber TIpxNetNumber; - typedef oslSocketIpxNodeNumber TIpxNodeNumber; - - /** Creates an empty ipx-address. - */ - OIpxSocketAddr(); - - /** Wraps itself around the osl Socket-Address. - The object assumes ownership of the Addr, it - will be destroyed by the destructor. - */ - OIpxSocketAddr(oslSocketAddr Addr); - - /** Create an IPX/SPX socketaddress from native parameters. - */ - OIpxSocketAddr(const ::rtl::OUString& strNetNumber, - const ::rtl::OUString& strNodeNumber, - sal_uInt32 SocketNumber); - - /** Copy constructor. - */ - OIpxSocketAddr(const OIpxSocketAddr& Addr); - - /** - */ - OIpxSocketAddr(const OSocketAddr& Addr); - - virtual ~OIpxSocketAddr(); - - /** - */ - virtual void SAL_CALL operator= (oslSocketAddr Addr); - - /** - */ - virtual sal_Bool SAL_CALL operator== (oslSocketAddr Addr); - - /** - */ - OIpxSocketAddr& SAL_CALL operator= (const OIpxSocketAddr& Addr); - - /** - */ - OIpxSocketAddr& SAL_CALL operator= (const OSocketAddr& Addr); - - /** - */ - TResult SAL_CALL getNetNumber(TIpxNetNumber& NetNumber) const; - - /** - */ - TResult SAL_CALL getNodeNumber(TIpxNodeNumber& NodeNumber) const; - - /** - */ - sal_uInt32 SAL_CALL getSocketNumber() const; - - /** Builds a human readable string in the format network.node:socket. - The numbers are given in hexadecimal form. - */ - void SAL_CALL getAddressString(::rtl::OUString& strAddressString) const; -}; - - -/** Represents a socket. -*/ -class OSocket : public NAMESPACE_VOS(ISocketTypes), - public NAMESPACE_VOS(OReference), - public NAMESPACE_VOS(OObject) -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(OSocket)); - -protected: - typedef ORefObj<oslSocket> SockRef; - - SockRef* m_pSockRef; - - TimeValue* m_pSendTimeout; - TimeValue* m_pRecvTimeout; - -public: - - /** Does not create a socket. Use assignment operator to - make this a useable socket. - */ - OSocket(); - - /** Creates a socket. - @param Family - @param Type - @param Protocol - */ - OSocket(TSocketType Type, - TAddrFamily Family = TFamily_Inet, - TProtocol Protocol = TProtocol_Ip); - - /** Copy constructor. - */ - OSocket(const OSocket& sock); - - /** Creates socket as wrapper around the underlying oslSocket. - @param Socket - */ - OSocket(oslSocket Socket); - - /** Destructor. Destroys the underlying oslSocket. - */ - virtual ~OSocket(); - - /** Create a socket with the given attributes. - If socket was already created, the old one will be discarded. - @param Type - @param Family - @param Protocol - @return True if socket was successfully created. - */ - sal_Bool SAL_CALL create(TSocketType Type, - TAddrFamily Family = TFamily_Inet, - TProtocol Protocol = TProtocol_Ip); - - /** Assignment operator. If socket was already created, the old one will - be discarded. - */ - OSocket& SAL_CALL operator= (const OSocket& sock); - - /** Allow cast to underlying oslSocket. - */ - SAL_CALL operator oslSocket() const; - - /** Checks if the socket is valid. - @return True if the object represents a valid socket. - */ - sal_Bool SAL_CALL isValid() const; - - sal_Bool SAL_CALL operator==( const OSocket& rSocket ) - { - return m_pSockRef == rSocket.m_pSockRef; - } - - /** Closes the socket. - */ - virtual void SAL_CALL close(); - - /** Retrieves the address of the local interface of this socket. - @param Addr [out] receives the address. - */ - void SAL_CALL getLocalAddr(OSocketAddr& Addr) const; - - /** Get the local port of the socket. - @return the port number or OSL_INVALID_PORT on errors. - */ - sal_Int32 SAL_CALL getLocalPort() const; - - /** Get the hostname for the local interface. - @return the hostname or an empty string (""). - */ - TResult SAL_CALL getLocalHost(::rtl::OUString& strLocalHost) const; - - /** Retrieves the address of the remote host of this socket. - @param Addr [out] receives the address. - */ - void SAL_CALL getPeerAddr(OSocketAddr& Addr) const; - - /** Get the remote port of the socket. - @return the port number or OSL_INVALID_PORT on errors. - */ - sal_Int32 SAL_CALL getPeerPort() const; - - /** Get the hostname for the remote interface. - @return the hostname or an empty string (""). - */ - TResult SAL_CALL getPeerHost(::rtl::OUString& strPeerHost) const; - - /** Binds the socket to the specified (local) interface. - @param LocalInterface Address of the Interface - @return True if bind was successful. - */ - sal_Bool SAL_CALL bind(const OSocketAddr& LocalInterface); - - - /** Blocking send operations will unblock after the send-timeout. - @return 0 for disables timeout else timeout value. - */ - const TimeValue* SAL_CALL getSendTimeout() const - { return m_pSendTimeout; } - - /** Blocking receive operations will unblock after the send-timeout. - @return 0 for disables timeout else timeout value. - */ - const TimeValue* SAL_CALL getRecvTimeout() const - { return m_pRecvTimeout; } - - /** Blocking send operations will unblock after the send-timeout. - @param time pTimeout == 0 disables timeout. pTimeout != 0 sets timeout value. - */ - void SAL_CALL setSendTimeout(const TimeValue* pTimeout = 0); - - /** Blocking receive operations will unblock after the send-timeout. - @param time pTimeout == 0 disables timeout. pTimeout != 0 sets timeout value. - */ - void SAL_CALL setRecvTimeout(const TimeValue* pTimeout = 0); - - /** Checks if read operations will block. - You can specify a timeout-value in seconds/nanoseconds that denotes - how sal_Int32 the operation will block if the Socket is not ready. - @return True if read operations (recv, recvFrom, accept) on the Socket - will NOT block; False if it would block or if an error occured. - - @param pTimeout if 0, the operation will block without a timeout. Otherwise - the specified amout of time. - */ - sal_Bool SAL_CALL isRecvReady(const TimeValue* pTimeout = 0) const; - - /** Checks if send operations will block. - You can specify a timeout-value in seconds/nanoseconds that denotes - how sal_Int32 the operation will block if the Socket is not ready. - @return True if send operations (send, sendTo) on the Socket - will NOT block; False if it would block or if an error occured. - - @param pTimeout if 0, the operation will block without a timeout. Otherwise - the specified amout of time. - */ - sal_Bool SAL_CALL isSendReady(const TimeValue* pTimeout = 0) const; - - /** Checks if a request for out-of-band data will block. - You can specify a timeout-value in seconds/nanoseconds that denotes - how sal_Int32 the operation will block if the Socket has no pending OOB data. - - @return True if OOB-request operations (recv with appropriate flags) - on the Socket will NOT block; False if it would block or if an error occured. - - @param pTimeout if 0, the operation will block without a timeout. Otherwise - the specified amout of time. - */ - sal_Bool SAL_CALL isExceptionPending(const TimeValue* pTimeout = 0) const; - - /** Retrieves option-attributes associated with the socket. - @param Option The attribute to query. - Valid values (depending on the Level) are: - <ul> - <li> TOption_Debug - <li> TOption_AcceptConn - <li> TOption_ReuseAddr - <li> TOption_KeepAlive - <li> TOption_DontRoute - <li> TOption_Broadcast - <li> TOption_UseLoopback - <li> TOption_Linger - <li> TOption_OOBinLine - <li> TOption_SndBuf - <li> TOption_RcvBuf - <li> TOption_SndLowat - <li> TOption_RcvLowat - <li> TOption_SndTimeo - <li> TOption_RcvTimeo - <li> TOption_Error - <li> TOption_Type - <li> TOption_TcpNoDelay - </ul> - If not above mentioned otherwise, the options are only valid for - level TLevel_Socket. - - @param pBuffer The Buffer will be filled with the attribute. - - @param BufferSize The size of pBuffer. - - @param Level The option level. Valid values are: - <ul> - <li> TLevel_Socket : Socket Level - <li> TLevel_Tcp : Level of Transmission Control Protocol - </ul> - - @return The size of the attribute copied into pBuffer ot -1 if an error - occured. - */ - sal_Int32 SAL_CALL getOption(TSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - TSocketOptionLevel Level= TLevel_Socket) const; - - /** Sets the sockets attributes. - - @param Option denotes the option to modify. - Valid values (depending on the Level) are: - <ul> - <li> TOption_Debug - <li> TOption_AcceptConn - <li> TOption_ReuseAddr - <li> TOption_KeepAlive - <li> TOption_DontRoute - <li> TOption_Broadcast - <li> TOption_UseLoopback - <li> TOption_Linger - <li> TOption_OOBinLine - <li> TOption_SndBuf - <li> TOption_RcvBuf - <li> TOption_SndLowat - <li> TOption_RcvLowat - <li> TOption_SndTimeo - <li> TOption_RcvTimeo - <li> TOption_Error - <li> TOption_Type - <li> TOption_TcpNoDelay - </ul> - If not above mentioned otherwise, the options are only valid for - level TLevel_Socket. - - @param pBuffer Pointer to a Buffer which contains the attribute-value. - - @param BufferSize contains the length of the Buffer. - - @param Level selects the level for which an option should be changed. - Valid values are: - <ul> - <li> TLevel_Socket : Socket Level - <li> TLevel_Tcp : Level of Transmission Control Protocol - </ul> - - @return True if the option could be changed. - */ - sal_Bool SAL_CALL setOption(TSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - TSocketOptionLevel Level= TLevel_Socket) const; - - - /** Enables/disables non-blocking mode of the socket. - @param On If True, non-blocking mode will be switched on, if False - socket will become a blocking socket, which is the default behaviour of a - socket. - @return True if mode could be set. - */ - sal_Bool SAL_CALL enableNonBlockingMode(sal_Bool On= sal_True); - - /** Query non-blocking mode of the socket. - @return True if non-blocking mode is set. - */ - sal_Bool SAL_CALL isNonBlockingMode() const; - - /** Queries the socket for its type. - @return one of: - <ul> - <li> TType_Stream - <li> TType_Dgram - <li> TType_Raw - <li> TType_Rdm - <li> TType_SeqPacket - <li> TType_Invalid - </ul> - */ - TSocketType SAL_CALL getType() const; - - - /** Gets and clears the error status of the socket. - @returns the current error state. - */ - sal_Int32 SAL_CALL clearError() const; - - /** Enables/Disables debugging. - @param opt 1 sets, 0 resets, -1 won't change anything - @return the previous setting - */ - sal_Int32 SAL_CALL setDebug(sal_Int32 opt = -1) const; - - /** Allow the socket to be bound to an address that is already in use. - @param opt 1 sets, 0 resets, -1 won't change anything - @return the previous setting - */ - sal_Int32 SAL_CALL setReuseAddr(sal_Int32 opt = -1) const; - - /** Send keepalive-packets. - @param opt 1 sets, 0 resets, -1 won't change anything - @return the previous setting - */ - sal_Int32 SAL_CALL setKeepAlive(sal_Int32 opt = -1) const; - - /** Do not route: send directly to interface. - @param opt 1 sets, 0 resets, -1 won't change anything - @return the previous setting - */ - sal_Int32 SAL_CALL setDontRoute(sal_Int32 opt = -1) const; - - - /** Allow transmission of broadcast messages on the socket. - @param opt 1 sets, 0 resets, -1 won't change anything - @return the previous setting - */ - sal_Int32 SAL_CALL setBroadcast(sal_Int32 opt = -1) const; - - /** Receive out-of-band data in the normal data stream. - @param opt 1 sets, 0 resets, -1 won't change anything - @return the previous setting - */ - sal_Int32 SAL_CALL setOobinline(sal_Int32 opt = -1) const; - - /** Linger on close if unsent data is present. - @param time values > 0 enable lingering with a timeout of time in seconds. - If time is 0, lingering will be disabled. If time is -1 no changes will occur. - @return the previous setting (0 == off, > 0 timeout-value in seconds). - */ - sal_Int32 SAL_CALL setLinger(sal_Int32 time = -1) const; - - /** Specify buffer size for sends. - You might want to use getOption() to check if the size changes were - really successful. - @param size Size >= 0 sets the size, -1 won't change anything. - @return the previous setting - */ - sal_Int32 SAL_CALL setSendBufSize(sal_Int32 size =-1) const; - - /** Specify buffer size for receives. - You might want to use getOption() to check if the size changes were - really successful. - @param size Size >= 0 sets the size, -1 won't change anything. - @return the previous setting - */ - sal_Int32 SAL_CALL setRecvBufSize(sal_Int32 size =-1) const; - - /** Disables the Nagle algorithm for send coalescing. (Do not - collect data until a packet is full, instead send immediatly. - This increases network traffic but might improve response-times.) - @param opt 1 sets, 0 resets, -1 won't change anything - @return the previous setting - */ - sal_Int32 SAL_CALL setTcpNoDelay(sal_Int32 sz =-1) const; - - /** Builds a string with the last error-message for the socket. - @param pBuffer is filled with the error message. - @param nSize the size of pBuffer. The message will be cut - sal_Int16 if the buffer isn't large enough, but still remains - a valid zero-terminated string. - */ - void SAL_CALL getError(::rtl::OUString& strError) const; - - /** Delivers a constant decribing the last error for the socket system. - @return ENONE if no error occured, invalid_SocketError if - an unknown (unmapped) error occured, otherwise an enum describing the - error. - */ - TSocketError SAL_CALL getError() const; - -}; - -/** A socket to send or receive a stream of data. -*/ -class OStreamSocket : public NAMESPACE_VOS(OSocket), - public NAMESPACE_VOS(IStream) -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(OStreamSocket)); -public: - - /** Creates an unattached socket. You must attach the socket to an oslSocket - e.g. by using the operator=(oslSocket), before you can use the stream- - functionality of the object. - */ - OStreamSocket(); - - - - /** Creates socket as wrapper around the underlying oslSocket. - @param Socket - */ - OStreamSocket(oslSocket Socket); - - - /** Copy constructor. - @param Socket - */ - OStreamSocket(const OStreamSocket& Socket); - - - /** - */ - OStreamSocket(const OSocket& Socket); - - /** Destructor. Calls shutdown(readwrite) and close(). - */ - virtual ~OStreamSocket(); - - /** Closes the socket after calling shutdown. - */ - virtual void SAL_CALL close(); - - /** Attaches the oslSocket to this object. If the object - already was attached to an oslSocket, the old one will - be closed and destroyed. - @param Socket. - */ - OStreamSocket& SAL_CALL operator=(oslSocket Socket); - - /** - */ - OStreamSocket& SAL_CALL operator=(const OSocket& Socket); - - /** - */ - OStreamSocket& SAL_CALL operator=(const OStreamSocket& Socket); - - /** Retrieves n bytes from the stream and copies them into pBuffer. - The method avoids incomplete reads due to packet boundaries. - @param pBuffer receives the read data. - @param n the number of bytes to read. pBuffer must be large enough - to hold the n bytes! - @return the number of read bytes. The number will only be smaller than - n if an exceptional condition (e.g. connection closed) occurs. - */ - virtual sal_Int32 SAL_CALL read(void* pBuffer, sal_uInt32 n) const; - - /** Writes n bytes from pBuffer to the stream. The method avoids - incomplete writes due to packet boundaries. - @param pBuffer contains the data to be written. - @param n the number of bytes to write. - @return the number of written bytes. The number will only be smaller than - n if an exceptional condition (e.g. connection closed) occurs. - */ - virtual sal_Int32 SAL_CALL write(const void* pBuffer, sal_uInt32 n); - - /** Checks if socket is closed. - @return True if socket is closed. - */ - virtual sal_Bool SAL_CALL isEof() const; - - /** Tries to receives BytesToRead data from the connected socket, - - @param pBuffer [out] Points to a buffer that will be filled with the received - data. - @param BytesToRead [in] The number of bytes to read. pBuffer must have at least - this size. - @param Flag [in] Modifier for the call. Valid values are: - <ul> - <li> TMsg_Normal - <li> TMsg_OOB - <li> TMsg_Peek - <li> TMsg_DontRoute - <li> TMsg_MaxIOVLen - </ul> - - @return the number of received bytes. - */ - sal_Int32 SAL_CALL recv(void* pBuffer, - sal_uInt32 BytesToRead, - TSocketMsgFlag Flag= TMsg_Normal); - - - /** Tries to sends BytesToSend data from the connected socket. - - @param pBuffer [in] Points to a buffer that contains the send-data. - @param BytesToSend [in] The number of bytes to send. pBuffer must have at least - this size. - @param Flag [in] Modifier for the call. Valid values are: - <ul> - <li> TMsg_Normal - <li> TMsg_OOB - <li> TMsg_Peek - <li> TMsg_DontRoute - <li> TMsg_MaxIOVLen - </ul> - - @return the number of transfered bytes. - */ - sal_Int32 SAL_CALL send(const void* pBuffer, - sal_uInt32 BytesToSend, - TSocketMsgFlag Flag= TMsg_Normal); - - /** Closes a connection in a controlled manner. - @param Direction Says which "end" of the socket is to be closed. - */ - sal_Bool SAL_CALL shutdown(TSocketDirection Direction= TDirection_ReadWrite); -protected: - - /** Creates a socket. This constructor is used only by derived classes - (e.g. OConnectorSocket). - @param Family - @param Protocol - @param Type For some protocols it might be desirable to - use a different type than sock_stream (like sock_seqpacket). - Therefore we do not hide this parameter here. - */ - OStreamSocket(TAddrFamily Family, - TProtocol Protocol, - TSocketType Type= TType_Stream); - - -}; - - -/** A socket to accept incoming connections. -*/ -class OAcceptorSocket : public NAMESPACE_VOS(OSocket) -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(OAcceptorSocket)); -public: - - /** Creates a socket that can accept connections. - @param Type For some protocols it might be desirable to - use a different type than sock_stream (like sock_seqpacket). - Therefore we do not hide this parameter here. - */ - OAcceptorSocket(TAddrFamily Family= TFamily_Inet, - TProtocol Protocol= TProtocol_Ip, - TSocketType Type= TType_Stream); - - /** Copy constructor. - */ - OAcceptorSocket(const OAcceptorSocket& Socket); - - /** Destructor. Closes the socket and destroys the underlying oslSocket. - */ - virtual ~OAcceptorSocket(); - - /** Closes the socket. Also calls shutdown, needed to unblock - accept on some systems. - */ - virtual void SAL_CALL close(); - - /** Prepare a socket for the accept-call. - @param MaxPendingConnections The maximum number of pending - connections (waiting to be accepted) on this socket. If you use - -1, a system default value is used. - @return True if call was successful. - */ - sal_Bool SAL_CALL listen(sal_Int32 MaxPendingConnections= -1); - - /** Accepts incoming connections on the socket. You must - precede this call with bind() and listen(). - @param Connection receives the incoming connection. - @return result_ok: if a connection has been accepted, - result_timeout: if m_RecvTimeout milliseconds passed without connect, - result_error: on errors. - */ - TResult SAL_CALL acceptConnection(OStreamSocket& Connection); - - /** Accepts incoming connections on the socket. You must - precede this call with bind() and listen(). - @param PeerAddr receives the address of the connecting entity - (your communication partner). - @param Connection receives the incoming connection. - @return True if a connection has been accepted, False on errors. - @return result_ok: if a connection has been accepted, - result_timeout: if m_RecvTimeout milliseconds passed without connect, - result_error: on errors. - */ - TResult SAL_CALL acceptConnection(OStreamSocket& Connection, - OSocketAddr& PeerAddr); - -}; - - -/** A socket to initiate a conenction. -*/ -class OConnectorSocket : public NAMESPACE_VOS(OStreamSocket) -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(OConnectorSocket)); -public: - - /** Creates a socket that can accept connections. - @param Type For some protocols it might be desirable to - use a different type than sock_stream (like sock_seqpacket). - Therefore we do not hide this parameter here. - */ - OConnectorSocket(TAddrFamily Family= TFamily_Inet, - TProtocol Protocol= TProtocol_Ip, - TSocketType Type= TType_Stream); - - /** Copy constructor. Doesn't duplicate oslSocket. - */ - OConnectorSocket(const OConnectorSocket& Socket); - - /** Destructor. Relies on ~OStreamSocket to close down connection gracefully. - */ - virtual ~OConnectorSocket(); - - /** Connects the socket to a (remote) host. - @param TargetHost The address of the target. - @param msTimeout The timeout in milliseconds. Use -1 to block. - @return result_ok if connected successfully, - result_timeout on timeout, - result_interrupted if unblocked forcefully (by close()), - result_error if connect failed. - */ - TResult SAL_CALL connect(const OSocketAddr& TargetHost, const TimeValue* pTimeout = 0); -}; - - -/** A connectionless socket to send and receive datagrams. -*/ -class ODatagramSocket : public NAMESPACE_VOS(OSocket) -{ - VOS_DECLARE_CLASSINFO(NAMESPACE_VOS(ODatagramSocket)); -public: - - /** Creates a datagram socket. - @param Type is sock_dgram by default. - */ - ODatagramSocket(TAddrFamily Family= TFamily_Inet, - TProtocol Protocol= TProtocol_Ip, - TSocketType Type= TType_Dgram); - - /** Copy constructor. - */ - ODatagramSocket(const ODatagramSocket& Socket); - - /** Destructor. Closes the socket. - */ - virtual ~ODatagramSocket(); - - - /** Tries to receives BufferSize data from the socket, if no error occurs. - - @param pSenderAddr [out] You must provide pointer to a SocketAddr. - It will be filled with the address of the datagrams sender. - If pSenderAddr is 0, it is ignored. - @param pBuffer [out] Points to a buffer that will be filled with the received - datagram. - @param BufferSize [in] The size of pBuffer. - @param Flag [in] Modifier for the call. Valid values are: - <ul> - <li> TMsg_Normal - <li> TMsg_OOB - <li> TMsg_Peek - <li> TMsg_DontRoute - <li> TMsg_MaxIOVLen - </ul> - - @return the number of received bytes. - */ - sal_Int32 SAL_CALL recvFrom(void* pBuffer, - sal_uInt32 BufferSize, - OSocketAddr* pSenderAddr= 0, - TSocketMsgFlag Flag= TMsg_Normal); - - /** Tries to send one datagram with BytesToSend data to the given ReceiverAddr. - Since we only send one packet, we don't need to concern ourselfes here with - incomplete sends due to packet boundaries. - - @param ReceiverAddr [in] A SocketAddr that contains - the destination address for this send. - - @param pBuffer [in] Points to a buffer that contains the send-data. - @param BufferSize [in] The number of bytes to send. pBuffer must have at least - this size. - @param Flag [in] Modifier for the call. Valid values are: - <ul> - <li> TMsg_Normal - <li> TMsg_OOB - <li> TMsg_Peek - <li> TMsg_DontRoute - <li> TMsg_MaxIOVLen - </ul> - - @return the number of transfered bytes. - */ - sal_Int32 SAL_CALL sendTo(const OSocketAddr& ReceiverAddr, - const void* pBuffer, - sal_uInt32 BufferSize, - TSocketMsgFlag Flag= TMsg_Normal); -}; - - - -} - -#endif // _VOS_SOCKET_HXX_ - diff --git a/vos/source/makefile.mk b/vos/source/makefile.mk index 7a4e6061622d..3ef05023b528 100644 --- a/vos/source/makefile.mk +++ b/vos/source/makefile.mk @@ -41,7 +41,6 @@ SLOFILES= $(SLO)$/conditn.obj \ $(SLO)$/mutex.obj \ $(SLO)$/object.obj \ $(SLO)$/refernce.obj \ - $(SLO)$/socket.obj \ $(SLO)$/thread.obj \ $(SLO)$/stream.obj \ $(SLO)$/module.obj \ @@ -58,7 +57,6 @@ OBJFILES= $(OBJ)$/conditn.obj \ $(OBJ)$/mutex.obj \ $(OBJ)$/object.obj \ $(OBJ)$/refernce.obj \ - $(OBJ)$/socket.obj \ $(OBJ)$/thread.obj \ $(OBJ)$/stream.obj \ $(OBJ)$/module.obj \ diff --git a/vos/source/socket.cxx b/vos/source/socket.cxx deleted file mode 100644 index cdb563ea51b7..000000000000 --- a/vos/source/socket.cxx +++ /dev/null @@ -1,1721 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include <stdio.h> - -#include <rtl/memory.h> -#include <osl/time.h> -#include <vos/socket.hxx> - -using namespace vos; - - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OSocketAddr, vos), - VOS_NAMESPACE(OSocketAddr, vos), - VOS_NAMESPACE(OObject, vos), 0); - - -/*****************************************************************************/ -// OSocketAddr() -/*****************************************************************************/ -OSocketAddr::OSocketAddr() -{ - m_SockAddr= 0; -} - -/*****************************************************************************/ -// OSocketAddr() -/*****************************************************************************/ -OSocketAddr::OSocketAddr(oslSocketAddr Addr) -{ - m_SockAddr= Addr; -} - -/*****************************************************************************/ -// OSocketAddr() -/*****************************************************************************/ -OSocketAddr::OSocketAddr(const OSocketAddr& Addr) : -ISocketAddr(), OObject() -{ - m_SockAddr= osl_copySocketAddr((oslSocketAddr)Addr); -} - -/*****************************************************************************/ -// ~OSocketAddr() -/*****************************************************************************/ -OSocketAddr::~OSocketAddr() -{ - osl_destroySocketAddr(m_SockAddr); -} - - -/*****************************************************************************/ -// getFamily() -/*****************************************************************************/ -OSocketAddr::TAddrFamily OSocketAddr::getFamily() const -{ - return (TAddrFamily)osl_getFamilyOfSocketAddr(m_SockAddr); -} - -/*****************************************************************************/ -// operator oslSocketAddr () -/*****************************************************************************/ -OSocketAddr::operator oslSocketAddr() const -{ - return m_SockAddr; -} - -/*****************************************************************************/ -// getHostname() -/*****************************************************************************/ -OSocketAddr::TResult OSocketAddr::getHostname(rtl::OUString& rBuffer ) const -{ - return (TResult)osl_getHostnameOfSocketAddr(m_SockAddr, &rBuffer.pData ); -} - -/*****************************************************************************/ -// getLocalHostname() -/*****************************************************************************/ -OSocketAddr::TResult OSocketAddr::getLocalHostname( rtl::OUString& pBuffer ) -{ - return (TResult)osl_getLocalHostname( &pBuffer.pData ); -} - -/*****************************************************************************/ -// resolveHostname() -/*****************************************************************************/ -oslSocketAddr OSocketAddr::resolveHostname(const rtl::OUString& ustrHostname) -{ - return osl_resolveHostname( ustrHostname.pData ); -} - -/*****************************************************************************/ -// operator= (oslSocketAddr Addr) -/*****************************************************************************/ -void OSocketAddr::operator= (oslSocketAddr Addr) -{ - if(m_SockAddr) { - osl_destroySocketAddr(m_SockAddr); - } - - m_SockAddr= Addr; -} - -/*****************************************************************************/ -// operator== (oslSocketAddr Addr) -/*****************************************************************************/ -sal_Bool OSocketAddr::operator== (oslSocketAddr Addr) -{ - return (osl_isEqualSocketAddr(m_SockAddr, Addr)); -} - -/*****************************************************************************/ -// operator=(const OSocketAddr& Addr) -/*****************************************************************************/ -OSocketAddr& OSocketAddr::operator=(const OSocketAddr& Addr) -{ - if(m_SockAddr) { - osl_destroySocketAddr(m_SockAddr); - } - - m_SockAddr= osl_copySocketAddr((oslSocketAddr)Addr); - - return *this; -} - - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OInetSocketAddr, vos), - VOS_NAMESPACE(OInetSocketAddr, vos), - VOS_NAMESPACE(OSocketAddr, vos), 0); - - - -/*****************************************************************************/ -// OInetSocketAddr -// creates arbitrary inet-address (INADDR_ANY) -/*****************************************************************************/ -OInetSocketAddr::OInetSocketAddr() -{ - m_SockAddr= osl_createEmptySocketAddr(osl_Socket_FamilyInet); -} - -/*****************************************************************************/ -// OInetSocketAddr -// uses the given oslSocketAddr as its own -/*****************************************************************************/ -OInetSocketAddr::OInetSocketAddr(oslSocketAddr Addr) : - OSocketAddr(Addr) -{ - OSL_ASSERT(osl_getFamilyOfSocketAddr(Addr) == osl_Socket_FamilyInet); -} - -/*****************************************************************************/ -// OInetSocketAddr -// Create a socket address either from a dotted decimal address -//(e.g. 141.99.128.50) or a hostname (e.g. www.stardiv.de). -/*****************************************************************************/ -OInetSocketAddr::OInetSocketAddr(const rtl::OUString& ustrAddrOrHostname, sal_Int32 Port) -{ - // first try as dotted address. - m_SockAddr= osl_createInetSocketAddr(ustrAddrOrHostname.pData, Port); - - // create failed, maybe it's an hostname - if(m_SockAddr == 0) - { - m_SockAddr= osl_resolveHostname(ustrAddrOrHostname.pData); - - // host found? - if(m_SockAddr) - { - // set port will fail if addrtype is not osl_Socket_FamilyInet - OSL_VERIFY(osl_setInetPortOfSocketAddr(m_SockAddr, Port)); - } - } -} - -/*****************************************************************************/ -// OInetSocketAddr(const OInetSocketAddr&) -/*****************************************************************************/ -OInetSocketAddr::OInetSocketAddr(const OInetSocketAddr& sa) : - OSocketAddr(sa) -{ - OSL_ASSERT(getFamily() == TFamily_Inet); -} - -/*****************************************************************************/ -// OInetSocketAddr(const OSocketAddr&) -/*****************************************************************************/ -OInetSocketAddr::OInetSocketAddr(const OSocketAddr& sa) : - OSocketAddr(sa) -{ - OSL_ASSERT(sa.getFamily() == TFamily_Inet); -} - -/*****************************************************************************/ -// ~OInetSocketAddr -/*****************************************************************************/ -OInetSocketAddr::~OInetSocketAddr() -{ -} - -/*****************************************************************************/ -// operator= (oslSocketAddr Addr) -/*****************************************************************************/ -void OInetSocketAddr::operator= (oslSocketAddr Addr) -{ - OSL_PRECOND(osl_getFamilyOfSocketAddr(Addr) == osl_Socket_FamilyInet, - "oslSocketAddr not of type osl_Socket_FamilyInet!"); - - OSocketAddr::operator=(Addr); -} - -/*****************************************************************************/ -// operator== (oslSocketAddr Addr) -/*****************************************************************************/ -sal_Bool OInetSocketAddr::operator== (oslSocketAddr Addr) -{ - return (osl_isEqualSocketAddr(m_SockAddr, Addr)); -} - -/*****************************************************************************/ -// operator=(const OInetSocketAddr& Addr) -/*****************************************************************************/ -OInetSocketAddr& OInetSocketAddr::operator=(const OInetSocketAddr& Addr) -{ - OSL_ASSERT(Addr.getFamily() == TFamily_Inet); - - OSocketAddr::operator=(Addr); - - return *this; -} - -/*****************************************************************************/ -// operator=(const OSocketAddr& Addr) -/*****************************************************************************/ -OInetSocketAddr& OInetSocketAddr::operator=(const OSocketAddr& Addr) -{ - OSL_ASSERT(Addr.getFamily() == TFamily_Inet); - - OSocketAddr::operator=(Addr); - - return *this; -} - -/*****************************************************************************/ -// getServicePort() -/*****************************************************************************/ -sal_Int32 OInetSocketAddr::getServicePort(const rtl::OUString& ustrServiceName, - const rtl::OUString& ustrProtocolName) -{ - return osl_getServicePort(ustrServiceName.pData, ustrProtocolName.pData); -} - - -/*****************************************************************************/ -// getPort() -/*****************************************************************************/ -sal_Int32 OInetSocketAddr::getPort () const -{ - return osl_getInetPortOfSocketAddr(m_SockAddr); -} - - -/*****************************************************************************/ -// setPort() -/*****************************************************************************/ -sal_Bool OInetSocketAddr::setPort (sal_Int32 Port) -{ - return osl_setInetPortOfSocketAddr(m_SockAddr, Port); -} - - -/*****************************************************************************/ -// getDottedAddr() -/*****************************************************************************/ -OSocketAddr::TResult OInetSocketAddr::getDottedAddr( rtl::OUString& pBuffer ) const -{ - return (TResult)osl_getDottedInetAddrOfSocketAddr(m_SockAddr, &pBuffer.pData ); -} - -/*****************************************************************************/ -// setAddr() -/*****************************************************************************/ -sal_Bool OInetSocketAddr::setAddr(const rtl::OUString& ustrAddrOrHostname) -{ - sal_Int32 Port = 0; - - if(m_SockAddr) { - - // retrieve old port - Port= getPort(); - - // free old address - osl_destroySocketAddr(m_SockAddr); - m_SockAddr= 0; - } - - // first try as dotted address. - m_SockAddr= osl_createInetSocketAddr(ustrAddrOrHostname.pData, Port); - - // create failed, maybe it's an hostname - if(m_SockAddr == 0) - { - - m_SockAddr= osl_resolveHostname( ustrAddrOrHostname.pData ); - - // host found? - if(m_SockAddr==0) - { - return sal_False; - } - - // set port will fail if addrtype is not osl_Socket_FamilyInet - OSL_VERIFY(osl_setInetPortOfSocketAddr(m_SockAddr, Port)); - - } - - return sal_True; -} - -/////////////////////////////////////////////////////////////////////////////// -// OIpxSocketAddr - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OIpxSocketAddr, vos), - VOS_NAMESPACE(OIpxSocketAddr, vos), - VOS_NAMESPACE(OSocketAddr, vos), 0); - - -/*****************************************************************************/ -// OIpxSocketAddr() -/*****************************************************************************/ -OIpxSocketAddr::OIpxSocketAddr() -{ - m_SockAddr= osl_createEmptySocketAddr(osl_Socket_FamilyIpx); -} - -/*****************************************************************************/ -// OIpxSocketAddr(oslSocketAddr) -/*****************************************************************************/ -OIpxSocketAddr::OIpxSocketAddr(oslSocketAddr Addr) : - OSocketAddr(Addr) -{ - OSL_ASSERT(osl_getFamilyOfSocketAddr(Addr) == osl_Socket_FamilyIpx); -} - -/*****************************************************************************/ -// OIpxSocketAddr() -/*****************************************************************************/ -OIpxSocketAddr::OIpxSocketAddr(const rtl::OUString&, - const rtl::OUString&, - sal_uInt32 ) -{ - // jbu : functionality removed from vos -} - -/*****************************************************************************/ -// OIpxSocketAddr(OIpxSocketAddr&) -/*****************************************************************************/ -OIpxSocketAddr::OIpxSocketAddr(const OIpxSocketAddr& sa) : - OSocketAddr(sa) -{ - OSL_ASSERT(sa.getFamily() == TFamily_Ipx); -} - - -/*****************************************************************************/ -// OIpxSocketAddr(OSocketAddr&) -/*****************************************************************************/ -OIpxSocketAddr::OIpxSocketAddr(const OSocketAddr& sa) : - OSocketAddr(sa) -{ - OSL_ASSERT(sa.getFamily() == TFamily_Ipx); -} - -/*****************************************************************************/ -// ~OIpxSocketAddr() -/*****************************************************************************/ -OIpxSocketAddr::~OIpxSocketAddr() -{ -} - - -/*****************************************************************************/ -// operator=() -/*****************************************************************************/ -void OIpxSocketAddr::operator= (oslSocketAddr Addr) -{ - OSL_PRECOND(osl_getFamilyOfSocketAddr(Addr) == osl_Socket_FamilyIpx, - "oslSocketAddr not of type osl_Socket_FamilyIpx!"); - - OSocketAddr::operator=(Addr); -} - -/*****************************************************************************/ -// operator== (oslSocketAddr Addr) -/*****************************************************************************/ -sal_Bool OIpxSocketAddr::operator== (oslSocketAddr Addr) -{ - return (osl_isEqualSocketAddr(m_SockAddr, Addr)); -} - -/*****************************************************************************/ -// operator=(const OIpxSocketAddr& Addr) -/*****************************************************************************/ -OIpxSocketAddr& OIpxSocketAddr::operator=(const OIpxSocketAddr& Addr) -{ - OSL_ASSERT(Addr.getFamily() == TFamily_Ipx); - - OSocketAddr::operator=(Addr); - - return *this; -} - -/*****************************************************************************/ -// operator=(const OSocketAddr& Addr) -/*****************************************************************************/ -OIpxSocketAddr& OIpxSocketAddr::operator=(const OSocketAddr& Addr) -{ - OSL_ASSERT(Addr.getFamily() == TFamily_Ipx); - - OSocketAddr::operator=(Addr); - - return *this; -} - -/*****************************************************************************/ -// getNetNumber() -/*****************************************************************************/ -OSocketAddr::TResult OIpxSocketAddr::getNetNumber(TIpxNetNumber&) const -{ - // jbu : functionality removed from vos - return (TResult)0; -} - -/*****************************************************************************/ -// getNodeNumber() -/*****************************************************************************/ -OSocketAddr::TResult OIpxSocketAddr::getNodeNumber(TIpxNodeNumber& ) const -{ - // jbu : functionality removed from vos - return (TResult)0; -} - -/*****************************************************************************/ -// getSocketNumber() -/*****************************************************************************/ -sal_uInt32 OIpxSocketAddr::getSocketNumber() const -{ -// return osl_getIpxSocketNumber(m_SockAddr); - return (TResult)0; -} - - -/*****************************************************************************/ -// getAddressString() -/*****************************************************************************/ -//void OIpxSocketAddr::getAddressString(sal_Char* Buffer, sal_uInt32 Len) const -void OIpxSocketAddr::getAddressString( rtl::OUString& ) const -{ - // jbu : functionality removed from vos -} - - -/////////////////////////////////////////////////////////////////////////////// -// Socket - - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OSocket, vos), - VOS_NAMESPACE(OSocket, vos), - VOS_NAMESPACE(OObject, vos), 0); - -/*****************************************************************************/ -// OSocket() -/*****************************************************************************/ -OSocket::OSocket() -{ - m_pRecvTimeout = 0; - m_pSendTimeout = 0; - - m_pSockRef= 0; -} - - -/*****************************************************************************/ -// OSocket() -/*****************************************************************************/ -OSocket::OSocket(TSocketType Type, - TAddrFamily Family, - TProtocol Protocol) -{ - m_pRecvTimeout = 0; - m_pSendTimeout = 0; - - m_pSockRef= - new SockRef(osl_createSocket((oslAddrFamily)Family, - (oslSocketType)Type, - (oslProtocol)Protocol)); - - OSL_POSTCOND(m_pSockRef != 0, "OSocket(): new failed.\n"); - OSL_POSTCOND((*m_pSockRef)(), "OSocket(): creation of socket failed!\n"); -} - -/*****************************************************************************/ -// OSocket() -/*****************************************************************************/ -OSocket::OSocket(const OSocket& sock) : -ISocketTypes(), OReference(), OObject() -{ - m_pRecvTimeout = 0; - m_pSendTimeout = 0; - m_pSockRef=0; - - OSL_ASSERT(sock.m_pSockRef != 0); - - if ( sock.m_pSockRef !=0 ) - { - m_pSockRef= sock.m_pSockRef; - - setRecvTimeout(sock.m_pRecvTimeout); - setSendTimeout(sock.m_pSendTimeout); - - m_pSockRef->acquire(); - } -} - -/*****************************************************************************/ -// OSocket() -/*****************************************************************************/ -OSocket::OSocket(oslSocket Socket) -{ - m_pRecvTimeout = 0; - m_pSendTimeout = 0; - - m_pSockRef = new SockRef(Socket); -} - - -/*****************************************************************************/ -// ~OSocket() -/*****************************************************************************/ -OSocket::~OSocket() -{ - close(); - - delete m_pRecvTimeout; - delete m_pSendTimeout; -} - - -/*****************************************************************************/ -// create -/*****************************************************************************/ -sal_Bool OSocket::create(TSocketType Type, - TAddrFamily Family, - TProtocol Protocol) -{ - // if this was a valid socket, decrease reference - if ((m_pSockRef) && (m_pSockRef->release() == 0)) - { - osl_releaseSocket((*m_pSockRef)()); - delete m_pSockRef; - m_pSockRef= 0; - } - - m_pSockRef= - new SockRef(osl_createSocket((oslAddrFamily)Family, - (oslSocketType)Type, - (oslProtocol)Protocol)); - - OSL_POSTCOND(m_pSockRef != 0, "OSocket(): new failed.\n"); - - return (*m_pSockRef)() != 0; -} - -/*****************************************************************************/ -// operator= -/*****************************************************************************/ -OSocket& OSocket::operator= (const OSocket& sock) -{ - OSL_PRECOND(sock.m_pSockRef != 0, "OSocket::operator=: tried to assign an empty/invalid socket\n"); - - if (m_pSockRef == sock.m_pSockRef) - return *this; - - // if this was a valid socket, decrease reference - if ((m_pSockRef) && (m_pSockRef->release() == 0)) - { - osl_releaseSocket((*m_pSockRef)()); - delete m_pSockRef; - m_pSockRef= 0; - } - - m_pSockRef= sock.m_pSockRef; - - setRecvTimeout(sock.m_pRecvTimeout); - setSendTimeout(sock.m_pSendTimeout); - - m_pSockRef->acquire(); - - return *this; -} - -/*****************************************************************************/ -// operator oslSocket() -/*****************************************************************************/ -OSocket::operator oslSocket() const -{ - OSL_ASSERT(m_pSockRef); - return (*m_pSockRef)(); -} - -/*****************************************************************************/ -// isValid() -/*****************************************************************************/ -sal_Bool OSocket::isValid() const -{ - return m_pSockRef != 0 && (*m_pSockRef)() != 0; -} - - -/*****************************************************************************/ -// close -/*****************************************************************************/ -void OSocket::close() -{ - if (m_pSockRef && (*m_pSockRef)() && (m_pSockRef->release() == 0)) - { - osl_releaseSocket((*m_pSockRef)()); - delete m_pSockRef; - } - - m_pSockRef= 0; -} - -/*****************************************************************************/ -// getLocalAddr -/*****************************************************************************/ -void OSocket::getLocalAddr(OSocketAddr& sa) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - sa= osl_getLocalAddrOfSocket((*m_pSockRef)()); - } -} - -/*****************************************************************************/ -// getLocalPort -/*****************************************************************************/ -sal_Int32 OSocket::getLocalPort() const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - sal_Int32 Port= OSL_INVALID_PORT; - - if ( m_pSockRef && (*m_pSockRef)() ) - { - oslSocketAddr Addr= osl_getLocalAddrOfSocket((*m_pSockRef)()); - - if(Addr) - { - Port= osl_getInetPortOfSocketAddr(Addr); - osl_destroySocketAddr(Addr); - } - } - - return Port; -} - -/*****************************************************************************/ -// getLocalHost -/*****************************************************************************/ -OSocket::TResult OSocket::getLocalHost( rtl::OUString& pBuffer) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - oslSocketAddr Addr= osl_getLocalAddrOfSocket((*m_pSockRef)()); - - if(Addr) - { -// TResult Result= (TResult)osl_getHostnameOfSocketAddr(Addr, -// pBuffer, BufferSize); - TResult Result= (TResult)osl_getHostnameOfSocketAddr(Addr, - &pBuffer.pData ); - - osl_destroySocketAddr(Addr); - - return Result; - } - } - - return TResult_Error; -} - -/*****************************************************************************/ -// getPeerAddr -/*****************************************************************************/ -void OSocket::getPeerAddr(OSocketAddr& sa) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - sa= osl_getPeerAddrOfSocket((*m_pSockRef)()); - } -} - -/*****************************************************************************/ -// getPeerPort -/*****************************************************************************/ -sal_Int32 OSocket::getPeerPort() const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - sal_Int32 Port= OSL_INVALID_PORT; - - if ( m_pSockRef && (*m_pSockRef)() ) - { - oslSocketAddr Addr= osl_getPeerAddrOfSocket((*m_pSockRef)()); - - if(Addr) - { - Port= osl_getInetPortOfSocketAddr(Addr); - osl_destroySocketAddr(Addr); - } - } - - return Port; -} - -/*****************************************************************************/ -// getPeerHost -/*****************************************************************************/ -OSocket::TResult OSocket::getPeerHost( rtl::OUString& pBuffer ) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - oslSocketAddr Addr= osl_getPeerAddrOfSocket((*m_pSockRef)()); - - if(Addr) - { -// TResult Result= (TResult)osl_getHostnameOfSocketAddr(Addr, -// pBuffer, BufferSize); - TResult Result= (TResult)osl_getHostnameOfSocketAddr(Addr, - &pBuffer.pData ); - - osl_destroySocketAddr(Addr); - - return Result; - } - } - - return TResult_Error; -} - -/*****************************************************************************/ -// bind -/*****************************************************************************/ -sal_Bool OSocket::bind(const OSocketAddr& Addr) -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_bindAddrToSocket((*m_pSockRef)(), (oslSocketAddr)Addr); - } - - return sal_False; -} - - -/*****************************************************************************/ -// setSendTimeout -/*****************************************************************************/ -void OSocket::setSendTimeout(const TimeValue* pTimeout) -{ - delete m_pSendTimeout; - - if (pTimeout) - m_pSendTimeout = new TimeValue(*pTimeout); - else - m_pSendTimeout = 0; -} - -/*****************************************************************************/ -// setRecvTimeout -/*****************************************************************************/ -void OSocket::setRecvTimeout(const TimeValue* pTimeout) -{ - delete m_pRecvTimeout; - - if (pTimeout) - m_pRecvTimeout = new TimeValue(*pTimeout); - else - m_pRecvTimeout = 0; -} - -/*****************************************************************************/ -// isRecvReady -/*****************************************************************************/ -sal_Bool OSocket::isRecvReady(const TimeValue* pTimeout) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_isReceiveReady((*m_pSockRef)(), pTimeout); - } - - return sal_False; -} - -/*****************************************************************************/ -// isSendReady -/*****************************************************************************/ -sal_Bool OSocket::isSendReady(const TimeValue* pTimeout) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_isSendReady((*m_pSockRef)(), pTimeout); - } - - return sal_False; -} - -/*****************************************************************************/ -// isExceptionPending -/*****************************************************************************/ -sal_Bool OSocket::isExceptionPending(const TimeValue* pTimeout) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_isExceptionPending((*m_pSockRef)(), pTimeout); - } - - return sal_False; -} - - -/*****************************************************************************/ -// getOption -/*****************************************************************************/ -sal_Int32 OSocket::getOption(TSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - TSocketOptionLevel Level) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_getSocketOption((*m_pSockRef)(), - (oslSocketOptionLevel)Level, - (oslSocketOption)Option, - pBuffer, - BufferLen); - } - - return sal_False; -} - -/*****************************************************************************/ -// setOption -/*****************************************************************************/ -sal_Bool OSocket::setOption(TSocketOption Option, - void* pBuffer, - sal_uInt32 BufferLen, - TSocketOptionLevel Level) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_setSocketOption((*m_pSockRef)(), - (oslSocketOptionLevel)Level, - (oslSocketOption)Option, - pBuffer, - BufferLen); - } - - return sal_False; -} - - -/*****************************************************************************/ -// enableNonBlockingMode -/*****************************************************************************/ -sal_Bool OSocket::enableNonBlockingMode(sal_Bool On) -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_enableNonBlockingMode((*m_pSockRef)(), On); - } - - return sal_False; -} - -/*****************************************************************************/ -// isNonBlockingMode -/*****************************************************************************/ -sal_Bool OSocket::isNonBlockingMode() const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_isNonBlockingMode((*m_pSockRef)()); - } - - return sal_False; -} - -/*****************************************************************************/ -// getType -/*****************************************************************************/ -OSocket::TSocketType OSocket::getType() const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return (TSocketType)osl_getSocketType((*m_pSockRef)()); - } - - return TType_Invalid; -} - -/*****************************************************************************/ -// clearError -/*****************************************************************************/ -sal_Int32 OSocket::clearError() const -{ - sal_Int32 err = 0; - - getOption(TOption_Error, &err, sizeof(err)); - - return err; -} - -/*****************************************************************************/ -// setDebug -/*****************************************************************************/ -sal_Int32 OSocket::setDebug(sal_Int32 opt) const -{ - sal_Int32 old= 0; - - getOption(TOption_Debug, &old, sizeof(old)); - - if (opt != -1) - setOption(TOption_Debug, &opt, sizeof(opt)); - - return old; -} - -/*****************************************************************************/ -// setReuseAddr -/*****************************************************************************/ -sal_Int32 OSocket::setReuseAddr(sal_Int32 opt) const -{ - sal_Int32 old = 0; - - getOption(TOption_ReuseAddr, &old, sizeof(old)); - - if (opt != -1) - setOption(TOption_ReuseAddr, &opt, sizeof(opt)); - - return (old); -} - -/*****************************************************************************/ -// setKeepAlive -/*****************************************************************************/ -sal_Int32 OSocket::setKeepAlive(sal_Int32 opt) const -{ - sal_Int32 old = 0; - - getOption(TOption_KeepAlive, &old, sizeof(old)); - - if (opt != -1) - setOption(TOption_KeepAlive, &opt, sizeof(opt)); - - return (old); -} - -/*****************************************************************************/ -// setDontRoute -/*****************************************************************************/ -sal_Int32 OSocket::setDontRoute(sal_Int32 opt) const -{ - sal_Int32 old = 0; - - getOption(TOption_DontRoute, &old, sizeof(old)); - - if (opt != -1) - setOption(TOption_DontRoute, &opt, sizeof(opt)); - - return (old); -} - -/*****************************************************************************/ -// setBroadcast -/*****************************************************************************/ -sal_Int32 OSocket::setBroadcast(sal_Int32 opt) const -{ - sal_Int32 old = 0; - - getOption(TOption_Broadcast, &old, sizeof(old)); - - if (opt != -1) - setOption(TOption_Broadcast, &opt, sizeof(opt)); - - return (old); -} - -/*****************************************************************************/ -// setOobinline -/*****************************************************************************/ -sal_Int32 OSocket::setOobinline(sal_Int32 opt) const -{ - sal_Int32 old = 0; - - getOption(TOption_OOBinLine, &old, sizeof(old)); - - if (opt != -1) - setOption(TOption_OOBinLine, &opt, sizeof(opt)); - - return (old); -} - -/*****************************************************************************/ -// setLinger -/*****************************************************************************/ -sal_Int32 OSocket::setLinger(sal_Int32 time) const -{ - /* local decl. of linger-struct */ - struct SockLinger - { - sal_Int32 m_onoff; // option on/off - sal_Int32 m_linger; // linger time - }; - - - SockLinger old = { 0, 0 }; - - getOption(TOption_Linger, &old, sizeof(old)); - - if (time > 0) // enable linger with wait-times > 0 - { - SockLinger nw = { 1, time }; - setOption(TOption_Linger, &nw, sizeof(nw)); - } - else if (time == 0) // disable linger with wait-time == 0 - { - SockLinger nw = { 0, old.m_linger }; - setOption(TOption_Linger, &nw, sizeof(nw)); - } - - // returns 0 if linger was off, else the linger-time - return (old.m_onoff ? old.m_linger : 0); -} - -/*****************************************************************************/ -// setSendBufSize -/*****************************************************************************/ -sal_Int32 OSocket::setSendBufSize(sal_Int32 sz) const -{ - sal_Int32 old = 0; - - getOption(TOption_SndBuf, &old, sizeof(old)); - - if (sz >= 0) - setOption(TOption_SndBuf, &sz, sizeof(sz)); - - return (old); -} - -/*****************************************************************************/ -// setRecvBufSize -/*****************************************************************************/ -sal_Int32 OSocket::setRecvBufSize(sal_Int32 sz) const -{ - sal_Int32 old = 0; - - getOption(TOption_RcvBuf, &old, sizeof(old)); - - if (sz >= 0) - setOption(TOption_RcvBuf, &sz, sizeof(sz)); - - return (old); -} - -/*****************************************************************************/ -// setTcpNoDelay -/*****************************************************************************/ -sal_Int32 OSocket::setTcpNoDelay(sal_Int32 sz) const -{ - sal_Int32 old = 0; - - getOption(TOption_TcpNoDelay, &old, sizeof(old), TLevel_Tcp); - - if (sz >= 0) - setOption(TOption_TcpNoDelay, &sz, sizeof(sz), TLevel_Tcp); - - return (old); -} - -/*****************************************************************************/ -// getError -/*****************************************************************************/ -//void OSocket::getError(sal_Char* pBuffer, sal_uInt32 nSize) const -void OSocket::getError( rtl::OUString& pBuffer ) const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if (m_pSockRef && (*m_pSockRef)()) - osl_getLastSocketErrorDescription((*m_pSockRef)(), &pBuffer.pData ); - else - osl_getLastSocketErrorDescription(NULL, &pBuffer.pData ); -} - -/*****************************************************************************/ -// getError -/*****************************************************************************/ -OSocket::TSocketError OSocket::getError() const -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if (m_pSockRef && (*m_pSockRef)()) - return (TSocketError)osl_getLastSocketError((*m_pSockRef)()); - else - return (TSocketError)osl_getLastSocketError(NULL); -} - - - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OAcceptorSocket, vos), - VOS_NAMESPACE(OAcceptorSocket, vos), - VOS_NAMESPACE(OSocket, vos), 0); - - -/*****************************************************************************/ -// OAcceptorSocket -/*****************************************************************************/ -OAcceptorSocket::OAcceptorSocket(TAddrFamily Family, - TProtocol Protocol, - TSocketType Type) : - OSocket(Type, Family, Protocol) -{ -} - -/*****************************************************************************/ -// OAcceptorSocket -/*****************************************************************************/ -OAcceptorSocket::OAcceptorSocket(const OAcceptorSocket& sock) : - OSocket(sock) -{ -} - -/*****************************************************************************/ -// ~OAcceptorSocket -/*****************************************************************************/ -OAcceptorSocket::~OAcceptorSocket() -{ - if (m_pSockRef && (*m_pSockRef)() && (m_pSockRef->release() == 0)) - { - /* mfe: prepare for forthcoming api change */ - osl_closeSocket((*m_pSockRef)()); - osl_releaseSocket((*m_pSockRef)()); - delete m_pSockRef; - m_pSockRef = 0; - } -} - -/*****************************************************************************/ -// close -/*****************************************************************************/ -void OAcceptorSocket::close() -{ - if (m_pSockRef && (*m_pSockRef)() && (m_pSockRef->release() == 0)) - { - osl_closeSocket((*m_pSockRef)()); - } - - m_pSockRef= 0; -} - -/*****************************************************************************/ -// listen -/*****************************************************************************/ -sal_Bool OAcceptorSocket::listen(sal_Int32 MaxPendingConnections) -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_listenOnSocket((*m_pSockRef)(), MaxPendingConnections); - } - - return sal_False; -} - - -/*****************************************************************************/ -// acceptConnection -/*****************************************************************************/ -OSocket::TResult OAcceptorSocket::acceptConnection(OStreamSocket& connection) -{ - if (m_pRecvTimeout && ! isRecvReady(m_pRecvTimeout)) - return TResult_TimedOut; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - OStreamSocket aSocket; - - if ( m_pSockRef && (*m_pSockRef)() ) - { - aSocket = osl_acceptConnectionOnSocket((*m_pSockRef)(), 0); - } - - if( aSocket.isValid() ) - { - connection = aSocket; - return TResult_Ok; - } - else - { - return TResult_Error; - } - -} - -/*****************************************************************************/ -// acceptConnection -/*****************************************************************************/ -OSocket::TResult OAcceptorSocket::acceptConnection(OStreamSocket& connection, - OSocketAddr& sa) -{ - oslSocketAddr PeerAddr = 0; - oslSocket Socket = 0; - - if (m_pRecvTimeout && ! isRecvReady(m_pRecvTimeout)) - return TResult_TimedOut; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - Socket= osl_acceptConnectionOnSocket((*m_pSockRef)(), &PeerAddr); - } - - if (Socket) - { - sa= PeerAddr; - connection= Socket; - return TResult_Ok; - } - else - { - return TResult_Error; - } -} - - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OStreamSocket, vos), - VOS_NAMESPACE(OStreamSocket, vos), - VOS_NAMESPACE(OSocket, vos), 0); - - - -/*****************************************************************************/ -// OStreamSocket -/*****************************************************************************/ -OStreamSocket::OStreamSocket() -{ -} - -/*****************************************************************************/ -// OStreamSocket -/*****************************************************************************/ -OStreamSocket::OStreamSocket(TAddrFamily Family, - TProtocol Protocol, - TSocketType Type) : - OSocket(Type, Family, Protocol) -{ -} - - -/*****************************************************************************/ -// OStreamSocket -/*****************************************************************************/ -OStreamSocket::OStreamSocket(oslSocket Socket) : - OSocket(Socket) -{ -} - -/*****************************************************************************/ -// OStreamSocket -// copy constructor -/*****************************************************************************/ -OStreamSocket::OStreamSocket(const OStreamSocket& sock) : - OSocket(sock), IStream() -{ -} - -/*****************************************************************************/ -// OStreamSocket -// copy constructor -/*****************************************************************************/ -OStreamSocket::OStreamSocket(const OSocket& sock) : - OSocket(sock) -{ -} - -/*****************************************************************************/ -// ~OStreamSocket -/*****************************************************************************/ -OStreamSocket::~OStreamSocket() -{ -} - -/*****************************************************************************/ -// close -/*****************************************************************************/ -void OStreamSocket::close() -{ - if (m_pSockRef && (*m_pSockRef)() && (m_pSockRef->release() == 0)) - { - shutdown(); - osl_releaseSocket((*m_pSockRef)()); - delete m_pSockRef; - } - - m_pSockRef= 0; -} - - -/*****************************************************************************/ -// operator=(oslSocket) -/*****************************************************************************/ -OStreamSocket& OStreamSocket::operator=(oslSocket Socket) -{ - OSocket::operator=(Socket); - - return *this; -} - -/*****************************************************************************/ -// operator= -/*****************************************************************************/ -OStreamSocket& OStreamSocket::operator= (const OSocket& sock) -{ - OSocket::operator=(sock); - - return *this; -} - -/*****************************************************************************/ -// operator= -/*****************************************************************************/ -OStreamSocket& OStreamSocket::operator= (const OStreamSocket& sock) -{ - OSocket::operator=(sock); - - return *this; -} - -/*****************************************************************************/ -// read -/*****************************************************************************/ -sal_Int32 OStreamSocket::read(void* pBuffer, sal_uInt32 n) const -{ - sal_uInt8 *Ptr = (sal_uInt8 *)pBuffer; - - if (m_pRecvTimeout && ! isRecvReady(m_pRecvTimeout)) - return 0; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( ! ( m_pSockRef && (*m_pSockRef)() ) ) - { - return -1; - } - - /* loop until all desired bytes were read or an error occured */ - sal_uInt32 BytesRead= 0; - sal_uInt32 BytesToRead= n; - while (BytesToRead > 0) - { - sal_Int32 RetVal; - RetVal= osl_receiveSocket((*m_pSockRef)(), - Ptr, - BytesToRead, - osl_Socket_MsgNormal); - - /* error occured? */ - if(RetVal <= 0) - { - break; - } - - BytesToRead -= RetVal; - BytesRead += RetVal; - Ptr += RetVal; - - /* wait for next available data or timeout */ - if ( BytesToRead > 0 && m_pRecvTimeout && ! isRecvReady(m_pRecvTimeout)) - break; - - } - - return BytesRead; -} - -/*****************************************************************************/ -// write -/*****************************************************************************/ -sal_Int32 OStreamSocket::write(const void* pBuffer, sal_uInt32 n) -{ - sal_uInt8 *Ptr = (sal_uInt8 *)pBuffer; - - if (m_pSendTimeout && ! isSendReady(m_pSendTimeout)) - return 0; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( ! ( m_pSockRef && (*m_pSockRef)() ) ) - { - return -1; - } - - /* loop until all desired bytes were send or an error occured */ - sal_uInt32 BytesSend= 0; - sal_uInt32 BytesToSend= n; - while (BytesToSend > 0) - { - sal_Int32 RetVal; - - RetVal= osl_sendSocket((*m_pSockRef)(), - Ptr, - BytesToSend, - osl_Socket_MsgNormal); - - /* error occured? */ - if(RetVal <= 0) - { - break; - } - - BytesToSend -= RetVal; - BytesSend += RetVal; - Ptr += RetVal; - - /* wait till new data is available or timeout occures */ - if ( BytesToSend > 0 && m_pSendTimeout && ! isSendReady(m_pSendTimeout)) - break; - } - - return BytesSend; -} - -sal_Bool OStreamSocket::isEof() const -{ - return isValid(); - // BHO not enough -} - -/*****************************************************************************/ -// recv -/*****************************************************************************/ -sal_Int32 OStreamSocket::recv(void* pBuffer, - sal_uInt32 BytesToRead, - TSocketMsgFlag Flag) -{ - if (m_pRecvTimeout && ! isRecvReady(m_pRecvTimeout)) - return 0; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( ! ( m_pSockRef && (*m_pSockRef)() ) ) - { - return -1; - } - - return osl_receiveSocket((*m_pSockRef)(), - pBuffer, - BytesToRead, - (oslSocketMsgFlag)Flag); -} - -/*****************************************************************************/ -// send -/*****************************************************************************/ -sal_Int32 OStreamSocket::send(const void* pBuffer, - sal_uInt32 BytesToSend, - TSocketMsgFlag Flag) -{ - if (m_pSendTimeout && ! isSendReady(m_pSendTimeout)) - return 0; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( ! ( m_pSockRef && (*m_pSockRef)() ) ) - { - return -1; - } - - return osl_sendSocket((*m_pSockRef)(), - pBuffer, - BytesToSend, - (oslSocketMsgFlag)Flag); -} - -/*****************************************************************************/ -// shutdown -/*****************************************************************************/ -sal_Bool OStreamSocket::shutdown(TSocketDirection Direction) -{ - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return osl_shutdownSocket((*m_pSockRef)(), (oslSocketDirection)Direction); - } - - return sal_False; -} - - - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OConnectorSocket, vos), - VOS_NAMESPACE(OConnectorSocket, vos), - VOS_NAMESPACE(OStreamSocket, vos), 0); - - - -/*****************************************************************************/ -// OConnectorSocket -/*****************************************************************************/ -OConnectorSocket::OConnectorSocket(TAddrFamily Family, - TProtocol Protocol, - TSocketType Type) : - OStreamSocket(Family, Protocol, Type) -{ -} - -/*****************************************************************************/ -// OConnectorSocket -/*****************************************************************************/ -OConnectorSocket::OConnectorSocket(const OConnectorSocket& sock) : - OStreamSocket(sock) -{ -} - -/*****************************************************************************/ -// ~OConnectorSocket -/*****************************************************************************/ -OConnectorSocket::~OConnectorSocket() -{ -} - -/*****************************************************************************/ -// connect -/*****************************************************************************/ -OSocket::TResult OConnectorSocket::connect(const OSocketAddr& Addr, - const TimeValue* pTimeout) -{ - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( m_pSockRef && (*m_pSockRef)() ) - { - return (TResult)osl_connectSocketTo((*m_pSockRef)(), - (oslSocketAddr)Addr, - pTimeout); - } - - return TResult_Error; -} - - -VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(ODatagramSocket, vos), - VOS_NAMESPACE(ODatagramSocket, vos), - VOS_NAMESPACE(OSocket, vos), 0); - - -/*****************************************************************************/ -// ODatagramSocket -/*****************************************************************************/ -ODatagramSocket::ODatagramSocket(TAddrFamily Family, - TProtocol Protocol, - TSocketType Type) : - OSocket(Type, Family, Protocol) -{ -} - -/*****************************************************************************/ -// ODatagramSocket -/*****************************************************************************/ -ODatagramSocket::ODatagramSocket(const ODatagramSocket& sock) : - OSocket(sock) -{ -} - -/*****************************************************************************/ -// ~ODatagramSocket -/*****************************************************************************/ -ODatagramSocket::~ODatagramSocket() -{ -} - - -/*****************************************************************************/ -// recvFrom -/*****************************************************************************/ -sal_Int32 ODatagramSocket::recvFrom(void* pBuffer, - sal_uInt32 BufferSize, - OSocketAddr* pSenderAddr, - TSocketMsgFlag Flag) -{ - - if (m_pRecvTimeout && ! isRecvReady(m_pRecvTimeout)) - return 0; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( ! ( m_pSockRef && (*m_pSockRef)() ) ) - { - return -1; - } - - sal_Int32 BytesRead; - - if(pSenderAddr) - { - // we are interested in the senders address - oslSocketAddr SenderAddr= osl_createEmptySocketAddr(osl_Socket_FamilyInet); - - BytesRead= - osl_receiveFromSocket((*m_pSockRef)(), - SenderAddr, - pBuffer, - BufferSize, - (oslSocketMsgFlag)Flag); - - *pSenderAddr= SenderAddr; - } - else - { - // we don't want to know the senders address - - BytesRead= - osl_receiveFromSocket((*m_pSockRef)(), - 0, - pBuffer, - BufferSize, - (oslSocketMsgFlag)Flag); - } - - return BytesRead; -} - - -/*****************************************************************************/ -// sendTo -/*****************************************************************************/ -sal_Int32 ODatagramSocket::sendTo(const OSocketAddr& ReceiverAddr, - const void* pBuffer, - sal_uInt32 BufferSize, - TSocketMsgFlag Flag) -{ - if (m_pSendTimeout && ! isSendReady(m_pSendTimeout)) - return 0; - - OSL_ASSERT(m_pSockRef && (*m_pSockRef)()); - - if ( ( m_pSockRef && (*m_pSockRef)() ) ) - { - - return osl_sendToSocket((*m_pSockRef)(), - (oslSocketAddr)ReceiverAddr, - pBuffer, - BufferSize, - (oslSocketMsgFlag)Flag); - } - - return -1; -} - |