Home | History | Annotate | Download | only in src
      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 #ifndef PVDL_CONFIG_FILE_H
     19 #define PVDL_CONFIG_FILE_H
     20 
     21 #ifndef OSCL_MEM_H_INCLUDED
     22 #include "oscl_mem.h"
     23 #endif
     24 #ifndef OSCL_FILE_IO_H_INCLUDED
     25 #include "oscl_file_io.h"
     26 #endif
     27 #ifndef OSCLCONFIG_IO_H_INCLUDED
     28 #include "osclconfig_io.h"
     29 #endif
     30 #ifndef PVLOGGER_H_INCLUDED
     31 #include "pvlogger.h"
     32 #endif
     33 #ifndef OSCL_STRING_H_INCLUDED
     34 #include "oscl_string.h"
     35 #endif
     36 #ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
     37 #include "oscl_string_containers.h"
     38 #endif
     39 
     40 class PVDlCfgFile
     41 {
     42     public:
     43 
     44         enum LoadConfigStatus
     45         {
     46             LoadConfigStatus_NoError = 0,
     47             LoadConfigStatus_CriticalError = -1, // object creation failure, open file failure
     48             LoadConfigStatus_NonCriticalError = -2 // read failure, url mismatch, headers unavailable
     49         };
     50 
     51         OSCL_IMPORT_REF PVDlCfgFile();
     52         OSCL_IMPORT_REF virtual ~PVDlCfgFile();
     53 
     54         void SetConfigFileName(OSCL_wString &aFileName)
     55         {
     56             iConfigFileName = aFileName;
     57         };
     58         OSCL_IMPORT_REF int32 LoadConfig(void);
     59         OSCL_IMPORT_REF bool SaveConfig(void);
     60 
     61         OSCL_IMPORT_REF void SetDownloadType(bool aIsFastTrack);
     62         OSCL_IMPORT_REF bool IsFastTrack(void);
     63 
     64         OSCL_IMPORT_REF void SetDonwloadComplete(void);
     65         OSCL_IMPORT_REF bool IsDownloadComplete(void);
     66 
     67         enum TPVDLPlaybackMode
     68         {
     69             EPVDL_ASAP = 0,
     70             EPVDL_PLAYBACK_AFTER_DOWNLOAD,
     71             EPVDL_DOWNLOAD_ONLY
     72         };
     73         OSCL_IMPORT_REF void SetPlaybackMode(TPVDLPlaybackMode aPlaybackMode);
     74         OSCL_IMPORT_REF TPVDLPlaybackMode GetPlaybackMode(void);
     75 
     76         void SetUrl(OSCL_String &aUrl)
     77         {
     78             iUrl = aUrl;
     79         };
     80         OSCL_String& GetUrl(void)
     81         {
     82             return iUrl;
     83         };
     84 
     85         void SetProxyName(OSCL_String &aProxyName)
     86         {
     87             iProxyName = aProxyName;
     88         };
     89         OSCL_String& GetProxyName(void)
     90         {
     91             return iProxyName;
     92         };
     93 
     94         void SetProxyPort(uint32 aProxyPort)
     95         {
     96             iProxyPort = aProxyPort;
     97         };
     98         uint32 GetProxyPort(void)
     99         {
    100             return iProxyPort;
    101         };
    102 
    103         void SetMaxAllowedFileSize(uint32 aFileSize)
    104         {
    105             iMaxAllowedFileSize = aFileSize;
    106         };
    107         uint32 GetMaxAllowedFileSize(void)
    108         {
    109             return iMaxAllowedFileSize;
    110         };
    111 
    112         void SetOverallFileSize(uint32 aFileSize)
    113         {
    114             iOverallFileSize = aFileSize;
    115         };
    116         uint32 GetOverallFileSize(void)
    117         {
    118             return iOverallFileSize;
    119         };
    120 
    121         void SetCurrentFileSize(uint32 aFileSize)
    122         {
    123             iCurrentFileSize = aFileSize;
    124         };
    125         uint32 GetCurrentFileSize(void)
    126         {
    127             return iCurrentFileSize;
    128         };
    129 
    130         void SetNetworkTimeouts(int32 aConnectTimeout, int32 aSendTimeout, int32 aRecvTimeout)
    131         {
    132             iConnectTimeout = aConnectTimeout;
    133             iSendTimeout = aSendTimeout;
    134             iRecvTimeout = aRecvTimeout;
    135         };
    136         void GetNetworkTimeouts(int32 &aConnectTimeout, int32 &aSendTimeout, int32 &aRecvTimeout)
    137         {
    138             aConnectTimeout = iConnectTimeout;
    139             aSendTimeout = iSendTimeout;
    140             aRecvTimeout = iRecvTimeout;
    141         };
    142 
    143         void SetRangeStartTime(uint32 aTimeInMillisec)
    144         {
    145             iRangeStartTime = aTimeInMillisec;
    146         };
    147         uint32 GetRangeStartTime(void)
    148         {
    149             return iRangeStartTime;
    150         };
    151 
    152         void SetSelectedFastTracks(Oscl_Vector<int32, OsclMemAllocator>& aSelectedTrackIDs)
    153         {
    154             iSelectedTrackIDs = aSelectedTrackIDs;
    155         }
    156         Oscl_Vector<int32, OsclMemAllocator>& GetSelectedFastTracks(void)
    157         {
    158             return iSelectedTrackIDs;
    159         }
    160 
    161         void SetPlayerVersion(OSCL_String &aPlayerVersion)
    162         {
    163             iPlayerVersion = aPlayerVersion;
    164         };
    165 
    166         void SetUserAgent(OSCL_String &aUserAgent)
    167         {
    168             iUserAgent = aUserAgent;
    169         };
    170         OSCL_String& GetUserAgent(void)
    171         {
    172             return iUserAgent;
    173         };
    174 
    175         void SetUserNetwork(OSCL_String &aUserNetwork)
    176         {
    177             iUserNetwork = aUserNetwork;
    178         };
    179         OSCL_String& GetUserNetwork(void)
    180         {
    181             return iUserNetwork;
    182         };
    183 
    184         void SetDeviceInfo(OSCL_String &aDeviceInfo)
    185         {
    186             iDeviceInfo = aDeviceInfo;
    187         };
    188         OSCL_String& GetDeviceInfo(void)
    189         {
    190             return iDeviceInfo;
    191         };
    192 
    193         void SetUserId(OSCL_String &aUserId)
    194         {
    195             iUserId = aUserId;
    196         };
    197         OSCL_String& GetUserId(void)
    198         {
    199             return iUserId;
    200         };
    201 
    202         void SetUserAuth(OSCL_String &aUserAuth)
    203         {
    204             iUserAuth = aUserAuth;
    205         };
    206         OSCL_String& GetUserAuth(void)
    207         {
    208             return iUserAuth;
    209         };
    210 
    211         void SetExpiration(OSCL_String &aExpiration)
    212         {
    213             iExpiration = aExpiration;
    214         };
    215         OSCL_String& GetExpiration(void)
    216         {
    217             return iExpiration;
    218         };
    219 
    220         void SetAppString(OSCL_String &aAppString)
    221         {
    222             iAppString = aAppString;
    223         };
    224         OSCL_String& GetAppString(void)
    225         {
    226             return iAppString;
    227         };
    228 
    229         void SetFiller(OSCL_String &aFiller)
    230         {
    231             iFiller = aFiller;
    232         };
    233         OSCL_String& GetFiller(void)
    234         {
    235             return iFiller;
    236         };
    237 
    238         void SetSign(OSCL_String &aSign)
    239         {
    240             iSign = aSign;
    241         };
    242         OSCL_String& GetSign(void)
    243         {
    244             return iSign;
    245         };
    246 
    247         void SetUnmodifiedDateStart(OSCL_String &aDate)
    248         {
    249             iUnmodifiedDateStart = aDate;
    250         };
    251         OSCL_String& GetUnmodifiedDateStart(void)
    252         {
    253             return iUnmodifiedDateStart;
    254         };
    255 
    256         void setHttpVersion(uint32 aVersion)
    257         {
    258             iHttpVersionNum = aVersion;
    259         }
    260         uint32 getHttpVersion()
    261         {
    262             return iHttpVersionNum;
    263         }
    264 
    265         //for integratity check and also argument passing
    266         void SetDownloadFileName(OSCL_wString &aFileName)
    267         {
    268             iDownloadFileName = aFileName;
    269         };
    270         OSCL_wString& GetDownloadFileName(void)
    271         {
    272             return iDownloadFileName;
    273         };
    274         OSCL_IMPORT_REF bool Validate();
    275         bool IsNewSession(void)
    276         {
    277             return bIsNewSession;
    278         };
    279         void SetNewSession(const bool aNewSession = true)
    280         {
    281             bIsNewSession = aNewSession;
    282         }
    283 
    284         bool HasContentLength() const
    285         {
    286             return (iHasContentLength > 0);
    287         }
    288         void setHasContentLengthFlag(const bool aHasContentLength = true)
    289         {
    290             iHasContentLength = (uint32)aHasContentLength;
    291         }
    292 
    293         void SetExtensionHeaderKey(OSCL_String &aKey)
    294         {
    295             OSCL_HeapString<OsclMemAllocator> fieldKey(aKey);
    296             int32 err = 0;
    297             OSCL_TRY(err, iExtensionHeaderKeys.push_back(fieldKey););
    298         }
    299         void SetExtensionHeaderValue(OSCL_String &aValue)
    300         {
    301             OSCL_HeapString<OsclMemAllocator> fieldValue(aValue);
    302             int32 err = 0;
    303             OSCL_TRY(err, iExtensionHeaderValues.push_back(fieldValue););
    304         }
    305         void SetHTTPMethodMaskForExtensionHeader(const uint32 bitMask)
    306         {
    307             int32 err = 0;
    308             OSCL_TRY(err, iMethodMaskForExtensionHeaders.push_back(bitMask););
    309         }
    310         void SetExtensionHeaderPurgeOnRediect(const bool aPurgeOnRedirect = true)
    311         {
    312             int32 err = 0;
    313             OSCL_TRY(err, iExtensionHeadersPurgeOnRedirect.push_back(aPurgeOnRedirect););
    314         }
    315         Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> &getExtensionHeaderKeys()
    316         {
    317             return iExtensionHeaderKeys;
    318         }
    319         Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> &getExtensionHeaderValues()
    320         {
    321             return iExtensionHeaderValues;
    322         }
    323         Oscl_Vector<uint32, OsclMemAllocator> &getHTTPMethodMasksForExtensionHeader()
    324         {
    325             return iMethodMaskForExtensionHeaders;
    326         }
    327         Oscl_Vector<bool, OsclMemAllocator> &getExtensionHeadersPurgeOnRedirect()
    328         {
    329             return iExtensionHeadersPurgeOnRedirect;
    330         }
    331 
    332         // flag of disabling HTTP HEAD request
    333         void setHttpHeadRequestDisabled(const bool aDisableHeadRequest = true)
    334         {
    335             iDisableHeadRequest = aDisableHeadRequest;
    336         }
    337         bool getHttpHeadRequestDisabled() const
    338         {
    339             return iDisableHeadRequest;
    340         }
    341 
    342 
    343     private:
    344         void composeFixedHeader(uint8 *aBuf);
    345 
    346     private:
    347         uint8 *iTmpBuf;
    348 
    349         Oscl_FileServer iFileServer;
    350         Oscl_File   *iFile;
    351 
    352         //memory allocator type for this node.
    353         typedef OsclMemAllocator PVDlCfgFileAllocator;
    354 
    355         OSCL_wHeapString<PVDlCfgFileAllocator> iConfigFileName;
    356         OSCL_wHeapString<PVDlCfgFileAllocator> iDownloadFileName;
    357 
    358         OSCL_HeapString<PVDlCfgFileAllocator> iUrl;
    359         //if proxy is in use, it is the proxy address
    360         OSCL_HeapString<PVDlCfgFileAllocator> iProxyName;
    361         //if proxy is in use, it is the proxy address len
    362         uint32  iProxyPort;
    363 
    364         //client only downloads the clip which is smaller than this size
    365         uint32 iMaxAllowedFileSize;
    366         //the file size after it is completly downloaded.
    367         uint32  iOverallFileSize;
    368         //for FastTrack, this would be the accumulated bytes downloaded
    369         uint32  iCurrentFileSize;
    370         //flag of whether to have content length for the previous download
    371         // boolean variable, but intentionally choose uint32 instead of bool, for consistency with other variables
    372         uint32 iHasContentLength;
    373 
    374         int32 iConnectTimeout;
    375         int32 iSendTimeout;
    376         int32 iRecvTimeout;
    377 
    378         uint32  iRangeStartTime; //in ms
    379 
    380         OSCL_HeapString<PVDlCfgFileAllocator> iPlayerVersion;
    381         OSCL_HeapString<PVDlCfgFileAllocator> iUserAgent;
    382         OSCL_HeapString<PVDlCfgFileAllocator> iUserNetwork;
    383         OSCL_HeapString<PVDlCfgFileAllocator> iDeviceInfo;
    384         OSCL_HeapString<PVDlCfgFileAllocator> iUserId;
    385         OSCL_HeapString<PVDlCfgFileAllocator> iUserAuth;
    386         OSCL_HeapString<PVDlCfgFileAllocator> iExpiration;
    387         OSCL_HeapString<PVDlCfgFileAllocator> iAppString;
    388         OSCL_HeapString<PVDlCfgFileAllocator> iFiller;
    389         OSCL_HeapString<PVDlCfgFileAllocator> iSign;
    390         OSCL_HeapString<PVDlCfgFileAllocator> iUnmodifiedDateStart;
    391 
    392         Oscl_Vector<int32, PVDlCfgFileAllocator> iSelectedTrackIDs;
    393 
    394         const uint32 iMagic32;
    395         const uint32 iVersion;
    396         uint32  iFlag;
    397         const uint32 iTotalFixedHeaderSize; //bytes from iMagic32 to iSignLen in bytes
    398         const uint32 PVDL_CFG_FILE_CACHE_BUF;
    399         PVLogger* iLogger;
    400         bool bIsNewSession;
    401         uint32 iHttpVersionNum;
    402 
    403         Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> iExtensionHeaderKeys;
    404         Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> iExtensionHeaderValues;
    405         Oscl_Vector<uint32, OsclMemAllocator> iMethodMaskForExtensionHeaders; // bit 0 = 1 => HTTP GET method
    406         // bit 1 = 1 => HTTP POST method
    407         Oscl_Vector<bool, OsclMemAllocator> iExtensionHeadersPurgeOnRedirect;
    408         bool iDisableHeadRequest;
    409 };
    410 
    411 #endif //#ifndef PVDL_CONFIG_FILE_H
    412 
    413