summaryrefslogtreecommitdiffabout
path: root/include
authorMichael Krelin <hacker@klever.net>2008-01-21 19:51:23 (UTC)
committer Michael Krelin <hacker@klever.net>2008-01-21 19:51:23 (UTC)
commit2a116bce75236e46946bb9564790c26c6a59b9a4 (patch) (unidiff)
tree27b047f773ea2f37d080c8c9c8f583d345649856 /include
parenteee78b62ac9c4aed629fc47eb2af6615ca17d2e2 (diff)
downloadlibopkele-2a116bce75236e46946bb9564790c26c6a59b9a4.zip
libopkele-2a116bce75236e46946bb9564790c26c6a59b9a4.tar.gz
libopkele-2a116bce75236e46946bb9564790c26c6a59b9a4.tar.bz2
Implement URI construction handling append='qxri' xrd:URI attribute.
This is the right thing to do and may come in handy assisting OPs in improving UI. Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (limited to 'include') (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/discovery.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/include/opkele/discovery.h b/include/opkele/discovery.h
index ab4b9d9..677d7bb 100644
--- a/include/opkele/discovery.h
+++ b/include/opkele/discovery.h
@@ -1,104 +1,112 @@
1#ifndef __OPKELE_DISCOVERY_H 1#ifndef __OPKELE_DISCOVERY_H
2#define __OPKELE_DISCOVERY_H 2#define __OPKELE_DISCOVERY_H
3 3
4#include <string> 4#include <string>
5#include <opkele/types.h> 5#include <opkele/types.h>
6#include <opkele/basic_rp.h> 6#include <opkele/basic_rp.h>
7 7
8namespace opkele { 8namespace opkele {
9 using std::string; 9 using std::string;
10 10
11 namespace xrd { 11 namespace xrd {
12 12
13 struct priority_compare { 13 struct priority_compare {
14 inline bool operator()(long a,long b) const { 14 inline bool operator()(long a,long b) const {
15 return (a<0) ? false : (b<0) ? true : (a<b); 15 return (a<0) ? false : (b<0) ? true : (a<b);
16 } 16 }
17 }; 17 };
18 18
19 template <typename _DT> 19 template <typename _DT>
20 class priority_map : public multimap<long,_DT,priority_compare> { 20 class priority_map : public multimap<long,_DT,priority_compare> {
21 typedef multimap<long,_DT,priority_compare> map_type; 21 typedef multimap<long,_DT,priority_compare> map_type;
22 public: 22 public:
23 23
24 inline _DT& add(long priority,const _DT& d) { 24 inline _DT& add(long priority,const _DT& d) {
25 return insert(typename map_type::value_type(priority,d))->second; 25 return insert(typename map_type::value_type(priority,d))->second;
26 } 26 }
27 27
28 bool has_value(const _DT& d) const { 28 bool has_value(const _DT& d) const {
29 for(typename map_type::const_iterator i=this->begin();i!=this->end();++i) 29 for(typename map_type::const_iterator i=this->begin();i!=this->end();++i)
30 if(i->second==d) return true; 30 if(i->second==d) return true;
31 return false; 31 return false;
32 } 32 }
33 }; 33 };
34 34
35 typedef priority_map<string> canonical_ids_t; 35 typedef priority_map<string> canonical_ids_t;
36 typedef priority_map<string> local_ids_t; 36 typedef priority_map<string> local_ids_t;
37 typedef set<string> types_t; 37 typedef set<string> types_t;
38 typedef priority_map<string> uris_t; 38 struct uri_t {
39 string uri;
40 string append;
41
42 uri_t() { }
43 uri_t(const string& u) : uri(u) { }
44 uri_t(const string& u,const string& a) : uri(u), append(a) { }
45 };
46 typedef priority_map<uri_t> uris_t;
39 47
40 class service_t { 48 class service_t {
41 public: 49 public:
42 types_t types; 50 types_t types;
43 uris_t uris; 51 uris_t uris;
44 local_ids_t local_ids; 52 local_ids_t local_ids;
45 string provider_id; 53 string provider_id;
46 54
47 void clear() { 55 void clear() {
48 types.clear(); 56 types.clear();
49 uris.clear(); local_ids.clear(); 57 uris.clear(); local_ids.clear();
50 provider_id.clear(); 58 provider_id.clear();
51 } 59 }
52 }; 60 };
53 typedef priority_map<service_t> services_t; 61 typedef priority_map<service_t> services_t;
54 62
55 class XRD_t { 63 class XRD_t {
56 public: 64 public:
57 time_t expires; 65 time_t expires;
58 66
59 canonical_ids_t canonical_ids; 67 canonical_ids_t canonical_ids;
60 local_ids_t local_ids; 68 local_ids_t local_ids;
61 services_t services; 69 services_t services;
62 string provider_id; 70 string provider_id;
63 71
64 void clear() { 72 void clear() {
65 expires = 0; 73 expires = 0;
66 canonical_ids.clear(); local_ids.clear(); 74 canonical_ids.clear(); local_ids.clear();
67 services.clear(); 75 services.clear();
68 provider_id.clear(); 76 provider_id.clear();
69 } 77 }
70 bool empty() const { 78 bool empty() const {
71 return 79 return
72 canonical_ids.empty() 80 canonical_ids.empty()
73 && local_ids.empty() 81 && local_ids.empty()
74 && services.empty(); 82 && services.empty();
75 } 83 }
76 84
77 }; 85 };
78 86
79 } 87 }
80 88
81 typedef util::output_iterator_proxy<openid_endpoint_t> 89 typedef util::output_iterator_proxy<openid_endpoint_t>
82 endpoint_discovery_iterator; 90 endpoint_discovery_iterator;
83 91
84 string idiscover( 92 string idiscover(
85 endpoint_discovery_iterator oi, 93 endpoint_discovery_iterator oi,
86 const string& identity); 94 const string& identity);
87 95
88 struct idiscovery_t { 96 struct idiscovery_t {
89 bool xri_identity; 97 bool xri_identity;
90 string normalized_id; 98 string normalized_id;
91 string canonicalized_id; 99 string canonicalized_id;
92 xrd::XRD_t xrd; 100 xrd::XRD_t xrd;
93 101
94 idiscovery_t() { } 102 idiscovery_t() { }
95 103
96 void clear() { 104 void clear() {
97 normalized_id.clear(); canonicalized_id.clear(); 105 normalized_id.clear(); canonicalized_id.clear();
98 xrd.clear(); 106 xrd.clear();
99 } 107 }
100 108
101 }; 109 };
102} 110}
103 111
104#endif /* __OPKELE_DISCOVERY_H */ 112#endif /* __OPKELE_DISCOVERY_H */