summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2008-03-03 15:57:15 (UTC)
committer Michael Krelin <hacker@klever.net>2008-03-03 15:57:15 (UTC)
commitc28479399ef0fedeb6bf14ec665bb4c427654356 (patch) (side-by-side diff)
treeff1dfe84a54f717772bdb6233a5cbfedb57788d1
parent0182b9dee269f1a8f3fc0794bfdf4a143fa1b5be (diff)
downloadlibopkele-c28479399ef0fedeb6bf14ec665bb4c427654356.zip
libopkele-c28479399ef0fedeb6bf14ec665bb4c427654356.tar.gz
libopkele-c28479399ef0fedeb6bf14ec665bb4c427654356.tar.bz2
introduced base_message class as a base for basic_openid_message
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--include/opkele/types.h42
-rw-r--r--lib/Makefile.am2
-rw-r--r--lib/message.cc (renamed from lib/openid_message.cc)94
3 files changed, 73 insertions, 65 deletions
diff --git a/include/opkele/types.h b/include/opkele/types.h
index ffb9afb..64f165c 100644
--- a/include/opkele/types.h
+++ b/include/opkele/types.h
@@ -120,3 +120,3 @@ namespace opkele {
- class basic_openid_message {
+ class basic_message {
public:
@@ -127,7 +127,7 @@ namespace opkele {
- basic_openid_message() { }
- virtual ~basic_openid_message() { }
- basic_openid_message(const basic_openid_message& x);
- void copy_to(basic_openid_message& x) const;
- void append_to(basic_openid_message& x) const;
+ basic_message() { }
+ virtual ~basic_message() { }
+ basic_message(const basic_message& x);
+ void copy_to(basic_message& x) const;
+ void append_to(basic_message& x) const;
@@ -136,5 +136,2 @@ namespace opkele {
- virtual bool has_ns(const string& uri) const;
- virtual string get_ns(const string& uri) const;
-
virtual fields_iterator fields_begin() const = 0;
@@ -142,5 +139,4 @@ namespace opkele {
- virtual string append_query(const string& url,const char *pfx="openid.") const;
- virtual string query_string(const char *pfx="openid.") const;
-
+ virtual string append_query(const string& url,const char *pfx=0) const;
+ virtual string query_string(const char *pfx=0) const;
@@ -150,2 +146,22 @@ namespace opkele {
+ };
+
+ class basic_openid_message : public basic_message {
+ public:
+ typedef list<string> fields_t;
+ typedef util::forward_iterator_proxy<
+ string,const string&,const string*
+ > fields_iterator;
+
+ basic_openid_message() { }
+ basic_openid_message(const basic_openid_message& x);
+
+ virtual bool has_ns(const string& uri) const;
+ virtual string get_ns(const string& uri) const;
+
+ virtual string append_query(const string& url,const char *pfx="openid.") const {
+ return basic_message::append_query(url,pfx); }
+ virtual string query_string(const char *pfx="openid.") const {
+ return basic_message::query_string(pfx); }
+
virtual void from_keyvalues(const string& kv);
@@ -166,4 +182,2 @@ namespace opkele {
- void copy_to(basic_openid_message& x) const;
-
bool has_field(const string& n) const;
diff --git a/lib/Makefile.am b/lib/Makefile.am
index e8bfbf5..9b25b42 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -30,3 +30,3 @@ libopkele_la_SOURCES = \
basic_rp.cc prequeue_rp.cc \
- openid_message.cc \
+ message.cc \
basic_op.cc verify_op.cc
diff --git a/lib/openid_message.cc b/lib/message.cc
index e244f43..78f20f4 100644
--- a/lib/openid_message.cc
+++ b/lib/message.cc
@@ -14,6 +14,6 @@ namespace opkele {
public:
- const basic_openid_message& from;
- basic_openid_message& to;
+ const basic_message& from;
+ basic_message& to;
- __om_copier(basic_openid_message& t,const basic_openid_message& f)
+ __om_copier(basic_message& t,const basic_message& f)
: from(f), to(t) { }
@@ -24,6 +24,6 @@ namespace opkele {
- basic_openid_message::basic_openid_message(const basic_openid_message& x) {
+ basic_message::basic_message(const basic_message& x) {
x.copy_to(*this);
}
- void basic_openid_message::copy_to(basic_openid_message& x) const {
+ void basic_message::copy_to(basic_message& x) const {
x.reset_fields();
@@ -32,3 +32,3 @@ namespace opkele {
}
- void basic_openid_message::append_to(basic_openid_message& x) const {
+ void basic_message::append_to(basic_message& x) const {
for_each(fields_begin(),fields_end(),
@@ -37,35 +37,5 @@ namespace opkele {
- struct __om_ns_finder : public unary_function<const string&,bool> {
- public:
- const basic_openid_message& om;
- const string& uri;
-
- __om_ns_finder(const basic_openid_message& m,
- const string& u) : om(m), uri(u) { }
-
- result_type operator()(argument_type f) {
- return
- (!strncmp(f.c_str(),"ns.",sizeof("ns.")-1))
- && om.get_field(f)==uri ;
- }
- };
-
- bool basic_openid_message::has_ns(const string& uri) const {
- fields_iterator ei = fields_end();
- fields_iterator i = find_if(fields_begin(),fields_end(),
- __om_ns_finder(*this,uri));
- return !(i==ei);
- }
- string basic_openid_message::get_ns(const string& uri) const {
- fields_iterator ei = fields_end();
- fields_iterator i = find_if(fields_begin(),fields_end(),
- __om_ns_finder(*this,uri));
- if(i==ei)
- throw failed_lookup(OPKELE_CP_ string("failed to find namespace ")+uri);
- return i->substr(3);
- }
-
struct __om_query_builder : public unary_function<const string&,void> {
public:
- const basic_openid_message& om;
+ const basic_message& om;
bool first;
@@ -74,3 +44,3 @@ namespace opkele {
- __om_query_builder(const char *p,string& r,const basic_openid_message& m)
+ __om_query_builder(const char *p,string& r,const basic_message& m)
: om(m), first(true), rv(r), pfx(p) {
@@ -78,3 +48,3 @@ namespace opkele {
}
- __om_query_builder(const char *p,string& r,const basic_openid_message& m,const string& u)
+ __om_query_builder(const char *p,string& r,const basic_message& m,const string& u)
: om(m), first(true), rv(r), pfx(p) {
@@ -100,3 +70,3 @@ namespace opkele {
- string basic_openid_message::append_query(const string& url,const char *pfx) const {
+ string basic_message::append_query(const string& url,const char *pfx) const {
string rv;
@@ -104,3 +74,3 @@ namespace opkele {
}
- string basic_openid_message::query_string(const char *pfx) const {
+ string basic_message::query_string(const char *pfx) const {
string rv;
@@ -109,9 +79,9 @@ namespace opkele {
- void basic_openid_message::reset_fields() {
+ void basic_message::reset_fields() {
throw not_implemented(OPKELE_CP_ "reset_fields() not implemented");
}
- void basic_openid_message::set_field(const string&,const string&) {
+ void basic_message::set_field(const string&,const string&) {
throw not_implemented(OPKELE_CP_ "set_field() not implemented");
}
- void basic_openid_message::reset_field(const string&) {
+ void basic_message::reset_field(const string&) {
throw not_implemented(OPKELE_CP_ "reset_field() not implemented");
@@ -119,2 +89,32 @@ namespace opkele {
+ struct __om_ns_finder : public unary_function<const string&,bool> {
+ public:
+ const basic_openid_message& om;
+ const string& uri;
+
+ __om_ns_finder(const basic_openid_message& m,
+ const string& u) : om(m), uri(u) { }
+
+ result_type operator()(argument_type f) {
+ return
+ (!strncmp(f.c_str(),"ns.",sizeof("ns.")-1))
+ && om.get_field(f)==uri ;
+ }
+ };
+
+ bool basic_openid_message::has_ns(const string& uri) const {
+ fields_iterator ei = fields_end();
+ fields_iterator i = find_if(fields_begin(),fields_end(),
+ __om_ns_finder(*this,uri));
+ return !(i==ei);
+ }
+ string basic_openid_message::get_ns(const string& uri) const {
+ fields_iterator ei = fields_end();
+ fields_iterator i = find_if(fields_begin(),fields_end(),
+ __om_ns_finder(*this,uri));
+ if(i==ei)
+ throw failed_lookup(OPKELE_CP_ string("failed to find namespace ")+uri);
+ return i->substr(3);
+ }
+
void basic_openid_message::from_keyvalues(const string& kv) {
@@ -242,8 +242,2 @@ namespace opkele {
- void openid_message_t::copy_to(basic_openid_message& x) const {
- x.reset_fields();
- for(const_iterator i=begin();i!=end();++i)
- x.set_field(i->first,i->second);
- }
-
bool openid_message_t::has_field(const string& n) const {