bool AnalyzeUri() {
size_t i;
size_t n;
HttpStyleUri uri;
if (!uri.Parse(
"HTTP://www.EXAMPLE.com:8081/app/search?"
"q=nintendo&qs=n&form=QBLH&filt=all#fragment"))
return false;
n = uri.GetNumSegment();
for (i = 0; i < n; ++i) {
}
n = uri.GetNumQuery();
for (i = 0; i < n; ++i) {
nlib_printf(
"\"%s\":\"%s\", ", uri.GetQueryKeyValue(i)->first,
uri.GetQueryKeyValue(i)->second);
}
return true;
}
bool ComposeUri() {
HttpStyleUri uri;
if (!uri.SetHost("www.example.com"))
return false;
if (!uri.SetPath("/app/search"))
return false;
if (!uri.AddQuery("q", "nintendo")) return false;
if (!uri.AddQuery("qa", "n")) return false;
if (!uri.AddQuery("form", "QBLH")) return false;
if (!uri.AddQuery("filt", "all")) return false;
if (!uri.SetFragment("fragment")) return false;
char uriText[2048];
if (!uri.ComposeString(uriText))
return false;
return true;
}
bool RelativePath() {
const char base[] = "http://example.com/news/index.html?ref=mynews/test";
const char relative[] = "../js/mylib.js";
Uri relativeUri;
Uri baseUri, resultUri;
if (!baseUri.Parse(base)) return false;
if (!relativeUri.Parse(relative)) return false;
if (!resultUri.AddBaseUri(relativeUri, baseUri)) return false;
char uriText[2048];
if (!resultUri.ComposeString(uriText))
return false;
return true;
}
bool UseUriTemplate() {
UriTemplate templ;
char str[1024];
nlib_printf(
"Template: 'http://example.com/map?{x,y}#{x,hello,y,undef,empty}'\n");
e = templ.SetTemplate("http://example.com/map?{x,y}#{x,hello,y,undef,empty}");
if (e != 0) return false;
e = templ.SetParameter("var", "value");
if (e != 0) return false;
e = templ.SetParameter("hello", "Hello World!");
if (e != 0) return false;
e = templ.SetParameter("empty", "");
if (e != 0) return false;
e = templ.SetParameter("path", "/foo/bar");
if (e != 0) return false;
e = templ.SetParameter("x", "1024");
if (e != 0) return false;
e = templ.SetParameter("y", "768");
if (e != 0) return false;
if (!templ.Resolve(str)) return false;
return true;
}
bool SampleMain(int, char**) {
return AnalyzeUri() && ComposeUri() && RelativePath() && UseUriTemplate();
}
NLIB_MAINFUNC