1e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
2e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
4e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  Use of this source code is governed by a BSD-style license
5e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  that can be found in the LICENSE file in the root of the source
6e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  tree. An additional intellectual property rights grant can be found
7e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  in the file PATENTS.  All contributing project authors may
8e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  be found in the AUTHORS file in the root of the source tree.
9e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
10e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
11e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "file_wrapper.h"
15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include <stdio.h>
17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc {
19c55a96383497a772a307b346368133960b02ad03Eric Laurent
20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass FileWrapperImpl : public FileWrapper
21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentpublic:
23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    FileWrapperImpl();
24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    virtual ~FileWrapperImpl();
25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
26c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual int FileName(char* fileNameUTF8,
27c55a96383497a772a307b346368133960b02ad03Eric Laurent                         size_t size) const;
28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    virtual bool Open() const;
30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
31c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual int OpenFile(const char* fileNameUTF8,
32c55a96383497a772a307b346368133960b02ad03Eric Laurent                         bool readOnly,
33c55a96383497a772a307b346368133960b02ad03Eric Laurent                         bool loop = false,
34c55a96383497a772a307b346368133960b02ad03Eric Laurent                         bool text = false);
35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
36c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual int CloseFile();
37c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual int SetMaxFileSize(size_t bytes);
38c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual int Flush();
39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
40c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual int Read(void* buf, int length);
41c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual bool Write(const void *buf, int length);
42c55a96383497a772a307b346368133960b02ad03Eric Laurent    virtual int WriteText(const char* format, ...);
43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    virtual int Rewind();
44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprivate:
46c55a96383497a772a307b346368133960b02ad03Eric Laurent    FILE* _id;
47c55a96383497a772a307b346368133960b02ad03Eric Laurent    bool _open;
48c55a96383497a772a307b346368133960b02ad03Eric Laurent    bool _looping;
49c55a96383497a772a307b346368133960b02ad03Eric Laurent    bool _readOnly;
50c55a96383497a772a307b346368133960b02ad03Eric Laurent    size_t _maxSizeInBytes; // -1 indicates file size limitation is off
51c55a96383497a772a307b346368133960b02ad03Eric Laurent    size_t _sizeInBytes;
52c55a96383497a772a307b346368133960b02ad03Eric Laurent    char _fileNameUTF8[kMaxFileNameSize];
53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent};
54c55a96383497a772a307b346368133960b02ad03Eric Laurent
55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc
56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_FILE_IMPL_H_
58