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 #include "pvdl_config_file.h"
19 #include "pvmf_protocolengine_node_tunables.h"
20
21 #define PVDLCONFIGFILE_VECTOR_RESERVE_NUMBER 4
22 #define PVDLCONFIGFILE_TEMPORARY_BUFFER_SIZE 4096
23 #define PVDLCONFIGFILE_FIXED_HEADER_SIZE 100 // 96+4
24 #define PVDLCONFIGFILE_FILE_CACHE_BUFFER_SIZE 1024
25
26
PVDlCfgFile()27 OSCL_EXPORT_REF PVDlCfgFile::PVDlCfgFile()
28 : iTmpBuf(NULL)
29 , iFile(NULL)
30 , iProxyPort(0)
31 , iMaxAllowedFileSize(0)
32 , iOverallFileSize(0)
33 , iCurrentFileSize(0)
34 , iHasContentLength(1)
35 , iConnectTimeout(0)
36 , iSendTimeout(0)
37 , iRecvTimeout(0)
38 , iRangeStartTime(0)
39 , iMagic32(0x4a6a446c)
40 , iVersion(1)
41 , iFlag(0)
42 , iTotalFixedHeaderSize(PVDLCONFIGFILE_FIXED_HEADER_SIZE)
43 , PVDL_CFG_FILE_CACHE_BUF(PVDLCONFIGFILE_FILE_CACHE_BUFFER_SIZE)
44 , iLogger(NULL)
45 , bIsNewSession(true)
46 , iHttpVersionNum(PDL_HTTP_VERSION_NUMBER) // assume 0 => Http 1.0 ; 1 => Http 1.1
47 , iDisableHeadRequest(false)
48 {
49 int32 err;
50 OSCL_TRY(err,
51 iFileServer.Connect();
52 iTmpBuf = OSCL_ARRAY_NEW(uint8, iTotalFixedHeaderSize);
53 iLogger = PVLogger::GetLoggerObject("PVDlCfgFile");
54 iExtensionHeaderKeys.reserve(PVDLCONFIGFILE_VECTOR_RESERVE_NUMBER);
55 iExtensionHeaderValues.reserve(PVDLCONFIGFILE_VECTOR_RESERVE_NUMBER);
56 iMethodMaskForExtensionHeaders.reserve(PVDLCONFIGFILE_VECTOR_RESERVE_NUMBER);
57 iExtensionHeadersPurgeOnRedirect.reserve(PVDLCONFIGFILE_VECTOR_RESERVE_NUMBER);
58 );
59
60 if (err != OsclErrNone)
61 {
62 OSCL_LEAVE(err);
63 }
64 }
65
~PVDlCfgFile()66 OSCL_EXPORT_REF PVDlCfgFile::~PVDlCfgFile()
67 {
68 //SaveConfig();
69
70 if (iTmpBuf)
71 {
72 //OSCL_ARRAY_DELETE(iTmpBuf);
73 OSCL_ARRAY_DELETE(iTmpBuf);
74 iTmpBuf = NULL;
75 }
76
77 if (iFile)
78 {
79 iFile->Flush();
80 iFile->Close();
81 OSCL_DELETE(iFile);
82 iFile = NULL;
83 }
84
85 iFileServer.Close();
86 iExtensionHeaderKeys.clear();
87 iExtensionHeaderValues.clear();
88 iExtensionHeadersPurgeOnRedirect.clear();
89 }
90
SetDownloadType(bool aIsFastTrack)91 OSCL_EXPORT_REF void PVDlCfgFile::SetDownloadType(bool aIsFastTrack)
92 {
93 if (aIsFastTrack)
94 {
95 iFlag |= 0x1;
96 }
97 else
98 {
99 iFlag &= (~0x1);
100 }
101 }
102
IsFastTrack(void)103 OSCL_EXPORT_REF bool PVDlCfgFile::IsFastTrack(void)
104 {
105 return (iFlag & 0x1);
106 }
107
SetDonwloadComplete(void)108 OSCL_EXPORT_REF void PVDlCfgFile::SetDonwloadComplete(void)
109 {
110 iFlag |= 0x2;
111 }
112
SetPlaybackMode(TPVDLPlaybackMode aPlaybackMode)113 OSCL_EXPORT_REF void PVDlCfgFile::SetPlaybackMode(TPVDLPlaybackMode aPlaybackMode)
114 {
115 iFlag &= (~0xC); //clear
116 uint32 playbackModeBit = OSCL_STATIC_CAST(uint32, aPlaybackMode);
117 iFlag |= (playbackModeBit << 2);
118 }
119
GetPlaybackMode(void)120 OSCL_EXPORT_REF PVDlCfgFile::TPVDLPlaybackMode PVDlCfgFile::GetPlaybackMode(void)
121 {
122 return OSCL_STATIC_CAST(TPVDLPlaybackMode, ((iFlag & 0xC) >> 2));
123 }
124
SaveConfig(void)125 OSCL_EXPORT_REF bool PVDlCfgFile::SaveConfig(void)
126 {
127 if (iConfigFileName.get_size() <= 0)
128 {
129 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
130 return false;
131 }
132
133 if (iFile)
134 {
135 iFile->Close();
136 }
137 else
138 {
139 int32 err;
140 OSCL_TRY(err, iFile = OSCL_NEW(Oscl_File, (PVDL_CFG_FILE_CACHE_BUF)););
141 if ((err != OsclErrNone) || (iFile == NULL))
142 {
143 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVDlCfgFile::SaveConfig() OSCL_NEW ERROR. line %d ", __LINE__));
144 return false;
145 }
146 }
147
148 int32 retval = iFile->Open(iConfigFileName.get_cstr(), Oscl_File::MODE_READWRITE | Oscl_File::MODE_BINARY, iFileServer);
149 if (retval)
150 {
151 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
152 return false;
153 }
154
155 //fixed len part
156 composeFixedHeader(iTmpBuf);
157
158 int32 tmpRet = iFile->Write(iTmpBuf, 1, iTotalFixedHeaderSize);
159 if (tmpRet == 0)
160 {
161 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
162 return false;
163 }
164
165 //var len part
166 uint8 *tmpBuf = iTmpBuf;
167 if (iSelectedTrackIDs.size())
168 {
169 for (int32 i = iSelectedTrackIDs.size() - 1; i >= 0; i--)
170 {//Track ID should only use one byte.
171 *tmpBuf++ = OSCL_STATIC_CAST(uint8, iSelectedTrackIDs[i]);
172 }
173 tmpRet = iFile->Write(iTmpBuf, 1, iSelectedTrackIDs.size());
174 if (tmpRet == 0)
175 {
176 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
177 return false;
178 }
179 }
180
181
182 if (iUrl.get_size())
183 {
184 tmpRet = iFile->Write(iUrl.get_str(), 1, iUrl.get_size());
185 if (tmpRet == 0)
186 {
187 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
188 return false;
189 }
190 }
191
192 if (iProxyName.get_size())
193 {
194 tmpRet = iFile->Write(iProxyName.get_str(), 1, iProxyName.get_size());
195 if (tmpRet == 0)
196 {
197 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
198 return false;
199 }
200 }
201
202 if (iPlayerVersion.get_size())
203 {
204 tmpRet = iFile->Write(iPlayerVersion.get_str(), 1, iPlayerVersion.get_size());
205 if (tmpRet == 0)
206 {
207 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
208 return false;
209 }
210 }
211
212 if (iUserAgent.get_size())
213 {
214 tmpRet = iFile->Write(iUserAgent.get_str(), 1, iUserAgent.get_size());
215 if (tmpRet == 0)
216 {
217 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
218 return false;
219 }
220 }
221
222 if (iUserNetwork.get_size())
223 {
224 tmpRet = iFile->Write(iUserNetwork.get_str(), 1, iUserNetwork.get_size());
225 if (tmpRet == 0)
226 {
227 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
228 return false;
229 }
230 }
231
232 if (iDeviceInfo.get_size())
233 {
234 tmpRet = iFile->Write(iDeviceInfo.get_str(), 1, iDeviceInfo.get_size());
235 if (tmpRet == 0)
236 {
237 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
238 return false;
239 }
240 }
241
242 if (iUserId.get_size())
243 {
244 tmpRet = iFile->Write(iUserId.get_str(), 1, iUserId.get_size());
245 if (tmpRet == 0)
246 {
247 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
248 return false;
249 }
250 }
251
252 if (iUserAuth.get_size())
253 {
254 tmpRet = iFile->Write(iUserAuth.get_str(), 1, iUserAuth.get_size());
255 if (tmpRet == 0)
256 {
257 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
258 return false;
259 }
260 }
261
262 if (iExpiration.get_size())
263 {
264 tmpRet = iFile->Write(iExpiration.get_str(), 1, iExpiration.get_size());
265 if (tmpRet == 0)
266 {
267 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
268 return false;
269 }
270 }
271
272 if (iAppString.get_size())
273 {
274 tmpRet = iFile->Write(iAppString.get_str(), 1, iAppString.get_size());
275 if (tmpRet == 0)
276 {
277 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
278 return false;
279 }
280 }
281
282 if (iFiller.get_size())
283 {
284 tmpRet = iFile->Write(iFiller.get_str(), 1, iFiller.get_size());
285 if (tmpRet == 0)
286 {
287 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
288 return false;
289 }
290 }
291
292 if (iSign.get_size())
293 {
294 tmpRet = iFile->Write(iSign.get_str(), 1, iSign.get_size());
295 if (tmpRet == 0)
296 {
297 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::SaveConfig() ERROR. line %d ", __LINE__));
298 return false;
299 }
300 }
301
302 iFile->Flush();
303 return true;
304 }
305
LoadConfig(void)306 OSCL_EXPORT_REF int32 PVDlCfgFile::LoadConfig(void)
307 {
308 bIsNewSession = false;
309
310 if (iConfigFileName.get_size() <= 0)
311 {
312 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
313 return LoadConfigStatus_CriticalError;
314 }
315
316 if (iFile)
317 {
318 iFile->Close();
319 }
320 else
321 {
322 int32 err;
323 OSCL_TRY(err, iFile = OSCL_NEW(Oscl_File, (PVDL_CFG_FILE_CACHE_BUF)););
324 if ((err != OsclErrNone) || (iFile == NULL))
325 {
326 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVDlCfgFile::LoadConfig() OSCL_NEW ERROR. line %d ", __LINE__));
327 return LoadConfigStatus_CriticalError;
328 }
329 }
330
331 int32 retval = iFile->Open(iConfigFileName.get_cstr(), Oscl_File::MODE_READ | Oscl_File::MODE_BINARY, iFileServer);
332 if (retval)
333 {
334 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
335 return LoadConfigStatus_NonCriticalError; // file might not exist yet
336 }
337
338 if (iTotalFixedHeaderSize != iFile->Read(iTmpBuf, 1, iTotalFixedHeaderSize))
339 {
340 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
341 return LoadConfigStatus_NonCriticalError;
342 };
343
344 {
345 uint32 *tmpPtr = OSCL_STATIC_CAST(uint32*, iTmpBuf);
346 if (iMagic32 != *tmpPtr++)
347 {
348 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
349 return LoadConfigStatus_NonCriticalError;
350 }
351 if (iVersion != *tmpPtr++)
352 {
353 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
354 return LoadConfigStatus_NonCriticalError;
355 }
356
357 //flag for download type 3gpp/fasttrack, download complete, and playback modes
358 iFlag = *tmpPtr++;
359 uint32 aUrlLen = *tmpPtr++;
360
361 uint32 aHostNameLen = *tmpPtr++; //if proxy is in use, it is the proxy address len
362 iProxyPort = *tmpPtr++;
363
364 //client only downloads the clip which is smaller than this size
365 uint32 aMaxAllowedFileSize = *tmpPtr++;
366 if (/*iMaxAllowedFileSize==0 && */aMaxAllowedFileSize > 0) iMaxAllowedFileSize = aMaxAllowedFileSize;
367
368 //the file size after it is completly downloaded.
369 iOverallFileSize = *tmpPtr++;
370 //for FastTrack, this would be the accumulated bytes downloaded
371 iCurrentFileSize = *tmpPtr++;
372 if (iOverallFileSize == 0 ||
373 iMaxAllowedFileSize < iOverallFileSize ||
374 iOverallFileSize < iCurrentFileSize)
375 {
376 return LoadConfigStatus_NonCriticalError;
377 }
378 // for content-length flag
379 iHasContentLength = *tmpPtr++;
380
381 iConnectTimeout = *tmpPtr++;
382 iSendTimeout = *tmpPtr++;
383 iRecvTimeout = *tmpPtr++;
384
385 //FastTrack only
386 iRangeStartTime = *tmpPtr++; //in ms
387 uint32 aSelectedTrackIDsSize = *tmpPtr++;
388
389 uint32 aPlayerVersionLen = *tmpPtr++;
390 uint32 aUserAgentLen = *tmpPtr++;
391 uint32 aUserNetworkLen = *tmpPtr++;
392 uint32 aDeviceInfoLen = *tmpPtr++;
393 uint32 aUserIdLen = *tmpPtr++;
394 uint32 aUserAuthLen = *tmpPtr++;
395 uint32 aExpirationLen = *tmpPtr++;
396 uint32 aAppStringLen = *tmpPtr++;
397 uint32 aFillerLen = *tmpPtr++;
398 uint32 aSignLen = *tmpPtr++;
399
400 iSelectedTrackIDs.clear();
401 if (aSelectedTrackIDsSize)
402 {
403 if (aSelectedTrackIDsSize != iFile->Read(iTmpBuf, 1, aSelectedTrackIDsSize))
404 {
405 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
406 return LoadConfigStatus_NonCriticalError;
407 };
408 uint8 *tmpBuf = iTmpBuf;
409 for (int32 i = aSelectedTrackIDsSize - 1; i >= 0; i--)
410 {//Track ID should only use one byte.
411 iSelectedTrackIDs.push_back(*tmpBuf++);
412 }
413 }
414
415 // allocate memory for reading the following string
416 PVDlCfgFileAllocator alloc;
417 uint8 *aTmpBuf = (uint8 *)alloc.allocate(PVDLCONFIGFILE_TEMPORARY_BUFFER_SIZE);
418 if (!aTmpBuf) return LoadConfigStatus_CriticalError;
419
420 if (aUrlLen)
421 {
422 if (aUrlLen != iFile->Read(aTmpBuf, 1, aUrlLen))
423 {
424 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
425 alloc.deallocate(aTmpBuf);
426 return LoadConfigStatus_NonCriticalError;
427 };
428 aTmpBuf[aUrlLen] = 0;
429 if (iUrl.get_size() == 0)
430 iUrl.set(OSCL_STATIC_CAST(char*, aTmpBuf), aUrlLen);
431 else
432 {
433 // new url exists, and need to compare it with the url in config file
434 if (iUrl.get_size() != aUrlLen)
435 {
436 alloc.deallocate(aTmpBuf);
437 return LoadConfigStatus_NonCriticalError;
438 }
439 if (oscl_strcmp(iUrl.get_cstr(), OSCL_STATIC_CAST(char*, aTmpBuf)) != 0)
440 {
441 alloc.deallocate(aTmpBuf);
442 return LoadConfigStatus_NonCriticalError;
443 }
444 }
445 }
446 if (aHostNameLen)
447 {
448 if (aHostNameLen != iFile->Read(aTmpBuf, 1, aHostNameLen))
449 {
450 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
451 alloc.deallocate(aTmpBuf);
452 return LoadConfigStatus_NonCriticalError;
453 };
454 iProxyName.set(OSCL_STATIC_CAST(char*, aTmpBuf), aHostNameLen);
455 }
456 if (aPlayerVersionLen)
457 {
458 if (aPlayerVersionLen != iFile->Read(aTmpBuf, 1, aPlayerVersionLen))
459 {
460 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
461 alloc.deallocate(aTmpBuf);
462 return LoadConfigStatus_NonCriticalError;
463 };
464 iPlayerVersion.set(OSCL_STATIC_CAST(char*, aTmpBuf), aPlayerVersionLen);
465 }
466 if (aUserAgentLen)
467 {
468 if (aUserAgentLen != iFile->Read(aTmpBuf, 1, aUserAgentLen))
469 {
470 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
471 alloc.deallocate(aTmpBuf);
472 return LoadConfigStatus_NonCriticalError;
473 };
474 iUserAgent.set(OSCL_STATIC_CAST(char*, aTmpBuf), aUserAgentLen);
475 }
476 if (aUserNetworkLen)
477 {
478 if (aUserNetworkLen != iFile->Read(aTmpBuf, 1, aUserNetworkLen))
479 {
480 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
481 alloc.deallocate(aTmpBuf);
482 return LoadConfigStatus_NonCriticalError;
483 };
484 iUserNetwork.set(OSCL_STATIC_CAST(char*, aTmpBuf), aUserNetworkLen);
485 }
486 if (aDeviceInfoLen)
487 {
488 if (aDeviceInfoLen != iFile->Read(aTmpBuf, 1, aDeviceInfoLen))
489 {
490 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
491 alloc.deallocate(aTmpBuf);
492 return LoadConfigStatus_NonCriticalError;
493 };
494 iDeviceInfo.set(OSCL_STATIC_CAST(char*, aTmpBuf), aDeviceInfoLen);
495 }
496
497 if (aUserIdLen)
498 {
499 if (aUserIdLen != iFile->Read(aTmpBuf, 1, aUserIdLen))
500 {
501 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
502 alloc.deallocate(aTmpBuf);
503 return LoadConfigStatus_NonCriticalError;
504 };
505 iUserId.set(OSCL_STATIC_CAST(char*, aTmpBuf), aUserIdLen);
506 }
507 if (aUserAuthLen)
508 {
509 if (aUserAuthLen != iFile->Read(aTmpBuf, 1, aUserAuthLen))
510 {
511 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
512 alloc.deallocate(aTmpBuf);
513 return LoadConfigStatus_NonCriticalError;
514 };
515 iUserAuth.set(OSCL_STATIC_CAST(char*, aTmpBuf), aUserAuthLen);
516 }
517 if (aExpirationLen)
518 {
519 if (aExpirationLen != iFile->Read(aTmpBuf, 1, aExpirationLen))
520 {
521 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
522 alloc.deallocate(aTmpBuf);
523 return LoadConfigStatus_NonCriticalError;
524 };
525 iExpiration.set(OSCL_STATIC_CAST(char*, aTmpBuf), aExpirationLen);
526 }
527 if (aAppStringLen)
528 {
529 if (aAppStringLen != iFile->Read(aTmpBuf, 1, aAppStringLen))
530 {
531 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
532 alloc.deallocate(aTmpBuf);
533 return LoadConfigStatus_NonCriticalError;
534 };
535 iAppString.set(OSCL_STATIC_CAST(char*, aTmpBuf), aAppStringLen);
536 }
537 if (aFillerLen)
538 {
539 if (aFillerLen != iFile->Read(aTmpBuf, 1, aFillerLen))
540 {
541 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
542 alloc.deallocate(aTmpBuf);
543 return LoadConfigStatus_NonCriticalError;
544 };
545 iFiller.set(OSCL_STATIC_CAST(char*, aTmpBuf), aFillerLen);
546 }
547 if (aSignLen)
548 {
549 if (aSignLen != iFile->Read(aTmpBuf, 1, aSignLen))
550 {
551 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_ERR, (0, "PVDlCfgFile::LoadConfig() ERROR. line %d ", __LINE__));
552 alloc.deallocate(aTmpBuf);
553 return LoadConfigStatus_NonCriticalError;
554 };
555 iSign.set(OSCL_STATIC_CAST(char*, aTmpBuf), aSignLen);
556 }
557 alloc.deallocate(aTmpBuf);
558 }
559
560 return LoadConfigStatus_NoError;
561 }
562
composeFixedHeader(uint8 * aBuf)563 void PVDlCfgFile::composeFixedHeader(uint8 *aBuf)
564 {
565 uint32 *tmpPtr = OSCL_STATIC_CAST(uint32*, aBuf);
566 *tmpPtr++ = iMagic32;
567 *tmpPtr++ = iVersion;
568
569 //flag for download type 3gpp/fasttrack, download complete, and playback modes
570 *tmpPtr++ = iFlag;
571 *tmpPtr++ = iUrl.get_size();
572 *tmpPtr++ = iProxyName.get_size(); //if proxy is in use, it is the proxy address len
573 *tmpPtr++ = iProxyPort;
574
575 //client only downloads the clip which is smaller than this size
576 *tmpPtr++ = iMaxAllowedFileSize;
577 //the file size after it is completly downloaded.
578 *tmpPtr++ = iOverallFileSize;
579 //for FastTrack, this would be the accumulated bytes downloaded
580 *tmpPtr++ = iCurrentFileSize;
581 // flag of whether to have content length for the previous download
582 *tmpPtr++ = iHasContentLength;
583
584 *tmpPtr++ = iConnectTimeout;
585 *tmpPtr++ = iSendTimeout;
586 *tmpPtr++ = iRecvTimeout;
587
588 //FastTrack only
589 *tmpPtr++ = iRangeStartTime; //in ms
590 *tmpPtr++ = iSelectedTrackIDs.size();
591
592 *tmpPtr++ = iPlayerVersion.get_size();
593 *tmpPtr++ = iUserAgent.get_size();
594 *tmpPtr++ = iUserNetwork.get_size();
595 *tmpPtr++ = iDeviceInfo.get_size();
596 *tmpPtr++ = iUserId.get_size();
597 *tmpPtr++ = iUserAuth.get_size();
598 *tmpPtr++ = iExpiration.get_size();
599 *tmpPtr++ = iAppString.get_size();
600 *tmpPtr++ = iFiller.get_size();
601 *tmpPtr++ = iSign.get_size();
602 }
603
604
605