summaryrefslogtreecommitdiffabout
path: root/lib/discovery.cc
Side-by-side diff
Diffstat (limited to 'lib/discovery.cc') (more/less context) (show whitespace changes)
-rw-r--r--lib/discovery.cc31
1 files changed, 27 insertions, 4 deletions
diff --git a/lib/discovery.cc b/lib/discovery.cc
index bd1f917..26f3eed 100644
--- a/lib/discovery.cc
+++ b/lib/discovery.cc
@@ -285,2 +285,3 @@ namespace opkele {
set_character_data_handler();
+ set_unknown_encoding_handler();
@@ -455,6 +456,10 @@ namespace opkele {
if(is_qelement(n,NSURI_XRD "\tType")) {
- assert(xrd); assert(xrd_service); assert(cdata==&cdata_buf);
+ if(xrd && xrd_service) {
+ assert(cdata==&cdata_buf);
xrd_service->types.insert(cdata_buf);
+ }
}else if(is_qelement(n,NSURI_XRD "\tService")) {
- assert(xrd); assert(xrd_service);
+ if(!(xrd && xrd_service)) {
+ skipping = -1;
+ }else{
assert(!pt_stack.empty());
@@ -463,4 +468,7 @@ namespace opkele {
xrd_service = 0;
+ }
}else if(is_qelement(n,NSURI_XRD "\tStatus")) {
- assert(xrd);
+ if(!xrd) {
+ skipping=-1;
+ }else{
if(is_qelement(pt_stack.back().c_str(),n)) {
@@ -471,5 +479,13 @@ namespace opkele {
}
+ }
}else if(is_qelement(n,NSURI_XRD "\tExpires")) {
- assert(xrd);
+ if(!xrd) {
+ skipping=-1;
+ }else{
xrd->expires = util::w3c_to_time(cdata_buf);
+ }
+ }else if(is_qelement(n,NSURI_XRD "\tXRD")) {
+ assert(!pt_stack.empty());
+ assert(pt_stack.back()==(NSURI_XRD "\tXRD"));
+ pt_stack.pop_back();
}else if((xmode&xmode_html) && is_element(n,"head")) {
@@ -571,2 +587,9 @@ namespace opkele {
+ int unknown_encoding(const XML_Char *n,XML_Encoding *i) {
+ for(int ii=0;ii < sizeof(i->map)/sizeof(i->map[0]);++ii)
+ i->map[ii] = ii;
+ i->convert = 0; i->release = 0;
+ return XML_STATUS_OK;
+ }
+
};