-rw-r--r-- | lib/discovery.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/discovery.cc b/lib/discovery.cc index c118c80..3b90977 100644 --- a/lib/discovery.cc +++ b/lib/discovery.cc | |||
@@ -231,64 +231,65 @@ namespace opkele { | |||
231 | throw exception_curl(OPKELE_CP_ "failed to set curly urlie",r); | 231 | throw exception_curl(OPKELE_CP_ "failed to set curly urlie",r); |
232 | 232 | ||
233 | http_content_type.clear(); | 233 | http_content_type.clear(); |
234 | xmode = xm; | 234 | xmode = xm; |
235 | prepare_to_parse(); | 235 | prepare_to_parse(); |
236 | if(xmode&xmode_html) { | 236 | if(xmode&xmode_html) { |
237 | xrds_location.clear(); | 237 | xrds_location.clear(); |
238 | save_html.clear(); | 238 | save_html.clear(); |
239 | save_html.reserve(max_html); | 239 | save_html.reserve(max_html); |
240 | } | 240 | } |
241 | xrd = &idis.xrd; | 241 | xrd = &idis.xrd; |
242 | 242 | ||
243 | r = easy_perform(); | 243 | r = easy_perform(); |
244 | if(r && r!=CURLE_WRITE_ERROR) | 244 | if(r && r!=CURLE_WRITE_ERROR) |
245 | throw exception_curl(OPKELE_CP_ "failed to perform curly request",r); | 245 | throw exception_curl(OPKELE_CP_ "failed to perform curly request",r); |
246 | 246 | ||
247 | if(!parser_choked) { | 247 | if(!parser_choked) { |
248 | parse(0,0,true); | 248 | parse(0,0,true); |
249 | }else if(xmode&xmode_html){ | 249 | }else if(xmode&xmode_html){ |
250 | /* TODO: do not bother if we've seen xml */ | 250 | /* TODO: do not bother if we've seen xml */ |
251 | try { | 251 | try { |
252 | util::tidy_doc_t td = util::tidy_doc_t::create(); | 252 | util::tidy_doc_t td = util::tidy_doc_t::create(); |
253 | if(!td) | 253 | if(!td) |
254 | throw exception_tidy(OPKELE_CP_ "failed to create htmltidy document"); | 254 | throw exception_tidy(OPKELE_CP_ "failed to create htmltidy document"); |
255 | #ifndef NDEBUG | 255 | #ifndef NDEBUG |
256 | td.opt_set(TidyQuiet,false); | 256 | td.opt_set(TidyQuiet,false); |
257 | td.opt_set(TidyShowWarnings,false); | 257 | td.opt_set(TidyShowWarnings,false); |
258 | #endif /* NDEBUG */ | 258 | #endif /* NDEBUG */ |
259 | td.opt_set(TidyForceOutput,true); | 259 | td.opt_set(TidyForceOutput,true); |
260 | td.opt_set(TidyXhtmlOut,true); | 260 | td.opt_set(TidyXhtmlOut,true); |
261 | td.opt_set(TidyDoctypeMode,TidyDoctypeOmit); | 261 | td.opt_set(TidyDoctypeMode,TidyDoctypeOmit); |
262 | td.opt_set(TidyMark,false); | 262 | td.opt_set(TidyMark,false); |
263 | td.opt_set(TidyNumEntities,true); | ||
263 | if(td.parse_string(save_html)<=0) | 264 | if(td.parse_string(save_html)<=0) |
264 | throw exception_tidy(OPKELE_CP_ "tidy failed to parse document"); | 265 | throw exception_tidy(OPKELE_CP_ "tidy failed to parse document"); |
265 | if(td.clean_and_repair()<=0) | 266 | if(td.clean_and_repair()<=0) |
266 | throw exception_tidy(OPKELE_CP_ "tidy failed to clean and repair"); | 267 | throw exception_tidy(OPKELE_CP_ "tidy failed to clean and repair"); |
267 | util::tidy_buf_t tide; | 268 | util::tidy_buf_t tide; |
268 | if(td.save_buffer(tide)<=0) | 269 | if(td.save_buffer(tide)<=0) |
269 | throw exception_tidy(OPKELE_CP_ "tidy failed to save buffer"); | 270 | throw exception_tidy(OPKELE_CP_ "tidy failed to save buffer"); |
270 | prepare_to_parse(); | 271 | prepare_to_parse(); |
271 | parse(tide.c_str(),tide.size(),true); | 272 | parse(tide.c_str(),tide.size(),true); |
272 | }catch(exception_tidy& et) { } | 273 | }catch(exception_tidy& et) { } |
273 | } | 274 | } |
274 | save_html.clear(); | 275 | save_html.clear(); |
275 | } | 276 | } |
276 | 277 | ||
277 | void prepare_to_parse() { | 278 | void prepare_to_parse() { |
278 | (*(expat_t*)this) = parser_create_ns(); | 279 | (*(expat_t*)this) = parser_create_ns(); |
279 | set_user_data(); set_element_handler(); | 280 | set_user_data(); set_element_handler(); |
280 | set_character_data_handler(); | 281 | set_character_data_handler(); |
281 | 282 | ||
282 | if(xmode&xmode_html) { | 283 | if(xmode&xmode_html) { |
283 | html_openid1.clear(); html_openid2.clear(); | 284 | html_openid1.clear(); html_openid2.clear(); |
284 | parser_choked = false; | 285 | parser_choked = false; |
285 | } | 286 | } |
286 | 287 | ||
287 | cdata = 0; xrd_service = 0; skipping = 0; | 288 | cdata = 0; xrd_service = 0; skipping = 0; |
288 | pt_stack.clear(); | 289 | pt_stack.clear(); |
289 | status_code = 100; status_string.clear(); | 290 | status_code = 100; status_string.clear(); |
290 | } | 291 | } |
291 | 292 | ||
292 | void html2xrd(endpoint_discovery_iterator& oi,idiscovery_t& id) { | 293 | void html2xrd(endpoint_discovery_iterator& oi,idiscovery_t& id) { |
293 | XRD_t& x = id.xrd; | 294 | XRD_t& x = id.xrd; |
294 | if(!html_openid2.uris.empty()) { | 295 | if(!html_openid2.uris.empty()) { |