author | Michael Krelin <hacker@klever.net> | 2008-01-21 19:51:23 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2008-01-21 19:51:23 (UTC) |
commit | 2a116bce75236e46946bb9564790c26c6a59b9a4 (patch) (unidiff) | |
tree | 27b047f773ea2f37d080c8c9c8f583d345649856 /include | |
parent | eee78b62ac9c4aed629fc47eb2af6615ca17d2e2 (diff) | |
download | libopkele-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>
-rw-r--r-- | include/opkele/discovery.h | 10 |
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 | |||
@@ -14,49 +14,57 @@ namespace opkele { | |||
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; |