1 /* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18
19
20 #include "oscl_socket.h"
21 #include "oscl_socket_imp.h"
22 #include "oscl_socket_serv_imp.h"
23 #include "oscl_error.h"
24 #include "oscl_udp_socket.h"
25 #include "oscl_tcp_socket.h"
26
27 //Socket server
28
NewL(Oscl_DefAlloc & alloc)29 OSCL_EXPORT_REF OsclSocketServ *OsclSocketServ::NewL(Oscl_DefAlloc &alloc)
30 {
31 OsclAny*p = alloc.ALLOCATE(sizeof(OsclSocketServ));
32 OsclError::LeaveIfNull(p);
33 OsclSocketServ *self = OSCL_PLACEMENT_NEW(p, OsclSocketServ(alloc));
34 OsclError::LeaveIfNull(self);
35 OsclError::PushL(self);
36 self->iServ = OsclSocketServI::NewL(alloc);
37 OsclError::Pop();
38 return self;
39 }
40
~OsclSocketServ()41 OSCL_EXPORT_REF OsclSocketServ::~OsclSocketServ()
42 {
43 if (iServ)
44 {
45 iServ->~OsclSocketServI();
46 iAlloc.deallocate(iServ);
47 }
48 }
49
Connect(uint32 aMessageSlots)50 OSCL_EXPORT_REF int32 OsclSocketServ::Connect(uint32 aMessageSlots)
51 {
52 return (int32)iServ->Connect(aMessageSlots);
53 }
54
Close(bool aCleanup)55 OSCL_EXPORT_REF void OsclSocketServ::Close(bool aCleanup)
56 {
57 iServ->Close(aCleanup);
58 }
59
NewL(Oscl_DefAlloc & alloc,OsclSocketServ & aServ,OsclSocketObserver * aObserver,uint32 aId)60 OSCL_EXPORT_REF OsclUDPSocket *OsclUDPSocket::NewL(Oscl_DefAlloc &alloc,
61 OsclSocketServ& aServ,
62 OsclSocketObserver *aObserver,
63 uint32 aId)
64 {
65 OsclAny* p = alloc.ALLOCATE(sizeof(OsclUDPSocket));
66 OsclError::LeaveIfNull(p);
67 OsclUDPSocket *self = OSCL_PLACEMENT_NEW(p, OsclUDPSocket(alloc));
68 OsclError::LeaveIfNull(self);
69 OsclError::PushL(self);
70 self->iUDPSocket = OsclUDPSocketI::NewL(alloc, aServ.iServ, aObserver, aId);
71 OsclError::Pop();
72 return self;
73 }
74
~OsclUDPSocket()75 OSCL_EXPORT_REF OsclUDPSocket::~OsclUDPSocket()
76 {
77 if (iUDPSocket)
78 {
79 iUDPSocket->~OsclUDPSocketI();
80 iAlloc.deallocate(iUDPSocket);
81 }
82 }
83
Bind(OsclNetworkAddress & aAddress)84 OSCL_EXPORT_REF int32 OsclUDPSocket::Bind(OsclNetworkAddress& aAddress)
85 {
86 return iUDPSocket->Bind(aAddress);
87 }
88
Join(OsclNetworkAddress & aAddress)89 OSCL_EXPORT_REF int32 OsclUDPSocket::Join(OsclNetworkAddress& aAddress)
90 {
91 return iUDPSocket->Join(aAddress);
92 }
93
BindAsync(OsclNetworkAddress & aAddress,int32 aTimeoutMsec)94 OSCL_EXPORT_REF TPVSocketEvent OsclUDPSocket::BindAsync(OsclNetworkAddress& aAddress, int32 aTimeoutMsec)
95 {
96 return iUDPSocket->BindAsync(aAddress, aTimeoutMsec);
97 }
98
CancelBind()99 OSCL_EXPORT_REF void OsclUDPSocket::CancelBind()
100 {
101 iUDPSocket->CancelBind();
102 }
103
Close()104 OSCL_EXPORT_REF int32 OsclUDPSocket::Close()
105 {
106 return iUDPSocket->Close();
107 }
108
GetRecvData(int32 * aLength)109 OSCL_EXPORT_REF uint8 *OsclUDPSocket::GetRecvData(int32 *aLength)
110 {
111 return iUDPSocket->GetRecvData(aLength);
112 }
113
GetSendData(int32 * aLength)114 OSCL_EXPORT_REF uint8 *OsclUDPSocket::GetSendData(int32 *aLength)
115 {
116 return iUDPSocket->GetSendData(aLength);
117 }
118
SendTo(const uint8 * aPtr,uint32 aLen,OsclNetworkAddress & aAddress,int32 aTimeoutMsec)119 OSCL_EXPORT_REF TPVSocketEvent OsclUDPSocket::SendTo(
120 const uint8* aPtr, uint32 aLen,
121 OsclNetworkAddress& aAddress,
122 int32 aTimeoutMsec)
123 {
124 return iUDPSocket->SendTo(aPtr, aLen, aAddress, aTimeoutMsec);
125 }
126
CancelSendTo()127 OSCL_EXPORT_REF void OsclUDPSocket::CancelSendTo()
128 {
129 iUDPSocket->CancelSendTo();
130 }
131
RecvFrom(uint8 * aPtr,uint32 aMaxLen,OsclNetworkAddress & aAddress,int32 aTimeoutMsec,uint32 aMultiMaxLen,Oscl_Vector<uint32,OsclMemAllocator> * aPacketLen,Oscl_Vector<OsclNetworkAddress,OsclMemAllocator> * aPacketSource)132 OSCL_EXPORT_REF TPVSocketEvent OsclUDPSocket::RecvFrom(
133 uint8* aPtr, uint32 aMaxLen,
134 OsclNetworkAddress& aAddress,
135 int32 aTimeoutMsec,
136 uint32 aMultiMaxLen,
137 Oscl_Vector<uint32, OsclMemAllocator>* aPacketLen,
138 Oscl_Vector<OsclNetworkAddress, OsclMemAllocator>* aPacketSource)
139 {
140 return iUDPSocket->RecvFrom(aPtr, aMaxLen, aAddress, aTimeoutMsec, aMultiMaxLen, aPacketLen, aPacketSource);
141 }
142
CancelRecvFrom()143 OSCL_EXPORT_REF void OsclUDPSocket::CancelRecvFrom()
144 {
145 iUDPSocket->CancelRecvFrom();
146 }
147
SetRecvBufferSize(uint32 size)148 OSCL_EXPORT_REF int32 OsclUDPSocket::SetRecvBufferSize(uint32 size)
149 {
150 return iUDPSocket->SetRecvBufferSize(size);
151 }
152
NewL(Oscl_DefAlloc & alloc,OsclSocketServ & aServ,OsclSocketObserver * aObserver,uint32 aId)153 OSCL_EXPORT_REF OsclTCPSocket *OsclTCPSocket::NewL(Oscl_DefAlloc &alloc,
154 OsclSocketServ& aServ,
155 OsclSocketObserver *aObserver,
156 uint32 aId)
157 {
158 OsclAny* p = alloc.ALLOCATE(sizeof(OsclTCPSocket));
159 OsclError::LeaveIfNull(p);
160 OsclTCPSocket *self = OSCL_PLACEMENT_NEW(p, OsclTCPSocket(alloc));
161 OsclError::LeaveIfNull(self);
162 OsclError::PushL(self);
163 {
164 self->iTCPSocket = OsclTCPSocketI::NewL(alloc, aServ.iServ, aObserver, aId);
165 }
166 OsclError::Pop();
167 return self;
168 }
169
NewL(Oscl_DefAlloc & alloc,OsclTCPSocketI * aSocket)170 OsclTCPSocket *OsclTCPSocket::NewL(Oscl_DefAlloc &alloc, OsclTCPSocketI* aSocket)
171 {
172 OsclAny* p = alloc.ALLOCATE(sizeof(OsclTCPSocket));
173 OsclError::LeaveIfNull(p);
174 OsclTCPSocket *self = OSCL_PLACEMENT_NEW(p, OsclTCPSocket(alloc));
175 OsclError::LeaveIfNull(self);
176 OsclError::PushL(self);
177 {
178 if (!aSocket)
179 OsclError::Leave(OsclErrGeneral);
180 self->iTCPSocket = aSocket;
181 }
182 OsclError::Pop();
183 return self;
184 }
185
~OsclTCPSocket()186 OSCL_EXPORT_REF OsclTCPSocket::~OsclTCPSocket()
187 {
188 if (iTCPSocket)
189 {
190 iTCPSocket->~OsclTCPSocketI();
191 iAlloc.deallocate(iTCPSocket);
192 }
193 }
194
Bind(OsclNetworkAddress & aAddress)195 OSCL_EXPORT_REF int32 OsclTCPSocket::Bind(OsclNetworkAddress& aAddress)
196 {
197 return iTCPSocket->Bind(aAddress);
198 }
199
BindAsync(OsclNetworkAddress & aAddress,int32 aTimeoutMsec)200 OSCL_EXPORT_REF TPVSocketEvent OsclTCPSocket::BindAsync(OsclNetworkAddress& aAddress, int32 aTimeoutMsec)
201 {
202 return iTCPSocket->BindAsync(aAddress, aTimeoutMsec);
203 }
204
CancelBind()205 OSCL_EXPORT_REF void OsclTCPSocket::CancelBind()
206 {
207 iTCPSocket->CancelBind();
208 }
209
Close()210 OSCL_EXPORT_REF int32 OsclTCPSocket::Close()
211 {
212 return iTCPSocket->Close();
213 }
214
Listen(int32 aQueueSize)215 OSCL_EXPORT_REF int32 OsclTCPSocket::Listen(int32 aQueueSize)
216 {
217 return iTCPSocket->Listen(aQueueSize);
218 }
219
ListenAsync(int32 qsize,int32 aTimeoutMsec)220 OSCL_EXPORT_REF TPVSocketEvent OsclTCPSocket::ListenAsync(int32 qsize, int32 aTimeoutMsec)
221 {
222 return iTCPSocket->ListenAsync(qsize, aTimeoutMsec);
223 }
224
CancelListen()225 OSCL_EXPORT_REF void OsclTCPSocket::CancelListen()
226 {
227 iTCPSocket->CancelListen();
228 }
229
GetAcceptedSocketL(uint32 aId)230 OSCL_EXPORT_REF OsclTCPSocket *OsclTCPSocket::GetAcceptedSocketL(uint32 aId)
231 {
232 return OsclTCPSocket::NewL(iAlloc, iTCPSocket->GetAcceptedSocketL(aId));
233 }
234
GetRecvData(int32 * aLength)235 OSCL_EXPORT_REF uint8 *OsclTCPSocket::GetRecvData(int32 *aLength)
236 {
237 return iTCPSocket->GetRecvData(aLength);
238 }
239
GetSendData(int32 * aLength)240 OSCL_EXPORT_REF uint8 *OsclTCPSocket::GetSendData(int32 *aLength)
241 {
242 return iTCPSocket->GetSendData(aLength);
243 }
244
Connect(OsclNetworkAddress & aAddress,int32 aTimeoutMsec)245 OSCL_EXPORT_REF TPVSocketEvent OsclTCPSocket::Connect(OsclNetworkAddress& aAddress,
246 int32 aTimeoutMsec)
247 {
248 return iTCPSocket->Connect(aAddress, aTimeoutMsec);
249 }
250
CancelConnect()251 OSCL_EXPORT_REF void OsclTCPSocket::CancelConnect()
252 {
253 iTCPSocket->CancelConnect();
254 }
255
Shutdown(TPVSocketShutdown aHow,int32 aTimeoutMsec)256 OSCL_EXPORT_REF TPVSocketEvent OsclTCPSocket::Shutdown(TPVSocketShutdown aHow,
257 int32 aTimeoutMsec)
258 {
259 return iTCPSocket->Shutdown(aHow, aTimeoutMsec);
260 }
261
CancelShutdown()262 OSCL_EXPORT_REF void OsclTCPSocket::CancelShutdown()
263 {
264 iTCPSocket->CancelShutdown();
265 }
266
Accept(int32 aTimeout)267 OSCL_EXPORT_REF TPVSocketEvent OsclTCPSocket::Accept(int32 aTimeout)
268 {
269 return iTCPSocket->Accept(aTimeout);
270 }
271
CancelAccept()272 OSCL_EXPORT_REF void OsclTCPSocket::CancelAccept()
273 {
274 iTCPSocket->CancelAccept();
275 }
276
Send(const uint8 * aPtr,uint32 aLen,int32 aTimeoutMsec)277 OSCL_EXPORT_REF TPVSocketEvent OsclTCPSocket::Send(
278 const uint8* aPtr, uint32 aLen,
279 int32 aTimeoutMsec)
280 {
281 return iTCPSocket->Send(aPtr, aLen, aTimeoutMsec);
282 }
283
CancelSend()284 OSCL_EXPORT_REF void OsclTCPSocket::CancelSend()
285 {
286 iTCPSocket->CancelSend();
287 }
288
Recv(uint8 * aPtr,uint32 aMaxLen,int32 aTimeoutMsec)289 OSCL_EXPORT_REF TPVSocketEvent OsclTCPSocket::Recv(
290 uint8* aPtr, uint32 aMaxLen,
291 int32 aTimeoutMsec)
292 {
293 return iTCPSocket->Recv(aPtr, aMaxLen, aTimeoutMsec);
294 }
295
CancelRecv()296 OSCL_EXPORT_REF void OsclTCPSocket::CancelRecv()
297 {
298 iTCPSocket->CancelRecv();
299 }
300
301
302
303
304
305