Пример #1
0
int normalize_origin(const char *o, char co[U_URI_STRMAX])
{
    u_uri_t *u = NULL;
    const char *scheme, *port;

    dbg_return_if(o == NULL || o[0] == '\0', -1);
    dbg_return_if(co == NULL, -1);

    dbg_err_ifm(u_uri_crumble(o, 0, &u), "%s parse error", o);

    /* Check that scheme is 'coap' or 'coaps'. */
    dbg_err_ifm((scheme = u_uri_get_scheme(u)) == NULL ||
            (strcasecmp(scheme, "coap") && strcasecmp(scheme, "coaps")),
            "bad %s scheme", scheme);

    /* Set default port if empty. */
    if ((port = u_uri_get_port(u)) == NULL || *port == '\0')
        (void) u_uri_set_port(u, EC_COAP_DEFAULT_SPORT);

    dbg_err_ifm(u_uri_knead(u, co), "error normalizing origin (%s)", o);

    u_uri_free(u), u = NULL;

    return 0;
err:
    if (u)
        u_uri_free(u);
    return -1;
}
Пример #2
0
/** 
 *  \brief Parse an URI string and create the corresponding ::u_uri_t object 
 *
 *  Parse the NUL-terminated string \p uri and create an ::u_uri_t object at 
 *  \p *pu 
 *
 *  \param  uri     the NUL-terminated string that must be parsed
 *  \param  opts    bitmask of or'ed ::u_uri_opts_t values
 *  \param  pu      the newly created ::u_uri_t object containing the b
 *
 *  \retval  0  on success
 *  \retval ~0  on error
 */
int u_uri_crumble (const char *uri, u_uri_opts_t opts, u_uri_t **pu)
{
    u_uri_t *u = NULL;
    int rc = 0;
    char es[1024];
    regex_t re;
    regmatch_t pmatch[10];

    dbg_return_if (uri == NULL, ~0);
    dbg_return_if (pu == NULL, ~0);

    dbg_err_if ((rc = regcomp(&re, uri_pat, REG_EXTENDED)));
    dbg_err_if ((rc = regexec(&re, uri, 10, pmatch, 0)));

    dbg_err_if (u_uri_new(opts, &u));
    dbg_err_if (u_uri_fill(u, uri, pmatch));

    regfree(&re);

    *pu = u;

    return 0;
err:
    if (rc)
    {
        regerror(rc, &re, es, sizeof es);
        u_dbg("%s: %s", uri, es);
    }
    regfree(&re);

    if (u)
        u_uri_free(u);

    return ~0;
}
Пример #3
0
/**
 *  \brief  Make room for a new ::u_uri_t object
 *
 *  Make room for a new ::u_uri_t object at \p *pu.  The returned object is 
 *  completely empty: use the needed setter methods to fill it before passing
 *  it to the encoder.
 *
 *  \param  opts    bitmask of or'ed ::u_uri_opts_t values
 *  \param  pu      Reference to an ::u_uri_t that, on success, will point to 
 *                  the newly created object
 *
 *  \retval  0  on success
 *  \retval ~0  on error
 */ 
int u_uri_new (u_uri_opts_t opts, u_uri_t **pu)
{
    u_uri_t *u = NULL;

    dbg_return_if (pu == NULL, ~0);

    dbg_err_sif ((u = u_zalloc(sizeof(u_uri_t))) == NULL);

    u->scheme = NULL;
    u->userinfo = NULL;
    u->user = NULL;
    u->pwd = NULL;
    u->host = NULL;
    u->port = NULL;
    u->authority = NULL;
    u->path = NULL;
    u->query = NULL;
    u->fragment = NULL;
    u->opts = opts;

    *pu = u;

    return 0;
err:
    if (u)
        u_uri_free(u);
    return ~0;
}
Пример #4
0
void
wsmc_add_selector_from_uri(WsXmlDocH doc,
		const char *resource_uri)
{
	u_uri_t        *uri;
	WsXmlNodeH      header = ws_xml_get_soap_header(doc);
	hash_t         *query;
	hnode_t        *hn;
	hscan_t         hs;

	if (resource_uri != NULL) {
		if (u_uri_parse((const char *) resource_uri, &uri) != 0)
			return;
		else if (!uri->query)
			goto cleanup;
	}

	query = u_parse_query(uri->query);
	hash_scan_begin(&hs, query);
	while ((hn = hash_scan_next(&hs))) {
		wsman_add_selector(header,
				(char *) hnode_getkey(hn),
				(char *) hnode_get(hn));
		debug("key=%s value=%s", (char *) hnode_getkey(hn),
				(char *) hnode_get(hn));
	}
	hash_free_nodes(query);
	hash_destroy(query);
cleanup:
	if (uri) {
		u_uri_free(uri);
	}
}
Пример #5
0
static hash_t *
get_selectors_from_uri(const char *resource_uri)
{
	u_uri_t        *uri;
	hash_t *selectors = NULL;
	if (resource_uri != NULL) {
		if (u_uri_parse((const char *) resource_uri, &uri) != 0)
			return NULL;
	} else {
		return NULL;
	}
	if (uri->query != NULL) {
		 selectors = u_parse_query(uri->query);
	}
	if (uri) {
		u_uri_free(uri);
	}
	return selectors;
}