diff options
Diffstat (limited to 'include/tools.h')
-rw-r--r-- | include/tools.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/include/tools.h b/include/tools.h new file mode 100644 index 0000000..b12f6be --- /dev/null +++ b/include/tools.h @@ -0,0 +1,162 @@ +/* + * tools.h + * + * Created on: 03.08.2012 + * Author: savop + */ + +#ifndef TOOLS_H_ +#define TOOLS_H_ + +#include <vector> +#include <string> +#include <iostream> +#include <upnp/upnp.h> +#include <string.h> +#include <vdr/tools.h> +#include <map> +#include <list> + +using namespace std; + +#define KB(s) (s * 1024) +#define MB(s) (s * 1024 * 1024) + +#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) + +#define CRLF "\r\n" + +#define NL "\n" + +#define att(s) strchr(s,'@')!=NULL?strchr(s,'@')+1:NULL +#define prop(s) substr(s, 0, strchr(s,'@')-s) + +#define MAX_METADATA_LENGTH 1024 + +/** + * creates a part of a string + * + * This creates a substring of a string which begins at the given offset and has the + * specified lenght. + * + * @return the new string + * @param str the full string + * @param offset the starting index + * @param length the length of the new string + */ +char* substr(const char* str, unsigned int offset, unsigned int length); + +/**************************************************** + * + * Known Errors + * + ****************************************************/ + +/* Errors 401-404, 501 are already defined in + * Intel SDK, however 403 MUST NOT USED. + */ + +/****** 600 Common Action Errors ******/ + +#define UPNP_SOAP_E_ARGUMENT_INVALID 600 +#define UPNP_SOAP_E_ARGUMENT_OUT_OF_RANGE 601 +#define UPNP_SOAP_E_ACTION_NOT_IMPLEMENTED 602 +#define UPNP_SOAP_E_OUT_OF_MEMORY 603 +#define UPNP_SOAP_E_HUMAN_INTERVENTION 604 +#define UPNP_SOAP_E_STRING_TO_LONG 605 +#define UPNP_SOAP_E_NOT_AUTHORIZED 606 +#define UPNP_SOAP_E_SIGNATURE_FAILURE 607 +#define UPNP_SOAP_E_SIGNATURE_MISSING 608 +#define UPNP_SOAP_E_NOT_ENCRYPTED 609 +#define UPNP_SOAP_E_INVALID_SEQUENCE 610 +#define UPNP_SOAP_E_INVALID_CONTROL_URL 611 +#define UPNP_SOAP_E_NO_SUCH_SESSION 612 + +/****** 700 Action specific Errors ******/ + +#define UPNP_CDS_E_NO_SUCH_OBJECT 701 +#define UPNP_CDS_E_INVALID_CURRENT_TAG 702 +#define UPNP_CDS_E_INVALID_NEW_TAG 703 +#define UPNP_CDS_E_REQUIRED_TAG 704 +#define UPNP_CDS_E_READ_ONLY_TAG 705 +#define UPNP_CDS_E_PARAMETER_MISMATCH 706 +#define UPNP_CDS_E_INVALID_SEARCH_CRITERIA 708 +#define UPNP_CDS_E_INVALID_SORT_CRITERIA 709 +#define UPNP_CDS_E_NO_SUCH_CONTAINER 710 +#define UPNP_CDS_E_RESTRICTED_OBJECT 711 +#define UPNP_CDS_E_BAD_METADATA 712 +#define UPNP_CDS_E_RESTRICTED_PARENT 713 +#define UPNP_CDS_E_NO_SUCH_SOURCE_RESOURCE 714 +#define UPNP_CDS_E_RESOURCE_ACCESS_DENIED 715 +#define UPNP_CDS_E_TRANSFER_BUSY 716 +#define UPNP_CDS_E_NO_SUCH_FILE_TRANSFER 717 +#define UPNP_CDS_E_NO_SUCH_DESTINATION_RESOURCE 718 +#define UPNP_CDS_E_DEST_RESOURCE_ACCESS_DENIED 719 +#define UPNP_CDS_E_CANT_PROCESS_REQUEST 720 + +#define UPNP_CMS_E_INCOMPATIBLE_PROTOCOL_INFO 701 +#define UPNP_CMS_E_INCOMPATIBLE_DIRECTIONS 702 +#define UPNP_CMS_E_INSUFFICIENT_RESOURCES 703 +#define UPNP_CMS_E_LOCAL_RESTRICTIONS 704 +#define UPNP_CMS_E_ACCESS_DENIED 705 +#define UPNP_CMS_E_INVALID_CONNECTION_REFERENCE 706 +#define UPNP_CMS_E_NOT_IN_NETWORK 707 + +namespace upnp { + + typedef std::list<std::string> StringList; + typedef std::map<std::string, uint32_t> IdList; + +namespace tools { + string GetAddressByInterface(string Interface); + string GetNetworkInterfaceByIndex(int Index, bool skipLoop); + vector<string> GetNetworkInterfaces(bool skipLoop); + + string ToString(long number); + + string StringListToCSV(StringList list); + string IdListToCSV(IdList list); + + string GenerateUUIDFromURL(string url); + string GenerateUUIDRandomly(); +} + +namespace ixml { + void XmlEscapeSpecialChars(string& doc); + /** + * First occurance of item + * + * Finds the first occurance of a specified item in a given \bc IXML document and returns its value. + * If an error occures, its code is stored in the last parameter \c 'error'. + * + * @return error the error code in case of an error + * @param doc the \c IXML document to be parsed + * @param item the item which shall be found + * @param the value of the item + */ + int IxmlGetFirstDocumentItem( IN IXML_Document * doc, IN const string item, string& value ); + /** + * Adds a property + * + * This adds a UPnP property to an \bc IXML document. + * The property must have the pattern "namespace:property@attribute". + * + * @return returns + * - \bc NULL, in case of an error + * - \bc the newly created property node or the node at which the attribute was + * appended to + * @param document the \c IXML document to put the parameter in + * @param node the specific node where to put the parameter + * @param upnpproperty the upnp property + * @param value the value of the upnp property + */ + IXML_Element* IxmlAddProperty(IN IXML_Document* document, IN IXML_Element* node, IN const char* upnpproperty, IN const char* value ); + + IXML_Element* IxmlAddFilteredProperty(IN cStringList* Filter, IN IXML_Document* document, IN IXML_Element* node, IN const char* upnpproperty, IN const char* value ); + + IXML_Element* IxmlReplaceProperty(IN IXML_Document* document, IN IXML_Element* node, IN const char* upnpproperty, IN const char* newValue ); +} + +} + +#endif /* TOOLS_H_ */ |