-rw-r--r-- | lib/discovery.cc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/discovery.cc b/lib/discovery.cc index f8a3988..26f3eed 100644 --- a/lib/discovery.cc +++ b/lib/discovery.cc | |||
@@ -455,64 +455,68 @@ namespace opkele { | |||
455 | } | 455 | } |
456 | if(is_qelement(n,NSURI_XRD "\tType")) { | 456 | if(is_qelement(n,NSURI_XRD "\tType")) { |
457 | if(xrd && xrd_service) { | 457 | if(xrd && xrd_service) { |
458 | assert(cdata==&cdata_buf); | 458 | assert(cdata==&cdata_buf); |
459 | xrd_service->types.insert(cdata_buf); | 459 | xrd_service->types.insert(cdata_buf); |
460 | } | 460 | } |
461 | }else if(is_qelement(n,NSURI_XRD "\tService")) { | 461 | }else if(is_qelement(n,NSURI_XRD "\tService")) { |
462 | if(!(xrd && xrd_service)) { | 462 | if(!(xrd && xrd_service)) { |
463 | skipping = -1; | 463 | skipping = -1; |
464 | }else{ | 464 | }else{ |
465 | assert(!pt_stack.empty()); | 465 | assert(!pt_stack.empty()); |
466 | assert(pt_stack.back()==(NSURI_XRD "\tService")); | 466 | assert(pt_stack.back()==(NSURI_XRD "\tService")); |
467 | pt_stack.pop_back(); | 467 | pt_stack.pop_back(); |
468 | xrd_service = 0; | 468 | xrd_service = 0; |
469 | } | 469 | } |
470 | }else if(is_qelement(n,NSURI_XRD "\tStatus")) { | 470 | }else if(is_qelement(n,NSURI_XRD "\tStatus")) { |
471 | if(!xrd) { | 471 | if(!xrd) { |
472 | skipping=-1; | 472 | skipping=-1; |
473 | }else{ | 473 | }else{ |
474 | if(is_qelement(pt_stack.back().c_str(),n)) { | 474 | if(is_qelement(pt_stack.back().c_str(),n)) { |
475 | assert(cdata==&status_string); | 475 | assert(cdata==&status_string); |
476 | pt_stack.pop_back(); | 476 | pt_stack.pop_back(); |
477 | if(status_code!=100) | 477 | if(status_code!=100) |
478 | skipping = -1; | 478 | skipping = -1; |
479 | } | 479 | } |
480 | } | 480 | } |
481 | }else if(is_qelement(n,NSURI_XRD "\tExpires")) { | 481 | }else if(is_qelement(n,NSURI_XRD "\tExpires")) { |
482 | if(!xrd) { | 482 | if(!xrd) { |
483 | skipping=-1; | 483 | skipping=-1; |
484 | }else{ | 484 | }else{ |
485 | xrd->expires = util::w3c_to_time(cdata_buf); | 485 | xrd->expires = util::w3c_to_time(cdata_buf); |
486 | } | 486 | } |
487 | }else if(is_qelement(n,NSURI_XRD "\tXRD")) { | ||
488 | assert(!pt_stack.empty()); | ||
489 | assert(pt_stack.back()==(NSURI_XRD "\tXRD")); | ||
490 | pt_stack.pop_back(); | ||
487 | }else if((xmode&xmode_html) && is_element(n,"head")) { | 491 | }else if((xmode&xmode_html) && is_element(n,"head")) { |
488 | skipping = -1; | 492 | skipping = -1; |
489 | } | 493 | } |
490 | cdata = 0; | 494 | cdata = 0; |
491 | } | 495 | } |
492 | void character_data(const XML_Char *s,int l) { | 496 | void character_data(const XML_Char *s,int l) { |
493 | if(skipping) return; | 497 | if(skipping) return; |
494 | if(cdata) cdata->append(s,l); | 498 | if(cdata) cdata->append(s,l); |
495 | } | 499 | } |
496 | 500 | ||
497 | void html_start_element(const XML_Char *n,const XML_Char **a) { | 501 | void html_start_element(const XML_Char *n,const XML_Char **a) { |
498 | if(is_element(n,"meta")) { | 502 | if(is_element(n,"meta")) { |
499 | bool heq = false; | 503 | bool heq = false; |
500 | string l; | 504 | string l; |
501 | for(;*a;a+=2) { | 505 | for(;*a;a+=2) { |
502 | if(!( strcasecmp(a[0],"http-equiv") | 506 | if(!( strcasecmp(a[0],"http-equiv") |
503 | || strcasecmp(a[1],XRDS_HEADER) )) | 507 | || strcasecmp(a[1],XRDS_HEADER) )) |
504 | heq = true; | 508 | heq = true; |
505 | else if(!strcasecmp(a[0],"content")) | 509 | else if(!strcasecmp(a[0],"content")) |
506 | l.assign(a[1]); | 510 | l.assign(a[1]); |
507 | } | 511 | } |
508 | if(heq) | 512 | if(heq) |
509 | xrds_location = l; | 513 | xrds_location = l; |
510 | }else if(is_element(n,"link")) { | 514 | }else if(is_element(n,"link")) { |
511 | string rels; | 515 | string rels; |
512 | string href; | 516 | string href; |
513 | for(;*a;a+=2) { | 517 | for(;*a;a+=2) { |
514 | if( !strcasecmp(a[0],"rel") ) { | 518 | if( !strcasecmp(a[0],"rel") ) { |
515 | rels.assign(a[1]); | 519 | rels.assign(a[1]); |
516 | }else if( !strcasecmp(a[0],"href") ) { | 520 | }else if( !strcasecmp(a[0],"href") ) { |
517 | const char *ns = a[1]; | 521 | const char *ns = a[1]; |
518 | for(;*ns && isspace(*ns);++ns) ; | 522 | for(;*ns && isspace(*ns);++ns) ; |