00001
00002
00003
00004
00005
00006
00007
00008
00017 #ifndef OSCLCONFIG_IO_H_INCLUDED
00018 #define OSCLCONFIG_IO_H_INCLUDED
00019
00020 #ifndef OSCLCONFIG_H_INCLUDED
00021 #include "osclconfig.h"
00022 #endif
00023
00024 #if (OSCL_HAS_ANDROID_SUPPORT) && (ENABLE_MEMORY_PLAYBACK)
00025 #include <media/MediaPlayerInterface.h>
00026 #endif
00027
00028 #include <stdio.h>
00029 #include <stdlib.h>
00030 #include <stdarg.h>
00031 #include <sys/socket.h>
00032 #include <netinet/in.h>
00033 #include <arpa/inet.h>
00034 #include <fcntl.h>
00035 #include <signal.h>
00036 #include <netdb.h>
00037 #include <sys/mman.h>
00038 #include <sys/types.h>
00039 #include <errno.h>
00040 #include <sys/vfs.h>
00041 #include <dirent.h>
00042
00043 #if (OSCL_HAS_ANSI_STDLIB_SUPPORT)
00044 #if (OSCL_HAS_UNIX_SUPPORT)
00045 #include <sys/stat.h>
00046 #endif
00047 #endif
00048
00049
00050 #define OSCL_HAS_GLOB 0
00051 #define OSCL_HAS_ANSI_FILE_IO_SUPPORT 1
00052 #define OSCL_HAS_SYMBIAN_COMPATIBLE_IO_FUNCTION 0
00053 #define OSCL_HAS_NATIVE_FILE_CACHE_ENABLE 1
00054 #define OSCL_FILE_BUFFER_MAX_SIZE 32768
00055 #define OSCL_HAS_PV_FILE_CACHE 0
00056 #define OSCL_HAS_LARGE_FILE_SUPPORT 1
00057
00058
00059 #define OSCL_HAS_SYMBIAN_SOCKET_SERVER 0
00060 #define OSCL_HAS_SYMBIAN_DNS_SERVER 0
00061 #define OSCL_HAS_BERKELEY_SOCKETS 1
00062 #define OSCL_HAS_SOCKET_SUPPORT 1
00063
00064
00065 typedef int TOsclSocket;
00066 typedef struct sockaddr_in TOsclSockAddr;
00067 typedef socklen_t TOsclSockAddrLen;
00068
00069
00070 #define OsclValidInetAddr(addr) (inet_addr(addr)!=INADDR_NONE)
00071
00072
00073 #define OsclMakeSockAddr(sockaddr,port,addrstr,ok)\
00074 sockaddr.sin_family=OSCL_AF_INET;\
00075 sockaddr.sin_port=htons(port);\
00076 int32 result=inet_aton((const char*)addrstr,&sockaddr.sin_addr);\
00077 ok=(result!=0);
00078
00079
00080 #define OsclUnMakeSockAddr(sockaddr,addrstr)\
00081 addrstr=inet_ntoa(sockaddr.sin_addr);
00082
00083
00084 #define OsclSetRecvBufferSize(s,val,ok,err) \
00085 ok=(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char*)&val, sizeof(int)) !=-1);\
00086 if (!ok)err=errno
00087
00088 #define OsclBind(s,addr,ok,err)\
00089 TOsclSockAddr* tmpadr = &addr;\
00090 sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\
00091 ok=(bind(s,sadr,sizeof(addr))!=(-1));\
00092 if (!ok)err=errno
00093
00094 #define OsclJoin(s,addr,ok,err)\
00095 {\
00096 struct ip_mreq mreq; \
00097 void* p = &addr; \
00098 ok=(bind(s,(sockaddr*)p,sizeof(addr))!=(-1));\
00099 mreq.imr_multiaddr.s_addr = addr.sin_addr.s_addr ; \
00100 mreq.imr_interface.s_addr = htonl(INADDR_ANY); \
00101 ok=(setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(struct ip_mreq))!=(-1)); \
00102 if (!ok)err=errno;\
00103 }
00104
00105
00106 #define OsclListen(s,size,ok,err)\
00107 ok=(listen(iSocket,qSize)!=(-1));\
00108 if (!ok)err=errno
00109
00110 #define OsclAccept(s,accept_s,ok,err,wouldblock)\
00111 accept_s=accept(s,NULL,NULL);\
00112 ok=(accept_s!=(-1));\
00113 if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}
00114
00115 #define OsclSetNonBlocking(s,ok,err)\
00116 ok=(fcntl(s,F_SETFL,O_NONBLOCK)!=(-1));\
00117 if (!ok)err=errno
00118
00119 #define OsclShutdown(s,how,ok,err)\
00120 ok=(shutdown(iSocket,how)!=(-1));\
00121 if (!ok)err=errno
00122
00123 #define OsclSocket(s,fam,type,prot,ok,err)\
00124 s=socket(fam,type,prot);\
00125 ok=(s!=(-1));\
00126 if (!ok)err=errno
00127
00128 #define OsclSendTo(s,buf,len,addr,ok,err,nbytes,wouldblock)\
00129 TOsclSockAddr* tmpadr = &addr;\
00130 sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\
00131 nbytes=sendto(s,(const void*)(buf),(size_t)(len),0,sadr,(socklen_t)sizeof(addr));\
00132 ok=(nbytes!=(-1));\
00133 if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}
00134
00135 #define OsclSend(s,buf,len,ok,err,nbytes,wouldblock)\
00136 nbytes=send(s,(const void*)(buf),(size_t)(len),0);\
00137 ok=(nbytes!=(-1));\
00138 if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}
00139
00140 #define OsclCloseSocket(s,ok,err)\
00141 ok=(close(s)!=(-1));\
00142 if (!ok)err=errno
00143
00144 #define OsclConnect(s,addr,ok,err,wouldblock)\
00145 TOsclSockAddr* tmpadr = &addr;\
00146 sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\
00147 ok=(connect(s,sadr,sizeof(addr))!=(-1));\
00148 if (!ok){err=errno;wouldblock=(err==EINPROGRESS);}
00149
00150 #define OsclGetAsyncSockErr(s,ok,err)\
00151 int opterr;socklen_t optlen=sizeof(opterr);\
00152 ok=(getsockopt(s,SOL_SOCKET,SO_ERROR,(void *)&opterr,&optlen)!=(-1));\
00153 if(ok)err=opterr;else err=errno;
00154
00155
00156
00157 #define OsclConnectComplete(s,wset,eset,success,fail,ok,err)\
00158 success=fail=false;\
00159 if (FD_ISSET(s,&eset))\
00160 {fail=true;OsclGetAsyncSockErr(s,ok,err);}\
00161 else if (FD_ISSET(s,&wset))\
00162 {OsclGetAsyncSockErr(s,ok,err);if (ok && err==0)success=true;else fail=true;}
00163
00164 #define OsclRecv(s,buf,len,ok,err,nbytes,wouldblock)\
00165 nbytes=recv(s,(void *)(buf),(size_t)(len),0);\
00166 ok=(nbytes!=(-1));\
00167 if (!ok){err=errno;wouldblock=(err==EAGAIN);}
00168
00169 #define OsclRecvFrom(s,buf,len,paddr,paddrlen,ok,err,nbytes,wouldblock)\
00170 {\
00171 void* p=paddr;\
00172 nbytes=recvfrom(s,(void*)(buf),(size_t)(len),0,(struct sockaddr*)p,paddrlen);\
00173 ok=(nbytes!=(-1));\
00174 if (!ok){err=errno;wouldblock=(err==EAGAIN);}\
00175 }
00176
00177
00178 #define OsclSocketSelect(nfds,rd,wr,ex,timeout,ok,err,nhandles)\
00179 nhandles=select(nfds,&rd,&wr,&ex,&timeout);\
00180 ok=(nhandles!=(-1));\
00181 if (!ok)err=errno
00182
00183
00184
00185
00186 #define OsclSocketStartup(ok)\
00187 signal(SIGPIPE,SIG_IGN);\
00188 ok=true
00189
00190 #define OsclSocketCleanup(ok)\
00191 signal(SIGPIPE,SIG_DFL);\
00192 ok=true
00193
00194
00195 typedef struct hostent TOsclHostent;
00196
00197
00198 #define OsclGethostbyname(name,hostent,ok,err)\
00199 hostent=gethostbyname((const char*)name);\
00200 ok=(hostent!=NULL);\
00201 if (!ok)err=errno;
00202
00203
00204 #define OsclGetDottedAddr(hostent,dottedaddr,ok)\
00205 long *_hostaddr=(long*)hostent->h_addr_list[0];\
00206 struct in_addr _inaddr;\
00207 _inaddr.s_addr=*_hostaddr;\
00208 dottedaddr=inet_ntoa(_inaddr);\
00209 ok=(dottedaddr!=NULL);
00210
00211
00212 #define OSCL_SD_RECEIVE SHUT_RD
00213 #define OSCL_SD_SEND SHUT_WR
00214 #define OSCL_SD_BOTH SHUT_RDWR
00215
00216
00217 #define OSCL_AF_INET AF_INET
00218
00219
00220 #define OSCL_SOCK_STREAM SOCK_STREAM
00221 #define OSCL_SOCK_DATAGRAM SOCK_DGRAM
00222
00223
00224 #define OSCL_IPPROTO_TCP IPPROTO_TCP
00225 #define OSCL_IPPROTO_UDP IPPROTO_UDP
00226
00227
00228
00229 #if (OSCL_HAS_LARGE_FILE_SUPPORT)
00230 #define _FILE_OFFSET_BITS 64
00231 typedef off_t TOsclFileOffset;
00232 #else
00233 typedef int32 TOsclFileOffset;
00234 #endif
00235
00236 #include "osclconfig_io_check.h"
00237
00238 #endif
00239