/** @file */ /** @brief File description for doxygen missing. FIXME */ // This file is under GNU General Public License 3.0 // see LICENSE.txt #include "pEp_internal.h" #include "resource_id.h" pEp_rid_list_t* new_rid_node(pEp_resource_id_type type, const char* resource) { assert(resource); if (!resource) return NULL; pEp_rid_list_t* retval = (pEp_rid_list_t*)calloc(1, sizeof(pEp_rid_list_t)); assert(retval); if (!retval) return NULL; retval->rid_type = type; retval->rid = strdup(resource); assert(retval->rid); if (!retval->rid) { free(retval); return NULL; } return retval; } void free_rid_list(pEp_rid_list_t* list) { while (list) { pEp_rid_list_t* nextptr = list->next; free(list->rid); free(list); list = nextptr; } } const char* get_resource_ptr_noown(const char* uri) { char* uri_delim = strstr(uri, "://"); if (!uri_delim) return uri; else return uri_delim + 3; } char* get_resource(char* uri) { const char* resource_ptr = get_resource_ptr_noown(uri); char* resource_str = NULL; if (resource_ptr) resource_str = strdup(resource_ptr); return resource_str; } bool is_file_uri(char* str) { return(!str ? false : strncmp(str, "file://", 7) == 0); } bool is_cid_uri(const char* str) { return(!str ? false : strncmp(str, "cid://", 6) == 0); } pEp_rid_list_t* parse_uri(const char* uri) { if (!uri) return NULL; pEp_resource_id_type type = (is_cid_uri(uri) ? PEP_RID_CID : PEP_RID_FILENAME); const char* resource = get_resource_ptr_noown(uri); return new_rid_node(type, resource); } char* build_uri(const char* uri_prefix, const char* resource) { if (!uri_prefix || !resource) return NULL; const char* delim = "://"; const int delim_len = 3; int prefix_len = strlen(uri_prefix); int resource_len = strlen(resource); int retval_len = prefix_len + delim_len + resource_len; char* retval = calloc(1, retval_len + 1); strlcpy(retval, uri_prefix, retval_len + 1); strlcat(retval, delim, retval_len + 1); strlcat(retval, resource, retval_len + 1); return retval; }