FwdLockConv.h revision fdd65a0fc7df2c878cc601e4c0f4021cb264f051
16cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/*
26cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Copyright (C) 2010 The Android Open Source Project
36cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian *
46cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
56cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * you may not use this file except in compliance with the License.
66cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * You may obtain a copy of the License at
76cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian *
86cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
96cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian *
106cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Unless required by applicable law or agreed to in writing, software
116cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
126cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * See the License for the specific language governing permissions and
146cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * limitations under the License.
156cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian */
166cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
176cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian#ifndef __FWDLOCKCONV_H__
18870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian#define __FWDLOCKCONV_H__
19870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
206cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian#ifdef __cplusplus
21870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopianextern "C" {
22870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian#endif
236cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
24870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian#include <sys/types.h>
25870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
266cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/**
276cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * The size of the data and header signatures combined. The signatures are adjacent to each other in
286cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * the produced output file.
296cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian */
306cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian#define FWD_LOCK_SIGNATURES_SIZE (2 * 20)
316cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
326cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/**
33870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian * Data type for the output from FwdLockConv_ConvertData.
34870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian */
35870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopiantypedef struct FwdLockConv_ConvertData_Output {
36870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    /// The converted data.
37870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    void *pBuffer;
38870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
39870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    /// The size of the converted data.
40870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    size_t numBytes;
41870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
42870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    /// The file position where the error occurred, in the case of a syntax error.
43870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    off64_t errorPos;
44870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian} FwdLockConv_ConvertData_Output_t;
45870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
46870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian/**
47870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian * Data type for the output from FwdLockConv_CloseSession.
48870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian */
49870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopiantypedef struct FwdLockConv_CloseSession_Output {
50870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    /// The final set of signatures.
51870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    unsigned char signatures[FWD_LOCK_SIGNATURES_SIZE];
52870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
53870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    /// The offset in the produced output file where the signatures are located.
548c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian    off64_t fileOffset;
558c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian
568c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian    /// The file position where the error occurred, in the case of a syntax error.
578c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian    off64_t errorPos;
588c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian} FwdLockConv_CloseSession_Output_t;
598c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian
608c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian/**
618c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * Data type for the output from the conversion process.
628c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian */
638c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopiantypedef union FwdLockConv_Output {
648c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian    FwdLockConv_ConvertData_Output_t fromConvertData;
658c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian    FwdLockConv_CloseSession_Output_t fromCloseSession;
668c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian} FwdLockConv_Output_t;
678c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian
688c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian/**
698c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * Data type for the Posix-style read function used by the converter in pull mode.
708c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian *
718c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @param[in] fileDesc The file descriptor of a file opened for reading.
728c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @param[out] pBuffer A reference to the buffer that should receive the read data.
738c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @param[in] numBytes The number of bytes to read.
748c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian *
758c12c7aec3fdbccfa8161c2c12131d590a9b5ce8Mathias Agopian * @return The number of bytes read.
766cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @retval -1 Failure.
776cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian */
786cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopiantypedef ssize_t FwdLockConv_ReadFunc_t(int fileDesc, void *pBuffer, size_t numBytes);
79870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
806cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/**
816cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Data type for the Posix-style write function used by the converter in pull mode.
826cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian *
836cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @param[in] fileDesc The file descriptor of a file opened for writing.
8442db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian * @param[in] pBuffer A reference to the buffer containing the data to be written.
8542db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian * @param[in] numBytes The number of bytes to write.
8642db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian *
876cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @return The number of bytes written.
886cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * @retval -1 Failure.
89870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian */
906cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopiantypedef ssize_t FwdLockConv_WriteFunc_t(int fileDesc, const void *pBuffer, size_t numBytes);
91f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian
926cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian/**
936cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian * Data type for the Posix-style lseek function used by the converter in pull mode.
94f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian *
95f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @param[in] fileDesc The file descriptor of a file opened for writing.
96f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @param[in] offset The offset with which to update the file position.
97f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @param[in] whence One of SEEK_SET, SEEK_CUR, and SEEK_END.
98f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian *
99870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian * @return The new file position.
100f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * @retval ((off64_t)-1) Failure.
101f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian */
102f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopiantypedef off64_t FwdLockConv_LSeekFunc_t(int fileDesc, off64_t offset, int whence);
103f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian
104f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian/**
105f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian * The status codes returned by the converter functions.
106d5ea3db6a3049d6b66a619be08002e90aa38f99fMathias Agopian */
1076cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopiantypedef enum FwdLockConv_Status {
1086cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// The operation was successful.
109f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian    FwdLockConv_Status_OK = 0,
1106cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
111f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian    /// An actual argument to the function is invalid (a program error on the caller's part).
112870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    FwdLockConv_Status_InvalidArgument = 1,
113f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian
114f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian    /// There is not enough free dynamic memory to complete the operation.
115f9606df42b7b43a6eaa4abd989fef4b7c27a6eaeMathias Agopian    FwdLockConv_Status_OutOfMemory = 2,
1166cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
1176cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// An error occurred while opening the input file.
1186cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    FwdLockConv_Status_FileNotFound = 3,
1196cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
1206cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// An error occurred while creating the output file.
1216cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    FwdLockConv_Status_FileCreationFailed = 4,
1226cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
1236cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// An error occurred while reading from the input file.
1246cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    FwdLockConv_Status_FileReadError = 5,
1256cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
1266cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// An error occurred while writing to the output file.
1276cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    FwdLockConv_Status_FileWriteError = 6,
1286cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
129870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    /// An error occurred while seeking to a new file position within the output file.
13042db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian    FwdLockConv_Status_FileSeekError = 7,
13142db9dcea2e6b9f60f07a3e9e2d6fbc196082284Mathias Agopian
132870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    /// The input file is not a syntactically correct OMA DRM v1 Forward Lock file.
1336cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    FwdLockConv_Status_SyntaxError = 8,
1346cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
1356cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// Support for this DRM file format has been disabled in the current product configuration.
1366cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    FwdLockConv_Status_UnsupportedFileFormat = 9,
1376cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
1386cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// The content transfer encoding is not one of "binary", "base64", "7bit", or "8bit"
1396cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// (case-insensitive).
1406cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    FwdLockConv_Status_UnsupportedContentTransferEncoding = 10,
1416cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian
1426cf50a770dabd13cf5b72bb0a6fb9dd002c88db6Mathias Agopian    /// The generation of a random number failed.
143870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian    FwdLockConv_Status_RandomNumberGenerationFailed = 11,
144870b8aa15cb5c722b5d8eb7726eaa5f1a7c23d69Mathias Agopian
145    /// Key encryption failed.
146    FwdLockConv_Status_KeyEncryptionFailed = 12,
147
148    /// The calculation of a keyed hash for integrity protection failed.
149    FwdLockConv_Status_IntegrityProtectionFailed = 13,
150
151    /// There are too many ongoing sessions for another one to be opened.
152    FwdLockConv_Status_TooManySessions = 14,
153
154    /// An unexpected error occurred.
155    FwdLockConv_Status_ProgramError = 15
156} FwdLockConv_Status_t;
157
158/**
159 * Opens a session for converting an OMA DRM v1 Forward Lock file to the internal Forward Lock file
160 * format.
161 *
162 * @param[out] pSessionId The session ID.
163 * @param[out] pOutput The output from the conversion process (initialized).
164 *
165 * @return A status code.
166 * @retval FwdLockConv_Status_OK
167 * @retval FwdLockConv_Status_InvalidArgument
168 * @retval FwdLockConv_Status_TooManySessions
169 */
170FwdLockConv_Status_t FwdLockConv_OpenSession(int *pSessionId, FwdLockConv_Output_t *pOutput);
171
172/**
173 * Supplies the converter with data to convert. The caller is expected to write the converted data
174 * to file. Can be called an arbitrary number of times.
175 *
176 * @param[in] sessionId The session ID.
177 * @param[in] pBuffer A reference to a buffer containing the data to convert.
178 * @param[in] numBytes The number of bytes to convert.
179 * @param[in,out] pOutput The output from the conversion process (allocated/reallocated).
180 *
181 * @return A status code.
182 * @retval FwdLockConv_Status_OK
183 * @retval FwdLockConv_Status_InvalidArgument
184 * @retval FwdLockConv_Status_OutOfMemory
185 * @retval FwdLockConv_Status_SyntaxError
186 * @retval FwdLockConv_Status_UnsupportedFileFormat
187 * @retval FwdLockConv_Status_UnsupportedContentTransferEncoding
188 * @retval FwdLockConv_Status_RandomNumberGenerationFailed
189 * @retval FwdLockConv_Status_KeyEncryptionFailed
190 * @retval FwdLockConv_Status_DataEncryptionFailed
191 */
192FwdLockConv_Status_t FwdLockConv_ConvertData(int sessionId,
193                                             const void *pBuffer,
194                                             size_t numBytes,
195                                             FwdLockConv_Output_t *pOutput);
196
197/**
198 * Closes a session for converting an OMA DRM v1 Forward Lock file to the internal Forward Lock
199 * file format. The caller must update the produced output file at the indicated file offset with
200 * the final set of signatures.
201 *
202 * @param[in] sessionId The session ID.
203 * @param[in,out] pOutput The output from the conversion process (deallocated and overwritten).
204 *
205 * @return A status code.
206 * @retval FwdLockConv_Status_OK
207 * @retval FwdLockConv_Status_InvalidArgument
208 * @retval FwdLockConv_Status_OutOfMemory
209 * @retval FwdLockConv_Status_IntegrityProtectionFailed
210 */
211FwdLockConv_Status_t FwdLockConv_CloseSession(int sessionId, FwdLockConv_Output_t *pOutput);
212
213/**
214 * Converts an open OMA DRM v1 Forward Lock file to the internal Forward Lock file format in pull
215 * mode.
216 *
217 * @param[in] inputFileDesc The file descriptor of the open input file.
218 * @param[in] fpReadFunc A reference to a read function that can operate on the open input file.
219 * @param[in] outputFileDesc The file descriptor of the open output file.
220 * @param[in] fpWriteFunc A reference to a write function that can operate on the open output file.
221 * @param[in] fpLSeekFunc A reference to an lseek function that can operate on the open output file.
222 * @param[out] pErrorPos
223 *   The file position where the error occurred, in the case of a syntax error. May be NULL.
224 *
225 * @return A status code.
226 * @retval FwdLockConv_Status_OK
227 * @retval FwdLockConv_Status_InvalidArgument
228 * @retval FwdLockConv_Status_OutOfMemory
229 * @retval FwdLockConv_Status_FileReadError
230 * @retval FwdLockConv_Status_FileWriteError
231 * @retval FwdLockConv_Status_FileSeekError
232 * @retval FwdLockConv_Status_SyntaxError
233 * @retval FwdLockConv_Status_UnsupportedFileFormat
234 * @retval FwdLockConv_Status_UnsupportedContentTransferEncoding
235 * @retval FwdLockConv_Status_RandomNumberGenerationFailed
236 * @retval FwdLockConv_Status_KeyEncryptionFailed
237 * @retval FwdLockConv_Status_DataEncryptionFailed
238 * @retval FwdLockConv_Status_IntegrityProtectionFailed
239 * @retval FwdLockConv_Status_TooManySessions
240 */
241FwdLockConv_Status_t FwdLockConv_ConvertOpenFile(int inputFileDesc,
242                                                 FwdLockConv_ReadFunc_t *fpReadFunc,
243                                                 int outputFileDesc,
244                                                 FwdLockConv_WriteFunc_t *fpWriteFunc,
245                                                 FwdLockConv_LSeekFunc_t *fpLSeekFunc,
246                                                 off64_t *pErrorPos);
247
248/**
249 * Converts an OMA DRM v1 Forward Lock file to the internal Forward Lock file format in pull mode.
250 *
251 * @param[in] pInputFilename A reference to the input filename.
252 * @param[in] pOutputFilename A reference to the output filename.
253 * @param[out] pErrorPos
254 *   The file position where the error occurred, in the case of a syntax error. May be NULL.
255 *
256 * @return A status code.
257 * @retval FwdLockConv_Status_OK
258 * @retval FwdLockConv_Status_InvalidArgument
259 * @retval FwdLockConv_Status_OutOfMemory
260 * @retval FwdLockConv_Status_FileNotFound
261 * @retval FwdLockConv_Status_FileCreationFailed
262 * @retval FwdLockConv_Status_FileReadError
263 * @retval FwdLockConv_Status_FileWriteError
264 * @retval FwdLockConv_Status_FileSeekError
265 * @retval FwdLockConv_Status_SyntaxError
266 * @retval FwdLockConv_Status_UnsupportedFileFormat
267 * @retval FwdLockConv_Status_UnsupportedContentTransferEncoding
268 * @retval FwdLockConv_Status_RandomNumberGenerationFailed
269 * @retval FwdLockConv_Status_KeyEncryptionFailed
270 * @retval FwdLockConv_Status_DataEncryptionFailed
271 * @retval FwdLockConv_Status_IntegrityProtectionFailed
272 * @retval FwdLockConv_Status_TooManySessions
273 */
274FwdLockConv_Status_t FwdLockConv_ConvertFile(const char *pInputFilename,
275                                             const char *pOutputFilename,
276                                             off64_t *pErrorPos);
277
278#ifdef __cplusplus
279}
280#endif
281
282#endif // __FWDLOCKCONV_H__
283