--- parser3/src/main/pa_common.C 2004/08/27 15:49:48 1.191 +++ parser3/src/main/pa_common.C 2004/08/30 09:36:41 1.193 @@ -5,7 +5,7 @@ Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char * const IDENT_COMMON_C="$Date: 2004/08/27 15:49:48 $"; +static const char * const IDENT_COMMON_C="$Date: 2004/08/30 09:36:41 $"; #include "pa_common.h" #include "pa_exception.h" @@ -171,7 +171,7 @@ static int http_read_response(char*& res response_size+=received_size; response[response_size]=0; - if(!result && (EOLat=strstr(response, "\r"))) { // checking status in first response + if(!result && (EOLat=strstr(response, "\n"))) { // checking status in first response const String status_line(pa_strdup(response, EOLat-response)); ArrayString astatus; size_t pos_after=0; @@ -207,7 +207,7 @@ static void timeout_handler(int sig){ #endif static int http_request(char*& response, size_t& response_size, - const char* host, int port, + const char* host, short port, const char* request, int #ifdef PA_USE_ALARM @@ -401,7 +401,7 @@ static File_read_http_result file_read_h File_read_http_result result; char host[MAX_STRING]; const char* uri; - int port; + short port; const char* method="GET"; bool method_is_get; HashStringValue* form=0; const char* body_cstr=0; @@ -489,7 +489,7 @@ static File_read_http_result file_read_h uri=host_uri?current+(host_uri-1-host):"/"; char* port_cstr=lsplit(host, ':'); char* error_pos=0; - port=port_cstr?strtol(port_cstr, &error_pos, 0):80; + port=port_cstr?(short)strtol(port_cstr, &error_pos, 0):80; if(strchr(uri, '?') && form) throw Exception("parser.runtime", @@ -610,7 +610,7 @@ static File_read_http_result file_read_h const String::Body HEADER_NAME= line.mid(0, pos).change_case(charsets.source(), String::CC_UPPER); const String& header_value=line.mid(pos+2, line.length()); - if(HEADER_NAME=="CONTENT-TYPE") + if(as_text && HEADER_NAME=="CONTENT-TYPE") real_remote_charset=detect_charset(charsets.source(), header_value); // tables @@ -638,14 +638,15 @@ static File_read_http_result file_read_h result.headers->put(HEADER_NAME, new VString(header_value)); } - // defaulting to used-asked charset [it's never empty!] - if(!real_remote_charset) - real_remote_charset=asked_remote_charset; // output response String::C real_body=String::C(raw_body, raw_body_size); - if(as_text && raw_body_size) // must be checked because transcode returns CONST string in case length==0, which contradicts hacking few lines below + if(as_text && raw_body_size) { // must be checked because transcode returns CONST string in case length==0, which contradicts hacking few lines below + // defaulting to used-asked charset [it's never empty!] + if(!real_remote_charset) + real_remote_charset=asked_remote_charset; real_body=Charset::transcode(real_body, *real_remote_charset, charsets.source()); + } result.str=const_cast(real_body.str); // hacking a little result.length=real_body.length; @@ -1092,11 +1093,11 @@ char* unescape_chars(const char* cp, int EscapeFirst, EscapeSecond } escapeState=EscapeRest; - int escapedValue=0; + uchar escapedValue=0; int srcPos=0; int dstPos=0; while(srcPos < len) { - int ch=cp[srcPos]; + uchar ch=(uchar)cp[srcPos]; switch(escapeState) { case EscapeRest: if(ch=='%') { @@ -1108,7 +1109,7 @@ char* unescape_chars(const char* cp, int } break; case EscapeFirst: - escapedValue=hex_value[ch] << 4; + escapedValue=(uchar)(hex_value[ch] << 4); escapeState=EscapeSecond; break; case EscapeSecond: