Main Page   Modules   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

osclconfig_io.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
00003 
00004 //     O S C L C O N F I G _ I O
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 //#include <glob.h>
00043 #if (OSCL_HAS_ANSI_STDLIB_SUPPORT)
00044 #if (OSCL_HAS_UNIX_SUPPORT)
00045 #include <sys/stat.h>
00046 #endif
00047 #endif
00048 
00049 //For File I/O
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 //For Sockets
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 //basic socket types
00065 typedef int TOsclSocket;
00066 typedef struct sockaddr_in TOsclSockAddr;
00067 typedef socklen_t TOsclSockAddrLen;
00068 
00069 //Init addr macro, inet_addr returns an uint32
00070 #define OsclValidInetAddr(addr) (inet_addr(addr)!=INADDR_NONE)
00071 
00072 //address conversion macro-- from string to network address.
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 //address conversion macro-- from network address to string
00080 #define OsclUnMakeSockAddr(sockaddr,addrstr)\
00081         addrstr=inet_ntoa(sockaddr.sin_addr);
00082 
00083 //wrappers for berkeley socket calls
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 //unix reports connect completion in write set in the getsockopt
00156 //error.
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 //there's not really any socket startup needed on unix, but
00184 //you need to define a signal handler for SIGPIPE to avoid
00185 //broken pipe crashes.
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 //hostent type
00195 typedef struct hostent TOsclHostent;
00196 
00197 //wrapper for gethostbyname
00198 #define OsclGethostbyname(name,hostent,ok,err)\
00199         hostent=gethostbyname((const char*)name);\
00200         ok=(hostent!=NULL);\
00201         if (!ok)err=errno;
00202 
00203 //extract dotted address from a hostent
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 //socket shutdown codes
00212 #define OSCL_SD_RECEIVE SHUT_RD
00213 #define OSCL_SD_SEND SHUT_WR
00214 #define OSCL_SD_BOTH SHUT_RDWR
00215 
00216 //address family codes
00217 #define OSCL_AF_INET AF_INET
00218 
00219 //socket type codes
00220 #define OSCL_SOCK_STREAM SOCK_STREAM
00221 #define OSCL_SOCK_DATAGRAM SOCK_DGRAM
00222 
00223 //IP protocol codes
00224 #define OSCL_IPPROTO_TCP IPPROTO_TCP
00225 #define OSCL_IPPROTO_UDP IPPROTO_UDP
00226 
00227 //End sockets
00228 // file IO support
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 

OSCL API
Posting Version: OPENCORE_20090310