+
+ function getXRD($main_service, $main_xrds) {
+ $uri = omb_service_uri($main_service);
+ if (strpos($uri, "#") !== 0) {
+ # FIXME: more rigorous handling of external service definitions
+ return NULL;
+ }
+ $id = substr($uri, 1);
+ $nodes = $main_xrds->allXrdNodes;
+ $parser = $main_xrds->parser;
+ foreach ($nodes as $node) {
+ $attrs = $parser->attributes($node);
+ if (array_key_exists('xml:id', $attrs) &&
+ $attrs['xml:id'] == $id) {
+ # XXX: trick the constructor into thinking this is the only node
+ $bogus_nodes = array($node);
+ return new Auth_Yadis_XRDS($parser, $bogus_nodes);
+ }
+ }
+ return NULL;
+ }
+
+ function addServices($xrd, $types, &$omb) {
+ foreach ($types as $type) {
+ $matches = omb_get_services($xrd, $type);
+ if ($matches) {
+ $omb[$type] = $matches[0];
+ } else {
+ # no match for type
+ return false;
+ }
+ }
+ return true;
+ }
+