summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--include/opkele/curl.h6
-rw-r--r--lib/util.cc2
2 files changed, 4 insertions, 4 deletions
diff --git a/include/opkele/curl.h b/include/opkele/curl.h
index 298f095..8020b63 100644
--- a/include/opkele/curl.h
+++ b/include/opkele/curl.h
@@ -1,48 +1,48 @@
#ifndef __OPKELE_CURL_H
#define __OPKELE_CURL_H
#include <cassert>
#include <curl/curl.h>
namespace opkele {
namespace util {
class curl_t {
public:
CURL *_c;
curl_t() : _c(0) { }
curl_t(CURL *c) : _c(c) { }
virtual ~curl_t() throw();
curl_t& operator=(CURL *c);
operator const CURL*(void) const { return _c; }
operator CURL*(void) { return _c; }
CURLcode misc_sets();
template<typename PT>
inline CURLcode easy_setopt(CURLoption o,PT p) { assert(_c); return curl_easy_setopt(_c,o,p); }
CURLcode easy_perform() { assert(_c); return curl_easy_perform(_c); }
template<typename IT>
inline CURLcode easy_getinfo(CURLINFO i,IT p) { assert(_c); return curl_easy_getinfo(_c,i,p); }
static inline CURL *easy_init() { return curl_easy_init(); }
- virtual size_t write(void *p,size_t s,size_t nm) { return 0; }
+ virtual size_t write(void* /* p */,size_t /* s */,size_t /* nm */) { return 0; }
CURLcode set_write();
- virtual int progress(double dlt,double dln,double ult,double uln) { return 0; }
+ virtual int progress(double /* dlt */,double /* dln*/ ,double /* ult */,double /* uln */) { return 0; }
CURLcode set_progress();
- virtual size_t header(void *p,size_t s,size_t nm) { return s*nm; }
+ virtual size_t header(void* /* p */,size_t s,size_t nm) { return s*nm; }
CURLcode set_header();
};
}
}
#endif /* __OPKELE_CURL_H */
diff --git a/lib/util.cc b/lib/util.cc
index eacf6d7..ac70938 100644
--- a/lib/util.cc
+++ b/lib/util.cc
@@ -167,97 +167,97 @@ namespace opkele {
* - uppercase hext triplets (e.g. %ab -> %AB)
* - lowercase scheme and host
* - decode %-encoded characters, specified as unreserved in rfc 3986, section 2.3,
* that is - [:alpha:][:digit:]._~-
* - remove dot segments
* - remove empty and default ports
* - if there's no path component, add '/'
*/
string rfc_3986_normalize_uri(const string& uri) {
string rv;
string::size_type colon = uri.find(':');
if(colon==string::npos)
throw bad_input(OPKELE_CP_ "No scheme specified in URI");
transform(
uri.begin(), uri.begin()+colon+1,
back_inserter(rv), ::tolower );
bool s;
if(rv=="http:")
s = false;
else if(rv=="https:")
s = true;
else
throw not_implemented(OPKELE_CP_ "Only http(s) URIs can be normalized here");
string::size_type ul = uri.length();
if(ul <= (colon+3))
throw bad_input(OPKELE_CP_ "Unexpected end of URI being normalized encountered");
if(uri[colon+1]!='/' || uri[colon+2]!='/')
throw bad_input(OPKELE_CP_ "Unexpected input in URI being normalized after scheme component");
rv += "//";
string::size_type interesting = uri.find_first_of(":/#?",colon+3);
if(interesting==string::npos) {
transform(
uri.begin()+colon+3,uri.end(),
back_inserter(rv), ::tolower );
rv += '/'; return rv;
}
transform(
uri.begin()+colon+3,uri.begin()+interesting,
back_inserter(rv), ::tolower );
bool qf = false;
char ic = uri[interesting];
if(ic==':') {
string::size_type ni = uri.find_first_of("/#?%",interesting+1);
const char *nptr = uri.data()+interesting+1;
char *eptr = 0;
long port = strtol(nptr,&eptr,10);
if( (port>0) && (port<65535) && port!=(s?443:80) ) {
char tmp[6];
- snprintf(tmp,sizeof(tmp),"%d",port);
+ snprintf(tmp,sizeof(tmp),"%ld",port);
rv += ':'; rv += tmp;
}
if(ni==string::npos) {
rv += '/'; return rv;
}
interesting = ni;
}else if(ic!='/') {
rv += '/'; rv += ic;
qf = true;
++interesting;
}
string::size_type n = interesting;
char tmp[3] = { 0,0,0 };
stack<string::size_type> psegs; psegs.push(rv.length());
string pseg;
for(;n<ul;) {
string::size_type unsafe = uri.find_first_of(qf?"%":"%/?#",n);
if(unsafe==string::npos) {
pseg.append(uri,n,ul-n-1); n = ul-1;
}else{
pseg.append(uri,n,unsafe-n);
n = unsafe;
}
char c = uri[n++];
if(c=='%') {
if((n+1)>=ul)
throw bad_input(OPKELE_CP_ "Unexpected end of URI encountered while parsing percent-encoded character");
tmp[0] = uri[n++];
tmp[1] = uri[n++];
if(!( isxdigit(tmp[0]) && isxdigit(tmp[1]) ))
throw bad_input(OPKELE_CP_ "Invalid percent-encoded character in URI being normalized");
int cc = strtol(tmp,0,16);
if( isalpha(cc) || isdigit(cc) || strchr("._~-",cc) )
pseg += cc;
else{
pseg += '%';
pseg += toupper(tmp[0]); pseg += toupper(tmp[1]);
}
}else if(qf) {
rv += pseg; rv += c;
pseg.clear();
}else if(n>=ul || strchr("?/#",c)) {
if(pseg.empty() || pseg==".") {
}else if(pseg=="..") {
if(psegs.size()>1) {
rv.resize(psegs.top()); psegs.pop();
}
}else{