00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _OSL_SOCKET_H_
00021 #define _OSL_SOCKET_H_
00022
00023 #include <rtl/ustring.h>
00024 #include <rtl/byteseq.h>
00025
00026 #include <osl/time.h>
00027 #include <rtl/tencinfo.h>
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033
00034 #define OSL_INADDR_NONE 0xffffffff
00035 #define OSL_INVALID_PORT (-1)
00036 #define OSL_INVALID_IPX_SOCKET_NO 0xffffffff
00037
00041 typedef struct oslSocketAddrImpl * oslSocketAddr;
00042
00043
00047 typedef enum {
00048 osl_Socket_FamilyInet,
00049 osl_Socket_FamilyIpx,
00050 osl_Socket_FamilyInvalid,
00051 osl_Socket_Family_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00052 } oslAddrFamily;
00053
00057 typedef enum {
00058 osl_Socket_ProtocolIp,
00059 osl_Socket_ProtocolIpx,
00060 osl_Socket_ProtocolSpx,
00061 osl_Socket_ProtocolSpxII,
00062 osl_Socket_ProtocolInvalid,
00063 osl_Socket_Protocol_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00064 } oslProtocol;
00065
00066
00070 typedef enum {
00071 osl_Socket_TypeStream,
00072 osl_Socket_TypeDgram,
00073 osl_Socket_TypeRaw,
00074 osl_Socket_TypeRdm,
00075 osl_Socket_TypeSeqPacket,
00076 osl_Socket_TypeInvalid,
00077 osl_Socket_Type_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00078 } oslSocketType;
00079
00080
00084 typedef enum {
00085 osl_Socket_OptionDebug,
00086 osl_Socket_OptionAcceptConn,
00087 osl_Socket_OptionReuseAddr,
00088 osl_Socket_OptionKeepAlive,
00089 osl_Socket_OptionDontRoute,
00090 osl_Socket_OptionBroadcast,
00091 osl_Socket_OptionUseLoopback,
00092 osl_Socket_OptionLinger,
00093 osl_Socket_OptionOOBinLine,
00094 osl_Socket_OptionSndBuf,
00095 osl_Socket_OptionRcvBuf,
00096 osl_Socket_OptionSndLowat,
00097 osl_Socket_OptionRcvLowat,
00098 osl_Socket_OptionSndTimeo,
00099 osl_Socket_OptionRcvTimeo,
00100 osl_Socket_OptionError,
00101 osl_Socket_OptionType,
00102 osl_Socket_OptionTcpNoDelay,
00103 osl_Socket_OptionInvalid,
00104 osl_Socket_Option_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00105 } oslSocketOption;
00106
00110 typedef enum {
00111 osl_Socket_LevelSocket,
00112 osl_Socket_LevelTcp,
00113 osl_Socket_LevelInvalid,
00114 osl_Socket_Level_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00115 } oslSocketOptionLevel;
00116
00117
00121 typedef enum {
00122 osl_Socket_MsgNormal,
00123 osl_Socket_MsgOOB,
00124 osl_Socket_MsgPeek,
00125 osl_Socket_MsgDontRoute,
00126 osl_Socket_MsgMaxIOVLen,
00127 osl_Socket_MsgInvalid,
00128 osl_Socket_Msg_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00129 } oslSocketMsgFlag;
00130
00134 typedef enum {
00135 osl_Socket_DirRead,
00136 osl_Socket_DirWrite,
00137 osl_Socket_DirReadWrite,
00138 osl_Socket_DirInvalid,
00139 osl_Socket_Dir_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00140 } oslSocketDirection;
00141
00144 typedef enum {
00145 osl_Socket_E_None,
00146 osl_Socket_E_NotSocket,
00147 osl_Socket_E_DestAddrReq,
00148 osl_Socket_E_MsgSize,
00149 osl_Socket_E_Prototype,
00150 osl_Socket_E_NoProtocol,
00151 osl_Socket_E_ProtocolNoSupport,
00152 osl_Socket_E_TypeNoSupport,
00153 osl_Socket_E_OpNotSupport,
00154 osl_Socket_E_PfNoSupport,
00155 osl_Socket_E_AfNoSupport,
00156
00157 osl_Socket_E_AddrInUse,
00158 osl_Socket_E_AddrNotAvail,
00159 osl_Socket_E_NetDown,
00160 osl_Socket_E_NetUnreachable,
00161 osl_Socket_E_NetReset,
00162
00163 osl_Socket_E_ConnAborted,
00164 osl_Socket_E_ConnReset,
00165 osl_Socket_E_NoBufferSpace,
00166 osl_Socket_E_IsConnected,
00167 osl_Socket_E_NotConnected,
00168 osl_Socket_E_Shutdown,
00169 osl_Socket_E_TooManyRefs,
00170 osl_Socket_E_TimedOut,
00171 osl_Socket_E_ConnRefused,
00172 osl_Socket_E_HostDown,
00173 osl_Socket_E_HostUnreachable,
00174 osl_Socket_E_WouldBlock,
00175 osl_Socket_E_Already,
00176 osl_Socket_E_InProgress,
00177 osl_Socket_E_InvalidError,
00178 osl_Socket_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00179 } oslSocketError;
00180
00183 typedef enum {
00184 osl_Socket_Ok,
00185 osl_Socket_Error,
00186 osl_Socket_TimedOut,
00187 osl_Socket_Interrupted,
00188 osl_Socket_InProgress,
00189 osl_Socket_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00190 } oslSocketResult;
00191
00192 typedef sal_uInt8 oslSocketIpxNetNumber[4];
00193 typedef sal_uInt8 oslSocketIpxNodeNumber[6];
00194
00206 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createEmptySocketAddr(
00207 oslAddrFamily Family);
00208
00209
00212 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_copySocketAddr(
00213 oslSocketAddr Addr);
00214
00219 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isEqualSocketAddr(
00220 oslSocketAddr Addr1, oslSocketAddr Addr2);
00221
00227 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_resolveHostname(
00228 rtl_uString *strHostname);
00229
00239 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createInetBroadcastAddr (
00240 rtl_uString *strDottedAddr, sal_Int32 Port);
00241
00242
00250 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createInetSocketAddr (
00251 rtl_uString *strDottedAddr, sal_Int32 Port);
00252
00253
00257 SAL_DLLPUBLIC void SAL_CALL osl_destroySocketAddr(
00258 oslSocketAddr Addr);
00259
00264 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getServicePort(
00265 rtl_uString *strServicename, rtl_uString *strProtocol);
00266
00267
00268
00273 SAL_DLLPUBLIC oslAddrFamily SAL_CALL osl_getFamilyOfSocketAddr(
00274 oslSocketAddr Addr);
00275
00276
00281 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getInetPortOfSocketAddr(
00282 oslSocketAddr Addr);
00283
00284
00289 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setInetPortOfSocketAddr(
00290 oslSocketAddr Addr, sal_Int32 Port);
00291
00292
00297 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getHostnameOfSocketAddr(
00298 oslSocketAddr Addr, rtl_uString **strHostname);
00299
00300
00308 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr(
00309 oslSocketAddr Addr, rtl_uString **strDottedInetAddr);
00310
00313 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_setAddrOfSocketAddr(
00314 oslSocketAddr Addr, sal_Sequence *pByteSeq );
00315
00321 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getAddrOfSocketAddr(
00322 oslSocketAddr Addr, sal_Sequence **ppByteSeq );
00323
00324
00325
00326
00327 typedef struct oslHostAddrImpl * oslHostAddr;
00328
00329
00335 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddr(
00336 rtl_uString *strHostname, const oslSocketAddr Addr);
00337
00338
00346 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddrByName(rtl_uString *strHostname);
00347
00348
00356 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddrByAddr(const oslSocketAddr Addr);
00357
00358
00362 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_copyHostAddr(const oslHostAddr Addr);
00363
00364
00368 SAL_DLLPUBLIC void SAL_CALL osl_destroyHostAddr(oslHostAddr Addr);
00369
00370
00374 SAL_DLLPUBLIC void SAL_CALL osl_getHostnameOfHostAddr(const oslHostAddr Addr, rtl_uString **strHostname);
00375
00376
00380 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getSocketAddrOfHostAddr(const oslHostAddr Addr);
00381
00387 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getLocalHostname(rtl_uString **strLocalHostname);
00388
00389
00397
00398
00399
00400
00401 typedef struct oslSocketImpl * oslSocket;
00402
00405 SAL_DLLPUBLIC void SAL_CALL osl_acquireSocket( oslSocket Socket );
00406
00412 SAL_DLLPUBLIC void SAL_CALL osl_releaseSocket( oslSocket Socket );
00413
00419 SAL_DLLPUBLIC oslSocket SAL_CALL osl_createSocket(
00420 oslAddrFamily Family,
00421 oslSocketType Type,
00422 oslProtocol Protocol);
00423
00430 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getLocalAddrOfSocket(oslSocket Socket);
00431
00438 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getPeerAddrOfSocket(oslSocket Socket);
00439
00446 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_bindAddrToSocket(
00447 oslSocket Socket,
00448 oslSocketAddr Addr);
00449
00461 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_connectSocketTo(
00462 oslSocket Socket,
00463 oslSocketAddr Addr,
00464 const TimeValue* pTimeout);
00465
00466
00474 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_listenOnSocket(
00475 oslSocket Socket,
00476 sal_Int32 MaxPendingConnections);
00477
00478
00485 SAL_DLLPUBLIC oslSocket SAL_CALL osl_acceptConnectionOnSocket
00486 (oslSocket Socket,
00487 oslSocketAddr* pAddr);
00488
00509 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_receiveSocket(
00510 oslSocket Socket,
00511 void* pBuffer,
00512 sal_uInt32 BytesToRead,
00513 oslSocketMsgFlag Flag);
00514
00537 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_receiveFromSocket(
00538 oslSocket Socket,
00539 oslSocketAddr SenderAddr,
00540 void* pBuffer,
00541 sal_uInt32 BufferSize,
00542 oslSocketMsgFlag Flag);
00543
00562 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_sendSocket(
00563 oslSocket Socket,
00564 const void* pBuffer,
00565 sal_uInt32 BytesToSend,
00566 oslSocketMsgFlag Flag);
00567
00593 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_sendToSocket(
00594 oslSocket Socket,
00595 oslSocketAddr ReceiverAddr,
00596 const void* pBuffer,
00597 sal_uInt32 BytesToSend,
00598 oslSocketMsgFlag Flag);
00599
00611 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isReceiveReady(
00612 oslSocket Socket, const TimeValue* pTimeout);
00613
00624 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isSendReady(
00625 oslSocket Socket, const TimeValue* pTimeout);
00626
00636 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isExceptionPending(
00637 oslSocket Socket, const TimeValue* pTimeout);
00638
00649 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_shutdownSocket(oslSocket Socket,
00650 oslSocketDirection Direction);
00651
00736 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getSocketOption( oslSocket Socket,
00737 oslSocketOptionLevel Level,
00738 oslSocketOption Option,
00739 void* pBuffer,
00740 sal_uInt32 BufferLen);
00741
00762 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setSocketOption( oslSocket Socket,
00763 oslSocketOptionLevel Level,
00764 oslSocketOption Option,
00765 void* pBuffer,
00766 sal_uInt32 BufferLen);
00767
00774 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_enableNonBlockingMode(
00775 oslSocket Socket, sal_Bool On);
00776
00777
00782 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isNonBlockingMode(
00783 oslSocket Socket);
00784
00785
00798 SAL_DLLPUBLIC oslSocketType SAL_CALL osl_getSocketType(
00799 oslSocket Socket);
00800
00804 SAL_DLLPUBLIC void SAL_CALL osl_getLastSocketErrorDescription(
00805 oslSocket Socket, rtl_uString **strError);
00806
00812 SAL_DLLPUBLIC oslSocketError SAL_CALL osl_getLastSocketError(
00813 oslSocket Socket);
00814
00817 typedef struct oslSocketSetImpl * oslSocketSet;
00818
00822 SAL_DLLPUBLIC oslSocketSet SAL_CALL osl_createSocketSet(void);
00823
00826 SAL_DLLPUBLIC void SAL_CALL osl_destroySocketSet(oslSocketSet Set);
00827
00831 SAL_DLLPUBLIC void SAL_CALL osl_clearSocketSet(oslSocketSet Set);
00832
00833
00838 SAL_DLLPUBLIC void SAL_CALL osl_addToSocketSet(oslSocketSet Set, oslSocket Socket);
00839
00844 SAL_DLLPUBLIC void SAL_CALL osl_removeFromSocketSet(oslSocketSet Set, oslSocket Socket);
00845
00851 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isInSocketSet(oslSocketSet Set, oslSocket Socket);
00852
00868 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_demultiplexSocketEvents(oslSocketSet IncomingSet,
00869 oslSocketSet OutgoingSet,
00870 oslSocketSet OutOfBandSet,
00871 const TimeValue* pTimeout);
00872
00875 SAL_DLLPUBLIC void SAL_CALL osl_closeSocket(oslSocket Socket);
00876
00877
00886 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_readSocket( oslSocket Socket, void *pBuffer, sal_Int32 nSize );
00887
00888
00896 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_writeSocket( oslSocket Socket, const void *pBuffer, sal_Int32 nSize );
00897
00903 #ifdef __cplusplus
00904 }
00905 #endif
00906
00907 #endif
00908
00909