Index: /branches/rel_apv_10_7_4/usr/click/lib/libhttp_proxy/parser_utils.c
===================================================================
--- /branches/rel_apv_10_7_4/usr/click/lib/libhttp_proxy/parser_utils.c	(revision 40037)
+++ /branches/rel_apv_10_7_4/usr/click/lib/libhttp_proxy/parser_utils.c	(working copy)
@@ -4504,24 +4504,35 @@
 										    NULL,
 										    &temp_num_hdrs,
 										    TEMP_TOKEN);
-					
-					if(hdr_ptrs.header_len >= (WEBSOCKET_STR_LEN - 1)){
-						cmp_str = (char *)STRING_ALLOC(hdr_ptrs.header_len + 1);
-						if(NULL != cmp_str){
-							bzero(cmp_str, hdr_ptrs.header_len + 1);
-							LOWER_CASE_STRING(hdr_ptrs.header, hdr_ptrs.header_len, cmp_str);
-							if (strnstr(cmp_str, "websocket", hdr_ptrs.header_len)) {
-								resp_info_p->upgrade_websocket = TRUE;
+					if ((retval == GLOBAL_HTTP_NEXT_HDR ||
+						retval == GLOBAL_HTTP_END_LF ||
+						retval == GLOBAL_HTTP_END_CRLF) && hdr_ptrs.header_len) {
+						if(hdr_ptrs.header_len >= (WEBSOCKET_STR_LEN - 1)){
+							cmp_str = (char *)STRING_ALLOC(hdr_ptrs.header_len + 1);
+							if(NULL != cmp_str){
+								copied_header_t http_hdrs;
+								if (selective_copy_http_hdr(hdr_ptrs.frame_p,
+												hdr_ptrs.header,
+												hdr_ptrs.header_len,
+												&http_hdrs) == HTTP_SUCCESS) {
+									LOWER_CASE_STRING(http_hdrs.value, http_hdrs.value_len, cmp_str);
+									if (strnstr(cmp_str, "websocket", http_hdrs.value_len)) {
+										resp_info_p->upgrade_websocket = TRUE;
+									}
+
+									if (http_hdrs.fl_malloc) {
+										STRING_FREE(http_hdrs.value);
+									}
+								}
+								STRING_FREE(cmp_str);
 							}
-							STRING_FREE(cmp_str);
+							
+						} else {
+							SET_HTTP_HDR_BITMAP(http_ulog.hdr_bitmap, LOG_HTTP_RESP_HDRS_UPGRADE);
+							rollback_write_point(header_start_frame_p,
+										header_start_p, header_start, rwp);
 						}
-						
-					} else {
-						SET_HTTP_HDR_BITMAP(http_ulog.hdr_bitmap, LOG_HTTP_RESP_HDRS_UPGRADE);
-						rollback_write_point(header_start_frame_p,
-									header_start_p, header_start, rwp);
 					}
-		
 					break;
 				}
 				case HTTP_RESP_HDRS_VARY:
@@ -6030,10 +6041,20 @@
 						if (hdr_info.header_len >= (WEBSOCKET_STR_LEN - 1)) {
 							cmp_str = (char *)STRING_ALLOC(hdr_info.header_len + 1);
 							if (NULL != cmp_str) {
-								LOWER_CASE_STRING(hdr_info.header, hdr_info.header_len, cmp_str);
-								if (strnstr(cmp_str, "websocket", hdr_info.header_len)) {
-									req_temp_info_p->upgrade_websocket = TRUE;
-								}
+								copied_header_t http_hdrs;
+								if (selective_copy_http_hdr(hdr_info.frame_p,
+												hdr_info.header,
+												hdr_info.header_len,
+												&http_hdrs) == HTTP_SUCCESS) {
+									LOWER_CASE_STRING(http_hdrs.value, http_hdrs.value_len, cmp_str);
+									if (strnstr(cmp_str, "websocket", http_hdrs.value_len)) {
+										req_temp_info_p->upgrade_websocket = TRUE;
+									}
+									
+									if (http_hdrs.fl_malloc) {
+										STRING_FREE(http_hdrs.value);
+									}
+								}	
 								STRING_FREE(cmp_str);
 							}
 						} 
