t_send_status_list_itr send_status_itr;
EVENT_TAG status = STOP;
-std::cout << "check_point 1" << std::endl;
+
try
{
{
thread_data = thread_data_itr->second;
}
}
-std::cout << "check_point 2" << std::endl;
if( thread_data != NULL )
{
if( thread_data->end_flag == END_FLAG_ON )
{
status = CLIENT_RECV;
-std::cout << "check_point 3" << std::endl;
}
else
{
-std::cout << "check_point 4" << std::endl;
recive_data_itr = thread_data->recive_data_map.find( thread_data->client_endpoint_tcp );
if( recive_data_itr != thread_data->recive_data_map.end() )
{
-std::cout << "check_point 5" << std::endl;
+
send_status_itr = recive_data_itr->second.send_status_list.begin();
while( send_status_itr != recive_data_itr->second.send_status_list.end())
{
-std::cout << "check_point 6" << std::endl;
+
if( send_status_itr->status == SEND_END )
{
-std::cout << "check_point 7" << std::endl;
+
next_request_offset = send_status_itr->send_offset + send_status_itr->send_end_size;
send_status_itr = recive_data_itr->second.send_status_list.erase( send_status_itr );
}
else if( send_status_itr->status == SEND_CONTINUE )
{
-std::cout << "check_point 8" << std::endl;
+
send_status_itr->send_offset += send_status_itr->send_end_size;
unsend_data_offset = send_status_itr->send_offset;
break;
}
else
{
-std::cout << "check_point 9" << std::endl;
+
unsend_data_offset = send_status_itr->send_offset;
unsend_data_size = send_status_itr->unsend_size;
break;
}
}
-std::cout << "check_point 10" << std::endl;
+
if( recive_data_itr->second.recive_buffer_rest_size < recvlen )
{
-std::cout << "check_point 11" << std::endl;
+
if( recive_data_itr->second.recive_buffer_max_size < unsend_data_size + recvlen )
{
-std::cout << "check_point 12" << std::endl;
+
buffer_1 = new char[unsend_data_size + recvlen];
buffer_2 = new char[unsend_data_size + recvlen];
free( recive_data_itr->second.recive_buffer_1 );
free( recive_data_itr->second.recive_buffer_2 );
- recive_data_itr->second.recive_buffer = buffer_1;
+ recive_data_itr->second.recive_buffer = buffer_1;
recive_data_itr->second.recive_buffer_1 = buffer_1;
recive_data_itr->second.recive_buffer_2 = buffer_2;
}
else
{
-std::cout << "check_point 13" << std::endl;
+
if( recive_data_itr->second.recive_buffer == recive_data_itr->second.recive_buffer_1 )
{
-std::cout << "check_point 14" << std::endl;
-std::cout << unsend_data_offset << std::endl;
-std::cout << unsend_data_size << std::endl;
-std::cout << recvlen << std::endl;
+
memset( recive_data_itr->second.recive_buffer_2,
'\0',
recive_data_itr->second.recive_buffer_max_size );
}
else
{
-std::cout << "check_point 15" << std::endl;
+
memset( recive_data_itr->second.recive_buffer_1,
'\0',
recive_data_itr->second.recive_buffer_max_size );
while( send_status_itr != recive_data_itr->second.send_status_list.end())
{
-std::cout << "check_point 16" << std::endl;
+
send_status_itr->send_offset -= unsend_data_offset;
send_status_itr++;
}
}
else
{
-std::cout << "check_point 17" << std::endl;
+
memcpy( recive_data_itr->second.recive_buffer + recive_data_itr->second.recive_buffer_max_size - recive_data_itr->second.recive_buffer_rest_size,
recvbuffer.data(),
recvlen );
send_status_itr = recive_data_itr->second.send_status_list.begin();
rest_request_data_size = recvlen;
-std::cout << "check_point 18" << std::endl;
+
while( send_status_itr != recive_data_itr->second.send_status_list.end())
{
-std::cout << "check_point 19" << std::endl;
+
if( send_status_itr->status == SEND_CONTINUE )
{
-std::cout << "check_point 20" << std::endl;
+
if( send_status_itr->send_rest_size > rest_request_data_size )
{
send_status_itr->send_end_size = 0;
rest_request_data_size = 0;
-std::cout << "check_point 21" << std::endl;
+
}
else
{
-std::cout << "check_point 22" << std::endl;
+
send_status_itr->send_possible_size = send_status_itr->send_rest_size;
rest_request_data_size -= send_status_itr->send_rest_size;
next_request_offset = send_status_itr->send_offset
+ send_status_itr->send_possible_size;
-std::cout << "check_point 23" << std::endl;
+
}
else if( send_status_itr->status == SEND_NG )
{
-std::cout << "check_point 24" << std::endl;
+
check_result = check_http_method(
(const char*)recive_data_itr->second.recive_buffer
+ send_status_itr->send_offset,
if( check_result == CHECK_OK )
{
-std::cout << "check_point 24-1" << std::endl;
+
check_result = check_http_version(
(const char*)recive_data_itr->second.recive_buffer
+ send_status_itr->send_offset,
if( check_result == CHECK_OK )
{
-std::cout << "check_point 24-2" << std::endl;
+
find_result = find_http_header(
(const char*)recive_data_itr->second.recive_buffer
+ send_status_itr->send_offset,
if( find_result == true )
{
-std::cout << "check_point 24-3" << std::endl;
+
send_status_itr->send_rest_size
= http_header_offset + http_header_len + 4;
-std::cout << send_status_itr->send_rest_size << std::endl;
+
find_result = find_http_header(
(const char*)recive_data_itr->second.recive_buffer
+ send_status_itr->send_offset,
if( find_result == true )
{
-std::cout << "check_point 24-4" << std::endl;
+
content_length.assign( recive_data_itr->second.recive_buffer
+ send_status_itr->send_offset
+ http_header_offset,
if( find_result == true )
{
-std::cout << "check_point 24-5" << std::endl;
+
content_length = content_length.substr(
regex_result.position(1),
regex_result.length(1));
-std::cout << content_length << std::endl;
+
send_status_itr->send_rest_size
+= boost::lexical_cast<size_t>(
content_length);
-std::cout << send_status_itr->send_rest_size << std::endl;
+
}
}
}
else
{
-std::cout << "check_point 24-6" << std::endl;
+
send_status_itr->unsend_size += rest_request_data_size;
rest_request_data_size = 0;
}
else if( check_result == CHECK_NG )
{
-std::cout << "check_point 24-7" << std::endl;
+
send_status_itr->edit_division = EDIT_DIVISION_NO_EDIT;
send_status_itr->send_rest_size = send_status_itr->unsend_size
}
else
{
-std::cout << "check_point 24-8" << std::endl;
+
send_status_itr->unsend_size += rest_request_data_size;
rest_request_data_size = 0;
if( send_status_itr->send_rest_size >
send_status_itr->unsend_size + rest_request_data_size )
{
-std::cout << "check_point 24-9" << std::endl;
+
send_status_itr->send_possible_size
= send_status_itr->unsend_size + rest_request_data_size;
}
else
{
-std::cout << "check_point 24-10" << std::endl;
+
send_status_itr->send_possible_size = send_status_itr->send_rest_size;
rest_request_data_size = send_status_itr->unsend_size
send_status_itr++;
}
-std::cout << "check_point 25" << std::endl;
+
while( rest_request_data_size > 0 )
{
-std::cout << "check_point 26" << std::endl;
-std::cout << rest_request_data_size << std::endl;
-// send_status_add = new send_status;
send_status_add.status = SEND_NG;
send_status_add.send_end_size = 0;
if( check_result == CHECK_OK )
{
-std::cout << "check_point 27" << std::endl;
+
check_result = check_http_version(
(const char*)recive_data_itr->second.recive_buffer
+ send_status_add.send_offset,
rest_request_data_size );
}
-std::cout << "check_point 28" << std::endl;
+
if( check_result == CHECK_OK )
{
-std::cout << "check_point 29" << std::endl;
+
find_result = find_http_header(
(const char*)recive_data_itr->second.recive_buffer
+ send_status_add.send_offset,
if( find_result == true )
{
-std::cout << "check_point 30" << std::endl;
+
send_status_add.send_rest_size
= http_header_offset + http_header_len + 4;
if( find_result == true )
{
-std::cout << "check_point 31" << std::endl;
+
content_length.assign( recive_data_itr->second.recive_buffer
+ send_status_add.send_offset
+ http_header_offset,
if( find_result == true )
{
-std::cout << "check_point 32" << std::endl;
+
content_length = content_length.substr(
regex_result.position(1),
regex_result.length(1));
-std::cout << content_length << std::endl;
+
send_status_add.send_rest_size
+= boost::lexical_cast<size_t>(
content_length);
-std::cout << "check_point 32-1" << std::endl;
+
}
}
}
else
{
-std::cout << "check_point 33" << std::endl;
+
send_status_add.unsend_size = rest_request_data_size;
rest_request_data_size = 0;
}
else if( check_result == CHECK_NG )
{
-std::cout << "check_point 34" << std::endl;
+
send_status_add.edit_division = EDIT_DIVISION_NO_EDIT;
send_status_add.send_rest_size = rest_request_data_size;
}
else
{
-std::cout << "check_point 35" << std::endl;
+
send_status_add.unsend_size = rest_request_data_size;
rest_request_data_size = 0;
break;
}
-std::cout << "check_point 36" << std::endl;
+
if( send_status_add.send_rest_size > rest_request_data_size )
{
-std::cout << "check_point 37" << std::endl;
+
send_status_add.send_possible_size = rest_request_data_size;
send_status_add.send_rest_size -= rest_request_data_size;
}
else
{
-std::cout << "check_point 38" << std::endl;
+
send_status_add.send_possible_size = send_status_add.send_rest_size;
rest_request_data_size -= send_status_add.send_rest_size;
send_status_itr = recive_data_itr->second.send_status_list.begin();
status = CLIENT_RECV;
-std::cout << "check_point 39" << std::endl;
+
while( send_status_itr != recive_data_itr->second.send_status_list.end())
{
-std::cout << "check_point 40" << std::endl;
+
if( send_status_itr->status == SEND_OK )
{
-std::cout << "check_point 41" << std::endl;
+
if( thread_data->sorry_flag == SORRY_FLAG_ON )
{
-std::cout << "check_point 42" << std::endl;
+
status = SORRYSERVER_SELECT;
}
else
{
-std::cout << "check_point 43" << std::endl;
+
status = REALSERVER_SELECT;
}
}
} catch (const std::exception& ex)
{
-std::cout << "check_point 32-2" << std::endl;
+
} catch (...)
{
-std::cout << "check_point 32-3" << std::endl;
+
}
return status;
}
t_session_thread_data_cinsert thread_data;
- recive_data realserver_recv_data;
-
- send_status* send_status_add = NULL;
+ char* buffer = NULL;
+ char* buffer_1 = NULL;
+ char* buffer_2 = NULL;
size_t unsend_data_offset = 0;
size_t unsend_data_size = 0;
size_t rest_response_data_size = 0;
size_t next_response_offset = 0;
- char* buffer = NULL;
- char* buffer_1 = NULL;
- char* buffer_2 = NULL;
+ send_status send_status_add;
+
+ recive_data realserver_recv_data;
- bool find_result = false;
CHECK_RESULT_TAG check_result;
+ bool find_result = false;
size_t http_header_offset = 0;
size_t http_header_len = 0;
-
- std::string http_header_name_blank = "";
- std::string http_header_name_content_length = "Content-Length";
- std::string content_length;
+ std::string http_header_name_blank = "";
+ std::string http_header_name_content_length = "Content-Length";
+ std::string content_length;
match_results< const char* > regex_result;
cregex content_length_regex = icase("Content-Length") >> ":" >> *~_d >> (s1 = +_d) >> *~_d;
if( send_status_itr->status == SEND_END )
{
+ next_response_offset = send_status_itr->send_offset + send_status_itr->send_end_size;
send_status_itr = recive_data_itr->second.send_status_list.erase( send_status_itr );
}
else if( send_status_itr->status == SEND_CONTINUE )
break;
}
+ send_status_itr++;
+
}
if( recive_data_itr->second.recive_buffer_rest_size < recvlen )
free( recive_data_itr->second.recive_buffer_1 );
free( recive_data_itr->second.recive_buffer_2 );
- recive_data_itr->second.recive_buffer = buffer_1;
+ recive_data_itr->second.recive_buffer = buffer_1;
recive_data_itr->second.recive_buffer_1 = buffer_1;
recive_data_itr->second.recive_buffer_2 = buffer_2;
recive_data_itr->second.recive_buffer_rest_size
= recive_data_itr->second.recive_buffer_max_size - unsend_data_size - recvlen;
+ next_response_offset = 0;
+
unsend_data_size += recvlen;
send_status_itr = recive_data_itr->second.send_status_list.begin();
{
send_status_itr->send_offset -= unsend_data_offset;
+ send_status_itr++;
}
send_status_itr->send_rest_size
+= boost::lexical_cast<size_t>(
- content_length.substr(
- regex_result.position(1),
- regex_result.length(1)));
+ content_length);
}
while( rest_response_data_size > 0 )
{
- send_status_add = new send_status;
-
- send_status_add->status = SEND_NG;
-
- send_status_add->send_offset = next_response_offset;
+ send_status_add.status = SEND_NG;
+ send_status_add.send_end_size = 0;
+ send_status_add.send_rest_size = 0;
+ send_status_add.send_possible_size = 0;
+ send_status_add.unsend_size = 0;
+ send_status_add.edit_division = 0;
+ send_status_add.send_offset = next_response_offset;
check_result = check_http_method(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
+ + send_status_add.send_offset,
rest_response_data_size );
if( check_result == CHECK_OK )
{
check_result = check_http_version(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
+ + send_status_add.send_offset,
rest_response_data_size );
}
find_result = find_http_header(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
+ + send_status_add.send_offset,
rest_response_data_size,
http_header_name_blank,
http_header_offset,
if( find_result == true )
{
- send_status_add->send_rest_size
+ send_status_add.send_rest_size
= http_header_offset + http_header_len + 4;
find_result = find_http_header(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
- send_status_add->send_rest_size,
+ + send_status_add.send_offset,
+ send_status_add.send_rest_size,
http_header_name_content_length,
http_header_offset,
http_header_len );
{
content_length.assign( recive_data_itr->second.recive_buffer
- + send_status_add->send_offset
+ + send_status_add.send_offset
+ http_header_offset,
http_header_len );
regex_result.position(1),
regex_result.length(1));
- send_status_add->send_rest_size
+ send_status_add.send_rest_size
+= boost::lexical_cast<size_t>(
- content_length.substr(
- regex_result.position(1),
- regex_result.length(1)));
+ content_length);
}
}
- send_status_add->edit_division = EDIT_DIVISION_EDIT;
+ send_status_add.edit_division = EDIT_DIVISION_EDIT;
}
else
{
- send_status_add->unsend_size = rest_response_data_size;
+ send_status_add.unsend_size = rest_response_data_size;
rest_response_data_size = 0;
else if( check_result == CHECK_NG )
{
- send_status_add->edit_division = EDIT_DIVISION_NO_EDIT;
+ send_status_add.edit_division = EDIT_DIVISION_NO_EDIT;
- send_status_add->send_rest_size = rest_response_data_size;
+ send_status_add.send_rest_size = rest_response_data_size;
}
else
{
- send_status_add->unsend_size = rest_response_data_size;
+ send_status_add.unsend_size = rest_response_data_size;
rest_response_data_size = 0;
}
- if( send_status_add->send_rest_size > rest_response_data_size )
+ if( send_status_add.send_rest_size > rest_response_data_size )
{
- send_status_add->send_possible_size = rest_response_data_size;
+ send_status_add.send_possible_size = rest_response_data_size;
- send_status_add->send_rest_size -= rest_response_data_size;
+ send_status_add.send_rest_size -= rest_response_data_size;
- send_status_add->send_end_size = 0;
+ send_status_add.send_end_size = 0;
- send_status_add->unsend_size = 0;
+ send_status_add.unsend_size = 0;
rest_response_data_size = 0;
else
{
- send_status_add->send_possible_size = send_status_add->send_rest_size;
+ send_status_add.send_possible_size = send_status_add.send_rest_size;
- rest_response_data_size -= send_status_itr->send_rest_size;
+ rest_response_data_size -= send_status_add.send_rest_size;
- send_status_add->send_rest_size = 0;
+ send_status_add.send_rest_size = 0;
- send_status_add->send_end_size = 0;
+ send_status_add.send_end_size = 0;
- send_status_add->unsend_size = 0;
+ send_status_add.unsend_size = 0;
}
- send_status_itr->status = SEND_OK;
+ send_status_add.status = SEND_OK;
- next_response_offset = send_status_itr->send_offset
- + send_status_itr->send_possible_size;
+ next_response_offset = send_status_add.send_offset
+ + send_status_add.send_possible_size;
}
break;
}
+ send_status_itr++;
+
}
}
recive_data sorryserver_recv_data;
- send_status* send_status_add = NULL;
+ send_status send_status_add;
size_t unsend_data_offset = 0;
size_t unsend_data_size = 0;
if( send_status_itr->status == SEND_END )
{
+
+ next_response_offset = send_status_itr->send_offset + send_status_itr->send_end_size;
send_status_itr = recive_data_itr->second.send_status_list.erase( send_status_itr );
}
else if( send_status_itr->status == SEND_CONTINUE )
break;
}
+ send_status_itr++;
+
}
if( recive_data_itr->second.recive_buffer_rest_size < recvlen )
{
send_status_itr->send_offset -= unsend_data_offset;
+ send_status_itr++;
}
send_status_itr->send_rest_size
+= boost::lexical_cast<size_t>(
- content_length.substr(
- regex_result.position(1),
- regex_result.length(1)));
+ content_length);
}
while( rest_response_data_size > 0 )
{
- send_status_add = new send_status;
-
- send_status_add->status = SEND_NG;
-
- send_status_add->send_offset = next_response_offset;
+ send_status_add.status = SEND_NG;
+ send_status_add.send_end_size = 0;
+ send_status_add.send_rest_size = 0;
+ send_status_add.send_possible_size = 0;
+ send_status_add.unsend_size = 0;
+ send_status_add.edit_division = 0;
+ send_status_add.send_offset = next_response_offset;
check_result = check_http_method(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
+ + send_status_add.send_offset,
rest_response_data_size );
if( check_result == CHECK_OK )
{
check_result = check_http_version(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
+ + send_status_add.send_offset,
rest_response_data_size );
}
find_result = find_http_header(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
+ + send_status_add.send_offset,
rest_response_data_size,
http_header_name_blank,
http_header_offset,
if( find_result == true )
{
- send_status_add->send_rest_size
+ send_status_add.send_rest_size
= http_header_offset + http_header_len + 4;
find_result = find_http_header(
(const char*)recive_data_itr->second.recive_buffer
- + send_status_add->send_offset,
- send_status_add->send_rest_size,
+ + send_status_add.send_offset,
+ send_status_add.send_rest_size,
http_header_name_content_length,
http_header_offset,
http_header_len );
{
content_length.assign( recive_data_itr->second.recive_buffer
- + send_status_add->send_offset
+ + send_status_add.send_offset
+ http_header_offset,
http_header_len );
regex_result.position(1),
regex_result.length(1));
- send_status_add->send_rest_size
+ send_status_add.send_rest_size
+= boost::lexical_cast<size_t>(
- content_length.substr(
- regex_result.position(1),
- regex_result.length(1)));
+ content_length);
}
}
- send_status_add->edit_division = EDIT_DIVISION_NO_EDIT;
+ send_status_add.edit_division = EDIT_DIVISION_NO_EDIT;
}
else
{
- send_status_add->unsend_size = rest_response_data_size;
+ send_status_add.unsend_size = rest_response_data_size;
rest_response_data_size = 0;
else if( check_result == CHECK_NG )
{
- send_status_add->edit_division = EDIT_DIVISION_NO_EDIT;
+ send_status_add.edit_division = EDIT_DIVISION_NO_EDIT;
- send_status_add->send_rest_size = rest_response_data_size;
+ send_status_add.send_rest_size = rest_response_data_size;
}
else
{
- send_status_add->unsend_size = rest_response_data_size;
+ send_status_add.unsend_size = rest_response_data_size;
rest_response_data_size = 0;
}
- if( send_status_add->send_rest_size > rest_response_data_size )
+ if( send_status_add.send_rest_size > rest_response_data_size )
{
- send_status_add->send_possible_size = rest_response_data_size;
+ send_status_add.send_possible_size = rest_response_data_size;
- send_status_add->send_rest_size -= rest_response_data_size;
+ send_status_add.send_rest_size -= rest_response_data_size;
- send_status_add->send_end_size = 0;
+ send_status_add.send_end_size = 0;
- send_status_add->unsend_size = 0;
+ send_status_add.unsend_size = 0;
rest_response_data_size = 0;
else
{
- send_status_add->send_possible_size = send_status_add->send_rest_size;
+ send_status_add.send_possible_size = send_status_add.send_rest_size;
- rest_response_data_size -= send_status_itr->send_rest_size;
+ rest_response_data_size -= send_status_add.send_rest_size;
- send_status_add->send_rest_size = 0;
+ send_status_add.send_rest_size = 0;
- send_status_add->send_end_size = 0;
+ send_status_add.send_end_size = 0;
- send_status_add->unsend_size = 0;
+ send_status_add.unsend_size = 0;
}
- send_status_itr->status = SEND_OK;
+ send_status_add.status = SEND_OK;
- next_response_offset = send_status_itr->send_offset
- + send_status_itr->send_possible_size;
+ next_response_offset = send_status_add.send_offset
+ + send_status_add.send_possible_size;
}
break;
}
+ send_status_itr++;
+
}
}
edit_data_itr->insert_position -= send_status_itr->send_end_size;
+ edit_data_itr++;
+
}
send_status_itr->send_end_size = 0;
break;
}
+ recive_data_itr++;
+
}
}
break;
}
+ recive_data_itr++;
+
}
}