summaryrefslogtreecommitdiffabout
path: root/lib/discovery.cc
Side-by-side diff
Diffstat (limited to 'lib/discovery.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/discovery.cc29
1 files changed, 22 insertions, 7 deletions
diff --git a/lib/discovery.cc b/lib/discovery.cc
index 93409f4..6e20654 100644
--- a/lib/discovery.cc
+++ b/lib/discovery.cc
@@ -61,2 +61,11 @@ namespace opkele {
}
+ /* TODO: ideally all attributes should be
+ * retrieved in one run */
+ static const char *element_attr(const XML_Char **a, const char *at) {
+ for(;*a;++a)
+ if(!strcasecmp(*(a++),at)) {
+ return *a;
+ }
+ return 0;
+ }
@@ -120,4 +129,3 @@ namespace opkele {
* or whatever... */
- rv = idis.normalized_id = id;
- idis.xri_identity = true;
+ rv = id;
set<string> cids;
@@ -157,2 +165,3 @@ namespace opkele {
idis.canonicalized_id = cid;
+ idis.normalized_id = rv; idis.xri_identity = true;
queue_endpoints(oi,idis,st);
@@ -197,3 +206,2 @@ namespace opkele {
void discover_at(idiscovery_t& idis,const string& url,int xm) {
- DOUT_("Doing discovery at " << url);
CURLcode r = easy_setopt(CURLOPT_URL,url.c_str());
@@ -392,3 +400,5 @@ namespace opkele {
assert(xrd); assert(xrd_service);
- cdata = &(xrd_service->uris.add(element_priority(a),string()));
+ const char *append = element_attr(a,"append");
+ xrd::uri_t& uri = xrd_service->uris.add(element_priority(a),xrd::uri_t("",append?append:""));
+ cdata = &uri.uri;
}else if(is_qelement(n,NSURI_XRD "\tLocalID")
@@ -486,3 +496,3 @@ namespace opkele {
if(rel=="openid.server")
- html_openid1.uris.add(-1,href);
+ html_openid1.uris.add(-1,xrd::uri_t(href));
else if(rel=="openid.delegate")
@@ -490,3 +500,3 @@ namespace opkele {
else if(rel=="openid2.provider")
- html_openid2.uris.add(-1,href);
+ html_openid2.uris.add(-1,xrd::uri_t(href));
else if(rel=="openid2.local_id")
@@ -509,3 +519,8 @@ namespace opkele {
for(xrd::uris_t::const_iterator iu=svc.uris.begin();iu!=svc.uris.end();++iu) {
- ep.uri = iu->second;
+ ep.uri = iu->second.uri;
+ if(id.xri_identity) {
+ if(iu->second.append=="qxri") {
+ ep.uri += id.normalized_id;
+ } /* TODO: else handle other append attribute values */
+ }
if(st->forceid) {