S32 LLUriParser::normalize()
{
	mNormalizedTmp = mTmpScheme;
	if (!mRes)
	{
		mRes = uriNormalizeSyntaxExA(&mUri, URI_NORMALIZE_SCHEME | URI_NORMALIZE_HOST);

		if (!mRes)
		{
			S32 chars_required;
			mRes = uriToStringCharsRequiredA(&mUri, &chars_required);

			if (!mRes)
			{
				chars_required++;
				std::vector<char> label_buf(chars_required);
				mRes = uriToStringA(&label_buf[0], &mUri, chars_required, nullptr);

				if (!mRes)
				{
					mNormalizedUri = &label_buf[mTmpScheme ? 7 : 0];
					mTmpScheme = false;
				}
			}
		}
	}

	if(mTmpScheme)
	{
		mNormalizedUri = mNormalizedUri.substr(7);
		mTmpScheme = false;
	}

	return mRes;
}
struct PP_Var
ppb_url_util_dev_resolve_relative_to_url(struct PP_Var base_url, struct PP_Var relative_string,
                                         struct PP_URLComponents_Dev *components)
{
    reset_components(components);
    struct PP_Var var = PP_MakeNull();

    if (base_url.type != PP_VARTYPE_STRING) {
        trace_warning("%s, base_url is not a string\n", __func__);
        return PP_MakeNull();
    }

    if (relative_string.type != PP_VARTYPE_STRING) {
        trace_warning("%s, relative_string is not a string\n", __func__);
        return PP_MakeNull();
    }

    const char *s_base_url = ppb_var_var_to_utf8(base_url, NULL);
    const char *s_relative_string = ppb_var_var_to_utf8(relative_string, NULL);

    UriParserStateA ups;
    UriUriA uri_base, uri_rel, uri_result;

    ups.uri = &uri_base;
    if (uriParseUriA(&ups, s_base_url) != URI_SUCCESS) {
        trace_warning("%s, can't parse s_base_url\n", __func__);
        goto err_1;
    }

    ups.uri = &uri_rel;
    if (uriParseUriA(&ups, s_relative_string) != URI_SUCCESS) {
        trace_warning("%s, can't parse s_relative_string\n", __func__);
        goto err_2;
    }

    if (uriAddBaseUriA(&uri_result, &uri_rel, &uri_base) != URI_SUCCESS) {
        trace_warning("%s, can't merge base and rel\n", __func__);
        goto err_3;
    }

    int len;
    uriToStringCharsRequiredA(&uri_result, &len);
    len++;
    char *str = malloc(len);
    uriToStringA(str, &uri_result, len, NULL);
    var = ppb_var_var_from_utf8_z(str);
    free(str);

    if (components)
        parse_url_string(str, components);

err_3:  uriFreeUriMembersA(&uri_result);
err_2:  uriFreeUriMembersA(&uri_rel);
err_1:  uriFreeUriMembersA(&uri_base);
    return var;
}
Exemple #3
0
bstring uri_normalize(const char *uri)
{
    int st, origSize, normSize;
    char *normal_str, *cleaned_uri;
    bstring normalized;
    UriParserStateA state;
    UriUriA u;
    state.uri = &u;

    cleaned_uri = malloc((sizeof(char) * strlen(uri)) + 1);
    clean_uri(uri, cleaned_uri);

    /* Parse URI */
    if (uriParseUriA(&state, cleaned_uri) != URI_SUCCESS) {
        free(cleaned_uri);
        uriFreeUriMembersA(&u);
        return bfromcstr("");
    }

    free(cleaned_uri);

    /* Normalize URI */
    st = uriNormalizeSyntaxA(&u);
    if (st != URI_SUCCESS) {
        uriFreeUriMembersA(&u);
        return bfromcstr("");
    }

    origSize = strlen(uri);
    normal_str = malloc(sizeof(char) * origSize + 1);
    if (normal_str == NULL) {
        uriFreeUriMembersA(&u);
        return bfromcstr("");
    }

    st = uriToStringA(normal_str, &u, origSize + 1, &normSize);
    if (st != URI_SUCCESS) {
        uriFreeUriMembersA(&u);
        return bfromcstr("");
    }

    normalized = bfromcstr(normal_str);

    free(normal_str);
    uriFreeUriMembersA(&u);

    return normalized;
}
Exemple #4
0
char const *uri_scope_get_document(UriScope const *u, char *buffer, int chars_required)
{
	UriUriA *uri = uri_scope_get_uri_unsafe(u);

	// we need to re-construct uri without fragment
	// to do that we temporary nullify its pointers
	UriTextRangeA fragment = uri->fragment;
	uri->fragment = (UriTextRangeA){};

	if (URI_SUCCESS != uriToStringA(buffer, uri, chars_required, NULL))
	{
		uri->fragment = fragment;
		return NULL;
	}
	uri->fragment = fragment; // restore fragment
	return buffer;
}
Exemple #5
0
char *uri2string(UriUriA *uri)
{
	char *uri_str = NULL;
	int length = 0;

	if (!uri)
		return NULL;

	if (uriToStringCharsRequiredA(uri, &length) != URI_SUCCESS)
		return NULL;

	if ((uri_str = string_alloc(length)) == NULL)
		return NULL;

	length++;
	if (uriToStringA(uri_str, uri, length, NULL) != URI_SUCCESS) {
		string_free(uri_str);
		return NULL;
	}

	return uri_str;
}