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

oscl_tcp_socket.h

Go to the documentation of this file.
00001 
00002 #ifndef OSCL_TCP_SOCKET_H_INCLUDED
00003 #define OSCL_TCP_SOCKET_H_INCLUDED
00004 
00005 #ifndef OSCL_IP_SOCKET_H_INCLUDED
00006 #include "oscl_ip_socket.h"
00007 #endif
00008 
00009 #ifndef OSCL_DEFALLOC_H_INCLUDED
00010 #include "oscl_defalloc.h"
00011 #endif
00012 
00013 #ifndef OSCL_VECTOR_H_INCLUDED
00014 #include "oscl_vector.h"
00015 #endif
00016 
00017 #ifndef OSCL_MEM_H_INCLUDED
00018 #include "oscl_mem.h"
00019 #endif
00020 
00021 class OsclBindMethod;
00022 class OsclListenMethod;
00023 class OsclConnectMethod;
00024 class OsclShutdownMethod;
00025 class OsclAcceptMethod;
00026 class OsclSendMethod;
00027 class OsclRecvMethod;
00028 
00031 class OsclTCPSocketI : public OsclIPSocketI
00032 {
00033     public:
00034         //Synchronous methods
00035         static OsclTCPSocketI *NewL(Oscl_DefAlloc &a,
00036                                     OsclSocketServI *aServ,
00037                                     OsclSocketObserver *aObserver,
00038                                     uint32 aId);
00039 
00040         virtual ~OsclTCPSocketI();
00041 
00042         TPVSocketEvent ThreadLogoff();
00043         TPVSocketEvent ThreadLogon(
00044             OsclSocketServI *aServ,
00045             OsclSocketObserver *aObserver
00046         );
00047         int32 Close();
00048         inline int32 Listen(int aQueueSize);
00049         //the returned value is platform-specific
00050 
00051         OsclTCPSocketI *GetAcceptedSocketL(uint32 aId);
00052 
00053         inline uint8 *GetRecvData(int32 *aLength) ;
00054         inline uint8 *GetSendData(int32 *aLength);
00055 
00056         //Asynchronous methods
00057         inline TPVSocketEvent BindAsync(OsclNetworkAddress& aAddress,
00058                                         int32 aTimeoutMsec = -1);
00059         inline void CancelBind();
00060 
00061         inline TPVSocketEvent ListenAsync(uint32 qsize,
00062                                           int32 aTimeoutMsec = -1);
00063         inline void CancelListen();
00064 
00065         inline TPVSocketEvent Connect(OsclNetworkAddress& aAddress,
00066                                       int32 aTimeoutMsec = -1);
00067         inline void CancelConnect();
00068 
00069         inline TPVSocketEvent Shutdown(TPVSocketShutdown  aHow,
00070                                        int32 aTimeoutMsec = -1);
00071         inline void CancelShutdown();
00072 
00073         inline TPVSocketEvent Accept(int32 aTimeout = -1);
00074         inline void CancelAccept();
00075 
00076         inline TPVSocketEvent Send(const uint8* &aPtr, uint32 aLen,
00077                                    int32 aTimeoutMsec = -1);
00078         inline void CancelSend();
00079 
00080         inline TPVSocketEvent Recv(uint8* &aPtr, uint32 aMaxLen,
00081                                    int32 aTimeoutMsec = -1);
00082         inline void CancelRecv();
00083 
00084     private:
00085         static OsclTCPSocketI *NewL(Oscl_DefAlloc &a,
00086                                     OsclSocketServI *aServ,
00087                                     OsclSocketI *aSocket,
00088                                     OsclSocketObserver *aObserver,
00089                                     uint32 aId);
00090 
00091         OsclTCPSocketI(Oscl_DefAlloc &a) : OsclIPSocketI(a),
00092                 iConnectMethod(NULL),
00093                 iShutdownMethod(NULL),
00094                 iAcceptMethod(NULL),
00095                 iSendMethod(NULL),
00096                 iRecvMethod(NULL)
00097         {}
00098 
00099         void ConstructL(OsclSocketServI *aServ,
00100                         OsclSocketObserver *aObserver,
00101                         uint32 aId);
00102 
00103         void ConstructL(OsclSocketServI *aServ,
00104                         OsclSocketI *aSocket,
00105                         OsclSocketObserver *aObserver,
00106                         uint32 aId);
00107 
00108         OsclBindMethod *iBindMethod;
00109         OsclListenMethod *iListenMethod;
00110         OsclConnectMethod *iConnectMethod;
00111         OsclShutdownMethod *iShutdownMethod;
00112         OsclAcceptMethod *iAcceptMethod;
00113         OsclSendMethod *iSendMethod;
00114         OsclRecvMethod *iRecvMethod;
00115 };
00116 
00117 #include "oscl_socket_listen.h"
00118 #include "oscl_socket_recv.h"
00119 #include "oscl_socket_send.h"
00120 #include "oscl_socket_accept.h"
00121 #include "oscl_socket_shutdown.h"
00122 #include "oscl_socket_connect.h"
00123 #include "oscl_socket_bind.h"
00124 
00126 inline int32 OsclTCPSocketI::Listen(int aQueueSize)
00127 {
00128     return iSocket->Listen(aQueueSize) ;
00129 }
00130 
00132 inline uint8 *OsclTCPSocketI::GetRecvData(int32 *aLength)
00133 {
00134     return iRecvMethod->GetRecvData(aLength);
00135 }
00136 
00138 inline uint8 *OsclTCPSocketI::GetSendData(int32 *aLength)
00139 {
00140     return iSendMethod->GetSendData(aLength);
00141 }
00142 
00144 inline TPVSocketEvent OsclTCPSocketI::BindAsync(OsclNetworkAddress& aAddress,
00145         int32 aTimeout)
00146 {
00147     if (!OsclSocketIBase::HasAsyncBind())
00148         return EPVSocketNotImplemented;
00149     if (!iObserver)
00150         return EPVSocketFailure;//not available.
00151 
00152     iAddress.ipAddr.Set(aAddress.ipAddr.Str());
00153     iAddress.port = aAddress.port;
00154     return (iBindMethod->Bind(aAddress, aTimeout));
00155 }
00156 
00157 inline void OsclTCPSocketI::CancelBind()
00158 {
00159     iBindMethod->CancelMethod();
00160 }
00161 
00163 inline TPVSocketEvent OsclTCPSocketI::ListenAsync(uint32 qsize,
00164         int32 aTimeout)
00165 {
00166     if (!OsclSocketIBase::HasAsyncListen())
00167         return EPVSocketNotImplemented;
00168     if (!iObserver)
00169         return EPVSocketFailure;//not available
00170 
00171     return (iListenMethod->Listen(qsize, aTimeout));
00172 }
00173 
00174 inline void OsclTCPSocketI::CancelListen()
00175 {
00176     iListenMethod->CancelMethod();
00177 }
00178 
00180 inline TPVSocketEvent OsclTCPSocketI::Connect(OsclNetworkAddress& aAddress,
00181         int32 aTimeout)
00182 {
00183     if (!iObserver)
00184         return EPVSocketFailure;//socket is logged off.
00185     return (iConnectMethod->Connect(aAddress, aTimeout));
00186 }
00187 
00188 inline void OsclTCPSocketI::CancelConnect()
00189 {
00190     iConnectMethod->CancelMethod();
00191 }
00192 
00194 inline TPVSocketEvent OsclTCPSocketI::Shutdown(TPVSocketShutdown  aHow,
00195         int32 aTimeout)
00196 {
00197     if (!iObserver)
00198         return EPVSocketFailure;//socket is logged off.
00199     return (iShutdownMethod->Shutdown(aHow, aTimeout));
00200 }
00201 
00202 inline void OsclTCPSocketI::CancelShutdown()
00203 {
00204     iShutdownMethod->CancelMethod();
00205 }
00206 
00208 inline TPVSocketEvent OsclTCPSocketI::Accept(int32 aTimeout)
00209 {
00210     if (!iObserver)
00211         return EPVSocketFailure;//socket is logged off.
00212     return (iAcceptMethod->Accept(aTimeout));
00213 }
00214 
00215 inline void OsclTCPSocketI::CancelAccept()
00216 {
00217     iAcceptMethod->CancelMethod();
00218 }
00219 
00221 inline TPVSocketEvent OsclTCPSocketI::Send(const uint8* &aPtr, uint32 aLen,
00222         int32 aTimeoutMsec)
00223 {
00224     if (!iObserver)
00225         return EPVSocketFailure;//socket is logged off.
00226     return (iSendMethod->Send(aPtr, aLen, aTimeoutMsec));
00227 }
00228 
00229 inline void OsclTCPSocketI::CancelSend()
00230 {
00231     iSendMethod->CancelMethod();
00232 }
00233 
00235 inline TPVSocketEvent OsclTCPSocketI::Recv(uint8* &aPtr, uint32 aMaxLen,
00236         int32 aTimeout)
00237 {
00238     if (!iObserver)
00239         return EPVSocketFailure;//socket is logged off.
00240     return (iRecvMethod->Recv(aPtr, aMaxLen, aTimeout));
00241 }
00242 
00243 inline void OsclTCPSocketI::CancelRecv()
00244 {
00245     iRecvMethod->CancelMethod();
00246 }
00247 
00248 #endif
00249 

OSCL API
Posting Version: CORE_8.000.1.1_RC4