• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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