Add support for PDF (needs uPDFParser library)
This commit is contained in:
		@@ -21,6 +21,7 @@
 | 
			
		||||
#define _DRMPROCESSORCLIENT_H_
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <bytearray.h>
 | 
			
		||||
 | 
			
		||||
namespace gourou
 | 
			
		||||
{
 | 
			
		||||
@@ -93,11 +94,14 @@ namespace gourou
 | 
			
		||||
	/**
 | 
			
		||||
	 * @brief Send HTTP (GET or POST) request
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param URL            HTTP URL
 | 
			
		||||
	 * @param POSTData       POST data if needed, if not set, a GET request is done
 | 
			
		||||
	 * @param contentType    Optional content type of POST Data
 | 
			
		||||
	 * @param URL             HTTP URL
 | 
			
		||||
	 * @param POSTData        POST data if needed, if not set, a GET request is done
 | 
			
		||||
	 * @param contentType     Optional content type of POST Data
 | 
			
		||||
	 * @param responseHeaders Optional Response headers of HTTP request
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return data of HTTP response
 | 
			
		||||
	 */
 | 
			
		||||
	virtual std::string sendHTTPRequest(const std::string& URL, const std::string& POSTData=std::string(""), const std::string& contentType=std::string("")) = 0;
 | 
			
		||||
	virtual std::string sendHTTPRequest(const std::string& URL, const std::string& POSTData=std::string(""), const std::string& contentType=std::string(""), std::map<std::string, std::string>* responseHeaders=0) = 0;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    class RSAInterface
 | 
			
		||||
@@ -355,6 +359,27 @@ namespace gourou
 | 
			
		||||
	 * @param handler        ZIP file handler
 | 
			
		||||
	 */
 | 
			
		||||
	virtual void zipClose(void* handler) = 0;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @brief Inflate algorithm
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param data           Data to inflate
 | 
			
		||||
	 * @param result         Zipped data
 | 
			
		||||
	 * @param wbits          Window bits value for libz
 | 
			
		||||
	 */
 | 
			
		||||
	virtual void inflate(std::string data, gourou::ByteArray& result,
 | 
			
		||||
			     int wbits=-15) = 0;
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * @brief Deflate algorithm
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param data           Data to deflate
 | 
			
		||||
	 * @param result         Unzipped data
 | 
			
		||||
	 * @param wbits          Window bits value for libz
 | 
			
		||||
	 * @param compressionLevel Compression level for libz
 | 
			
		||||
	 */
 | 
			
		||||
	virtual void deflate(std::string data, gourou::ByteArray& result,
 | 
			
		||||
			     int wbits=-15, int compressionLevel=8) = 0;
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    class DRMProcessorClient: public DigestInterface, public RandomInterface, public HTTPInterface, \
 | 
			
		||||
 
 | 
			
		||||
@@ -53,10 +53,16 @@ namespace gourou
 | 
			
		||||
	 */
 | 
			
		||||
	std::string getDownloadURL();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @brief Return resource value
 | 
			
		||||
	 */
 | 
			
		||||
	std::string getResource();
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
	pugi::xml_node metadatas;
 | 
			
		||||
	pugi::xml_document rights;
 | 
			
		||||
	std::string downloadURL;
 | 
			
		||||
	std::string resource;
 | 
			
		||||
 | 
			
		||||
	void buildRights(const pugi::xml_node& licenseToken, User* user);
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@
 | 
			
		||||
#define ACS_SERVER              "http://adeactivate.adobe.com/adept"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define LIBGOUROU_VERSION       "0.3.2"
 | 
			
		||||
#define LIBGOUROU_VERSION       "0.4"
 | 
			
		||||
 | 
			
		||||
namespace gourou
 | 
			
		||||
{
 | 
			
		||||
@@ -53,6 +53,7 @@ namespace gourou
 | 
			
		||||
 | 
			
		||||
	static const std::string VERSION;
 | 
			
		||||
 | 
			
		||||
	enum ITEM_TYPE { EPUB=0, PDF };
 | 
			
		||||
	/**
 | 
			
		||||
	 * @brief Main constructor. To be used once all is configured (user has signedIn, device is activated)
 | 
			
		||||
	 *
 | 
			
		||||
@@ -80,8 +81,10 @@ namespace gourou
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param item            Item from fulfill() method
 | 
			
		||||
	 * @param path            Output file path 
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return Type of downloaded item
 | 
			
		||||
	 */
 | 
			
		||||
	void download(FulfillmentItem* item, std::string path);
 | 
			
		||||
	ITEM_TYPE download(FulfillmentItem* item, std::string path);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @brief SignIn into ACS Server (required to activate device)
 | 
			
		||||
@@ -130,8 +133,11 @@ namespace gourou
 | 
			
		||||
	 * @param URL            HTTP URL
 | 
			
		||||
	 * @param POSTData       POST data if needed, if not set, a GET request is done
 | 
			
		||||
	 * @param contentType    Optional content type of POST Data
 | 
			
		||||
	 * @param responseHeaders Optional Response headers of HTTP request
 | 
			
		||||
	 *
 | 
			
		||||
	 * @return data of HTTP response
 | 
			
		||||
	 */
 | 
			
		||||
	ByteArray sendRequest(const std::string& URL, const std::string& POSTData=std::string(), const char* contentType=0);
 | 
			
		||||
	ByteArray sendRequest(const std::string& URL, const std::string& POSTData=std::string(), const char* contentType=0, std::map<std::string, std::string>* responseHeaders=0);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @brief Send HTTP POST request to URL with document as POSTData
 | 
			
		||||
 
 | 
			
		||||
@@ -233,6 +233,32 @@ namespace gourou
 | 
			
		||||
        return trim(res);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static inline std::string extractTextElem(const pugi::xml_node& doc, const char* tagName, bool throwOnNull=true)
 | 
			
		||||
    {
 | 
			
		||||
        pugi::xpath_node xpath_node = doc.select_node(tagName);
 | 
			
		||||
 | 
			
		||||
        if (!xpath_node)
 | 
			
		||||
	{
 | 
			
		||||
	    if (throwOnNull)
 | 
			
		||||
		EXCEPTION(GOUROU_TAG_NOT_FOUND, "Tag " << tagName << " not found");
 | 
			
		||||
	    
 | 
			
		||||
            return "";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pugi::xml_node node = xpath_node.node().first_child();
 | 
			
		||||
 | 
			
		||||
	if (!node)
 | 
			
		||||
	{
 | 
			
		||||
	    if (throwOnNull)
 | 
			
		||||
		EXCEPTION(GOUROU_TAG_NOT_FOUND, "Text element for tag " << tagName << " not found");
 | 
			
		||||
	    
 | 
			
		||||
            return "";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	std::string res = node.value();
 | 
			
		||||
        return trim(res);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @brief Append an element to root with a sub text element
 | 
			
		||||
     *
 | 
			
		||||
@@ -267,7 +293,7 @@ namespace gourou
 | 
			
		||||
     */
 | 
			
		||||
    static inline void writeFile(std::string path, ByteArray& data)
 | 
			
		||||
    {
 | 
			
		||||
	writeFile(path, data.data(), data.length());
 | 
			
		||||
	writeFile(path, data.data(), data.length()-1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user