| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../public/fpdf_dataavail.h" | 7 #include "../../public/fpdf_dataavail.h" |
| 8 #include "../include/fsdk_define.h" | 8 #include "../include/fsdk_define.h" |
| 9 | 9 |
| 10 extern void ProcessParseError(FX_DWORD err_code); | 10 extern void ProcessParseError(FX_DWORD err_code); |
| 11 class CFPDF_FileAvailWrap : public IFX_FileAvail | 11 class CFPDF_FileAvailWrap : public IFX_FileAvail { |
| 12 { | 12 public: |
| 13 public: | 13 CFPDF_FileAvailWrap() { m_pfileAvail = NULL; } |
| 14 » CFPDF_FileAvailWrap() | |
| 15 » { | |
| 16 » » m_pfileAvail = NULL; | |
| 17 » } | |
| 18 | 14 |
| 19 » void Set(FX_FILEAVAIL* pfileAvail) | 15 void Set(FX_FILEAVAIL* pfileAvail) { m_pfileAvail = pfileAvail; } |
| 20 » { | |
| 21 » » m_pfileAvail = pfileAvail; | |
| 22 » } | |
| 23 | 16 |
| 24 » virtual FX_BOOL»» » IsDataAvail( FX_FILESIZE offset, FX_DWOR
D size) | 17 virtual FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) { |
| 25 » { | 18 return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size); |
| 26 » » return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size); | 19 } |
| 27 » } | |
| 28 | 20 |
| 29 private: | 21 private: |
| 30 » FX_FILEAVAIL* m_pfileAvail; | 22 FX_FILEAVAIL* m_pfileAvail; |
| 31 }; | 23 }; |
| 32 | 24 |
| 33 class CFPDF_FileAccessWrap : public IFX_FileRead | 25 class CFPDF_FileAccessWrap : public IFX_FileRead { |
| 34 { | 26 public: |
| 35 public: | 27 CFPDF_FileAccessWrap() { m_pFileAccess = NULL; } |
| 36 » CFPDF_FileAccessWrap() | |
| 37 » { | |
| 38 » » m_pFileAccess = NULL; | |
| 39 » } | |
| 40 | 28 |
| 41 » void Set(FPDF_FILEACCESS* pFile) | 29 void Set(FPDF_FILEACCESS* pFile) { m_pFileAccess = pFile; } |
| 42 » { | |
| 43 » » m_pFileAccess = pFile; | |
| 44 » } | |
| 45 | 30 |
| 46 » virtual FX_FILESIZE» » GetSize() | 31 virtual FX_FILESIZE GetSize() { return m_pFileAccess->m_FileLen; } |
| 47 » { | |
| 48 » » return m_pFileAccess->m_FileLen; | |
| 49 » } | |
| 50 | 32 |
| 51 » virtual FX_BOOL»» » ReadBlock(void* buffer, FX_FILESIZE offs
et, size_t size) | 33 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) { |
| 52 » { | 34 return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset, |
| 53 » » return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset,
(uint8_t*)buffer, size); | 35 (uint8_t*)buffer, size); |
| 54 » } | 36 } |
| 55 | 37 |
| 56 » virtual void» » » Release() | 38 virtual void Release() {} |
| 57 » { | |
| 58 » } | |
| 59 | 39 |
| 60 private: | 40 private: |
| 61 » FPDF_FILEACCESS*» » m_pFileAccess; | 41 FPDF_FILEACCESS* m_pFileAccess; |
| 62 }; | 42 }; |
| 63 | 43 |
| 64 class CFPDF_DownloadHintsWrap : public IFX_DownloadHints | 44 class CFPDF_DownloadHintsWrap : public IFX_DownloadHints { |
| 65 { | 45 public: |
| 66 public: | 46 CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints) { |
| 67 » CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints) | 47 m_pDownloadHints = pDownloadHints; |
| 68 » { | 48 } |
| 69 » » m_pDownloadHints = pDownloadHints; | 49 |
| 70 » } | 50 public: |
| 71 public: | 51 virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) { |
| 72 » virtual void» » » AddSegment(FX_FILESIZE offset, FX_DWORD
size) | 52 m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size); |
| 73 » { | 53 } |
| 74 » » m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size); | 54 |
| 75 » } | 55 private: |
| 76 private: | 56 FX_DOWNLOADHINTS* m_pDownloadHints; |
| 77 » FX_DOWNLOADHINTS* m_pDownloadHints; | |
| 78 }; | 57 }; |
| 79 | 58 |
| 80 class CFPDF_DataAvail | 59 class CFPDF_DataAvail { |
| 81 { | 60 public: |
| 82 public: | 61 CFPDF_DataAvail() { m_pDataAvail = NULL; } |
| 83 » CFPDF_DataAvail() | |
| 84 » { | |
| 85 » » m_pDataAvail = NULL; | |
| 86 » } | |
| 87 | 62 |
| 88 » ~CFPDF_DataAvail() | 63 ~CFPDF_DataAvail() { delete m_pDataAvail; } |
| 89 » { | |
| 90 delete m_pDataAvail; | |
| 91 » } | |
| 92 | 64 |
| 93 » IPDF_DataAvail*»» » m_pDataAvail; | 65 IPDF_DataAvail* m_pDataAvail; |
| 94 » CFPDF_FileAvailWrap» » m_FileAvail; | 66 CFPDF_FileAvailWrap m_FileAvail; |
| 95 » CFPDF_FileAccessWrap» m_FileRead; | 67 CFPDF_FileAccessWrap m_FileRead; |
| 96 }; | 68 }; |
| 97 | 69 |
| 98 DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, FPDF_FIL
EACCESS* file) | 70 DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, |
| 99 { | 71 FPDF_FILEACCESS* file) { |
| 100 » CFPDF_DataAvail* pAvail = new CFPDF_DataAvail; | 72 CFPDF_DataAvail* pAvail = new CFPDF_DataAvail; |
| 101 » pAvail->m_FileAvail.Set(file_avail); | 73 pAvail->m_FileAvail.Set(file_avail); |
| 102 » pAvail->m_FileRead.Set(file); | 74 pAvail->m_FileRead.Set(file); |
| 103 » pAvail->m_pDataAvail = IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAv
ail->m_FileRead); | 75 pAvail->m_pDataAvail = |
| 104 » return pAvail; | 76 IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAvail->m_FileRead); |
| 77 return pAvail; |
| 105 } | 78 } |
| 106 | 79 |
| 107 DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail) | 80 DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail) { |
| 108 { | 81 delete (CFPDF_DataAvail*)avail; |
| 109 delete (CFPDF_DataAvail*)avail; | |
| 110 } | 82 } |
| 111 | 83 |
| 112 DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* h
ints) | 84 DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, |
| 113 { | 85 FX_DOWNLOADHINTS* hints) { |
| 114 » if (avail == NULL || hints == NULL) return 0; | 86 if (avail == NULL || hints == NULL) |
| 115 » CFPDF_DownloadHintsWrap hints_wrap(hints); | 87 return 0; |
| 116 » return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap); | 88 CFPDF_DownloadHintsWrap hints_wrap(hints); |
| 89 return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap); |
| 117 } | 90 } |
| 118 | 91 |
| 119 extern void CheckUnSupportError(CPDF_Document * pDoc, FX_DWORD err_code); | 92 extern void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code); |
| 120 | 93 |
| 121 DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail,»FPDF_BYT
ESTRING password) | 94 DLLEXPORT FPDF_DOCUMENT STDCALL |
| 122 { | 95 FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) { |
| 123 » if (avail == NULL) return NULL; | 96 if (avail == NULL) |
| 124 » CPDF_Parser* pParser = new CPDF_Parser; | 97 return NULL; |
| 125 » pParser->SetPassword(password); | 98 CPDF_Parser* pParser = new CPDF_Parser; |
| 99 pParser->SetPassword(password); |
| 126 | 100 |
| 127 » FX_DWORD err_code = pParser->StartAsynParse(((CFPDF_DataAvail*)avail)->m
_pDataAvail->GetFileRead()); | 101 FX_DWORD err_code = pParser->StartAsynParse( |
| 128 » if (err_code) { | 102 ((CFPDF_DataAvail*)avail)->m_pDataAvail->GetFileRead()); |
| 129 » » delete pParser; | 103 if (err_code) { |
| 130 » » ProcessParseError(err_code); | 104 delete pParser; |
| 131 » » return NULL; | 105 ProcessParseError(err_code); |
| 132 » } | 106 return NULL; |
| 133 » ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocumen
t()); | 107 } |
| 134 » CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS); | 108 ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument()); |
| 135 » return pParser->GetDocument(); | 109 CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS); |
| 110 return pParser->GetDocument(); |
| 136 } | 111 } |
| 137 | 112 |
| 138 DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) | 113 DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) { |
| 139 { | 114 if (doc == NULL) |
| 140 » if (doc == NULL) return 0; | 115 return 0; |
| 141 » CPDF_Document* pDoc = (CPDF_Document*)doc; | 116 CPDF_Document* pDoc = (CPDF_Document*)doc; |
| 142 » return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo(); | 117 return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo(); |
| 143 } | 118 } |
| 144 | 119 |
| 145 DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, int page_index, FX
_DOWNLOADHINTS* hints) | 120 DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, |
| 146 { | 121 int page_index, |
| 147 » if (avail == NULL || hints == NULL) return 0; | 122 FX_DOWNLOADHINTS* hints) { |
| 148 » CFPDF_DownloadHintsWrap hints_wrap(hints); | 123 if (avail == NULL || hints == NULL) |
| 149 » return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsPageAvail(page_index,
&hints_wrap); | 124 return 0; |
| 125 CFPDF_DownloadHintsWrap hints_wrap(hints); |
| 126 return ((CFPDF_DataAvail*)avail) |
| 127 ->m_pDataAvail->IsPageAvail(page_index, &hints_wrap); |
| 150 } | 128 } |
| 151 | 129 |
| 152 DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS*
hints) | 130 DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, |
| 153 { | 131 FX_DOWNLOADHINTS* hints) { |
| 154 » if (avail == NULL || hints == NULL) return -1; | 132 if (avail == NULL || hints == NULL) |
| 155 » CFPDF_DownloadHintsWrap hints_wrap(hints); | 133 return -1; |
| 156 » return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap)
; | 134 CFPDF_DownloadHintsWrap hints_wrap(hints); |
| 135 return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap); |
| 157 } | 136 } |
| 158 | 137 |
| 159 DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail) | 138 DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail) { |
| 160 { | 139 if (avail == NULL) |
| 161 » » if (avail == NULL) return -1; | 140 return -1; |
| 162 » return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF(); | 141 return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF(); |
| 163 | |
| 164 } | 142 } |
| OLD | NEW |