int get_args(map<string, string> & args, map<string, string> & orig_args) |
{ |
args.clear(); |
orig_args.clear(); |
string method; |
char * env; |
env = getenv ( "REQUEST_METHOD" ); |
if (env == NULL) |
return -1; |
|
string buf; |
if ( strcmp (env, "POST" ) == 0) { |
cin >> buf; |
method = "POST" ; |
} |
else if ( strcmp (env, "GET" ) == 0) { |
env = getenv ( "QUERY_STRING" ); |
if (env == NULL) |
return -1; |
buf = env; |
method = "GET" ; |
} |
else if ( strcmp (env, "HEAD" ) == 0) { |
env = getenv ( "QUERY_STRING" ); |
if (env == NULL) |
return -1; |
buf = env; |
method = "HEAD" ; |
} |
else { |
return -1; |
} |
args.insert(map<string, string>::value_type( "REQUEST_METHOD" , method)); |
orig_args.insert(map<string, string>::value_type( "REQUEST_METHOD" , method)); |
|
int pos_start = 0, pos_eque, pos_and; |
while (1) { |
pos_eque = buf.find( "=" , pos_start); |
if (pos_eque == string::npos) |
break ; |
|
pos_and = buf.find( "&" , pos_eque); |
if (pos_and == string::npos) { |
pos_and = buf.size(); |
} |
|
string arg = buf.substr(pos_start, pos_and-pos_start); |
string argname, argvalue; |
int name = 1; |
int i; |
for (i = 0; i < arg.size(); i++) |
{ |
if (arg[i] == '=' ) { |
name = 0; |
continue ; |
} |
|
char ch; |
if (arg[i] == '+' ) { |
ch = ' ' ; |
} |
else if (arg[i] == '%' && i < arg.size()-2) { |
char str[3]; |
INT64 n; |
str[0] = arg[i+1]; |
str[1] = arg[i+2]; |
str[2] = '\0' ; |
sscanf (str, "%x" , &n); |
ch = (unsigned char )n; |
|
i += 2; |
} |
else { |
ch = arg[i]; |
} |
|
if (name) { |
argname += ch; |
} |
else { |
argvalue += ch; |
} |
} |
|
string orig_argvalue; |
if (arg.find( "=" ) != string::npos) { |
orig_argvalue = arg.substr(arg.find( "=" )+1); |
} |
else { |
orig_argvalue = "" ; |
} |
args.insert(map<string, string>::value_type(argname, argvalue)); |
orig_args.insert(map<string, string>::value_type(argname, orig_argvalue)); |
pos_start = pos_and + 1; |
} |
return 0; |
} |
#ifndef _WIN32 |
int GetModuleFileName( char * sModuleName, char * sFileName, int nSize) |
{ |
int ret = -1; |
char * p = getenv ( "_" ); |
if ( p != NULL && strstr ( p, sModuleName ) != NULL ) |
{ |
ret = 0; |
strcpy ( sFileName, p ); |
} |
return ret; |
} |
#endif |
int get_arg(map<string, string> & args, string arg, string & val) |
{ |
val = "" ; |
if (args.find(arg) == args.end()) |
return -1; |
|
val = args.find(arg)->second; |
|
return 0; |
} |
string get_ext(string fn) { |
string ext; |
if (fn.rfind( "." ) != string::npos) { |
ext = fn.substr(fn.rfind( "." )+1); |
} |
string_lower(ext); |
|
return ext; |
} |
string get_mime(string fn) |
{ |
string ext; |
if (fn.rfind( "." ) != string::npos) { |
ext = fn.substr(fn.rfind( "." )+1); |
} |
string_lower(ext); |
if (ext.size() == 0) |
return "text/html" ; |
string mime_set = "|" |
"3gp video/3gpp|" |
"avi video/x-msvideo|" |
"asf video/x-ms-asf|" |
"asn application/astound|" |
"asp application/x-asap|" |
"asx video/x-ms-asf|" |
"au audio/basic|" |
"css text/css|" |
"cab application/vnd.ms-cab-compressed|" |
"dhtml text/html|" |
"doc application/msword|" |
"gif image/gif|" |
"gps application/x-gps|" |
"gtar application/x-gtar|" |
"gz application/x-gzip|" |
"hdf application/x-hdf|" |
"hdm text/x-hdml|" |
"hdml text/x-hdml|" |
"hts text/html|" |
"ifm image/gif|" |
"j2k image/j2k|" |
"jad text/vnd.sun.j2me.app-descriptor|" |
"jam application/x-jam|" |
"jar application/java-archive|" |
"jpe image/jpeg|" |
"jpeg image/jpeg|" |
"jpg image/jpeg|" |
"jpz image/jpeg|" |
"js application/x-javascript|" |
"mov video/quicktime|" |
"movie video/x-sgi-movie|" |
"mp2 audio/mpeg|" |
"mp3 audio/mpeg|" |
"mp4 video/mp4|" |
"mpc application/vnd.mpohun.certificate|" |
"mpe video/mpeg|" |
"mpeg video/mpeg|" |
"mpg video/mpeg|" |
"mpg4 video/mp4|" |
"mpga audio/mpeg|" |
"png image/png|" |
"pbm image/x-portable-bitmap|" |
"pcx image/x-pcx|" |
"pda image/x-pda|" |
"pac audio/x-pac|" |
"pae audio/x-epac|" |
"pdf application/pdf" |
"ppt application/vnd.ms-powerpoint" |
"nbmp image/nbmp|" |
"mil image/x-cals|" |
"mio audio/x-mio|" |
"mng video/x-mng|" |
"mod audio/x-mod|" |
"pict image/x-pict|" |
"nsnd audio/nsnd|" |
"pac audio/x-pac|" |
"pae audio/x-epac|" |
"pbm image/x-portable-bitmap|" |
"pcx image/x-pcx|" |
"pda image/x-pda|" |
"sgm text/x-sgml|" |
"sgml text/x-sgml|" |
"si6 image/si6|" |
"si7 image/vnd.stiwap.sis|" |
"si9 image/vnd.lgtwap.sis|" |
"pvx video/x-pv-pvx|" |
"qcp audio/vnd.qcelp|" |
"qt video/quicktime|" |
"qti image/x-quicktime|" |
"qtif image/x-quicktime|" |
"r3t text/vnd.rn-realtext3d|" |
"ra audio/x-pn-realaudio|" |
"ram audio/x-pn-realaudio|" |
"ras image/x-cmu-raster|" |
"rf image/vnd.rn-realflash|" |
"rgb image/x-rgb|" |
"rm application/vnd.rn-realmedia|" |
"rmf audio/x-rmf|" |
"rmm audio/x-pn-realaudio|" |
"rmvb application/vnd.rn-realmedia|" |
"rv video/vnd.rn-realvideo|" |
"s3m audio/x-mod|" |
"s3z audio/x-mod|" |
"svf image/vnd|" |
"svg image/svg-xml|" |
"svh image/svh|" |
"smz audio/x-smd|" |
"snd audio/basic|" |
"smd audio/x-smd|" |
"tif image/tiff|" |
"tiff image/tiff|" |
"z application/x-compress|" |
"zac application/x-zaurus-zac|" |
"zip application/zip|" |
"wav audio/x-wav|" |
"wax audio/x-ms-wax|" |
"wm video/x-ms-wm|" |
"wma audio/x-ms-wma|" |
"wmd application/x-ms-wmd|" |
"wmf application/x-msmetafile|" |
"wml text/vnd.wap.wml|" |
"wmlc application/vnd.wap.wmlc|" |
"wmls text/vnd.wap.wmlscript|" |
"wmlsc application/vnd.wap.wmlscriptc|" |
"wmlscript text/vnd.wap.wmlscript|" |
"wmv audio/x-ms-wmv|" |
"wmx video/x-ms-wmx|" |
"wmz application/x-ms-wmz|" |
"xml text/xml|" |
"xht application/xhtml+xml|" |
"xhtm application/xhtml+xml|" |
"xhtml application/xhtml+xml|" |
"wpng image/x-up-wpng|" |
"rar application/x-rar-compressed|" |
"htm text/html|" |
"html text/html|" |
"hts text/html|" |
"txt text/plain|" |
"log text/plain|" |
"ini text/plain|" |
"conf text/plain|" |
"swf application/x-shockwave-flash|" |
"ico image/x-icon|" |
"xls application/vnd.ms-excel|" |
"xsf text/xml|" |
"xsl text/xml|" |
"xslt text/xml|" |
"flv flv-application/octet-stream|" ; |
string::size_type p1 = mime_set.find( "|" + ext+ " " ); |
if (p1 == string::npos) |
return "application/octet-stream" ; |
p1 += ext.size() + 2; |
string::size_type p2 = mime_set.find( "|" , p1); |
if (p2 == string::npos) |
return "application/octet-stream" ; |
string mime = mime_set.substr(p1, p2-p1); |
return mime; |
} |