summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--lib/discovery.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/discovery.cc b/lib/discovery.cc
index 984e308..bd1f917 100644
--- a/lib/discovery.cc
+++ b/lib/discovery.cc
@@ -224,67 +224,70 @@ namespace opkele {
224 return rv; 224 return rv;
225 } 225 }
226 226
227 void discover_at(idiscovery_t& idis,const string& url,int xm) { 227 void discover_at(idiscovery_t& idis,const string& url,int xm) {
228 CURLcode r = easy_setopt(CURLOPT_MAXREDIRS, (xm&xmode_noredirs)?0:5); 228 CURLcode r = easy_setopt(CURLOPT_MAXREDIRS, (xm&xmode_noredirs)?0:5);
229 if(r) 229 if(r)
230 throw exception_curl(OPKELE_CP_ "failed to set curly maxredirs option"); 230 throw exception_curl(OPKELE_CP_ "failed to set curly maxredirs option");
231 if( (r=easy_setopt(CURLOPT_URL,url.c_str())) ) 231 if( (r=easy_setopt(CURLOPT_URL,url.c_str())) )
232 throw exception_curl(OPKELE_CP_ "failed to set curly urlie",r); 232 throw exception_curl(OPKELE_CP_ "failed to set curly urlie",r);
233 233
234 http_content_type.clear(); 234 http_content_type.clear();
235 xmode = xm; 235 xmode = xm;
236 prepare_to_parse(); 236 prepare_to_parse();
237 if(xmode&xmode_html) { 237 if(xmode&xmode_html) {
238 xrds_location.clear(); 238 xrds_location.clear();
239 save_html.clear(); 239 save_html.clear();
240 save_html.reserve(max_html); 240 save_html.reserve(max_html);
241 } 241 }
242 xrd = &idis.xrd; 242 xrd = &idis.xrd;
243 243
244 r = easy_perform(); 244 r = easy_perform();
245 if(r && r!=CURLE_WRITE_ERROR) 245 if(r && r!=CURLE_WRITE_ERROR)
246 throw exception_curl(OPKELE_CP_ "failed to perform curly request",r); 246 throw exception_curl(OPKELE_CP_ "failed to perform curly request",r);
247 247
248 if(!parser_choked) { 248 if(!parser_choked) {
249 parse(0,0,true); 249 parse(0,0,true);
250 }else if(xmode&xmode_html){ 250 }else if(xmode&xmode_html){
251 /* TODO: do not bother if we've seen xml */ 251 /* TODO: do not bother if we've seen xml */
252 try { 252 try {
253 util::tidy_doc_t td = util::tidy_doc_t::create(); 253 util::tidy_doc_t td = util::tidy_doc_t::create();
254 if(!td) 254 if(!td)
255 throw exception_tidy(OPKELE_CP_ "failed to create htmltidy document"); 255 throw exception_tidy(OPKELE_CP_ "failed to create htmltidy document");
256#ifndef NDEBUG 256#ifdef NDEBUG
257 td.opt_set(TidyQuiet,false); 257 td.opt_set(TidyQuiet,true);
258 td.opt_set(TidyShowWarnings,false); 258 td.opt_set(TidyShowWarnings,false);
259#else /* NDEBUG */
260 td.opt_set(TidyQuiet,false);
261 td.opt_set(TidyShowWarnings,true);
259#endif /* NDEBUG */ 262#endif /* NDEBUG */
260 td.opt_set(TidyForceOutput,true); 263 td.opt_set(TidyForceOutput,true);
261 td.opt_set(TidyXhtmlOut,true); 264 td.opt_set(TidyXhtmlOut,true);
262 td.opt_set(TidyDoctypeMode,TidyDoctypeOmit); 265 td.opt_set(TidyDoctypeMode,TidyDoctypeOmit);
263 td.opt_set(TidyMark,false); 266 td.opt_set(TidyMark,false);
264 td.opt_set(TidyNumEntities,true); 267 td.opt_set(TidyNumEntities,true);
265 if(td.parse_string(save_html)<=0) 268 if(td.parse_string(save_html)<=0)
266 throw exception_tidy(OPKELE_CP_ "tidy failed to parse document"); 269 throw exception_tidy(OPKELE_CP_ "tidy failed to parse document");
267 if(td.clean_and_repair()<=0) 270 if(td.clean_and_repair()<=0)
268 throw exception_tidy(OPKELE_CP_ "tidy failed to clean and repair"); 271 throw exception_tidy(OPKELE_CP_ "tidy failed to clean and repair");
269 util::tidy_buf_t tide; 272 util::tidy_buf_t tide;
270 if(td.save_buffer(tide)<=0) 273 if(td.save_buffer(tide)<=0)
271 throw exception_tidy(OPKELE_CP_ "tidy failed to save buffer"); 274 throw exception_tidy(OPKELE_CP_ "tidy failed to save buffer");
272 prepare_to_parse(); 275 prepare_to_parse();
273 parse(tide.c_str(),tide.size(),true); 276 parse(tide.c_str(),tide.size(),true);
274 }catch(exception_tidy& et) { } 277 }catch(exception_tidy& et) { }
275 } 278 }
276 save_html.clear(); 279 save_html.clear();
277 } 280 }
278 281
279 void prepare_to_parse() { 282 void prepare_to_parse() {
280 (*(expat_t*)this) = parser_create_ns(); 283 (*(expat_t*)this) = parser_create_ns();
281 set_user_data(); set_element_handler(); 284 set_user_data(); set_element_handler();
282 set_character_data_handler(); 285 set_character_data_handler();
283 286
284 if(xmode&xmode_html) { 287 if(xmode&xmode_html) {
285 html_openid1.clear(); html_openid2.clear(); 288 html_openid1.clear(); html_openid2.clear();
286 parser_choked = false; 289 parser_choked = false;
287 } 290 }
288 291
289 cdata = 0; xrd_service = 0; skipping = 0; 292 cdata = 0; xrd_service = 0; skipping = 0;
290 pt_stack.clear(); 293 pt_stack.clear();