OSDN Git Service

20090128版のjhcコードをマージ
authornakai <nakai@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Thu, 29 Jan 2009 01:23:57 +0000 (01:23 +0000)
committernakai <nakai@1ed66053-1c2d-0410-8867-f7571e6e31d3>
Thu, 29 Jan 2009 01:23:57 +0000 (01:23 +0000)
git-svn-id: http://10.144.169.20/repos/um/branches/l7vsd-3.x-shamshel@6436 1ed66053-1c2d-0410-8867-f7571e6e31d3

module/protocol/protocol_module_sessionless.cpp [new file with mode: 0644]
module/protocol/protocol_module_sessionless.h [new file with mode: 0644]
module/protocol/protocol_module_sslid.cpp [new file with mode: 0644]
module/protocol/protocol_module_sslid.h [new file with mode: 0644]
unit_tests/sessionless/Makefile [new file with mode: 0644]
unit_tests/sessionless/sessionless_ut.cpp [new file with mode: 0644]
unit_tests/sslid/protocol_module_sslid_test.cpp [new file with mode: 0644]
unit_tests/sslid/ssl_protocol_module_base_test.cpp [new file with mode: 0644]

diff --git a/module/protocol/protocol_module_sessionless.cpp b/module/protocol/protocol_module_sessionless.cpp
new file mode 100644 (file)
index 0000000..c593d07
--- /dev/null
@@ -0,0 +1,2440 @@
+#include <vector>\r
+#include <list>\r
+#include <sstream>\r
+#include <boost/thread/pthread/mutex.hpp>\r
+#include <boost/asio/ip/tcp.hpp>\r
+#include <boost/regex.hpp>\r
+#include <boost/format.hpp>\r
+#include "protocol_module_sessionless.h"\r
+\r
+namespace l7vs\r
+{\r
+//construct\r
+protocol_module_sessionless::protocol_module_sessionless() :\r
+       http_protocol_module_base(MODULE_NAME)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010000, "in/out_function: protocol_module_sessionless::"\r
+                       "protocol_module_sessionless()", __FILE__, __LINE__ );\r
+\r
+               boost::format formatter(\r
+                               "out_function: protocol_module_sessionless::protocol_module_sessionless(): "\r
+                                       "modename=%s");\r
+               formatter % MODULE_NAME;\r
+               putLogDebug(010001, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+}\r
+//desconstruct\r
+protocol_module_sessionless::~protocol_module_sessionless()\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010002, "in/out_function: protocol_module_sessionless::"\r
+                       "~protocol_module_sessionless()", __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+}\r
+//! tcp protocol support check\r
+//! @return tcp support is true\r
+//! @return tcp not-support is false\r
+bool protocol_module_sessionless::is_tcp()\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010003,\r
+                               "in/out_function: bool protocol_module_sessionless::is_tcp(): "\r
+                                       "return_value=true", __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       return true;\r
+}\r
+\r
+//! udp protocol support check\r
+//! @return udp support is true\r
+//! @return udp not-support is false\r
+bool protocol_module_sessionless::is_udp()\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010004,\r
+                               "in/out_function: bool protocol_module_sessionless::is_udp(): "\r
+                                       "return_value=false", __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       return false;\r
+}\r
+\r
+//replication\97p\83C\83\93\83^\81[\83t\83F\83C\83X\r
+void protocol_module_sessionless::replication_interrupt()\r
+{\r
+}\r
+/*!\r
+ *initialize\r
+ *\r
+ *@param [in] inrslist_begin\r
+ *@param [in] inrslist_end\r
+ *@param [in] inrslist_next\r
+ *@param [in] inlist_lock\r
+ *@param [in] inlist_unlock\r
+ */\r
+void protocol_module_sessionless::initialize(\r
+               rs_list_itr_func_type inrslist_begin,\r
+               rs_list_itr_func_type inrslist_end,\r
+               rs_list_itr_func_type inrslist_next,\r
+               boost::function<void(void)> inlist_lock,\r
+               boost::function<void(void)> inlist_unlock)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(\r
+                               010005,\r
+                               "in_function: void protocol_module_sessionless::initialize("\r
+                                       "rs_list_itr_func_type inlist_begin, rs_list_itr_func_type inlist_end,"\r
+                                       "rs_list_itr_func_type inlist_next,boost::function< void( void ) >      "\r
+                                       "inlist_lock,boost::function< void( void ) >    inlist_unlock )",\r
+                               __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+\r
+       //RealServer\83\8a\83X\83g\82Ì\8ae\91\80\8dì\8aÖ\90\94\82ð\90Ý\92è\82·\82é\r
+       //RealServer\83\8a\83X\83g\90æ\93ª\8eæ\93¾\8aÖ\90\94\r
+       rs_list_begin = inrslist_begin;\r
+       //RealServer\83\8a\83X\83g\96\96\92[\8eæ\93¾\8aÖ\90\94\r
+       rs_list_end = inrslist_end;\r
+       //RealServer\83\8a\83X\83g\8e\9f\97v\91f\8eæ\93¾\8aÖ\90\94\r
+       rs_list_next = inrslist_next;\r
+       //RealServer\83\8a\83X\83g\83\8d\83b\83N\8aÖ\90\94\r
+       rs_list_lock = inlist_lock;\r
+       //RealServer\83\8a\83X\83g\83A\83\93\83\8d\83b\83N\8aÖ\90\94\r
+       rs_list_unlock = inlist_unlock;\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(\r
+                               010006,\r
+                               "out_function: void protocol_module_sessionless::initialize("\r
+                                       "rs_list_itr_func_type inlist_begin, rs_list_itr_func_type inlist_end,"\r
+                                       "rs_list_itr_func_type inlist_next,boost::function< void( void ) >      "\r
+                                       "inlist_lock,boost::function< void( void ) >    inlist_unlock )",\r
+                               __FILE__, __LINE__ );\r
+       }\r
+       /*-------- DEBUG LOG --------*/\r
+}\r
+\r
+/*!\r
+ *finalize\r
+ *\r
+ */\r
+void protocol_module_sessionless::finalize()\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010007,\r
+                               "int_function: void protocol_module_sessionless::finalize()",\r
+                               __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+\r
+       //\83\8d\83O\8fo\97Í\82Ì\8ae\91\80\8dì\8aÖ\90\94\82ð\8f\89\8aú\89»\82·\82é\r
+       //\83\8d\83O\83\8c\83x\83\8b\8eæ\93¾\8aÖ\90\94\r
+       getloglevel.clear();\r
+       //\83\8d\83O\8fo\97Í\8aÖ\90\94\81iFatal\81j\r
+       putLogFatal.clear();\r
+       //\83\8d\83O\8fo\97Í\8aÖ\90\94\81iError\81j\r
+       putLogError.clear();\r
+       //\83\8d\83O\8fo\97Í\8aÖ\90\94\81iWarn\81j\r
+       putLogWarn.clear();\r
+       //\83\8d\83O\8fo\97Í\8aÖ\90\94\81iInfo\81j\r
+       putLogInfo.clear();\r
+       //\83\8d\83O\8fo\97Í\8aÖ\90\94\81iDebug\81j\r
+       putLogDebug.clear();\r
+\r
+       //RealServer\83\8a\83X\83g\82Ì\8ae\91\80\8dì\8aÖ\90\94\82ð\8f\89\8aú\89»\82·\82é\r
+       //RealServer\83\8a\83X\83g\90æ\93ª\8eæ\93¾\8aÖ\90\94\r
+       rs_list_begin.clear();\r
+       //RealServer\83\8a\83X\83g\96\96\92[\8eæ\93¾\8aÖ\90\94\r
+       rs_list_end.clear();\r
+       //RealServer\83\8a\83X\83g\8e\9f\97v\91f\8eæ\93¾\8aÖ\90\94\r
+       rs_list_next.clear();\r
+       //RealServer\83\8a\83X\83g\83\8d\83b\83N\8aÖ\90\94\r
+       rs_list_lock.clear();\r
+       //RealServer\83\8a\83X\83g\83A\83\93\83\8d\83b\83N\8aÖ\90\94\r
+       rs_list_unlock.clear();\r
+\r
+       //Replication\82Ì\8ae\91\80\8dì\8aÖ\90\94\82ð\8f\89\8aú\89»\82·\82é\r
+       //\83R\83\93\83|\81[\83l\83\93\83g\97Ì\88æ\8a\84\82è\93\96\82Ä\8aÖ\90\94\r
+       replication_pay_memory.clear();\r
+       //\83R\83\93\83|\81[\83l\83\93\83g\97Ì\88æ\83\8d\83b\83N\8aÖ\90\94\r
+       replication_area_lock.clear();\r
+       //\83R\83\93\83|\81[\83l\83\93\83g\97Ì\88æ\83A\83\93\83\8d\83b\83N\8aÖ\90\94\r
+       replication_area_unlock.clear();\r
+\r
+       //ScheduleModule\82Ì\90U\95ª\8aÖ\90\94\82ð\8f\89\8aú\89»\82·\82é\r
+       //Client\90U\82è\95ª\82¯\8f\88\97\9d\8aÖ\90\94\r
+       schedule_tcp.clear();\r
+       schedule_udp.clear();\r
+\r
+       //\8ae\83\82\83W\83\85\81[\83\8b\83I\83v\83V\83\87\83\93\82ð\8f\89\8aú\89»\82·\82é\r
+       //\91\97\90M\8c³\90Ý\92è\8ew\8e¦\r
+       forwarded_for = 0;\r
+       //sorryURI\r
+       boost::array<char, MAX_OPTION_SIZE> tmp;\r
+       sorry_uri.swap(tmp);\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010007,\r
+                               "out_function: void protocol_module_sessionless::finalize()",\r
+                               __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+}\r
+\r
+/*!\r
+ *is_use_sorry\r
+ *\r
+ */\r
+bool protocol_module_sessionless::is_use_sorry()\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010007,\r
+                               "in/out_function: bool protocol_module_sessionless::is_use_sorry(): "\r
+                                       "return_value=true", __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       return true;\r
+}\r
+\r
+/*!\r
+ *check_parameter\r
+ *\r
+ *@param [in] args\r
+ *@retval     check_message_result_return\r
+ */\r
+protocol_module_sessionless::check_message_result protocol_module_sessionless::check_parameter(\r
+               const std::vector<std::string>& args)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format formatter(\r
+                               "int_function: protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::check_parameter("\r
+                                       "const std::vector<std::string>& args ): args=%s");\r
+               std::string argsdump;\r
+               for (std::vector<std::string>::const_iterator it = args.begin(); it\r
+                               != args.end(); ++it)\r
+               {\r
+                       argsdump += *it;\r
+               }\r
+               formatter % argsdump;\r
+               putLogDebug(010010, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+\r
+       //\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       check_message_result check_result;\r
+       check_result.flag = true;\r
+       bool forward_checked = false;\r
+       bool sorryuri_checked = false;\r
+       const std::string regex_match_str = "([^?#]*)(\\?([^#]*))?(#(.*))?";\r
+\r
+       //\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ\82Ì\97v\91f\90\94\95ª\8cJ\82è\95Ô\82µ\r
+       typedef std::vector<std::string>::const_iterator vec_str_it;\r
+\r
+       try\r
+       {\r
+               vec_str_it it = args.begin();\r
+               vec_str_it it_end = args.end();\r
+               for (; it != it_end; ++it)\r
+               {\r
+                       //\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-F"\r
+                       if (*it == "-F" || *it == "--forward-for")\r
+                       {\r
+                               //\91\97\90M\8c³\90Ý\92è\8ew\8e¦\90Ý\92è\83t\83\89\83O\82ðON\r
+                               forward_checked = true;\r
+                       }\r
+                       //\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S"\r
+                       else if (*it == "-S" || *it == "--sorryURI")\r
+                       {\r
+                               //sorryURI\90Ý\92è\83t\83\89\83O = OFF\r
+                               if (!sorryuri_checked)\r
+                               {\r
+                                       //\8e\9f\97v\91f\82ª\91\8dÝ\82·\82é\8fê\8d\87\r
+                                       if (++it != it_end)\r
+                                       {\r
+                                               //\8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· \81\84 127\r
+                                               if (it->size() > 127)\r
+                                               {\r
+                                                       std::ostringstream ostr;\r
+                                                       ostr << "\"-S/--sorryURI\" option value'" << *it\r
+                                                                       << "'is too long.";\r
+\r
+                                                       //\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é\r
+                                                       check_result.flag = false;\r
+                                                       //\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é\r
+                                                       check_result.message = ostr.str();\r
+                                                       putLogError(0170000, check_result.message,\r
+                                                                       __FILE__, __LINE__ );\r
+                                                       //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                                                       break;\r
+                                               }\r
+                                               //\8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· \81\85 127\r
+                                               else\r
+                                               {\r
+                                                       //\90³\8bK\95\\8c»\82ÅURI\81ihttp\82©\82ç\83|\81[\83g\82Ü\82Å\82Ì\95\94\95ª\82ð\91Î\8fÛ\8aO\81j\82Ì\91Ã\93\96\90«\82ð\83`\83F\83b\83N\82·\82é\r
+                                                       //\90³\8bK\95\\8c»\82Í([^?#]*)(\?([^#]*))?(#(.*))?\92Ê\82è\r
+                                                       boost::regex uri(regex_match_str);\r
+                                                       boost::cmatch what;\r
+                                                       if (boost::regex_match(it->c_str(), what, uri))\r
+                                                       {\r
+                                                               //\83`\83F\83b\83NOK\82Ì\8fê\8d\87\r
+                                                               //sorryURI\90Ý\92è\83t\83\89\83O\82ðON\r
+                                                               sorryuri_checked = true;\r
+                                                       }\r
+                                                       //\83`\83F\83b\83NNG\82Ì\8fê\8d\87\r
+                                                       else\r
+                                                       {\r
+                                                               std::ostringstream ostr;\r
+                                                               ostr << "\"-S/--sorryURI\" option value '"\r
+                                                                               << *it << "' is not a valid URI.";\r
+\r
+                                                               //\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é\r
+                                                               check_result.flag = false;\r
+                                                               //\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é\r
+                                                               check_result.message = ostr.str();\r
+                                                               putLogError(0170000, check_result.message,\r
+                                                                               __FILE__, __LINE__ );\r
+                                                               //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       //\8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+                                       else\r
+                                       {\r
+                                               //\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é\r
+                                               check_result.flag = false;\r
+                                               //\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é\r
+                                               check_result.message\r
+                                                               = "You have to set option value \"-S/--sorryURI\".";\r
+                                               putLogError(0170000, check_result.message, __FILE__,\r
+                                               __LINE__ );\r
+                                               //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               //sorryURI\90Ý\92è\83t\83\89\83O = ON\r
+                               else\r
+                               {\r
+                                       //\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é\r
+                                       check_result.flag = false;\r
+                                       //\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é\r
+                                       check_result.message\r
+                                                       = "Cannot set multiple option \"-S/--sorryURI\".";\r
+                                       putLogError(0170000, check_result.message, __FILE__,\r
+                                       __LINE__ );\r
+                                       //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                                       break;\r
+                               }\r
+                       }\r
+                       //\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = \8fã\8bL\88È\8aO\r
+                       else\r
+                       {\r
+                               //\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é\r
+                               check_result.flag = false;\r
+                               //\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é\r
+                               check_result.message = "Option error.";\r
+                               putLogError(0170000, check_result.message, __FILE__, __LINE__ );\r
+                               //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                               break;\r
+                       }\r
+               }\r
+       } catch (const std::exception& ex)\r
+       {\r
+               check_result.flag = false;\r
+               std::cerr << "check parameter exception: result=false, error="\r
+                               << ex.what() << "." << std::endl;\r
+               boost::format formatter(\r
+                               "function protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::check_parameter() exception: "\r
+                                       "result=false, error=%s.");\r
+               formatter % ex.what();\r
+               putLogError(0170000, formatter.str(), __FILE__, __LINE__ );\r
+       } catch (...)\r
+       {\r
+               check_result.flag = false;\r
+               std::cerr << "Unkown exception." << std::endl;\r
+               putLogError(0170000,\r
+                               "function protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::check_parameter() :"\r
+                                       "Unkown exception.", __FILE__, __LINE__ );\r
+       }\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "out_function: protocol_module_sessionless::check_message_result "\r
+                                                       "protocol_module_sessionless::check_parameter("\r
+                                                       "const std::vector<std::string>& args ): return_value=("\r
+                                                       "check_message_result.flag=%d, check_message_result.message=%s");\r
+               formatter % check_result.flag % check_result.message;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       return check_result;\r
+}\r
+\r
+/*!\r
+ *set_parameter\r
+ *\r
+ *@param [in] args\r
+ *@retval\r
+ */\r
+protocol_module_sessionless::check_message_result protocol_module_sessionless::set_parameter(\r
+               const std::vector<std::string>& args)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format formatter(\r
+                               "int_function: protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::set_parameter("\r
+                                       "const std::vector<std::string>& args ): args=%s");\r
+               std::string argsdump;\r
+               for (std::vector<std::string>::const_iterator it = args.begin(); it\r
+                               != args.end(); ++it)\r
+               {\r
+                       argsdump += *it;\r
+               }\r
+               formatter % argsdump;\r
+               putLogDebug(010010, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       //TRUE\r
+       check_message_result check_result;\r
+       check_result.flag = true;\r
+       bool forward_checked = false;\r
+       bool sorryuri_checked = false;\r
+       const std::string regex_match_str = "([^?#]*)(\\?([^#]*))?(#(.*))?";\r
+\r
+       //\r
+       typedef std::vector<std::string>::const_iterator vec_str_it;\r
+       vec_str_it it = args.begin();\r
+       vec_str_it it_end = args.end();\r
+\r
+       //1\r
+       forwarded_for = 1;\r
+\r
+       try\r
+       {\r
+               for (; it != it_end; ++it)\r
+               {\r
+                       // = "-F"\r
+                       if (*it == "-F" || *it == "--forward-for")\r
+                       {\r
+                               //ON\r
+                               forward_checked = true;\r
+                       }\r
+                       // = "-S"\r
+                       else if (*it == "-S" || *it == "--sorryURI")\r
+                       {\r
+                               //sorryURI = OFF\r
+                               if (!sorryuri_checked)\r
+                               {\r
+                                       //\r
+                                       if (++it != it_end)\r
+                                       {\r
+                                               //  127\r
+                                               if (it->size() > 127)\r
+                                               {\r
+                                                       std::ostringstream ostr;\r
+                                                       ostr << "\"-S/--sorryURI\" option value'" << *it\r
+                                                                       << "'is too long.";\r
+\r
+                                                       //FALSE\r
+                                                       check_result.flag = false;\r
+                                                       //\r
+                                                       check_result.message = ostr.str();\r
+                                                       //\r
+                                                       break;\r
+                                               }\r
+                                               //  127\r
+                                               else\r
+                                               {\r
+                                                       //URIhttp\r
+                                                       //([^?#]*)(\?([^#]*))?(#(.*))?\r
+                                                       boost::regex uri(regex_match_str);\r
+                                                       boost::cmatch what;\r
+                                                       if (boost::regex_match(it->c_str(), what, uri))\r
+                                                       {\r
+                                                               //OK\r
+                                                               //sorryURION\r
+                                                               sorryuri_checked = true;\r
+                                                       }\r
+                                                       //NG\r
+                                                       else\r
+                                                       {\r
+                                                               std::ostringstream ostr;\r
+                                                               ostr << "\"-S/--sorryURI\" option value '"\r
+                                                                               << *it << "' is not a valid URI.";\r
+\r
+                                                               //FALSE\r
+                                                               check_result.flag = false;\r
+                                                               //\r
+                                                               check_result.message = ostr.str();\r
+                                                               //\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       //\r
+                                       else\r
+                                       {\r
+                                               //FALSE\r
+                                               check_result.flag = false;\r
+                                               //\r
+                                               check_result.message\r
+                                                               = "You have to set option value \"-S/--sorryURI\".";\r
+                                               //\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               //sorryURI = ON\r
+                               else\r
+                               {\r
+                                       //FALSE\r
+                                       check_result.flag = false;\r
+                                       //\r
+                                       check_result.message\r
+                                                       = "Cannot set multiple option \"-S/--sorryURI\".";\r
+                                       //\r
+                                       break;\r
+                               }\r
+                       }\r
+                       // = \r
+                       else\r
+                       {\r
+                               //FALSE\r
+                               check_result.flag = false;\r
+                               //\r
+                               check_result.message = "Option error.";\r
+                               //\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               if (check_result.flag == true)\r
+               {\r
+                       // = OFF\r
+                       if (!forward_checked)\r
+                       {\r
+                               //0\r
+                               forwarded_for = 0;\r
+                       }\r
+               }\r
+\r
+       } catch (const std::exception& ex)\r
+       {\r
+               check_result.flag = false;\r
+               std::cerr << "set parameter exception: result=false, error="\r
+                               << ex.what() << "." << std::endl;\r
+               boost::format formatter(\r
+                               "function protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::set_parameter() exception: "\r
+                                       "result=false, error=%s.");\r
+               formatter % ex.what();\r
+               putLogError(0170000, formatter.str(), __FILE__, __LINE__ );\r
+       } catch (...)\r
+       {\r
+               check_result.flag = false;\r
+               std::cerr << "Unkown exception." << std::endl;\r
+               putLogError(0170000,\r
+                               "function protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::set_parameter() :"\r
+                                       "Unkown exception.", __FILE__, __LINE__ );\r
+       }\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "out_function: protocol_module_sessionless::check_message_result "\r
+                                                       "protocol_module_sessionless::set_parameter("\r
+                                                       "const std::vector<std::string>& args ): return_value=("\r
+                                                       "check_message_result.flag=%d, check_message_result.message=%s");\r
+               formatter % check_result.flag % check_result.message;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+\r
+       return check_result;\r
+\r
+}\r
+\r
+/*!\r
+ *add_parameter\r
+ *\r
+ *@param [in] args\r
+ *@retval\r
+ */\r
+protocol_module_sessionless::check_message_result protocol_module_sessionless::add_parameter(\r
+               const std::vector<std::string>& args)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format formatter(\r
+                               "in_function: protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::add_parameter("\r
+                                       "const std::vector<std::string>& args ): args=%s");\r
+               std::string argsdump;\r
+               for (std::vector<std::string>::const_iterator it = args.begin(); it\r
+                               != args.end(); ++it)\r
+               {\r
+                       argsdump += *it;\r
+               }\r
+               formatter % argsdump;\r
+               putLogDebug(010010, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       check_message_result check_result;\r
+       //TRUE\r
+       check_result.flag = true;\r
+\r
+       //\r
+       if (!args.empty())\r
+       {\r
+               //FALSE\r
+               check_result.flag = false;\r
+               //\r
+               check_result.message = "Cannot add option.";\r
+       }\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "out_function: protocol_module_sessionless::add_parameter "\r
+                                                       "protocol_module_sessionless::set_parameter("\r
+                                                       "const std::vector<std::string>& args ): return_value=("\r
+                                                       "check_message_result.flag=%d, check_message_result.message=%s");\r
+               formatter % check_result.flag % check_result.message;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+\r
+       return check_result;\r
+}\r
+\r
+/*!\r
+ *handle_rslist_update\r
+ *\r
+ */\r
+void protocol_module_sessionless::handle_rslist_update()\r
+{\r
+}\r
+\r
+/*!\r
+ *register_schedule\r
+ *\r
+ *@param [in] inschedule\r
+ *@retval\r
+ */\r
+void protocol_module_sessionless::register_schedule(\r
+               tcp_schedule_func_type inschedule)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010005,\r
+                               "in_function: void protocol_module_sessionless::register_schedule( "\r
+                                       "tcp_schedule_func_type inschedule )", __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       schedule_tcp = inschedule;\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010005,\r
+                               "out_function: void protocol_module_sessionless::register_schedule( "\r
+                                       "tcp_schedule_func_type inschedule )", __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+}\r
+\r
+/*!\r
+ *register_schedule\r
+ *\r
+ *@param [in] inschedule\r
+ *@retval\r
+ */\r
+void protocol_module_sessionless::register_schedule(\r
+               udp_schedule_func_type inschedule)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               putLogDebug(010002,\r
+                               "in/out_function:void protocol_module_sessionless::register_schedule(): "\r
+                                       "return_value=void", __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+}\r
+\r
+/*!\r
+ *handle_session_initialize\r
+ *\r
+ *@param [in] up_thread_id\r
+ *@param [in] down_thread_id\r
+ *@retval\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_session_initialize(\r
+               const boost::thread::id up_thread_id,\r
+               const boost::thread::id down_thread_id)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "in_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_session_initialize( const boost::thread::id up_thread_id, "\r
+                                                       "const boost::thread::id down_thread_id ): "\r
+                                                       "up_thread_id=%d, down_thread_id=%d");\r
+               formatter % up_thread_id % down_thread_id;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       session_thread_data_sessionless* p_up = NULL;\r
+       session_thread_data_sessionless* p_down = NULL;\r
+\r
+       //\83Z\83b\83V\83\87\83\93\83X\83\8c\83b\83h\82É\91Î\89\9e\82·\82é\8f\89\8aú\8f\88\97\9d\82ð\8ds\82¤\r
+       try\r
+       {\r
+               p_up = new session_thread_data_sessionless;\r
+               /*-------- DEBUG LOG --------*/\r
+               if (LOG_LV_DEBUG == getloglevel())\r
+               {\r
+                       boost::format formatter("new: address=&(%d), size=%lu");\r
+                       formatter % &p_up % sizeof(session_thread_data_sessionless);\r
+                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+               }\r
+               /*------DEBUG LOG END------*/\r
+               p_up->thread_id = up_thread_id;\r
+               p_up->thread_division = THREAD_DIVISION_UP_STREAM;\r
+               p_up->pair_thread_id = down_thread_id;\r
+               p_up->accept_end_flag = ACCEPT_END_FLAG_OFF;\r
+               p_up->end_flag = END_FLAG_OFF;\r
+               p_up->sorry_flag = SORRY_FLAG_OFF;\r
+               p_up->sorryserver_switch_flag = SORRYSERVER_SWITCH_FLAG_OFF;\r
+               p_up->realserver_switch_flag = REALSERVER_SWITCH_FLAG_OFF;\r
+               p_up->last_status = INITIALIZE;\r
+\r
+               /*-------- DEBUG LOG --------*/\r
+               if (LOG_LV_DEBUG == getloglevel())\r
+               {\r
+                       // data dump\r
+                       boost::format\r
+                                       formatter(\r
+                                                       "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                               "handle_session_initialize() : session_thread_data_sslid(upthread) : "\r
+                                                               "thread_id=%d, thread_division=%d, "\r
+                                                               "pair_thread_id=%d, accept_end_flag=%d, end_flag=%d,"\r
+                                                               "sorry_flag=%d, sorryserver_switch_flag=%d, realserver_switch_flag=%d, last_status=%d.");\r
+                       formatter % p_up->thread_id % p_up->thread_division\r
+                                       % p_up->pair_thread_id % p_up->accept_end_flag\r
+                                       % p_up->end_flag % p_up->sorry_flag\r
+                                       % p_up->sorryserver_switch_flag\r
+                                       % p_up->realserver_switch_flag % p_up->last_status;\r
+                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+               }\r
+               /*------DEBUG LOG END------*/\r
+\r
+               p_down = new session_thread_data_sessionless;\r
+               /*-------- DEBUG LOG --------*/\r
+               if (LOG_LV_DEBUG == getloglevel())\r
+               {\r
+                       boost::format formatter("new: address=&(%d), size=%lu");\r
+                       formatter % &p_down % sizeof(session_thread_data_sessionless);\r
+                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+               }\r
+               /*------DEBUG LOG END------*/\r
+               p_down->thread_id = down_thread_id;\r
+               p_down->thread_division = THREAD_DIVISION_DOWN_STREAM;\r
+               p_down->pair_thread_id = up_thread_id;\r
+               p_down->accept_end_flag = ACCEPT_END_FLAG_OFF;\r
+               p_down->end_flag = END_FLAG_OFF;\r
+               p_down->sorry_flag = SORRY_FLAG_OFF;\r
+               p_down->sorryserver_switch_flag = SORRYSERVER_SWITCH_FLAG_OFF;\r
+               p_down->realserver_switch_flag = REALSERVER_SWITCH_FLAG_OFF;\r
+               p_down->last_status = INITIALIZE;\r
+               /*-------- DEBUG LOG --------*/\r
+               if (LOG_LV_DEBUG == getloglevel())\r
+               {\r
+                       // data dump\r
+                       boost::format\r
+                                       formatter(\r
+                                                       "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                               "handle_session_initialize() : session_thread_data_sslid(down_thread_id) : "\r
+                                                               "accept_end_flag=%d, end_flag=%d, "\r
+                                                               "pair_thread_id=%d, realserver_switch_flag=%d, sorry_flag=%d,"\r
+                                                               "thread_division=%d, thread_id=%d, last_status=%d.");\r
+                       formatter % p_down->thread_id % p_down->thread_division\r
+                                       % p_down->pair_thread_id % p_down->accept_end_flag\r
+                                       % p_down->end_flag % p_down->sorry_flag\r
+                                       % p_down->sorryserver_switch_flag\r
+                                       % p_down->realserver_switch_flag % p_down->last_status;\r
+                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+               }\r
+               /*------DEBUG LOG END------*/\r
+\r
+       } catch (const std::bad_alloc& ex)\r
+       {\r
+               std::cerr\r
+                               << "handle_session_initialize exception: Could not allocate memory."\r
+                               << std::endl;\r
+               putLogError(017000, "Could not allocate memory.", __FILE__, __LINE__ );\r
+               return FINALIZE;\r
+       }\r
+\r
+       try\r
+       {\r
+               boost::mutex::scoped_lock slock(session_thread_data_map_mutex);\r
+               session_thread_data_map[up_thread_id] = p_up;\r
+               session_thread_data_map[down_thread_id] = p_down;\r
+       } catch (const std::exception& ex)\r
+       {\r
+               std::cerr << "handle_session_initialize exception: error=%s"\r
+                               << ex.what() << "." << std::endl;\r
+               boost::format\r
+                               formatter(\r
+                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_session_initialize() exception: result=%d, error=%s.");\r
+               formatter % ex.what();\r
+               putLogError(0170000, formatter.str(), __FILE__, __LINE__ );\r
+               return FINALIZE;\r
+       } catch (...)\r
+       {\r
+               std::cerr << "Unkown exception." << std::endl;\r
+               putLogError(0170000,\r
+                               "function protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::handle_session_initialize() : "\r
+                                       "Unkown exception.", __FILE__, __LINE__ );\r
+\r
+               return FINALIZE;\r
+       }\r
+\r
+       return ACCEPT;\r
+}\r
+/*!\r
+ *handle_session_finalize\r
+ *\r
+ *@param [in] up_thread_id\r
+ *@param [in] down_thread_id\r
+ *@retval\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_session_finalize(\r
+               const boost::thread::id up_thread_id,\r
+               const boost::thread::id down_thread_id)\r
+{\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "in_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_session_finalize( const boost::thread::id up_thread_id, "\r
+                                                       "const boost::thread::id down_thread_id ): "\r
+                                                       "up_thread_id=%d, down_thread_id=%d");\r
+               formatter % up_thread_id % down_thread_id;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       session_thread_data_sessionless* p_up = NULL;\r
+       session_thread_data_sessionless* p_down = NULL;\r
+       boost::asio::ip::tcp::endpoint endpoint;\r
+       //\83Z\83b\83V\83\87\83\93\83X\83\8c\83b\83h\82É\91Î\89\9e\82·\82é\8fI\97¹\8f\88\97\9d\82ð\8ds\82¤\r
+       try\r
+       {\r
+               boost::mutex::scoped_lock slock(session_thread_data_map_mutex);\r
+               if (session_thread_data_map.find(up_thread_id)\r
+                               != session_thread_data_map.end())\r
+               {\r
+                       p_up = session_thread_data_map[up_thread_id];\r
+                       if (p_up->recive_data_map.find(endpoint)\r
+                                       != p_up->recive_data_map.end())\r
+                       {\r
+                               char*& recive_buffer =\r
+                                               p_up->recive_data_map[endpoint].recive_buffer;\r
+                               if (recive_buffer != NULL)\r
+                               {\r
+                                       if (recive_buffer\r
+                                                       == p_up->recive_data_map[endpoint].recive_buffer1)\r
+                                       {\r
+                                               if (p_up->recive_data_map[endpoint].recive_buffer2\r
+                                                               != NULL)\r
+                                               {\r
+                                                       /*-------- DEBUG LOG --------*/\r
+                                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                                       {\r
+                                                               boost::format\r
+                                                                               formatter("delete: address=&(%d)");\r
+                                                               formatter\r
+                                                                               % p_up->recive_data_map[endpoint].recive_buffer2;\r
+                                                               putLogDebug(010005, formatter.str(), __FILE__,\r
+                                                               __LINE__ );\r
+                                                       }\r
+                                                       /*------DEBUG LOG END------*/\r
+                                                       delete[] p_up->recive_data_map[endpoint].recive_buffer2;\r
+                                                       p_up->recive_data_map[endpoint].recive_buffer2\r
+                                                                       = NULL;\r
+                                               }\r
+                                               p_up->recive_data_map[endpoint].recive_buffer1 = NULL;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if (p_up->recive_data_map[endpoint].recive_buffer1\r
+                                                               != NULL)\r
+                                               {\r
+                                                       /*-------- DEBUG LOG --------*/\r
+                                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                                       {\r
+                                                               boost::format\r
+                                                                               formatter("delete: address=&(%d)");\r
+                                                               formatter\r
+                                                                               % p_up->recive_data_map[endpoint].recive_buffer1;\r
+                                                               putLogDebug(010005, formatter.str(), __FILE__,\r
+                                                               __LINE__ );\r
+                                                       }\r
+                                                       /*------DEBUG LOG END------*/\r
+                                                       delete[] p_up->recive_data_map[endpoint].recive_buffer1;\r
+                                                       p_up->recive_data_map[endpoint].recive_buffer1\r
+                                                                       = NULL;\r
+                                               }\r
+                                               p_up->recive_data_map[endpoint].recive_buffer2 = NULL;\r
+                                       }\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("delete: address=&(%d)");\r
+                                               formatter % recive_buffer;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       delete[] recive_buffer;\r
+                                       recive_buffer = NULL;\r
+                               }\r
+                       }\r
+\r
+                       /*-------- DEBUG LOG --------*/\r
+                       if (LOG_LV_DEBUG == getloglevel())\r
+                       {\r
+                               boost::format formatter("delete: address=&(%d)");\r
+                               formatter % p_up;\r
+                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                       }\r
+                       /*------DEBUG LOG END------*/\r
+                       delete p_up;\r
+                       session_thread_data_map.erase(up_thread_id);\r
+               }\r
+\r
+               if (session_thread_data_map.find(down_thread_id)\r
+                               != session_thread_data_map.end())\r
+               {\r
+                       p_down = session_thread_data_map[down_thread_id];\r
+                       if (p_down->recive_data_map.find(p_down->endpoint)\r
+                                       != p_up->recive_data_map.end())\r
+                       {\r
+                               char*& recive_buffer =\r
+                                               p_down->recive_data_map[p_down->endpoint].recive_buffer;\r
+                               if (recive_buffer != NULL)\r
+                               {\r
+                                       if (recive_buffer\r
+                                                       == p_down->recive_data_map[p_down->endpoint].recive_buffer1)\r
+                                       {\r
+                                               if (p_down->recive_data_map[p_down->endpoint].recive_buffer2\r
+                                                               != NULL)\r
+                                               {\r
+                                                       /*-------- DEBUG LOG --------*/\r
+                                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                                       {\r
+                                                               boost::format\r
+                                                                               formatter("delete: address=&(%d)");\r
+                                                               formatter\r
+                                                                               % p_down->recive_data_map[p_down->endpoint].recive_buffer2;\r
+                                                               putLogDebug(010005, formatter.str(), __FILE__,\r
+                                                               __LINE__ );\r
+                                                       }\r
+                                                       /*------DEBUG LOG END------*/\r
+                                                       delete[] p_down->recive_data_map[p_down->endpoint].recive_buffer2;\r
+                                                       p_down->recive_data_map[p_down->endpoint].recive_buffer2\r
+                                                                       = NULL;\r
+                                               }\r
+                                               p_down->recive_data_map[p_down->endpoint].recive_buffer1\r
+                                                               = NULL;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if (p_down->recive_data_map[p_down->endpoint].recive_buffer1\r
+                                                               != NULL)\r
+                                               {\r
+                                                       /*-------- DEBUG LOG --------*/\r
+                                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                                       {\r
+                                                               boost::format\r
+                                                                               formatter("delete: address=&(%d)");\r
+                                                               formatter\r
+                                                                               % p_down->recive_data_map[p_down->endpoint].recive_buffer1;\r
+                                                               putLogDebug(010005, formatter.str(), __FILE__,\r
+                                                               __LINE__ );\r
+                                                       }\r
+                                                       /*------DEBUG LOG END------*/\r
+                                                       delete[] p_down->recive_data_map[p_down->endpoint].recive_buffer1;\r
+                                                       p_down->recive_data_map[p_down->endpoint].recive_buffer1\r
+                                                                       = NULL;\r
+                                               }\r
+                                               p_down->recive_data_map[p_down->endpoint].recive_buffer2\r
+                                                               = NULL;\r
+                                       }\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("delete: address=&(%d)");\r
+                                               formatter % recive_buffer;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__,\r
+                                               __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       delete[] recive_buffer;\r
+                                       recive_buffer = NULL;\r
+                               }\r
+                       }\r
+\r
+                       p_down = session_thread_data_map[down_thread_id];\r
+                       /*-------- DEBUG LOG --------*/\r
+                       if (LOG_LV_DEBUG == getloglevel())\r
+                       {\r
+                               boost::format formatter("delete: address=&(%d)");\r
+                               formatter % p_down;\r
+                               putLogDebug(010005, formatter.str(), __FILE__,\r
+                               __LINE__ );\r
+                       }\r
+                       /*------DEBUG LOG END------*/\r
+                       delete p_down;\r
+                       session_thread_data_map.erase(down_thread_id);\r
+               }\r
+       } catch (const std::exception& ex)\r
+       {\r
+               std::cerr << "handle_session_finalize exception: error=%s" << ex.what()\r
+                               << "." << std::endl;\r
+               boost::format\r
+                               formatter(\r
+                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_session_finalize() exception: result=%d, error=%s.");\r
+               formatter % STOP % ex.what();\r
+               putLogError(0170000, formatter.str(), __FILE__, __LINE__ );\r
+       } catch (...)\r
+       {\r
+               std::cerr << "Unkown exception." << std::endl;\r
+               boost::format\r
+                               formatter(\r
+                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_session_finalize() exception: result=%d.");\r
+               formatter % STOP;\r
+               putLogError(0170000, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_session_finalize( const boost::thread::id up_thread_id,"\r
+                                                       "const boost::thread::id down_thread_id ): return_value=%d");\r
+               formatter % STOP;\r
+               putLogDebug(030005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       return STOP;\r
+}\r
+\r
+/*!\r
+ *handle_accept\r
+ *\r
+ *@param [in] thread_id\r
+ *@retval\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_accept(\r
+               const boost::thread::id thread_id)\r
+{\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "in_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_accept( const boost::thread::id thread_id ): thread_id=%d");\r
+               formatter % thread_id;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       EVENT_TAG status;\r
+       session_thread_data_sessionless* session_data = NULL;\r
+\r
+       try\r
+       {\r
+               boost::mutex::scoped_lock slock(session_thread_data_map_mutex);\r
+               if (session_thread_data_map.find(thread_id)\r
+                               == session_thread_data_map.end())\r
+               {\r
+                       putLogError(0170000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                       return FINALIZE;\r
+               }\r
+\r
+               session_data = session_thread_data_map[thread_id];\r
+\r
+               if (session_data == NULL)\r
+               {\r
+                       putLogError(0170000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                       return FINALIZE;\r
+               }\r
+\r
+       } catch (const std::exception& ex)\r
+       {\r
+               std::cerr << "handle_accept exception: error=%s" << ex.what() << "."\r
+                               << std::endl;\r
+               boost::format\r
+                               formatter(\r
+                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_accept() exception: result=%d, error=%s.");\r
+               formatter % FINALIZE % ex.what();\r
+               putLogError(0170000, formatter.str(), __FILE__, __LINE__ );\r
+\r
+               status = FINALIZE;\r
+       } catch (...)\r
+       {\r
+               std::cerr << "Unkown exception." << std::endl;\r
+               putLogError(0170000,\r
+                               "function protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::handle_accept() : "\r
+                                       "Unkown exception.", __FILE__, __LINE__ );\r
+               status = FINALIZE;\r
+       }\r
+\r
+       //accept\8a®\97¹\83t\83\89\83O\82ðON\r
+       session_data->accept_end_flag = ACCEPT_END_FLAG_ON;\r
+\r
+       //sorry\8fó\91Ô\82Ì\8fê\8d\87\r
+       if (session_data->sorry_flag == SORRY_FLAG_ON)\r
+       {\r
+               //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+               status = SORRYSERVER_SELECT;\r
+       }\r
+       //sorry\8fó\91Ô\88È\8aO\82Ì\8fê\8d\87\r
+       else\r
+       {\r
+               //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+               status = REALSERVER_SELECT;\r
+       }\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_accept( const boost::thread::id thread_id ): return_value=%d.");\r
+               formatter % status;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_client_recv\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] recvbuffer\r
+ *@param [in] recvlen\r
+ *@retval\r
+ */\r
+protocol_module_base::EVENT_TAG protocol_module_sessionless::handle_client_recv(\r
+               const boost::thread::id thread_id, const boost::array<char,\r
+                               MAX_BUFFER_SIZE>& recvbuffer, const size_t recvlen)\r
+{\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "in_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                       "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                       "const size_t recvlen ): thread_id=%d, recvbuffer=%s, recvlen=%d");\r
+               formatter % thread_id % recvbuffer.data() % recvlen;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+\r
+       EVENT_TAG status;\r
+       typedef std::vector<protocol_module_sessionless::send_status_it>\r
+                       send_end_it_vec;\r
+       send_end_it_vec send_end_vec;\r
+       boost::asio::ip::tcp::endpoint endpoint;\r
+       int data_remain_start = 0; //\96¢\91\97\90M\83f\81[\83^\8aJ\8en\88Ê\92u\r
+       int data_remain_size = 0; //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\r
+       int request_data_size = 0; //\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\r
+       int request_data_remain_size = 0; //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\r
+       bool bret = false;\r
+       CHECK_RESULT_TAG check_result; //\83`\83F\83b\83N\8c\8b\89Ê\r
+       size_t header_offset = 0;\r
+       size_t header_offset_len = 0;\r
+       size_t count_length_header_value = 0;\r
+       size_t value = 0;\r
+       std::string str_value;\r
+       const std::string http_header = "";\r
+       const std::string content_header = "Content-Length";\r
+       session_thread_data_sessionless* session_data = NULL;\r
+\r
+       request_data_size = recvlen;\r
+       char* buffer1 = NULL;\r
+       char* buffer2 = NULL;\r
+       size_t count = 0;\r
+\r
+       //\83p\83\89\83\81\81[\83^\83`\83F\83b\83N\r
+       if (recvlen > recvbuffer.size())\r
+       {\r
+               putLogError(0170000, "Data size bigger than buffer size.", __FILE__,\r
+               __LINE__ );\r
+               /*-------- DEBUG LOG --------*/\r
+               if (LOG_LV_DEBUG == getloglevel())\r
+               {\r
+                       boost::format\r
+                                       formatter(\r
+                                                       "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                               "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                               "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                               "const size_t recvlen ): return_value=%d");\r
+                       formatter % FINALIZE;\r
+                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+               }\r
+               /*------DEBUG LOG END------*/\r
+               return FINALIZE;\r
+       }\r
+\r
+       try\r
+       {\r
+               {\r
+                       boost::mutex::scoped_lock slock(session_thread_data_map_mutex);\r
+\r
+                       if (session_thread_data_map.find(thread_id)\r
+                                       == session_thread_data_map.end())\r
+                       {\r
+                               putLogError(0170000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                               /*-------- DEBUG LOG --------*/\r
+                               if (LOG_LV_DEBUG == getloglevel())\r
+                               {\r
+                                       boost::format\r
+                                                       formatter(\r
+                                                                       "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                               "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                               "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                               "const size_t recvlen ): return_value=%d");\r
+                                       formatter % FINALIZE;\r
+                                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                               }\r
+                               /*------DEBUG LOG END------*/\r
+\r
+                               return FINALIZE;\r
+                       }\r
+\r
+                       session_data = session_thread_data_map[thread_id];\r
+                       if (session_data == NULL)\r
+                       {\r
+                               putLogError(0170000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                               /*-------- DEBUG LOG --------*/\r
+                               if (LOG_LV_DEBUG == getloglevel())\r
+                               {\r
+                                       boost::format\r
+                                                       formatter(\r
+                                                                       "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                               "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                               "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                               "const size_t recvlen ): return_value=%d");\r
+                                       formatter % FINALIZE;\r
+                                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                               }\r
+                               /*------DEBUG LOG END------*/\r
+                               return FINALIZE;\r
+                       }\r
+               }\r
+\r
+               //\8fI\97¹\83t\83\89\83O\82ªON\82Ì\8fê\8d\87\r
+               if (session_data->end_flag == END_FLAG_ON)\r
+               {\r
+                       /*-------- DEBUG LOG --------*/\r
+                       if (LOG_LV_DEBUG == getloglevel())\r
+                       {\r
+                               boost::format\r
+                                               formatter(\r
+                                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                       "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                       "const size_t recvlen ): return_value=%d");\r
+                               formatter % CLIENT_RECV;\r
+                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                       }\r
+                       return CLIENT_RECV;\r
+               }\r
+\r
+               //\8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87\r
+               if (session_data->recive_data_map.find(endpoint)\r
+                               == session_data->recive_data_map.end())\r
+               {\r
+                       putLogError(0170000, "Invalid endpoint.", __FILE__, __LINE__ );\r
+                       /*-------- DEBUG LOG --------*/\r
+                       if (LOG_LV_DEBUG == getloglevel())\r
+                       {\r
+                               boost::format\r
+                                               formatter(\r
+                                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                       "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                       "const size_t recvlen ): return_value=%d");\r
+                               formatter % FINALIZE;\r
+                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                       }\r
+                       /*------DEBUG LOG END------*/\r
+                       return FINALIZE;\r
+               }\r
+\r
+               recive_data& recv_data = session_data->recive_data_map[endpoint];\r
+\r
+               send_status_it it = recv_data.send_status_list.begin();\r
+               send_status_it it_end = recv_data.send_status_list.end();\r
+\r
+               count = std::count_if(it, it_end, has_send_continue_data());\r
+               if (count >= 2)\r
+               {\r
+                       putLogError(0170000, "send continue data >= 2.", __FILE__, __LINE__ );\r
+                       /*-------- DEBUG LOG --------*/\r
+                       if (LOG_LV_DEBUG == getloglevel())\r
+                       {\r
+                               boost::format\r
+                                               formatter(\r
+                                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                       "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                       "const size_t recvlen ): return_value=%d");\r
+                               formatter % FINALIZE;\r
+                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                       }\r
+                       /*------DEBUG LOG END------*/\r
+                       return FINALIZE;\r
+               }\r
+\r
+               count = std::count_if(it, it_end, has_send_ng_data());\r
+               if (count >= 2)\r
+               {\r
+                       putLogError(0170000, "send ng data >= 2.", __FILE__, __LINE__ );\r
+                       /*-------- DEBUG LOG --------*/\r
+                       if (LOG_LV_DEBUG == getloglevel())\r
+                       {\r
+                               boost::format\r
+                                               formatter(\r
+                                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                       "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                       "const size_t recvlen ): return_value=%d");\r
+                               formatter % FINALIZE;\r
+                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                       }\r
+                       /*------DEBUG LOG END------*/\r
+                       return FINALIZE;\r
+               }\r
+\r
+               //\91\97\90M\8fó\91Ô\83\8a\83X\83g\82Ì\97v\91f\90\94\95ª\8cJ\82è\95Ô\82µ\r
+               for (; it != it_end; ++it)\r
+               {\r
+                       //\91\97\90M\8fó\91Ô\82ª\91\97\90M\8dÏ\82Ì\8fê\8d\87\r
+                       if (it->status == SEND_END)\r
+                       {\r
+                               //\91\97\90M\8fó\91Ô\83\8a\83X\83g\82©\82ç\8dí\8f\9c\82·\82é\r
+                               send_end_vec.push_back(it);\r
+                       }\r
+                       else if (it->status == SEND_CONTINUE) //\91\97\90M\8fó\91Ô\82ª\91\97\90M\8cp\91±\82Ì\8fê\8d\87\r
+                       {\r
+                               //\91\97\90M\83f\81[\83^\83I\83t\83Z\83b\83g\82É\91\97\90M\8dÏ\83T\83C\83Y\82ð\89Á\8eZ\82·\82é\r
+                               it->send_offset += it->send_end_size;\r
+                               //\96¢\91\97\90M\83f\81[\83^\8aJ\8en\88Ê\92u\82É\91\97\90M\83f\81[\83^\83I\83t\83Z\83b\83g\82ð\90Ý\92è\82·\82é\r
+                               data_remain_start = it->send_offset;\r
+                               //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                               break;\r
+                       }\r
+                       else\r
+                       { //\91\97\90M\8fó\91Ô\82ª\91\97\90M\8dÏ\88È\8aO\82Ì\8fê\8d\87\r
+                               //\96¢\91\97\90M\83f\81[\83^\8aJ\8en\88Ê\92u\82É\91\97\90M\83f\81[\83^\83I\83t\83Z\83b\83g\82ð\90Ý\92è\82·\82é\r
+                               data_remain_start = it->send_offset;\r
+                               //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                               data_remain_size = it->unsend_size;\r
+                               //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               for (send_end_it_vec::iterator it = send_end_vec.begin(); it\r
+                               != send_end_vec.end(); ++it)\r
+               {\r
+                       //\91\97\90M\8fó\91Ô\83\8a\83X\83g\82©\82ç\8dí\8f\9c\82·\82é\r
+                       recv_data.send_status_list.erase(*it);\r
+               }\r
+\r
+               //\83f\81[\83^\83o\83b\83t\83@\8ec\83T\83C\83Y\81@\81\83\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\r
+               if (recv_data.recive_buffer_rest_size < request_data_size)\r
+               {\r
+                       //\83f\81[\83^\83o\83b\83t\83@MAX\83T\83C\83Y\81@\81\83\81@\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\r
+                       if (recv_data.recive_buffer_max_size < data_remain_size\r
+                                       + request_data_size)\r
+                       {\r
+                               if (recv_data.recive_buffer == NULL)\r
+                               {\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82P\82ðMAX_BUFFER_SIZE\95ª\81A\r
+                                       //\90V\8bK\82É\8am\95Û\82µ\81A\8f\89\8aú\89»\82·\82é\r
+                                       recv_data.recive_buffer1 = new char[MAX_BUFFER_SIZE];\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("new: address=&(%d), size=%lu");\r
+                                               formatter % &recv_data.recive_buffer1\r
+                                                               % (MAX_BUFFER_SIZE);\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       memset(recv_data.recive_buffer1, 0, MAX_BUFFER_SIZE);\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82Q\82ðMAX_BUFFER_SIZE\95ª\81A\r
+                                       //\90V\8bK\82É\8am\95Û\82µ\81A\8f\89\8aú\89»\82·\82é\r
+                                       recv_data.recive_buffer2 = new char[MAX_BUFFER_SIZE];\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("new: address=&(%d), size=%lu");\r
+                                               formatter % &recv_data.recive_buffer2\r
+                                                               % (MAX_BUFFER_SIZE);\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       memset(recv_data.recive_buffer2, 0, MAX_BUFFER_SIZE);\r
+                                       recv_data.recive_buffer = recv_data.recive_buffer1;\r
+                                       //\83f\81[\83^\83o\83b\83t\83@MAX\83T\83C\83Y\82ÉMAX_BUFFER_SIZE\82ð\90Ý\92è\82·\82é\r
+                                       recv_data.recive_buffer_max_size = MAX_BUFFER_SIZE;\r
+                               }\r
+                               else\r
+                               {\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82P\82ð\81u\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\81v\95ª\81A\r
+                                       //\90V\8bK\82É\8am\95Û\82µ\81A\8f\89\8aú\89»\82·\82é\r
+                                       buffer1 = new char[data_remain_size + request_data_size];\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("new: address=&(%d), size=%lu");\r
+                                               formatter % &buffer1 % (data_remain_size\r
+                                                               + request_data_size);\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       memset(buffer1, 0, data_remain_size + request_data_size);\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82Q\82ð\81u\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\81v\95ª\81A\r
+                                       //\90V\8bK\82É\8am\95Û\82µ\81A\8f\89\8aú\89»\82·\82é\r
+                                       buffer2 = new char[data_remain_size + request_data_size];\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("new: address=&(%d), size=%lu");\r
+                                               formatter % &buffer2 % (data_remain_size\r
+                                                               + request_data_size);\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       memset(buffer2, 0, data_remain_size + request_data_size);\r
+\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("%02x");\r
+                                               for (int i = 0; i < data_remain_size\r
+                                                               + request_data_size; ++i)\r
+                                               {\r
+                                                       formatter\r
+                                                                       % static_cast<unsigned short> (static_cast<unsigned char> (buffer1[i]));\r
+                                               }\r
+\r
+                                               std::string datadump = formatter.str();\r
+                                               formatter.parse(\r
+                                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( ): before memcpy (data dump):  "\r
+                                                                       "data begin(%d), data_size=%d,data=%s.");\r
+                                               formatter % buffer1 % (data_remain_size\r
+                                                               + request_data_size) % datadump;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82P\82É\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82Ì\96¢\91\97\90M\83f\81[\83^\8aJ\8en\88Ê\92u\82©\82ç\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\95ª\90Ý\92è\82·\82é\r
+                                       memcpy(buffer1,\r
+                                                       recv_data.recive_buffer + data_remain_start,\r
+                                                       data_remain_size);\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82P\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\82ð\83T\83C\83Y\95ª\92Ç\89Á\90Ý\92è\82·\82é\r
+                                       memcpy(buffer1 + data_remain_size, recvbuffer.data(),\r
+                                                       request_data_size);\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("%02x");\r
+                                               for (int i = 0; i < data_remain_size\r
+                                                               + request_data_size; ++i)\r
+                                               {\r
+                                                       formatter\r
+                                                                       % static_cast<unsigned short> (static_cast<unsigned char> (buffer2[i]));\r
+                                               }\r
+\r
+                                               std::string datadump = formatter.str();\r
+                                               formatter.parse(\r
+                                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( ): after memcpy (data dump):  "\r
+                                                                       "data begin(%d), data_size=%d,data=%s.");\r
+                                               formatter % buffer2 % (data_remain_size\r
+                                                               + request_data_size) % datadump;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       //\8b\8c\83f\81[\83^\83o\83b\83t\83@\82P\81A\8b\8c\83f\81[\83^\83o\83b\83t\83@\82Q\82ð\89ð\95ú\82·\82é\r
+                                       if (recv_data.recive_buffer1 != NULL)\r
+                                       {\r
+                                               /*-------- DEBUG LOG --------*/\r
+                                               if (LOG_LV_DEBUG == getloglevel())\r
+                                               {\r
+                                                       boost::format formatter("delete: address=&(%d)");\r
+                                                       formatter % recv_data.recive_buffer1;\r
+                                                       putLogDebug(010005, formatter.str(), __FILE__,\r
+                                                       __LINE__ );\r
+                                               }\r
+                                               /*------DEBUG LOG END------*/\r
+                                               delete[] recv_data.recive_buffer1;\r
+                                               recv_data.recive_buffer1 = NULL;\r
+                                       }\r
+\r
+                                       if (recv_data.recive_buffer2 != NULL)\r
+                                       {\r
+                                               /*-------- DEBUG LOG --------*/\r
+                                               if (LOG_LV_DEBUG == getloglevel())\r
+                                               {\r
+                                                       boost::format formatter("delete: address=&(%d)");\r
+                                                       formatter % recv_data.recive_buffer2;\r
+                                                       putLogDebug(010005, formatter.str(), __FILE__,\r
+                                                       __LINE__ );\r
+                                               }\r
+                                               /*------DEBUG LOG END------*/\r
+                                               delete[] recv_data.recive_buffer2;\r
+                                               recv_data.recive_buffer2 = NULL;\r
+                                       }\r
+\r
+                                       //\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82É\83f\81[\83^\83o\83b\83t\83@\82P\82ð\90Ý\92è\82·\82é\r
+                                       recv_data.recive_buffer1 = buffer1;\r
+                                       recv_data.recive_buffer2 = buffer2;\r
+                                       recv_data.recive_buffer = recv_data.recive_buffer1;\r
+                                       //\83f\81[\83^\83o\83b\83t\83@MAX\83T\83C\83Y\82É\81u\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\81v\82ð\90Ý\92è\82·\82é\r
+                                       recv_data.recive_buffer_max_size = data_remain_size\r
+                                                       + request_data_size;\r
+                               }\r
+                       }\r
+                       //\83f\81[\83^\83o\83b\83t\83@MAX\83T\83C\83Y\81@\81\86\81@\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\r
+                       else\r
+                       {\r
+                               if (recv_data.recive_buffer1 == NULL\r
+                                               || recv_data.recive_buffer2 == NULL)\r
+                               {\r
+                                       putLogError(0170000, "Invalid pointer.", __FILE__, __LINE__ );\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format\r
+                                                               formatter(\r
+                                                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                                       "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                                       "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                                       "const size_t recvlen ): return_value=%d");\r
+                                               formatter % FINALIZE;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       return FINALIZE;\r
+                               }\r
+                               //\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82ª\83f\81[\83^\83o\83b\83t\83@\82P\82Ì\8fê\8d\87\r
+                               if (recv_data.recive_buffer == recv_data.recive_buffer1)\r
+                               {\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82Q\82ð\8f\89\8aú\89»\82·\82é\r
+                                       memset(recv_data.recive_buffer2, 0,\r
+                                                       recv_data.recive_buffer_max_size);\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("%02x");\r
+                                               for (int i = 0; i < recv_data.recive_buffer_max_size; ++i)\r
+                                               {\r
+                                                       formatter\r
+                                                                       % static_cast<unsigned short> (static_cast<unsigned char> (recv_data.recive_buffer2[i]));\r
+                                               }\r
+\r
+                                               std::string datadump = formatter.str();\r
+                                               formatter.parse(\r
+                                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( ): before memcpy (data dump):  "\r
+                                                                       "data begin(%d), data_size=%d,data=%s.");\r
+                                               formatter % recv_data.recive_buffer2\r
+                                                               % recv_data.recive_buffer_max_size % datadump;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82Q\82É\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82Ì\96¢\91\97\90M\83f\81[\83^\8aJ\8en\88Ê\92u\82©\82ç\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\95ª\90Ý\92è\82·\82é\r
+                                       memcpy(recv_data.recive_buffer2, recv_data.recive_buffer\r
+                                                       + data_remain_start, data_remain_size);\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82Q\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\82ð\83T\83C\83Y\95ª\92Ç\89Á\90Ý\92è\82·\82é\r
+                                       memcpy(recv_data.recive_buffer2 + data_remain_size,\r
+                                                       recvbuffer.data(), request_data_size);\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("%02x");\r
+                                               for (int i = 0; i < recv_data.recive_buffer_max_size; ++i)\r
+                                               {\r
+                                                       formatter\r
+                                                                       % static_cast<unsigned short> (static_cast<unsigned char> (recv_data.recive_buffer2[i]));\r
+                                               }\r
+\r
+                                               std::string datadump = formatter.str();\r
+                                               formatter.parse(\r
+                                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( ): after memcpy (data dump):  "\r
+                                                                       "data begin(%d), data_size=%d,data=%s.");\r
+                                               formatter % recv_data.recive_buffer2\r
+                                                               % recv_data.recive_buffer_max_size % datadump;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       //\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82É\83f\81[\83^\83o\83b\83t\83@\82Q\82ð\90Ý\92è\82·\82é\r
+                                       recv_data.recive_buffer = recv_data.recive_buffer2;\r
+                               }\r
+                               //\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82ª\83f\81[\83^\83o\83b\83t\83@\82Q\82Ì\8fê\8d\87\r
+                               else\r
+                               {\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82P\82ð\8f\89\8aú\89»\82·\82é\r
+                                       memset(recv_data.recive_buffer1, 0,\r
+                                                       recv_data.recive_buffer_max_size);\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("%02x");\r
+                                               for (int i = 0; i < recv_data.recive_buffer_max_size; ++i)\r
+                                               {\r
+                                                       formatter\r
+                                                                       % static_cast<unsigned short> (static_cast<unsigned char> (recv_data.recive_buffer1[i]));\r
+                                               }\r
+\r
+                                               std::string datadump = formatter.str();\r
+                                               formatter.parse(\r
+                                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( ): before memcpy (data dump):  "\r
+                                                                       "data begin(%d), data_size=%d,data=%s.");\r
+                                               formatter % recv_data.recive_buffer1\r
+                                                               % recv_data.recive_buffer_max_size % datadump;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82P\82É\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82Ì\96¢\91\97\90M\83f\81[\83^\8aJ\8en\88Ê\92u\82©\82ç\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\95ª\90Ý\92è\82·\82é\r
+                                       memcpy(recv_data.recive_buffer1, recv_data.recive_buffer\r
+                                                       + data_remain_start, data_remain_size);\r
+                                       //\83f\81[\83^\83o\83b\83t\83@\82P\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\82ð\83T\83C\83Y\95ª\92Ç\89Á\90Ý\92è\82·\82é\r
+                                       memcpy(recv_data.recive_buffer1 + data_remain_size,\r
+                                                       recvbuffer.data(), request_data_size);\r
+                                       /*-------- DEBUG LOG --------*/\r
+                                       if (LOG_LV_DEBUG == getloglevel())\r
+                                       {\r
+                                               boost::format formatter("%02x");\r
+                                               for (int i = 0; i < recv_data.recive_buffer_max_size; ++i)\r
+                                               {\r
+                                                       formatter\r
+                                                                       % static_cast<unsigned short> (static_cast<unsigned char> (recv_data.recive_buffer1[i]));\r
+                                               }\r
+\r
+                                               std::string datadump = formatter.str();\r
+                                               formatter.parse(\r
+                                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                       "handle_client_recv( ): after memcpy (data dump):  "\r
+                                                                       "data begin(%d), data_size=%d,data=%s.");\r
+                                               formatter % recv_data.recive_buffer1\r
+                                                               % recv_data.recive_buffer_max_size % datadump;\r
+                                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                                       }\r
+                                       /*------DEBUG LOG END------*/\r
+                                       //\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82É\83f\81[\83^\83o\83b\83t\83@\82P\82ð\90Ý\92è\82·\82é\r
+                                       recv_data.recive_buffer = recv_data.recive_buffer1;\r
+                               }\r
+                       }\r
+\r
+                       //\83f\81[\83^\83o\83b\83t\83@\8ec\83T\83C\83Y\82É\r
+                       //\81u\83f\81[\83^\83o\83b\83t\83@MAX\83T\83C\83Y\81@\81|\81@\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81|\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\81v\82ð\90Ý\92è\82·\82é\r
+                       recv_data.recive_buffer_rest_size\r
+                                       = recv_data.recive_buffer_max_size - data_remain_size\r
+                                                       - request_data_size;\r
+\r
+                       //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É\81u\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\81v\82ð\90Ý\92è\82·\82é\r
+                       data_remain_size += request_data_size;\r
+\r
+                       send_status_it it_begin = recv_data.send_status_list.begin();\r
+                       send_status_it it_end = recv_data.send_status_list.end();\r
+\r
+                       for (; it_begin != it_end; ++it_begin)\r
+                       {\r
+                               //\91\97\90M\83f\81[\83^\83I\83t\83Z\83b\83g\82©\82ç\96¢\91\97\90M\83f\81[\83^\8aJ\8en\88Ê\92u\82ð\8c¸\8eZ\r
+                               it->send_offset -= data_remain_start;\r
+                       }\r
+               }\r
+               //\83f\81[\83^\83o\83b\83t\83@\8ec\83T\83C\83Y\81@\81\86\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\r
+               else\r
+               {\r
+                       if (recv_data.recive_buffer == NULL)\r
+                       {\r
+                               putLogError(0170000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                               /*-------- DEBUG LOG --------*/\r
+                               if (LOG_LV_DEBUG == getloglevel())\r
+                               {\r
+                                       boost::format\r
+                                                       formatter(\r
+                                                                       "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                                               "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                                               "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                                               "const size_t recvlen ): return_value=%d");\r
+                                       formatter % FINALIZE;\r
+                                       putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                               }\r
+                               /*------DEBUG LOG END------*/\r
+                               return FINALIZE;\r
+                       }\r
+                       /*-------- DEBUG LOG --------*/\r
+                       if (LOG_LV_DEBUG == getloglevel())\r
+                       {\r
+                               boost::format formatter("%02x");\r
+                               for (int i = 0; i < recv_data.recive_buffer_max_size; ++i)\r
+                               {\r
+                                       formatter\r
+                                                       % static_cast<unsigned short> (static_cast<unsigned char> (recv_data.recive_buffer1[i]));\r
+                               }\r
+\r
+                               std::string datadump = formatter.str();\r
+                               formatter.parse(\r
+                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_client_recv( ): before memcpy (data dump):  "\r
+                                                       "data begin(%d), data_size=%d,data=%s.");\r
+                               formatter % recv_data.recive_buffer1\r
+                                               % recv_data.recive_buffer_max_size % datadump;\r
+                               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+                       }\r
+                       /*------DEBUG LOG END------*/\r
+                       //\8eg\97p\92\86\83f\81[\83^\83o\83b\83t\83@\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\82ð\83T\83C\83Y\95ª\92Ç\89Á\90Ý\92è\82·\82é\r
+                       memcpy(recv_data.recive_buffer + recv_data.recive_buffer_max_size\r
+                                       - recv_data.recive_buffer_rest_size, recvbuffer.data(),\r
+                                       request_data_size);\r
+                       //\83f\81[\83^\83o\83b\83t\83@\8ec\83T\83C\83Y\82©\82ç\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\82ð\8c¸\8eZ\82·\82é\r
+                       recv_data.recive_buffer_rest_size -= request_data_size;\r
+                       //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É\81u\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\81v\82ð\90Ý\92è\82·\82é\r
+                       data_remain_size += request_data_size;\r
+               }\r
+\r
+               it = recv_data.send_status_list.begin();\r
+               it_end = recv_data.send_status_list.end();\r
+\r
+               for (; it != it_end; ++it)\r
+               {\r
+                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                       request_data_remain_size = request_data_size;\r
+                       //\91\97\90M\8fó\91Ô\82ª\91\97\90M\8cp\91±\82Ì\8fê\8d\87\r
+                       if (it->status == SEND_CONTINUE)\r
+                       {\r
+                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\81@\81\84\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\r
+                               if (it->send_rest_size > request_data_remain_size)\r
+                               {\r
+                                       //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                       it->send_possible_size = request_data_remain_size;\r
+                                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82©\82ç\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\8c¸\8eZ\82·\82é\r
+                                       it->send_rest_size -= request_data_remain_size;\r
+                                       //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->send_end_size = 0;\r
+                                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       request_data_remain_size = 0;\r
+                               }\r
+                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\81@\81\85\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\r
+                               else\r
+                               {\r
+                                       //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                       it->send_possible_size = it->send_rest_size;\r
+                                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82©\82ç\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82ð\8c¸\8eZ\82·\82é\r
+                                       request_data_remain_size -= it->send_rest_size;\r
+                                       //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->send_end_size = 0;\r
+                                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->send_rest_size = 0;\r
+                               }\r
+                               //\95Ò\8fW\8bæ\95ª\82É\95Ò\8fW\82È\82µ\82ð\90Ý\92è\82·\82é\r
+                               it->edit_division = EDIT_DIVISION_NO_EDIT;\r
+                               //\91\97\90M\8fó\91Ô\82É\91\97\90M\91Ò\82ð\90Ý\92è\82·\82é\r
+                               it->status = SEND_OK;\r
+                       }\r
+                       //\91\97\90M\8fó\91Ô\82ª\91\97\90M\95s\89Â\82Ì\8fê\8d\87\r
+                       else if (it->status == SEND_NG)\r
+                       {\r
+                               //HTTP\83\81\83\\83b\83h\82Ì\91Ã\93\96\90«\82ð\83`\83F\83b\83N\82·\82é\r
+                               check_result = check_http_method(recv_data.recive_buffer\r
+                                               + it->send_offset, data_remain_size);\r
+                               //\83`\83F\83b\83N\8c\8b\89Ê\82ª\90³\8fí\82Ì\8fê\8d\87\r
+                               if (check_result == CHECK_OK)\r
+                               {\r
+                                       //HTTP\83o\81[\83W\83\87\83\93\82Ì\91Ã\93\96\90«\82ð\83`\83F\83b\83N\82·\82é\r
+                                       check_result = check_http_version(recv_data.recive_buffer\r
+                                                       + it->send_offset, data_remain_size);\r
+                               }\r
+                               //\83`\83F\83b\83N\8c\8b\89Ê\82ª\90³\8fí\82Ì\8fê\8d\87\r
+                               if (check_result == CHECK_OK)\r
+                               {\r
+                                       //\91\97\90M\89Â\94\\83f\81[\83^\93à\82ÌHTTP\83w\83b\83_\82Ì\8aJ\8en\88Ê\92u\81A\83T\83C\83Y\82ð\8eæ\93¾\82·\82é\r
+                                       bret = find_http_header(recv_data.recive_buffer\r
+                                                       + it->send_offset, data_remain_size, http_header,\r
+                                                       header_offset, header_offset_len);\r
+                                       //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82 \82è\82Ì\8fê\8d\87\r
+                                       if (bret)\r
+                                       {\r
+                                               //HTTP\83w\83b\83_\81iContentLength\81j\82ð\8c\9f\8dõ\82·\82é\r
+                                               bret = find_http_header(recv_data.recive_buffer\r
+                                                               + it->send_offset, data_remain_size,\r
+                                                               content_header, header_offset,\r
+                                                               count_length_header_value);\r
+                                               //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82 \82è\82Ì\8fê\8d\87\r
+                                               if (bret)\r
+                                               {\r
+                                                       str_value.assign(recv_data.recive_buffer\r
+                                                                       + it->send_offset + header_offset,\r
+                                                                       count_length_header_value);\r
+                                                       value = boost::lexical_cast<size_t>(\r
+                                                                       str_value.c_str());\r
+                                                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É\r
+                                                       //\81uHTTP\83w\83b\83_\83T\83C\83Y\81@\81{\81@ContentLength\81v\82ð\90Ý\92è\82·\82é\r
+                                                       it->send_rest_size = header_offset_len + value;\r
+                                               }\r
+                                               //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82È\82µ\82Ì\8fê\8d\87\r
+                                               else\r
+                                               {\r
+                                                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y + \83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                                       it->send_rest_size = it->unsend_size + request_data_remain_size;\r
+                                               }\r
+                                               //\95Ò\8fW\8bæ\95ª\82É\95Ò\8fW\82 \82è\82ð\90Ý\92è\82·\82é\r
+                                               it->edit_division = EDIT_DIVISION_EDIT;\r
+                                       }\r
+                                       //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82È\82µ\82Ì\8fê\8d\87\r
+                                       else\r
+                                       {\r
+                                               //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\89Á\8eZ\82·\82é\r
+                                               data_remain_size += request_data_remain_size;\r
+                                               it->unsend_size = data_remain_size;\r
+                                               //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                               request_data_remain_size = 0;\r
+                                               //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               //\83`\83F\83b\83N\8c\8b\89Ê\82ª\88Ù\8fí\82Ì\8fê\8d\87\r
+                               else if (check_result == CHECK_NG)\r
+                               {\r
+                                       //\95Ò\8fW\8bæ\95ª\82É\95Ò\8fW\82È\82µ\82ð\90Ý\92è\82·\82é\r
+                                       it->edit_division = EDIT_DIVISION_NO_EDIT;\r
+                                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                       it->send_rest_size = request_data_remain_size;\r
+                               }\r
+                               //\83`\83F\83b\83N\8c\8b\89Ê\82ª\94»\92è\95s\94\\82Ì\8fê\8d\87\r
+                               //check_result == CHECK_INPOSSIBLE\r
+                               else\r
+                               {\r
+                                       //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\89Á\8eZ\82·\82é\r
+                                       data_remain_size += request_data_remain_size;\r
+                                       it->unsend_size = data_remain_size;\r
+                                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       request_data_remain_size = 0;\r
+                                       //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                                       break;\r
+                               }\r
+\r
+                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\81@\81\84\81@\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y+\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\r
+                               if (it->send_rest_size > data_remain_size\r
+                                               + request_data_remain_size)\r
+                               {\r
+                                       //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81{\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                       it->send_possible_size = data_remain_size\r
+                                                       + request_data_remain_size;\r
+                                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82©\82ç\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\8c¸\8eZ\82·\82é\r
+                                       it->send_rest_size -= (data_remain_size\r
+                                                       + request_data_remain_size);\r
+                                       //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->send_end_size = 0;\r
+                                       //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->unsend_size = 0;\r
+                                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       request_data_remain_size = 0;\r
+                               }\r
+                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\81@\81\85\81@\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81@\81{\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\r
+                               else\r
+                               {\r
+                                       //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                       it->send_possible_size = it->send_rest_size;\r
+                                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É\r
+                                       //\81u\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\81{\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\81|\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\81v\82ð\90Ý\92è\82·\82é\r
+                                       request_data_remain_size = data_remain_size\r
+                                                       + request_data_remain_size - it->send_rest_size;\r
+                                       //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->send_end_size = 0;\r
+                                       //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->unsend_size = 0;\r
+                                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       it->send_rest_size = 0;\r
+                               }\r
+\r
+                               //\91\97\90M\8fó\91Ô\82É\91\97\90M\91Ò\82ð\90Ý\92è\82·\82é\r
+                               it->status = SEND_OK;\r
+                       }\r
+                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\81@\81\85\81@0\r
+                       if (request_data_remain_size <= 0)\r
+                       {\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\81@\81\84\81@0\r
+               while (request_data_remain_size > 0)\r
+               {\r
+                       //\91\97\90M\8fó\91Ô\82ð\90\90¬\82·\82é\r
+                       send_status new_send_state;\r
+                       //\91\97\90M\8fó\91Ô\82É\91\97\90M\95s\89Â\82ð\90Ý\92è\82·\82é\r
+                       new_send_state.status = SEND_NG;\r
+                       //\91\97\90M\83f\81[\83^\83I\83t\83Z\83b\83g\82ð\90Ý\92è\82·\82é\r
+                       new_send_state.send_offset = recv_data.recive_buffer_max_size\r
+                                       - recv_data.recive_buffer_rest_size\r
+                                       - request_data_remain_size;\r
+\r
+                       //HTTP\83\81\83\\83b\83h\82Ì\91Ã\93\96\90«\82ð\83`\83F\83b\83N\82·\82é\r
+                       check_result = check_http_method(recv_data.recive_buffer\r
+                                       + new_send_state.send_offset, request_data_remain_size);\r
+                       //\83`\83F\83b\83N\8c\8b\89Ê\82ª\90³\8fí\82Ì\8fê\8d\87\r
+                       if (check_result == CHECK_OK)\r
+                       {\r
+                               //HTTP\83o\81[\83W\83\87\83\93\82Ì\91Ã\93\96\90«\82ð\83`\83F\83b\83N\82·\82é\r
+                               check_result = check_http_version(recv_data.recive_buffer\r
+                                               + new_send_state.send_offset, request_data_remain_size);\r
+                       }\r
+                       //\83`\83F\83b\83N\8c\8b\89Ê\82ª\90³\8fí\82Ì\8fê\8d\87\r
+                       if (check_result == CHECK_OK)\r
+                       {\r
+                               //\91\97\90M\89Â\94\\83f\81[\83^\93à\82ÌHTTP\83w\83b\83_\82Ì\8aJ\8en\88Ê\92u\81A\83T\83C\83Y\82ð\8eæ\93¾\82·\82é\r
+                               bret = find_http_header(recvbuffer.data() + request_data_size\r
+                                               - request_data_remain_size, request_data_remain_size,\r
+                                               http_header, header_offset, header_offset_len);\r
+                               //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82 \82è\82Ì\8fê\8d\87\r
+                               if (bret)\r
+                               {\r
+                                       //HTTP\83w\83b\83_\81iContentLength\81j\82ð\8c\9f\8dõ\82·\82é\r
+                                       bret = find_http_header(recvbuffer.data()\r
+                                                       + request_data_size - request_data_remain_size,\r
+                                                       request_data_remain_size, content_header,\r
+                                                       header_offset, count_length_header_value);\r
+                                       str_value.assign(recv_data.recive_buffer + it->send_offset\r
+                                                       + header_offset, count_length_header_value);\r
+                                       value = boost::lexical_cast<size_t>(str_value.c_str());\r
+                                       //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82 \82è\82Ì\8fê\8d\87\r
+                                       if (bret)\r
+                                       {\r
+                                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É\r
+                                               //\81uHTTP\83w\83b\83_\83T\83C\83Y\81@\81{\81@ContentLength\81v\82ð\90Ý\92è\82·\82é\r
+                                               new_send_state.send_rest_size = header_offset_len\r
+                                                               + value;\r
+                                       }\r
+                                       //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82È\82µ\82Ì\8fê\8d\87\r
+                                       else\r
+                                       {\r
+                                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                               new_send_state.send_rest_size = request_data_remain_size;\r
+                                       }\r
+                                       //\95Ò\8fW\8bæ\95ª\82É\95Ò\8fW\82 \82è\82ð\90Ý\92è\82·\82é\r
+                                       new_send_state.edit_division = EDIT_DIVISION_EDIT;\r
+                               }\r
+                               //\8c\9f\8dõ\8c\8b\89Ê\82ª\8aY\93\96\82È\82µ\82Ì\8fê\8d\87\r
+                               else\r
+                               {\r
+                                       //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                                       new_send_state.unsend_size = request_data_remain_size;\r
+                                       //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                                       request_data_remain_size = 0;\r
+                                       //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                                       break;\r
+                               }\r
+                       }\r
+                       //\83`\83F\83b\83N\8c\8b\89Ê\82ª\88Ù\8fí\82Ì\8fê\8d\87\r
+                       else if (check_result == CHECK_NG)\r
+                       {\r
+                               //\95Ò\8fW\8bæ\95ª\82É\95Ò\8fW\82È\82µ\82ð\90Ý\92è\82·\82é\r
+                               new_send_state.edit_division = EDIT_DIVISION_NO_EDIT;\r
+                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                               new_send_state.send_rest_size = request_data_remain_size;\r
+                       }\r
+                       //\83`\83F\83b\83N\8c\8b\89Ê\82ª\94»\92è\95s\94\\82Ì\8fê\8d\87\r
+                       //check_result == CHECK_INPOSSIBLE\r
+                       else\r
+                       {\r
+                               //\96¢\91\97\90M\83f\81[\83^\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\89Á\8eZ\82·\82é\r
+                               new_send_state.unsend_size = request_data_remain_size;\r
+                               //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                               request_data_remain_size = 0;\r
+                               //\8cJ\82è\95Ô\82µ\8f\88\97\9d\82ð\8fI\97¹\82·\82é\r
+                               break;\r
+                       }\r
+\r
+                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\81@\81\84\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\r
+                       if (new_send_state.send_rest_size > request_data_remain_size)\r
+                       {\r
+                               //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                               new_send_state.send_possible_size = request_data_remain_size;\r
+                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82©\82ç\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82ð\8c¸\8eZ\82·\82é\r
+                               new_send_state.send_rest_size -= request_data_remain_size;\r
+                               //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                               new_send_state.send_end_size = 0;\r
+                               //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                               request_data_remain_size = 0;\r
+                       }\r
+                       //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\81@\81\85\81@\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\r
+                       else\r
+                       {\r
+                               //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+                               new_send_state.send_possible_size\r
+                                               = new_send_state.send_rest_size;\r
+                               //\83\8a\83N\83G\83X\83g\83f\81[\83^\8ec\83T\83C\83Y\82©\82ç\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82ð\8c¸\8eZ\82·\82é\r
+                               request_data_remain_size -= new_send_state.send_rest_size;\r
+                               //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                               new_send_state.send_end_size = 0;\r
+                               //\91\97\90M\83f\81[\83^\8ec\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+                               new_send_state.send_rest_size = 0;\r
+                       }\r
+\r
+                       //\91\97\90M\8fó\91Ô\82É\91\97\90M\91Ò\82ð\90Ý\92è\82·\82é\r
+                       new_send_state.status = SEND_OK;\r
+                       //\91\97\90M\8fó\91Ô\83\8a\83X\83g\82É\91\97\90M\8fó\91Ô\82ð\90Ý\92è\82·\82é\r
+                       recv_data.send_status_list.push_back(new_send_state);\r
+               }\r
+\r
+               //\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\82ð\83`\83F\83b\83N\r
+               send_status_it it_find = find_if(recv_data.send_status_list.begin(),\r
+                               recv_data.send_status_list.end(), has_send_possible_data());\r
+               //\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+               if (it_find != recv_data.send_status_list.end())\r
+               {\r
+                       //sorry\8fó\91Ô\82Ì\8fê\8d\87\r
+                       if (session_data->sorry_flag == SORRY_FLAG_ON)\r
+                       {\r
+                               //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+                               status = SORRYSERVER_CONNECT;\r
+                       }\r
+                       //sorry\8fó\91Ô\88È\8aO\82Ì\8fê\8d\87\r
+                       else\r
+                       {\r
+                               //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+                               status = REALSERVER_CONNECT;\r
+                       }\r
+               }\r
+               //\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+               else\r
+               {\r
+                       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+                       status = CLIENT_RECV;\r
+               }\r
+       } catch (const std::bad_alloc&)\r
+       {\r
+               std::cerr\r
+                               << "handle_session_initialize exception: Could not allocate memory."\r
+                               << std::endl;\r
+               putLogError(017000, "Could not allocate memory.", __FILE__, __LINE__ );\r
+               status = FINALIZE;\r
+       } catch (const std::exception& ex)\r
+       {\r
+               std::cerr << "handle_client_recv exception: error=%s" << ex.what()\r
+                               << "." << std::endl;\r
+               boost::format\r
+                               formatter(\r
+                                               "function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_client_recv() exception: result=%d, error=%s.");\r
+               formatter % FINALIZE % ex.what();\r
+               putLogError(0170000, formatter.str(), __FILE__, __LINE__ );\r
+\r
+               status = FINALIZE;\r
+       } catch (...)\r
+       {\r
+               std::cerr << "Unkown exception." << std::endl;\r
+               putLogError(0170000,\r
+                               "function protocol_module_sessionless::check_message_result "\r
+                                       "protocol_module_sessionless::handle_client_recv() : "\r
+                                       "Unkown exception.", __FILE__, __LINE__ );\r
+               status = FINALIZE;\r
+       }\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+       if (LOG_LV_DEBUG == getloglevel())\r
+       {\r
+               boost::format\r
+                               formatter(\r
+                                               "out_function: protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::"\r
+                                                       "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                       "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                       "const size_t recvlen ): return_value=%d");\r
+               formatter % status;\r
+               putLogDebug(010005, formatter.str(), __FILE__, __LINE__ );\r
+       }\r
+       /*------DEBUG LOG END------*/\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_realserver_select\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [out] rs_endpoint\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_select(\r
+               const boost::thread::id thread_id,\r
+               boost::asio::ip::tcp::endpoint & rs_endpoint)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_realserver_select\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] sendbuffer\r
+ *@param [out] datalen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_select(\r
+               const boost::thread::id thread_id,\r
+               boost::asio::ip::udp::endpoint& rs_endpoint, boost::array<char,\r
+                               MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen)\r
+{\r
+       return STOP;\r
+}\r
+/*!\r
+ *handle_realserver_connect\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] sendbuffer\r
+ *@param [out] datalen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_connect(\r
+               const boost::thread::id thread_id,\r
+               boost::array<char, MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_realserver_connection_fail\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] rs_endpoint\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_connection_fail(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::tcp::endpoint & rs_endpoint)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+/*!\r
+ *handle_realserver_send\r
+ *\r
+ *@param [in] thread_id\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_send(\r
+               const boost::thread::id thread_id)\r
+{\r
+       EVENT_TAG status;\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_sorryserver_select\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in]sorry_endpoint\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorryserver_select(\r
+               const boost::thread::id thread_id,\r
+               boost::asio::ip::tcp::endpoint & sorry_endpoint)\r
+{\r
+       EVENT_TAG status;\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_sorryserver_connect\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [out]sendbuffer\r
+ *@param [out]datalen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorryserver_connect(\r
+               const boost::thread::id thread_id,\r
+               boost::array<char, MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen)\r
+{\r
+       EVENT_TAG status;\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_sorryserver_connection_fail\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [out]sendbuffer\r
+ *@param [out]datalen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorryserver_connection_fail(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::tcp::endpoint & sorry_endpoint)\r
+{\r
+       EVENT_TAG status;\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_sorryserver_send\r
+ *\r
+ *@param [in] thread_id\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorryserver_send(\r
+               const boost::thread::id thread_id)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_realserver_recv\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] rs_endpoint\r
+ *@param [in] recvbuffer\r
+ *@param [in] recvlen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_recv(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::tcp::endpoint& rs_endpoint, const boost::array<\r
+                               char, MAX_BUFFER_SIZE>& recvbuffer, const size_t recvlen)\r
+{\r
+       EVENT_TAG status;\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_realserver_recv\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] rs_endpoint\r
+ *@param [in] recvbuffer\r
+ *@param [in] recvlen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_recv(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::udp::endpoint& rs_endpoint, const boost::array<\r
+                               char, MAX_BUFFER_SIZE>& recvbuffer, const size_t recvlen)\r
+{\r
+       return STOP;\r
+}\r
+\r
+/*!\r
+ *handle_sorryserver_recv\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] sorry_endpoint\r
+ *@param [in] recvbuffer\r
+ *@param [in] recvlen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorryserver_recv(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::tcp::endpoint& sorry_endpoint,\r
+               const boost::array<char, MAX_BUFFER_SIZE>& recvbuffer,\r
+               const size_t recvlen)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_response_send_inform\r
+ *\r
+ *@param [in] thread_id\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_response_send_inform(\r
+               const boost::thread::id thread_id)\r
+{\r
+       return STOP;\r
+}\r
+\r
+/*!\r
+ *handle_client_connection_check\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [out]sendbuffer\r
+ *@param [out]datalen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_client_connection_check(\r
+               const boost::thread::id thread_id,\r
+               boost::array<char, MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen)\r
+{\r
+       EVENT_TAG status;\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_client_send\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [out] sendbuffer\r
+ *@param [out] datalen\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_client_select(\r
+               const boost::thread::id thread_id,\r
+               boost::asio::ip::udp::endpoint& cl_endpoint, boost::array<char,\r
+                               MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen)\r
+{\r
+       return STOP;\r
+}\r
+\r
+/*!\r
+ *handle_client_send\r
+ *\r
+ *@param [in] thread_id\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_client_send(\r
+               const boost::thread::id thread_id)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_client_disconnect\r
+ *\r
+ *@param [in] thread_id\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_client_disconnect(\r
+               const boost::thread::id thread_id)\r
+{\r
+       return FINALIZE;\r
+}\r
+\r
+/*!\r
+ *handle_sorry_enable\r
+ *\r
+ *@param [in] thread_id\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorry_enable(\r
+               const boost::thread::id thread_id)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_sorry_disable\r
+ *\r
+ *@param [in] thread_id\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorry_disable(\r
+               const boost::thread::id thread_id)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_sorryserver_disconnect\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] rs_endpoint\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_disconnect(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::tcp::endpoint & rs_endpoint)\r
+{\r
+       EVENT_TAG status;\r
+\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_sorryserver_disconnect\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] sorry_endpoint\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_sorryserver_disconnect(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::tcp::endpoint & sorry_endpoint)\r
+{\r
+       EVENT_TAG status;\r
+       return status;\r
+}\r
+\r
+/*!\r
+ *handle_realserver_close\r
+ *\r
+ *@param [in] thread_id\r
+ *@param [in] rs_endpoint\r
+ */\r
+protocol_module_sessionless::EVENT_TAG protocol_module_sessionless::handle_realserver_close(\r
+               const boost::thread::id thread_id,\r
+               const boost::asio::ip::udp::endpoint & rs_endpoint)\r
+{\r
+       return STOP;\r
+}\r
+\r
+}\r
diff --git a/module/protocol/protocol_module_sessionless.h b/module/protocol/protocol_module_sessionless.h
new file mode 100644 (file)
index 0000000..6c83c5e
--- /dev/null
@@ -0,0 +1,196 @@
+#include <boost/thread/mutex.hpp>\r\r
+#include "http_protocol_module_base.h"\r\r
+\r\r
+#ifndef PROTOCOL_MODULE_SESSIONLESS_H\r\r
+#define PROTOCOL_MODULE_SESSIONLESS_H\r\r
+\r\r
+#define MAX_OPTION_SIZE 256\r\r
+\r\r
+namespace l7vs\r\r
+{\r\r
+const std::string MODULE_NAME = "sessionless";\r\r
+\r\r
+\r\r
+\r\r
+#define THREAD_DIVISION_UP_STREAM 0 //\8fã\82è\83X\83\8c\83b\83h\r\r
+#define THREAD_DIVISION_DOWN_STREAM 1  //\89º\82è\83X\83\8c\83b\83h\r\r
+\r\r
+#define END_FLAG_OFF 0 //\8fI\97¹\83t\83\89\83OOFF\r\r
+#define END_FLAG_ON  1 //\8fI\97¹\83t\83\89\83OON\r\r
+\r\r
+#define ACCEPT_END_FLAG_OFF 0 //ACCEPT\8a®\97¹\83t\83\89\83OOFF\r\r
+#define ACCEPT_END_FLAG_ON  1 //ACCEPT\8a®\97¹\83t\83\89\83OON\r\r
+\r\r
+#define SORRY_FLAG_ON 1 //SORRY\8fó\91Ô\r\r
+#define SORRY_FLAG_OFF 0 //SORRY\8fó\91Ô\88È\8aO\r\r
+\r\r
+#define SORRYSERVER_SWITCH_FLAG_OFF 0 //sorryserver\90Ø\91Ö\92\86\88È\8aO\r\r
+#define SORRYSERVER_SWITCH_FLAG_ON  1 //sorryserver\90Ø\91Ö\92\86\r\r
+\r\r
+#define REALSERVER_SWITCH_FLAG_OFF 0 //realserver\90Ø\91Ö\92\86\88È\8aO\r\r
+#define REALSERVER_SWITCH_FLAG_ON  1 //realserver\90Ø\91Ö\92\86\r\r
+\r\r
+enum EDIT_DIVISION_TAG\r\r
+{\r\r
+       EDIT_DIVISION_NO_EDIT = 0, //\95Ò\8fW\96³\82µ\r\r
+       EDIT_DIVISION_EDIT = 1 //\95Ò\8fW\82 \82è\r\r
+};\r\r
+\r\r
+class protocol_module_sessionless : public http_protocol_module_base\r\r
+{\r\r
+public:\r\r
+       enum SEND_STATUS_TAG\r\r
+    {\r\r
+               SEND_OK= 0,\r\r
+               SEND_NG,\r\r
+               SEND_END,\r\r
+               SEND_CONTINUE\r\r
+    };\r\r
+       typedef struct _edit_data {\r\r
+        std::string data;\r\r
+        int data_size;\r\r
+        int insert_posission;\r\r
+        int replace_size;\r\r
+    } edit_data;\r\r
+\r\r
+    typedef struct _send_status {\r\r
+        SEND_STATUS_TAG status;\r\r
+        int send_end_size;\r\r
+        int send_rest_size;\r\r
+        int send_possible_size;\r\r
+        int send_offset;\r\r
+        int unsend_size;\r\r
+        int edit_division;\r\r
+        boost::asio::ip::tcp::endpoint send_endpoint;\r\r
+        std::list<edit_data> edit_data_list;\r\r
+    } send_status;\r\r
+\r\r
+    typedef struct _recive_data {\r\r
+        char* recive_buffer;\r\r
+        char* recive_buffer1;\r\r
+        char* recive_buffer2;\r\r
+        int recive_buffer_max_size;\r\r
+        int recive_buffer_rest_size;\r\r
+        std::list<send_status>  send_status_list;\r\r
+    } recive_data;\r\r
+\r\r
+\r\r
+    typedef struct _session_thread_data_sessionless {\r\r
+        boost::thread::id thread_id;\r\r
+        int thread_division;\r\r
+        boost::thread::id pair_thread_id;\r\r
+        std::map<boost::asio::ip::tcp::endpoint, recive_data> recive_data_map;\r\r
+        int end_flag;\r\r
+        int accept_end_flag;\r\r
+        int sorry_flag;\r\r
+        int sorryserver_switch_flag;\r\r
+        int realserver_switch_flag;\r\r
+        boost::asio::ip::tcp::endpoint endpoint;\r\r
+        EVENT_TAG last_status;\r\r
+    } session_thread_data_sessionless;\r\r
+\r\r
+   typedef std::list<send_status>::iterator send_status_it;\r\r
+   typedef std::map<boost::thread::id, session_thread_data_sessionless*>::iterator session_thread_data_map_it;\r\r
+   typedef std::map<boost::asio::ip::tcp::endpoint, recive_data>::iterator recive_data_map_it;\r\r
+public://for debug\r\r
+       boost:: array<char,MAX_OPTION_SIZE> cookie_name;\r\r
+       int cookie_expire;\r\r
+       int forwarded_for;\r\r
+       int reschedule;\r\r
+       boost:: array<char,MAX_OPTION_SIZE> sorry_uri ;\r\r
+       std::map<boost::thread::id, session_thread_data_sessionless*> session_thread_data_map;\r\r
+       boost::mutex session_thread_data_map_mutex;\r\r
+\r\r
+public:\r\r
+       protocol_module_sessionless();\r\r
+       ~protocol_module_sessionless();\r\r
+\r\r
+       bool is_tcp();\r\r
+       bool is_udp();\r\r
+       std::string& get_name();\r\r
+       void replication_interrupt();\r\r
+       void initialize(boost::function<std::list<realserver>::iterator(void)> inrslist_begin, boost::function<std::list<realserver>::iterator(void)> inrslist_end, boost::function<std::list<realserver>::iterator(void)> inrslist_next, boost::function<void(void)> inlist_lock, boost::function<void(void)> inlist_unlock);\r\r
+       void finalize();\r\r
+       bool is_use_sorry();\r\r
+       check_message_result check_parameter(const std::vector<std::string>& args);\r\r
+       check_message_result set_parameter(const std::vector<std::string>& args);\r\r
+       check_message_result add_parameter(const std::vector<std::string>& args);\r\r
+       void handle_rslist_update();\r\r
+       void register_schedule(tcp_schedule_func_type inschedule);\r\r
+       void register_schedule(udp_schedule_func_type inschedule);\r\r
+       EVENT_TAG handle_session_initialize(const boost::thread::id up_thread_id, const boost::thread::id down_thread_id);\r\r
+       EVENT_TAG handle_session_finalize(const boost::thread::id up_thread_id, const boost::thread::id down_thread_id);\r\r
+       EVENT_TAG handle_accept(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_client_recv(const boost::thread::id thread_id, const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer, const size_t recvlen);\r\r
+       EVENT_TAG handle_realserver_select(const boost::thread::id thread_id, boost::asio::ip::tcp::endpoint& rs_endpoint);\r\r
+       EVENT_TAG handle_realserver_select(const boost::thread::id thread_id, boost::asio::ip::udp::endpoint& rs_endpoint, boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen);\r\r
+       EVENT_TAG handle_realserver_connect(const boost::thread::id thread_id, boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen);\r\r
+       EVENT_TAG handle_realserver_connection_fail(const boost::thread::id thread_id, const boost::asio::ip::tcp::endpoint& rs_endpoint);\r\r
+       EVENT_TAG handle_realserver_send(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_sorryserver_select(const boost::thread::id thread_id, boost::asio::ip::tcp::endpoint& sorry_endpoint);\r\r
+       EVENT_TAG handle_sorryserver_connect(const boost::thread::id thread_id, boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen);\r\r
+       EVENT_TAG handle_sorryserver_connection_fail(const boost::thread::id thread_id, const boost::asio::ip::tcp::endpoint& sorry_endpoint);\r\r
+       EVENT_TAG handle_sorryserver_send(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_realserver_recv(const boost::thread::id thread_id, const boost::asio::ip::tcp::endpoint& rs_endpoint, const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer, const size_t recvlen);\r\r
+       EVENT_TAG handle_realserver_recv(const boost::thread::id thread_id, const boost::asio::ip::udp::endpoint& rs_endpoint, const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer, const size_t recvlen);\r\r
+       EVENT_TAG handle_sorryserver_recv(const boost::thread::id thread_id, const boost::asio::ip::tcp::endpoint& sorry_endpoint, const boost::array<char, MAX_BUFFER_SIZE>& recvbuffer, const size_t recvlen);\r\r
+       EVENT_TAG handle_response_send_inform(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_client_connection_check(const boost::thread::id thread_id, boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen);\r\r
+       EVENT_TAG handle_client_select(const boost::thread::id thread_id, boost::asio::ip::udp::endpoint& cl_endpoint, boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen);\r\r
+       EVENT_TAG handle_client_send(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_client_disconnect(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_sorry_enable(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_sorry_disable(const boost::thread::id thread_id);\r\r
+       EVENT_TAG handle_realserver_disconnect(const boost::thread::id thread_id, const boost::asio::ip::tcp::endpoint& rs_endpoint);\r\r
+       EVENT_TAG handle_sorryserver_disconnect(const boost::thread::id thread_id, const boost::asio::ip::tcp::endpoint& sorry_endpoint);\r\r
+       EVENT_TAG handle_realserver_close(const boost::thread::id thread_id, const boost::asio::ip::udp::endpoint& rs_endpoint);\r\r
+};\r\r
+\r\r
+inline bool operator < (const protocol_module_sessionless::edit_data& lref, const protocol_module_sessionless::edit_data& rref)\r\r
+{\r\r
+       return lref.insert_posission < rref.insert_posission;\r\r
+}\r\r
+\r\r
+class has_send_possible_data\r\r
+{\r\r
+public:\r\r
+       inline bool operator () (const protocol_module_sessionless::send_status& send_status)\r\r
+       {\r\r
+               return send_status.status == protocol_module_sessionless::SEND_OK\r\r
+                               &&  send_status.send_possible_size > 0;\r\r
+       }\r\r
+};\r\r
+\r\r
+class has_send_disable_data\r\r
+{\r\r
+public:\r\r
+       inline bool operator () (const protocol_module_sessionless::send_status& send_status)\r\r
+       {\r\r
+               return send_status.status == protocol_module_sessionless::SEND_NG\r\r
+               || send_status.send_rest_size > 0 ;\r\r
+       }\r\r
+};\r\r
+\r\r
+class has_send_continue_data\r\r
+{\r\r
+public:\r\r
+       inline bool operator () (const protocol_module_sessionless::send_status& send_status)\r\r
+       {\r\r
+               return send_status.status == protocol_module_sessionless::SEND_CONTINUE;\r\r
+       }\r\r
+};\r\r
+\r\r
+class has_send_ng_data\r\r
+{\r\r
+public:\r\r
+       inline bool operator () (const protocol_module_sessionless::send_status& send_status)\r\r
+       {\r\r
+               return send_status.status == protocol_module_sessionless::SEND_NG;\r\r
+       }\r\r
+\r\r
+};\r\r
+\r\r
+}\r\r
+\r\r
+#endif  //PROTOCOL_MODULE_SESSIONLESS_H\r\r
+\r\r
diff --git a/module/protocol/protocol_module_sslid.cpp b/module/protocol/protocol_module_sslid.cpp
new file mode 100644 (file)
index 0000000..8feb193
--- /dev/null
@@ -0,0 +1,2339 @@
+#include "protocol_module_sslid.h"\r
+#include <boost/format.hpp>\r
+\r
+#define REALSERVER_CONNECT_FAILED_MAX_COUNT (3)\r
+#define THREAD_DIVISION_UP_STREAM (0)                          // up thread\r
+#define THREAD_DIVISION_DOWN_STREAM (1)                    // down thread\r
+#define END_FLAG_ON (1)                                                 // end flag ON\r
+#define END_FLAG_OFF (0)                                                // end flag OFF\r
+\r
+namespace l7vs\r
+{\r
+\r
+const std::string protocol_module_sslid::MODULE_NAME = "sslid";\r
+\r
+protocol_module_sslid::protocol_module_sslid():\r
+  ssl_protocol_module_base( MODULE_NAME ),\r
+    realserver_connect_failed_max_count( REALSERVER_CONNECT_FAILED_MAX_COUNT ),\r
+  replication_data_processor( NULL ),\r
+  session_data_processor( NULL )\r
+{\r
+    //ctor\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "in_function: Constructor protocol_module_sslid::"\r
+                            "protocol_module_sslid()", __FILE__, __LINE__ );\r
+\r
+        boost::format formatter( "out_function: protocol_module_sslid::protocol_module_sslid(): "\r
+                                            "modename=%s, realserver_connect_failed_max_count=%d" );\r
+        formatter % MODULE_NAME % realserver_connect_failed_max_count;\r
+        putLogDebug( 030001, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+}\r
+\r
+protocol_module_sslid::~protocol_module_sslid()\r
+{\r
+    //dtor\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030002, "in/out_function: Destructor protocol_module_sslid::"\r
+                            "~protocol_module_sslid()", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+}\r
+\r
+bool protocol_module_sslid::is_tcp()\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030002, "in/out_function: bool protocol_module_sslid::is_tcp(): "\r
+                            "return_value=true", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return true;\r
+}\r
+\r
+bool protocol_module_sslid::is_udp()\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030002, "in/out_function: bool protocol_module_sslid::is_udp(): "\r
+                            "return_value=false", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return false;\r
+}\r
+\r
+void protocol_module_sslid::initialize(\r
+                                rs_list_itr_func_type inlist_begin,\r
+                                rs_list_itr_func_type inlist_end,\r
+                                rs_list_itr_func_type inlist_next,\r
+                                boost::function< void( void ) >        inlist_lock,\r
+                                boost::function< void( void ) >        inlist_unlock )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030003, "in_function: void protocol_module_sslid::initialize("\r
+                            "rs_list_itr_func_type inlist_begin, rs_list_itr_func_type inlist_end,"\r
+                            "rs_list_itr_func_type inlist_next,boost::function< void( void ) > "\r
+                            "inlist_lock,boost::function< void( void ) >       inlist_unlock )" ,\r
+                            __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    rs_list_begin = inlist_begin;\r
+    rs_list_end = inlist_end;\r
+    rs_list_next = inlist_next;\r
+    rs_list_lock = inlist_lock;\r
+    rs_list_unlock = inlist_unlock;\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030004, "out_function: void protocol_module_sslid::initialize("\r
+                            "rs_list_itr_func_type inlist_begin,rs_list_itr_func_type inlist_end,"\r
+                            "rs_list_itr_func_type inlist_next,boost::function< void( void ) > "\r
+                            "inlist_lock,boost::function< void( void ) >       inlist_unlock ) ",\r
+                            __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+}\r
+\r
+void protocol_module_sslid::finalize()\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "int_function: void protocol_module_sslid::finalize()",\r
+                            __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+       // realserver list function object initialize\r
+       rs_list_begin.clear();\r
+       rs_list_end.clear();\r
+       rs_list_next.clear();\r
+       rs_list_lock.clear();\r
+       rs_list_unlock.clear();\r
+\r
+       /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "function: rs_list_begin.clear(), rs_list_end.clear(), "\r
+                            "rs_list_next.clear(), rs_list_lock.clear(), rs_list_unlock.clear() END" ,\r
+                            __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+       // replication function object initialize\r
+       replication_pay_memory.clear();\r
+    replication_area_lock.clear();\r
+    replication_area_unlock.clear();\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "function: replication_pay_memory.clear(), "\r
+                            "replication_area_lock.clear(), replication_area_unlock.clear() END" ,\r
+                            __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    // scheduleModule function object initialize\r
+    schedule_tcp.clear();\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "function: schedule_tcp.clear() END", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    // module option initialize\r
+    timeout = 0;\r
+    maxlist = 0;\r
+    reschedule = 0;\r
+\r
+    // replication initialize\r
+    if ( replication_data_processor )\r
+    {\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            boost::format formatter("delete: address=&(%d)" );\r
+            formatter % &replication_data_processor;\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        delete replication_data_processor;\r
+        replication_data_processor = NULL;\r
+    }\r
+\r
+    // session initialize\r
+    if ( session_data_processor )\r
+    {\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            boost::format formatter("delete: address=&(%d)" );\r
+            formatter % &session_data_processor;\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        delete session_data_processor;\r
+        session_data_processor = NULL;\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "out_function: void protocol_module_sslid::finalize()",\r
+                            __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    // logger function object initialize\r
+    getloglevel.clear();\r
+       putLogFatal.clear();\r
+    putLogError.clear();\r
+       putLogWarn.clear();\r
+       putLogInfo.clear();\r
+       putLogDebug.clear();\r
+}\r
+\r
+bool protocol_module_sslid::is_use_sorry()\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030002, "in/out_function: bool protocol_module_sslid::is_use_sorry(): "\r
+                            "return_value=false", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return false;\r
+}\r
+\r
+protocol_module_sslid::check_message_result protocol_module_sslid::check_parameter(\r
+                                                const std::vector<std::string>& args )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "int_function: protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::check_parameter("\r
+                                            "const std::vector<std::string>& args ): args=%s" );\r
+        std::string argsdump;\r
+        for ( std::vector<std::string>::const_iterator it = args.begin(); it != args.end(); ++it )\r
+        {\r
+            argsdump += *it;\r
+        }\r
+        formatter % argsdump;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    check_message_result result;\r
+    // set check flag to true\r
+    result.flag = true;\r
+    bool timeout_flag = false;               // timeout set flag\r
+    bool maxlist_flag = false;               // maxlist set flag\r
+    bool reschedule_flag = false;         // reschedule set flag\r
+    bool no_reschedule_flag = false;    // no-reschedule set flag\r
+\r
+    try\r
+    {\r
+        std::vector<std::string>::const_iterator itparam;\r
+        boost::format formatter;\r
+\r
+        for ( itparam = args.begin(); itparam != args.end(); ++itparam )\r
+        {\r
+            if ( *itparam == "-T" || *itparam == "--timeout" )\r
+            {\r
+                // timeout\r
+                if ( !timeout_flag )\r
+                {\r
+                    // not set timeout option\r
+                    ++itparam;\r
+                    // next parameter exist check\r
+                    if ( itparam != args.end() )\r
+                    {\r
+                        // next parameter exist\r
+                        try\r
+                        {\r
+                            unsigned long ultimeout = 0;\r
+                            ultimeout = boost::lexical_cast<unsigned long>( *itparam );\r
+                            // int maxvalue check\r
+                            if ( ultimeout > INT_MAX )\r
+                            {\r
+                                result.flag = false;\r
+                                formatter.parse( "'-T/--timeout' option value '%s' is too large." );\r
+                                formatter % *itparam;\r
+                                result.message = formatter.str();\r
+                                putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                                break;\r
+                            }\r
+                            else\r
+                            {\r
+                                timeout_flag = true;\r
+                                continue;\r
+                            }\r
+                        }\r
+                        catch ( boost::bad_lexical_cast& e )\r
+                        {\r
+                            // not numeric character\r
+                            result.flag = false;\r
+                            formatter.parse( "'-T/--timeout' option value '%s' is not numeric character." );\r
+                            formatter % *itparam;\r
+                            result.message = formatter.str();\r
+                            putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                            break;\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        // next parameter not exist\r
+                        break;\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    // already set timeout\r
+                    result.flag = false;\r
+                    result.message = "Cannot set multiple option '--timeout/-T'.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                    break;\r
+                }\r
+            }\r
+            else if ( *itparam == "-M" || *itparam == "--maxlist" )\r
+            {\r
+                // maxlist\r
+                if ( !maxlist_flag )\r
+                {\r
+                    // not set maxlist option\r
+                    ++itparam;\r
+                    // next parameter exist check\r
+                    if ( itparam != args.end() )\r
+                    {\r
+                        // next parameter exist\r
+                        try\r
+                        {\r
+                            unsigned long ulmaxlist = 0;\r
+                            ulmaxlist = boost::lexical_cast<unsigned long>( *itparam );\r
+                            // int maxvalue check\r
+                            if ( ulmaxlist > INT_MAX )\r
+                            {\r
+                                result.flag = false;\r
+                                formatter.parse( "'-M/--maxlist' option value '%s' is too large." );\r
+                                formatter % *itparam;\r
+                                result.message = formatter.str();\r
+                                putLogError( 037000, result.message, __FILE__, __LINE__);\r
+                                break;\r
+                            }\r
+                            else\r
+                            {\r
+                                maxlist_flag = true;\r
+                                continue;\r
+                            }\r
+                        }\r
+                        catch ( boost::bad_lexical_cast& e )\r
+                        {\r
+                            // not numeric character\r
+                            result.flag = false;\r
+                            formatter.parse("'-M/--maxlist' option value '%s' is not numeric character.");\r
+                            formatter % *itparam;\r
+                            result.message = formatter.str();\r
+                            putLogError( 037000, result.message, __FILE__, __LINE__);\r
+                            break;\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        // next parameter not exist\r
+                        break;\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    // already set timeout\r
+                    result.flag = false;\r
+                    result.message = "Cannot set multiple option '-M/--maxlist'.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__);\r
+                    break;\r
+                }\r
+            }\r
+            else if ( *itparam == "-R" || *itparam == "--reschedule" )\r
+            {\r
+                // reschedule\r
+                if ( !no_reschedule_flag )\r
+                {\r
+                    // not set no-reschedule flag\r
+                    reschedule_flag = true;\r
+                }\r
+                else\r
+                {\r
+                    // already set no-reschedule flag\r
+                    result.flag = false;\r
+                    result.message = "You have to choose either of reschdule or no-reschedule.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__);\r
+                    break;\r
+                }\r
+            }\r
+            else if  ( *itparam == "-N" || *itparam == "--no-reschedule" )\r
+            {\r
+                // no-reschedule\r
+                if ( !reschedule_flag )\r
+                {\r
+                    // not set reschedule flag\r
+                    no_reschedule_flag = true;\r
+                }\r
+                else\r
+                {\r
+                    // already set reshcedule flag\r
+                    result.flag = false;\r
+                    result.message = "You have to choose either of reschdule or no-reschedule.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__);\r
+                    break;\r
+                }\r
+            }\r
+            else\r
+            {\r
+                // check result is false\r
+                result.flag = false;\r
+                result.message = "Option error.";\r
+                putLogError( 037000, result.message, __FILE__, __LINE__);\r
+                break;\r
+            }\r
+        }\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        result.flag = false;\r
+        std::cerr << "check parameter exception: result=false, error=" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::check_parameter() exception: "\r
+                                            "result=false, error=%s." );\r
+        formatter % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    catch( ... )\r
+    {\r
+        result.flag = false;\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::check_parameter() :"\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::check_parameter("\r
+                                            "const std::vector<std::string>& args ): return_value=("\r
+                                            "check_message_result.flag=%d, check_message_result.message=%s" );\r
+        formatter % result.flag % result.message;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return result;\r
+}\r
+\r
+protocol_module_sslid::check_message_result protocol_module_sslid::set_parameter(\r
+                                                const std::vector<std::string>& args )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "int_function: protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::set_parameter("\r
+                                            "const std::vector<std::string>& args ): args=%s" );\r
+        std::string argsdump;\r
+        for ( std::vector<std::string>::const_iterator it = args.begin(); it != args.end(); ++it )\r
+        {\r
+            argsdump += *it;\r
+        }\r
+        formatter % argsdump;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    check_message_result result;\r
+    // set check flag to true\r
+    result.flag = true;\r
+    bool timeout_flag = false;               // timeout set flag\r
+    bool maxlist_flag = false;               // maxlist set flag\r
+    bool reschedule_flag = false;         // reschedule set flag\r
+    bool no_reschedule_flag = false;    // no-reschedule set flag\r
+\r
+    try\r
+    {\r
+        std::vector<std::string>::const_iterator itparam;\r
+        boost::format formatter;\r
+\r
+        for ( itparam = args.begin(); itparam != args.end(); ++itparam )\r
+        {\r
+            if ( *itparam == "-T" || *itparam == "--timeout" )\r
+            {\r
+                // timeout\r
+                if ( !timeout_flag )\r
+                {\r
+                    // not set timeout option\r
+                    ++itparam;\r
+                    // next parameter exist check\r
+                    if ( itparam != args.end() )\r
+                    {\r
+                        // next parameter exist\r
+                        try\r
+                        {\r
+                            unsigned long ultimeout = 0;\r
+                            ultimeout = boost::lexical_cast<unsigned long>( *itparam );\r
+                            // int maxvalue check\r
+                            if ( ultimeout > INT_MAX )\r
+                            {\r
+                                result.flag = false;\r
+                                formatter.parse( "'-T/--timeout' option value '%s' is too large." );\r
+                                formatter % *itparam;\r
+                                result.message = formatter.str();\r
+                                putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                                break;\r
+                            }\r
+                            else\r
+                            {\r
+                                timeout = ultimeout;\r
+                                timeout_flag = true;\r
+                                continue;\r
+                            }\r
+                        }\r
+                        catch ( boost::bad_lexical_cast& e )\r
+                        {\r
+                            // not numeric character\r
+                            result.flag = false;\r
+                            formatter.parse( "'-T/--timeout' option value '%s' is not numeric character." );\r
+                            formatter % *itparam;\r
+                            result.message = formatter.str();\r
+                            putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                            break;\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        // next parameter not exist\r
+                        break;\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    // already set timeout\r
+                    result.flag = false;\r
+                    result.message = "Cannot set multiple option '--timeout/-T'.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                    break;\r
+                }\r
+            }\r
+            else if ( *itparam == "-M" || *itparam == "--maxlist" )\r
+            {\r
+                // maxlist\r
+                if ( !maxlist_flag )\r
+                {\r
+                    // not set maxlist option\r
+                    ++itparam;\r
+                    // next parameter exist check\r
+                    if ( itparam != args.end() )\r
+                    {\r
+                        // next parameter exist\r
+                        try\r
+                        {\r
+                            unsigned long ulmaxlist = 0;\r
+                            ulmaxlist = boost::lexical_cast<unsigned long>( *itparam );\r
+                            // int maxvalue check\r
+                            if ( ulmaxlist > INT_MAX )\r
+                            {\r
+                                result.flag = false;\r
+                                formatter.parse( "'-M/--maxlist' option value '%s' is too large." );\r
+                                formatter % *itparam;\r
+                                result.message = formatter.str();\r
+                                putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                                break;\r
+                            }\r
+                            else\r
+                            {\r
+                                maxlist = ulmaxlist;\r
+                                maxlist_flag = true;\r
+                                continue;\r
+                            }\r
+                        }\r
+                        catch ( boost::bad_lexical_cast& e )\r
+                        {\r
+                            // not numeric character\r
+                            result.flag = false;\r
+                            formatter.parse("'-M/--maxlist' option value '%s' is not numeric character.");\r
+                            formatter % *itparam;\r
+                            result.message = formatter.str();\r
+                            putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                            break;\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        // next parameter not exist\r
+                        break;\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    // already set timeout\r
+                    result.flag = false;\r
+                    result.message = "Cannot set multiple option '-M/--maxlist'.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                    break;\r
+                }\r
+            }\r
+            else if ( *itparam == "-R" || *itparam == "--reschedule" )\r
+            {\r
+                // reschedule\r
+                if ( !no_reschedule_flag )\r
+                {\r
+                    // not set no-reschedule flag\r
+                    reschedule_flag = true;\r
+                    reschedule = 1;\r
+                }\r
+                else\r
+                {\r
+                    // already set no-reschedule flag\r
+                    result.flag = false;\r
+                    result.message = "You have to choose either of reschdule or no-reschedule.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                    break;\r
+                }\r
+            }\r
+            else if  ( *itparam == "-N" || *itparam == "--no-reschedule" )\r
+            {\r
+                // no-reschedule\r
+                if ( !reschedule_flag )\r
+                {\r
+                    // not set reschedule flag\r
+                    no_reschedule_flag = true;\r
+                    reschedule = 0;\r
+                }\r
+                else\r
+                {\r
+                    // already set reshcedule flag\r
+                    result.flag = false;\r
+                    result.message = "You have to choose either of reschdule or no-reschedule.";\r
+                    putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                    break;\r
+                }\r
+            }\r
+            else\r
+            {\r
+                // check result is false\r
+                result.flag = false;\r
+                result.message = "Option error.";\r
+                putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+                break;\r
+            }\r
+        }\r
+\r
+        // result check\r
+        if ( result.flag )\r
+        {\r
+            // timeout default set\r
+            if ( !timeout_flag )\r
+            {\r
+                timeout = 3600;\r
+            }\r
+\r
+            // maxlist default set\r
+            if ( !maxlist_flag )\r
+            {\r
+                maxlist = 1024;\r
+            }\r
+\r
+            // reschedule default set\r
+            if ( !reschedule_flag )\r
+            {\r
+                reschedule = 0;\r
+            }\r
+        }\r
+\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            boost::format formatter( "function: protocol_module_sslid::check_message_result "\r
+                                                "protocol_module_sslid::set_parameter("\r
+                                                "const std::vector<std::string>& args ): timeout=%d,"\r
+                                                "maxlist=%d, reschedule=%d" );\r
+            formatter % timeout % maxlist % reschedule;\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        unsigned int data_size = 0;\r
+        void* data_addr = NULL;\r
+        data_addr = replication_pay_memory( get_name(), &data_size );\r
+\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            putLogDebug( 030000, "function: protocol_module_sslid::check_message_result "\r
+                                 "protocol_module_sslid::set_parameter(): "\r
+                                 "replication_pay_memory() END.", __FILE__, __LINE__ );\r
+            boost::format formatter( "function: protocol_module_sslid::check_message_result "\r
+                                                "protocol_module_sslid::set_parameter(): "\r
+                                                "data_addr=&(%d), data_size=%d." );\r
+            formatter % &data_addr % data_size;\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        if ( data_addr == NULL || data_size <= 0 )\r
+        {\r
+            // replication area is full\r
+            putLogError( 037000, "Replication area is full.", __FILE__, __LINE__);\r
+\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                boost::format formatter( "out_function: protocol_module_sslid::check_message_result "\r
+                                                    "protocol_module_sslid::set_parameter("\r
+                                                    "const std::vector<std::string>& args ): return_value="\r
+                                                    "check_message_result.flag=%d, check_message_result.message=%s" );\r
+                formatter % result.flag % result.message;\r
+                putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            return result;\r
+        }\r
+        else\r
+        {\r
+                // create sslid_replication_data_processor\r
+                replication_data_processor = new sslid_replication_data_processor(\r
+                                                                                    maxlist,\r
+                                                                                    static_cast<char*>(data_addr),\r
+                                                                                    data_size,\r
+                                                                                    virtual_service_endpoint_tcp,\r
+                                                                                    getloglevel,\r
+                                                                                    putLogFatal,\r
+                                                                                    putLogError,\r
+                                                                                    putLogWarn,\r
+                                                                                    putLogInfo,\r
+                                                                                    putLogDebug  );\r
+\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                boost::format formatter("new: address=&(%d), size=%lu." );\r
+                formatter % &replication_data_processor % sizeof( sslid_session_data_processor );\r
+                putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            replication_data_processor->register_replication_area_lock( replication_area_lock );\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "protocol_module_sslid::check_message_result "\r
+                                    "protocol_module_sslid::set_parameter(): register_replication_area_lock() END.",\r
+                                    __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            replication_data_processor->register_replication_area_unlock( replication_area_unlock );\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "protocol_module_sslid::check_message_result "\r
+                                    "protocol_module_sslid::set_parameter(): register_replication_area_unlock() END.",\r
+                                    __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            // create sslid_session_data_processor\r
+            session_data_processor = new sslid_session_data_processor( maxlist,\r
+                                                                                                       timeout,\r
+                                                                                                       replication_data_processor,\r
+                                                                                                       getloglevel,\r
+                                                                                                       putLogFatal,\r
+                                                                                                       putLogError,\r
+                                                                                                       putLogWarn,\r
+                                                                                                       putLogInfo,\r
+                                                                                                       putLogDebug );\r
+\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                boost::format formatter("new: address=&(%d), size=%lu." );\r
+                formatter % &session_data_processor % sizeof( sslid_session_data_processor );\r
+                putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            // restore data from replication area\r
+            sslid_replication_data* redata = replication_data_processor->get_replication_area();\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "protocol_module_sslid::check_message_result "\r
+                                    "protocol_module_sslid::set_parameter(): get_replication_area() END.",\r
+                                    __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            replication_area_lock();\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "protocol_module_sslid::check_message_result "\r
+                                    "protocol_module_sslid::set_parameter(): replication_area_lock() END.",\r
+                                    __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            session_data_processor->read_session_data_from_replication_area( redata );\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "protocol_module_sslid::check_message_result "\r
+                                    "protocol_module_sslid::set_parameter(): "\r
+                                    "read_session_data_from_replication_area() END.",\r
+                                    __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            replication_area_unlock();\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "protocol_module_sslid::check_message_result "\r
+                                    "protocol_module_sslid::set_parameter(): replication_area_unlock() END.",\r
+                                    __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+        }\r
+    }\r
+    catch ( const std::bad_alloc& ba )\r
+    {\r
+        if ( replication_data_processor )\r
+        {\r
+            delete replication_data_processor;\r
+            replication_data_processor = NULL;\r
+        }\r
+\r
+        if ( session_data_processor )\r
+        {\r
+            delete session_data_processor;\r
+            session_data_processor = NULL;\r
+        }\r
+\r
+        std::cerr << "set parameter exception: Could not allocate memory." << std::endl;\r
+        result.flag = false;\r
+        result.message = "Could not allocate memory.";\r
+        putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        if ( replication_data_processor )\r
+        {\r
+            delete replication_data_processor;\r
+            replication_data_processor = NULL;\r
+        }\r
+\r
+        if ( session_data_processor )\r
+        {\r
+            delete session_data_processor;\r
+            session_data_processor = NULL;\r
+        }\r
+\r
+        result.flag = false;\r
+        std::cerr << "set parameter exception: result=false, error=" << e.what() << std::endl;\r
+        boost::format formatter( "function protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::set_parameter() exception: "\r
+                                            "result=false, error=%s." );\r
+        formatter % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    catch( ... )\r
+    {\r
+        if ( replication_data_processor )\r
+        {\r
+            delete replication_data_processor;\r
+            replication_data_processor = NULL;\r
+        }\r
+\r
+        if ( session_data_processor )\r
+        {\r
+            delete session_data_processor;\r
+            session_data_processor = NULL;\r
+        }\r
+\r
+        result.flag = false;\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::check_parameter() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::set_parameter("\r
+                                            "const std::vector<std::string>& args ): return_value="\r
+                                            "check_message_result.flag=%d, check_message_result.message=%s" );\r
+        formatter % result.flag % result.message;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return result;\r
+}\r
+\r
+protocol_module_sslid::check_message_result protocol_module_sslid::add_parameter(\r
+                                                const std::vector<std::string>& args )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "int_function: protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::add_parameter("\r
+                                            "const std::vector<std::string>& args ): args=%s" );\r
+        std::string argsdump;\r
+        for ( std::vector<std::string>::const_iterator it = args.begin(); it != args.end(); ++it )\r
+        {\r
+            argsdump += *it;\r
+        }\r
+        formatter % argsdump;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    check_message_result result;\r
+    result.flag = true;\r
+\r
+    if ( args.size() > 0 )\r
+    {\r
+        // option exist\r
+        result.flag = false;\r
+        result.message = "Cannot add option.";\r
+        putLogError( 037000, result.message, __FILE__, __LINE__ );\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_sslid::check_message_result "\r
+                                            "protocol_module_sslid::add_parameter("\r
+                                            "const std::vector<std::string>& args ): return_value="\r
+                                            "check_message_result.flag=%d, check_message_result.message=%s" );\r
+        formatter % result.flag % result.message;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return result;\r
+}\r
+\r
+void protocol_module_sslid::handle_rslist_update()\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030002, "in/out_function:void protocol_module_sslid::handle_rslist_update(): "\r
+                            "return_value=void", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+}\r
+\r
+void protocol_module_sslid::register_schedule( tcp_schedule_func_type inschedule )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "in_function: void protocol_module_sslid::register_schedule( "\r
+                            "tcp_schedule_func_type inschedule )", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    schedule_tcp = inschedule;\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030000, "out_function: void protocol_module_sslid::register_schedule( "\r
+                            "tcp_schedule_func_type inschedule )", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+}\r
+\r
+void protocol_module_sslid::register_schedule( udp_schedule_func_type inschedule )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        putLogDebug( 030002, "in/out_function:void protocol_module_sslid::register_schedule(): "\r
+                            "return_value=void", __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_session_initialize(\r
+                                                const boost::thread::id up_thread_id,\r
+                                                const boost::thread::id down_thread_id )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_session_initialize( const boost::thread::id up_thread_id, "\r
+                                            "const boost::thread::id down_thread_id ): "\r
+                                            "up_thread_id=%d, down_thread_id=%d" );\r
+        formatter % up_thread_id % down_thread_id;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    EVENT_TAG status = ACCEPT;\r
+    session_thread_data_sslid* threaddata_up = NULL;\r
+    session_thread_data_sslid* threaddata_down = NULL;\r
+\r
+    try\r
+    {\r
+        // initialize the up/down thread data\r
+        threaddata_up = new session_thread_data_sslid;\r
+\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            boost::format formatter("new: address=&(%d), size=%lu" );\r
+            formatter % &threaddata_up % sizeof( session_thread_data_sslid );\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        threaddata_up->realserver_connect_failed_count = 0;\r
+        threaddata_up->data_begain_offset = 0;\r
+        threaddata_up->data_size = 0;\r
+        threaddata_up->current_record_rest_size = 0;\r
+        threaddata_up->hello_message_flag = false;\r
+        threaddata_up->end_flag = END_FLAG_OFF;                                     // set end_flag to OFF\r
+        threaddata_up->thread_division = THREAD_DIVISION_UP_STREAM;     // up thread division\r
+        threaddata_up->pair_thread_id = down_thread_id;\r
+\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            // data dump\r
+            boost::format formatter("function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                    "handle_session_initialize() : session_thread_data_sslid(upthread) : "\r
+                                    "realserver_connect_failed_count=%d, data_begain_offset=%d, "\r
+                                    "data_size=%d, current_record_rest_size=%d, hello_message_flag=%d,"\r
+                                    "end_flag=%d, thread_division=%d, pair_thread_id=%d.");\r
+            formatter % threaddata_up->realserver_connect_failed_count\r
+                          % threaddata_up->data_begain_offset\r
+                          % threaddata_up->data_size\r
+                          % threaddata_up->current_record_rest_size\r
+                          % threaddata_up->hello_message_flag\r
+                          % threaddata_up->end_flag\r
+                          % threaddata_up->thread_division\r
+                          % threaddata_up->pair_thread_id;\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        threaddata_down = new session_thread_data_sslid;\r
+\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            boost::format formatter("new: address=&(%d), size=%lu" );\r
+            formatter % &threaddata_down % sizeof( session_thread_data_sslid );\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        threaddata_down->realserver_connect_failed_count = 0;\r
+        threaddata_down->data_begain_offset = 0;\r
+        threaddata_down->data_size = 0;\r
+        threaddata_down->current_record_rest_size = 0;\r
+        threaddata_down->hello_message_flag = false;\r
+        threaddata_down->end_flag = END_FLAG_OFF;                                       // set end_flag to OFF\r
+        threaddata_down->thread_division = THREAD_DIVISION_DOWN_STREAM; // down thread division\r
+        threaddata_down->pair_thread_id = up_thread_id;\r
+\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            // data_dump\r
+            boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                "handle_session_initialize() : session_thread_data_sslid(downthread) : "\r
+                                                "realserver_connect_failed_count=%d, data_begain_offset=%d, "\r
+                                                "data_size=%d, current_record_rest_size=%d, hello_message_flag=%d,"\r
+                                                "end_flag=%d, thread_division=%d, pair_thread_id=%d.");\r
+            formatter % threaddata_down->realserver_connect_failed_count\r
+                          % threaddata_down->data_begain_offset\r
+                          % threaddata_down->data_size\r
+                          % threaddata_down->current_record_rest_size\r
+                          % threaddata_down->hello_message_flag\r
+                          % threaddata_down->end_flag\r
+                          % threaddata_down->thread_division\r
+                          % threaddata_down->pair_thread_id;\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        {\r
+            // insert the up/down thread data into the map\r
+            boost::mutex::scoped_lock sclock( session_thread_data_map_mutex );\r
+            session_thread_data_map[up_thread_id] = threaddata_up;\r
+            session_thread_data_map[down_thread_id] = threaddata_down;\r
+        }\r
+    }\r
+    catch ( const std::bad_alloc& ba )\r
+    {\r
+        if ( threaddata_up )\r
+        {\r
+            delete threaddata_up;\r
+            threaddata_up = NULL;\r
+        }\r
+\r
+        if ( threaddata_down )\r
+        {\r
+            delete threaddata_down;\r
+            threaddata_down = NULL;\r
+        }\r
+\r
+        std::cerr << "handle_session_initialize exception: Could not allocate memory." << std::endl;\r
+        putLogError( 037000, "Could not allocate memory.", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        if ( threaddata_up )\r
+        {\r
+            delete threaddata_up;\r
+            threaddata_up = NULL;\r
+        }\r
+\r
+        if ( threaddata_down )\r
+        {\r
+            delete threaddata_down;\r
+            threaddata_down = NULL;\r
+        }\r
+\r
+        std::cerr << "handle_session_initialize exception: error=%s" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_session_initialize() exception: result=%d, error=%s." );\r
+        formatter % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+    catch( ... )\r
+    {\r
+        if ( threaddata_up )\r
+        {\r
+            delete threaddata_up;\r
+            threaddata_up = NULL;\r
+        }\r
+\r
+        if ( threaddata_down )\r
+        {\r
+            delete threaddata_down;\r
+            threaddata_down = NULL;\r
+        }\r
+\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::handle_session_initialize() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_session_initialize( const boost::thread::id up_thread_id,"\r
+                                            "const boost::thread::id down_thread_id ): return_value=%d" );\r
+        formatter % status;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return status;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_session_finalize(\r
+                                                const boost::thread::id up_thread_id,\r
+                                                const boost::thread::id down_thread_id )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_session_finalize( const boost::thread::id up_thread_id, "\r
+                                            "const boost::thread::id down_thread_id ): "\r
+                                            "up_thread_id=%d, down_thread_id=%d" );\r
+        formatter % up_thread_id % down_thread_id;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    try\r
+    {\r
+        // delete the up/down thread data from the map\r
+        boost::mutex::scoped_lock sclock( session_thread_data_map_mutex );\r
+\r
+        session_thread_data_map_type::iterator itthread;\r
+        itthread = session_thread_data_map.find( up_thread_id );\r
+        if ( itthread != session_thread_data_map.end() )\r
+        {\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                boost::format formatter("delete: address=&(%d)" );\r
+                formatter % &itthread->second;\r
+                putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            delete itthread->second;\r
+            itthread->second = NULL;\r
+            session_thread_data_map.erase( itthread );\r
+        }\r
+\r
+        itthread = session_thread_data_map.find( down_thread_id );\r
+        if ( itthread != session_thread_data_map.end() )\r
+        {\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                boost::format formatter("delete: address=&(%d)" );\r
+                formatter % &itthread->second;\r
+                putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            delete itthread->second;\r
+            itthread->second = NULL;\r
+            session_thread_data_map.erase( itthread );\r
+        }\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        std::cerr << "handle_session_finalize exception: error=%s" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_session_finalize() exception: result=%d, error=%s." );\r
+        formatter % STOP % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    catch( ... )\r
+    {\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::handle_session_finalize() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_session_finalize( const boost::thread::id up_thread_id,"\r
+                                            "const boost::thread::id down_thread_id ): return_value=%d" );\r
+        formatter % STOP;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_accept(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_accept( const boost::thread::id thread_id ): thread_id=%d" );\r
+        formatter % thread_id;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    EVENT_TAG status = STOP;\r
+    // find thread id from map\r
+    boost::mutex::scoped_lock sclock( session_thread_data_map_mutex );\r
+    try\r
+    {\r
+        session_thread_data_map_type::iterator it = session_thread_data_map.find( thread_id );\r
+        if ( it == session_thread_data_map.end() )\r
+        {\r
+            // waiting for jp response.....??????????????????\r
+            putLogError(037000, "Invalid thread id.", __FILE__, __LINE__ );\r
+            status = FINALIZE;\r
+        }\r
+        else\r
+        {\r
+            status = CLIENT_RECV;\r
+        }\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        std::cerr << "handle_accept exception: error=%s" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_accept() exception: result=%d, error=%s." );\r
+        formatter % FINALIZE % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+    catch( ... )\r
+    {\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::handle_accept() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter("out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_accept( const boost::thread::id thread_id ): return_value=%d.");\r
+        formatter % status;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return status;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_client_recv(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                                const size_t recvlen )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_client_recv( const boost::thread::id thread_id,"\r
+                                            "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                            "const size_t recvlen ): thread_id=%d, recvbuffer=%s, recvlen=%d" );\r
+        formatter % thread_id % recvbuffer.data() % recvlen;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    // parameter check\r
+    if (recvlen > recvbuffer.size() )\r
+    {\r
+        // waiting for jp response...??????????????????\r
+        std::cerr << "handle_client_recv(): Data size bigger than buffer size." << std::endl;\r
+        putLogError(037000, "Data size bigger than buffer size.", __FILE__, __LINE__ );\r
+        /*-------- DEBUG LOG --------*/\r
+        if ( LOG_LV_DEBUG == getloglevel() )\r
+        {\r
+            boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                "const size_t recvlen ): return_value=%d" );\r
+            formatter % FINALIZE;\r
+            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+        }\r
+        /*------DEBUG LOG END------*/\r
+\r
+        return FINALIZE;\r
+    }\r
+\r
+    // find session_thread_data_sslid's pointer from map\r
+    session_thread_data_sslid* threaddata = NULL;\r
+    EVENT_TAG status = STOP;\r
+\r
+    try\r
+    {\r
+        {\r
+            boost::mutex::scoped_lock sclock( session_thread_data_map_mutex );\r
+            session_thread_data_map_type::iterator it = session_thread_data_map.find( thread_id );\r
+            if ( it == session_thread_data_map.end() )\r
+            {\r
+                // waiting for jp response.....??????????????????\r
+                putLogError(037000, "Invalid thread id.", __FILE__, __LINE__ );\r
+\r
+                /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                        "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                        "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                        "const size_t recvlen ): return_value=%d" );\r
+                    formatter % FINALIZE;\r
+                    putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+\r
+                return FINALIZE;\r
+            }\r
+\r
+            threaddata = it->second;\r
+        }\r
+\r
+        if ( threaddata->end_flag == END_FLAG_ON )\r
+        {\r
+            // end_flag is ON, realserver is disconnect\r
+             status = CLIENT_RECV;\r
+        }\r
+        else\r
+        {\r
+            // end_flag is OFF\r
+            // get the c-style pointer from data buffer\r
+            char* databuf = threaddata->data_buffer.c_array();\r
+\r
+            if ( threaddata->data_size > 0 )\r
+            {\r
+                // data length check\r
+                if ( threaddata->data_size + recvlen > threaddata->data_buffer.size() )\r
+                {\r
+                    // waiting for jp response...??????????????????\r
+                    std::cerr << "handle_client_recv(): Data size bigger than buffer size." << std::endl;\r
+                    putLogError(037000, "Data size bigger than buffer size.", __FILE__, __LINE__ );\r
+\r
+                    /*-------- DEBUG LOG --------*/\r
+                    if ( LOG_LV_DEBUG == getloglevel() )\r
+                    {\r
+                        boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                            "handle_client_recv( const boost::thread::id thread_id,"\r
+                                                            "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                                            "const size_t recvlen ): return_value=%d" );\r
+                        formatter % FINALIZE;\r
+                        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+                    }\r
+                    /*------DEBUG LOG END------*/\r
+\r
+                    return FINALIZE;\r
+                }\r
+\r
+                // data dump\r
+                /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    boost::format formatter( "%02x" );\r
+                    for ( int i = 0; i < threaddata->data_size; ++i )\r
+                    {\r
+                        formatter % static_cast<unsigned short>(\r
+                                                static_cast<unsigned char>(\r
+                                                threaddata->data_buffer[threaddata->data_begain_offset+i]));\r
+                    }\r
+\r
+                    std::string datadump = formatter.str();\r
+                    formatter.parse( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_client_recv( ): before memmove (data dump):  "\r
+                                            "data begin(%d), data_size=%d,data=%s.");\r
+                    formatter % threaddata->data_begain_offset % threaddata->data_size % datadump;\r
+                    putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+\r
+                // move the data from data start pos to buffer start pos\r
+                memmove( databuf,\r
+                                 &databuf[threaddata->data_begain_offset],\r
+                                 threaddata->data_size );\r
+\r
+                 /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    boost::format formatter( "%02x" );\r
+                    for ( int i = 0; i < threaddata->data_size; ++i )\r
+                    {\r
+                        formatter % static_cast<unsigned short>(\r
+                                                static_cast<unsigned char>(threaddata->data_buffer[i]));\r
+                    }\r
+\r
+                    std::string datadump = formatter.str();\r
+                    formatter.parse( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_client_recv( ): after memmove (data dump):  "\r
+                                            "data begin(0), data_size=%d,data=%s.");\r
+                    formatter % threaddata->data_size % datadump;\r
+                    putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+            }\r
+\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                boost::format formatter( "%02x" );\r
+                for ( size_t i = 0; i < threaddata->data_size+recvlen; ++i )\r
+                {\r
+                    formatter % static_cast<unsigned short>(\r
+                                            static_cast<unsigned char>(threaddata->data_buffer[i]));\r
+                }\r
+\r
+                std::string datadump = formatter.str();\r
+                formatter.parse( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                        "handle_client_recv( ): before memcpy (data dump):  "\r
+                                        "data begin(0), data_size=%d,data=%s.");\r
+                formatter % threaddata->data_size % datadump;\r
+                putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            // copy new recv data to data_buffer\r
+            memcpy( &databuf[threaddata->data_size], recvbuffer.data(), recvlen );\r
+\r
+            // add data size\r
+            threaddata->data_size += recvlen;\r
+            threaddata->data_begain_offset = 0;\r
+\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                boost::format formatter( "%02x" );\r
+                for ( size_t i = 0; i < threaddata->data_size+recvlen; ++i )\r
+                {\r
+                    formatter % static_cast<unsigned short>(\r
+                                            static_cast<unsigned char>(threaddata->data_buffer[i]));\r
+                }\r
+\r
+                std::string datadump = formatter.str();\r
+                formatter.parse( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                        "handle_client_recv( ): after memcpy (data dump):  "\r
+                                        "data begin(0), data_size=%d,data=%s.");\r
+                formatter % threaddata->data_size % datadump;\r
+                putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+\r
+            if ( threaddata->current_record_rest_size == 0 )\r
+            {\r
+                // new SSL Record start\r
+                int alllength = 0;\r
+                bool ishellomessage = false;\r
+                int ret = check_ssl_record_sendable( true,\r
+                                                                       threaddata->data_buffer.data(),\r
+                                                                       threaddata->data_size,\r
+                                                                       alllength,\r
+                                                                       ishellomessage );\r
+                /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    putLogDebug( 030000, "function:protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                        "handle_client_recv() : check_ssl_record_sendable() END.", __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+\r
+                if ( ret == -1 )\r
+                {\r
+                    // anomaly, set the end_flag to ON\r
+                    threaddata->end_flag = END_FLAG_ON;\r
+                    status = FINALIZE;\r
+                    /*-------- DEBUG LOG --------*/\r
+                    if ( LOG_LV_DEBUG == getloglevel() )\r
+                    {\r
+                        putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_client_recv(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+                    }\r
+                    /*------DEBUG LOG END------*/\r
+                }\r
+                else if ( ret == 1 )\r
+                {\r
+                    // disable send the data, set the status to CLIENT_RECV\r
+                     status = CLIENT_RECV;\r
+                }\r
+                else\r
+                {\r
+                    // enable send the data, set the status to REALSERVER_SELECT\r
+                    // set client helloworld shakehand flag\r
+                    threaddata->hello_message_flag = ishellomessage;\r
+                    threaddata->current_record_rest_size = alllength;\r
+                    status = REALSERVER_SELECT;\r
+                }\r
+            }\r
+            else\r
+            {\r
+                // other data\r
+                 status = REALSERVER_SELECT;\r
+            }\r
+        }\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        std::cerr << "handle_client_recv exception: error=%s" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_client_recv() exception: result=%d, error=%s." );\r
+        formatter % FINALIZE % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+    catch( ... )\r
+    {\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::handle_client_recv() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_client_recv( const boost::thread::id thread_id,"\r
+                                            "const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,"\r
+                                            "const size_t recvlen ): return_value=%d,end_flag=%d." );\r
+        formatter % status % threaddata->end_flag;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return status;\r
+}\r
+\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_select(\r
+                                                const boost::thread::id thread_id,\r
+                                                boost::asio::ip::tcp::endpoint& rs_endpoint )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_select( const boost::thread::id thread_id, "\r
+                                            "boost::asio::ip::tcp::endpoint& rs_endpoint ): "\r
+                                            "thread_id=%d,rs_endpoint=[%s]:%d" );\r
+        formatter % thread_id % rs_endpoint.address().to_string() % rs_endpoint.port();\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    // find session_thread_data_sslid's pointer from map\r
+    session_thread_data_sslid* threaddata = NULL;\r
+    EVENT_TAG status = STOP;\r
+\r
+    try\r
+    {\r
+        {\r
+            boost::mutex::scoped_lock sclock( session_thread_data_map_mutex );\r
+            session_thread_data_map_type::iterator it = session_thread_data_map.find(thread_id);\r
+            if ( it == session_thread_data_map.end() )\r
+            {\r
+                 // waiting for jp response.....??????????????????\r
+                putLogError(037000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                        "handle_realserver_select( const boost::thread::id thread_id,"\r
+                                                        "boost::asio::ip::tcp::endpoint& rs_endpoint ): return_value=%d" );\r
+                    formatter % FINALIZE;\r
+                    putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+                // waiting for jp response Could not finalize protomod. (Realserver decision failure)??????\r
+                putLogInfo( 035000, "Realserver decision failure", __FILE__, __LINE__ );\r
+\r
+                return FINALIZE;\r
+            }\r
+\r
+            threaddata = it->second;\r
+        }\r
+\r
+        if ( threaddata->realserver_connect_failed_count <= 0 )\r
+        {\r
+            // the first connect or connected successful\r
+            if ( realserver_selected( threaddata->selected_realserver ) )\r
+            {\r
+                 /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                        "realserver_selected() END.", __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+\r
+                // realserver already connected\r
+                rs_endpoint = threaddata->selected_realserver;\r
+                status = REALSERVER_CONNECT;\r
+            }\r
+            else\r
+            {\r
+                 /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                        "realserver_selected(): END.", __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+\r
+                // first connect\r
+                if ( !threaddata->hello_message_flag )\r
+                {\r
+                    // when the first connect, must be hellomessage\r
+                    threaddata->end_flag = END_FLAG_ON;\r
+                    status = FINALIZE;\r
+                     /*-------- DEBUG LOG --------*/\r
+                    if ( LOG_LV_DEBUG == getloglevel() )\r
+                    {\r
+                        putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_select(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+                    }\r
+                    /*------DEBUG LOG END------*/\r
+                }\r
+                else\r
+                {\r
+                    // get sessionid from the data buffer\r
+                    std::string session_id;\r
+                    if ( get_ssl_session_id( threaddata->data_buffer.data(), threaddata->data_size,\r
+                                                    session_id ) == -1 )\r
+                    {\r
+                        /*-------- DEBUG LOG --------*/\r
+                        if ( LOG_LV_DEBUG == getloglevel() )\r
+                        {\r
+                            boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                                "handle_realserver_select( const boost::thread::id thread_id,"\r
+                                                                "boost::asio::ip::tcp::endpoint& rs_endpoint ): return_value=%d" );\r
+                            formatter % FINALIZE;\r
+                            putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+                        }\r
+                        /*------DEBUG LOG END------*/\r
+\r
+                        // waiting for jp response Could not finalize protomod. (Realserver decision failure)??????\r
+                        putLogInfo( 035000, "Realserver decision failure", __FILE__, __LINE__ );\r
+\r
+                        return FINALIZE;\r
+                    }\r
+\r
+                    /*-------- DEBUG LOG --------*/\r
+                    if ( LOG_LV_DEBUG == getloglevel() )\r
+                    {\r
+                        putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                             "handle_realserver_select( ): get_ssl_session_id() END.", __FILE__, __LINE__ );\r
+                    }\r
+                    /*------DEBUG LOG END------*/\r
+\r
+                    if ( session_id.size() == 0 )\r
+                    {\r
+                        // no session id in hellomesseage\r
+                        // schedule the endpoint\r
+                        boost::asio::ip::tcp::endpoint temp_endpoint;\r
+                        boost::asio::ip::tcp::endpoint comp_endpoint;   // for compare the endpoint\r
+                        schedule_tcp(thread_id, rs_list_begin, rs_list_end, rs_list_next, temp_endpoint );\r
+                        if ( temp_endpoint != comp_endpoint )\r
+                        {\r
+                            // success for get the endpoint by reschedule\r
+                            threaddata->selected_realserver = temp_endpoint;\r
+                            rs_endpoint = temp_endpoint;\r
+                            status = REALSERVER_CONNECT;\r
+                        }\r
+                        else\r
+                        {\r
+                             // failed to get the endpoint by reschedule\r
+                            // set end_flag to ON, and turn the status to CLIENT_DISCONNECT\r
+                            threaddata->end_flag = END_FLAG_ON;\r
+                            status = CLIENT_DISCONNECT;\r
+                            /*-------- DEBUG LOG --------*/\r
+                            if ( LOG_LV_DEBUG == getloglevel() )\r
+                            {\r
+                                putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                    "handle_realserver_select(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+                            }\r
+                            /*------DEBUG LOG END------*/\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        // has session id in hellomessage\r
+                        // try to get the endpoint from session data by session id\r
+                        int ret = session_data_processor->get_endpoint_from_session_data(\r
+                                                                                                session_id,\r
+                                                                                                threaddata->selected_realserver );\r
+                        /*-------- DEBUG LOG --------*/\r
+                        if ( LOG_LV_DEBUG == getloglevel() )\r
+                        {\r
+                            putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                "handle_realserver_select(): get_endpoint_from_session_data() END.",\r
+                                                __FILE__, __LINE__ );\r
+                        }\r
+                        /*------DEBUG LOG END------*/\r
+\r
+                        if ( ret == 0 )\r
+                        {\r
+                            // success for get the endpoint\r
+                            rs_endpoint = threaddata->selected_realserver;\r
+                            status = REALSERVER_CONNECT;\r
+                        }\r
+                        else\r
+                        {\r
+                            // failed to get the endpoint\r
+                            if ( reschedule == 1 )\r
+                            {\r
+                                // reschedule mode\r
+                                boost::asio::ip::tcp::endpoint temp_endpoint;\r
+                                boost::asio::ip::tcp::endpoint comp_endpoint;   // for compare the endpoint\r
+                                schedule_tcp(thread_id, rs_list_begin, rs_list_end, rs_list_next, temp_endpoint );\r
+                                if ( temp_endpoint != comp_endpoint )\r
+                                {\r
+                                    // success for get the endpoint by reschedule\r
+                                    threaddata->selected_realserver = temp_endpoint;\r
+                                    rs_endpoint = temp_endpoint;\r
+                                    status = REALSERVER_CONNECT;\r
+                                }\r
+                                else\r
+                                {\r
+                                    // failed to get the endpoint by reschedule\r
+                                    // set end_flag to ON, and turn the status to CLIENT_DISCONNECT\r
+                                    threaddata->end_flag = END_FLAG_ON;\r
+                                    status = CLIENT_DISCONNECT;\r
+                                     /*-------- DEBUG LOG --------*/\r
+                                    if ( LOG_LV_DEBUG == getloglevel() )\r
+                                    {\r
+                                        putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                            "handle_realserver_select(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+                                    }\r
+                                    /*------DEBUG LOG END------*/\r
+                                }\r
+                            }\r
+                            else\r
+                            {\r
+                                // no reschedule mode\r
+                                // set end_flag to ON and disconnect the client\r
+                                threaddata->end_flag = END_FLAG_ON;\r
+                                status = CLIENT_DISCONNECT;\r
+                                 /*-------- DEBUG LOG --------*/\r
+                                if ( LOG_LV_DEBUG == getloglevel() )\r
+                                {\r
+                                    putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                        "handle_realserver_select(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+                                }\r
+                                /*------DEBUG LOG END------*/\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+        }\r
+        else if ( threaddata->realserver_connect_failed_count < realserver_connect_failed_max_count )\r
+        {\r
+            // try multi times connect\r
+            if ( reschedule == 1 )\r
+            {\r
+                // reschedule mode\r
+                boost::asio::ip::tcp::endpoint temp_endpoint;\r
+                boost::asio::ip::tcp::endpoint comp_endpoint;   // for compare the endpoint\r
+                schedule_tcp(thread_id, rs_list_begin, rs_list_end, rs_list_next, temp_endpoint );\r
+                if ( temp_endpoint != comp_endpoint )\r
+                {\r
+                    // success for get the endpoint by reschedule\r
+                    threaddata->selected_realserver = temp_endpoint;\r
+                    rs_endpoint = temp_endpoint;\r
+                    status = REALSERVER_CONNECT;\r
+                }\r
+                else\r
+                {\r
+                    // failed to get the endpoint by reschedule\r
+                    // set end_flag to ON, and turn the status to CLIENT_DISCONNECT\r
+                    threaddata->end_flag = END_FLAG_ON;\r
+                    status = CLIENT_DISCONNECT;\r
+                     /*-------- DEBUG LOG --------*/\r
+                    if ( LOG_LV_DEBUG == getloglevel() )\r
+                    {\r
+                        putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_select(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+                    }\r
+                    /*------DEBUG LOG END------*/\r
+                }\r
+            }\r
+            else\r
+            {\r
+                // no reschedule mode\r
+                // set end_flag to ON and disconnect the client\r
+                threaddata->end_flag = END_FLAG_ON;\r
+                status = CLIENT_DISCONNECT;\r
+                 /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                        "handle_realserver_select(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+            }\r
+        }\r
+        else\r
+        {\r
+            // connect failed\r
+            // set end_flag to ON and disconnect the client\r
+            threaddata->end_flag = END_FLAG_ON;\r
+            status = CLIENT_DISCONNECT;\r
+             /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                    "handle_realserver_select(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+        }\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        std::cerr << "handle_realserver_select exception: error=%s" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_select() exception: result=%d, error=%s." );\r
+        formatter % FINALIZE % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+\r
+        // waiting for jp response Could not finalize protomod. (Realserver decision failure)??????\r
+        putLogInfo( 035000, "Realserver decision failure", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+    catch( ... )\r
+    {\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::handle_realserver_select() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+\r
+        // waiting for jp response Could not finalize protomod. (Realserver decision failure)??????\r
+        putLogInfo( 035000, "Realserver decision failure", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_select( const boost::thread::id thread_id,"\r
+                                            "boost::asio::ip::tcp::endpoint& rs_endpoint ): return_value=%d,"\r
+                                            "end_flag=%d, rs_endpoint=[%s]:%d." );\r
+        formatter % status % threaddata->end_flag % rs_endpoint.address().to_string() % rs_endpoint.port();\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return status;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_select(\r
+                                                const boost::thread::id thread_id,\r
+                                                boost::asio::ip::udp::endpoint& rs_endpoint,\r
+                                                boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                size_t& datalen )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in/out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_select( const boost::thread::id thread_id,"\r
+                                            "boost::asio::ip::tcp::endpoint& rs_endpoint, "\r
+                                            "boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen ): "\r
+                                            "return_value=%d." );\r
+        formatter % STOP;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_connect(\r
+                                                const boost::thread::id thread_id,\r
+                                                boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                size_t& datalen )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_connect( const boost::thread::id thread_id,"\r
+                                            "boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen ): "\r
+                                            "thread_id=%d, sendbuffer=%s, datalen=%d" );\r
+        formatter % thread_id % sendbuffer.data() % datalen;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    EVENT_TAG status = REALSERVER_SEND;\r
+    try\r
+    {\r
+        if ( put_data_to_sendbuffer( thread_id, sendbuffer, datalen ) == -1 )\r
+        {\r
+            // can't find the thread from the thread map\r
+            status = FINALIZE;\r
+        }\r
+        else\r
+        {\r
+            // find session_thread_data_sslid's pointer from map\r
+            boost::mutex::scoped_lock sclock( session_thread_data_map_mutex );\r
+\r
+            session_thread_data_map_type::iterator it = session_thread_data_map.find(thread_id);\r
+            if ( it == session_thread_data_map.end() )\r
+            {\r
+                 // waiting for jp response.....??????????????????\r
+                putLogError(037000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                status = FINALIZE;\r
+            }\r
+            else\r
+            {\r
+                session_thread_data_sslid* threaddata = it->second;\r
+                threaddata->realserver_connect_failed_count = 0;\r
+            }\r
+        }\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        std::cerr << "handle_realserver_connect exception: error=%s" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_connect() exception: result=%d, error=%s." );\r
+        formatter % FINALIZE % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+        status = FINALIZE;\r
+    }\r
+    catch( ... )\r
+    {\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::handle_realserver_connect() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_connect( const boost::thread::id thread_id,"\r
+                                            "boost::array<char,MAX_BUFFER_SIZE>& sendbuffer, size_t& datalen ): "\r
+                                            "return_value=%d" );\r
+        formatter % status;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return status;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_connection_fail(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::asio::ip::tcp::endpoint& rs_endpoint )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_connection_fail( const boost::thread::id thread_id,"\r
+                                            "const boost::asio::ip::tcp::endpoint& rs_endpoint ): "\r
+                                            "thread_id=%d,rs_endpoint=[%s]:%d" );\r
+        formatter % thread_id % rs_endpoint.address().to_string() % rs_endpoint.port();\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+     // find session_thread_data_sslid's pointer from map\r
+    session_thread_data_sslid* threaddata = NULL;\r
+    EVENT_TAG status = STOP;\r
+\r
+    try\r
+    {\r
+        {\r
+            boost::mutex::scoped_lock sclock( session_thread_data_map_mutex );\r
+            session_thread_data_map_type::iterator it = session_thread_data_map.find(thread_id);\r
+            if ( it == session_thread_data_map.end() )\r
+            {\r
+                // waiting for jp response.....??????????????????\r
+                putLogError(037000, "Invalid thread id.", __FILE__, __LINE__ );\r
+                /*-------- DEBUG LOG --------*/\r
+                if ( LOG_LV_DEBUG == getloglevel() )\r
+                {\r
+                    boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                                        "handle_realserver_connection_fail( const boost::thread::id thread_id,"\r
+                                                        "const boost::asio::ip::tcp::endpoint& rs_endpoint ): return_value=%d" );\r
+                    formatter % FINALIZE;\r
+                    putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+                }\r
+                /*------DEBUG LOG END------*/\r
+                return FINALIZE;\r
+            }\r
+\r
+            threaddata = it->second;\r
+        }\r
+\r
+        if ( reschedule == 1 )\r
+        {\r
+            // reschedule mode\r
+            ++threaddata->realserver_connect_failed_count;\r
+            status = REALSERVER_SELECT;\r
+        }\r
+        else\r
+        {\r
+            // no reschedule mode\r
+            // set end_flag to ON\r
+            threaddata->end_flag = END_FLAG_ON;\r
+            status = CLIENT_DISCONNECT;\r
+\r
+            /*-------- DEBUG LOG --------*/\r
+            if ( LOG_LV_DEBUG == getloglevel() )\r
+            {\r
+                putLogDebug( 030000, "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                    "handle_realserver_connection_fail(): END_FLAG_ON.", __FILE__, __LINE__ );\r
+            }\r
+            /*------DEBUG LOG END------*/\r
+        }\r
+    }\r
+    catch ( const std::exception& e )\r
+    {\r
+        std::cerr << "handle_realserver_connection_fail exception: error=%s" << e.what() << "." << std::endl;\r
+        boost::format formatter( "function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_connection_fail() exception: result=%d, error=%s." );\r
+        formatter % FINALIZE % e.what();\r
+        putLogError( 037000, formatter.str(), __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+    catch( ... )\r
+    {\r
+        std::cerr << "Unkown exception." << std::endl;\r
+        putLogError( 037000, "function protocol_module_sslid::check_message_result "\r
+                        "protocol_module_sslid::handle_realserver_connection_fail() : "\r
+                        "Unkown exception.", __FILE__, __LINE__ );\r
+\r
+        status = FINALIZE;\r
+    }\r
+\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_realserver_connection_fail( const boost::thread::id thread_id,"\r
+                                            "const boost::asio::ip::tcp::endpoint& rs_endpoint ): return_value=%d,"\r
+                                            "end_flag=%d" );\r
+        formatter % status % threaddata->end_flag;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return status;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_send(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+\r
+   return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorryserver_select(\r
+                                const boost::thread::id thread_id,\r
+                                                               boost::asio::ip::tcp::endpoint& sorry_endpoint )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in/out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_sorryserver_select( const boost::thread::id thread_id,"\r
+                                            "boost::asio::ip::tcp::endpoint& rs_endpoint ): "\r
+                                            "return_value=%d." );\r
+        formatter % STOP;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorryserver_connect(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                               size_t& datalen )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in/out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_sorryserver_connect( const boost::thread::id thread_id,"\r
+                                            "boost::asio::ip::tcp::endpoint& rs_endpoint, size_t& datalen ): "\r
+                                            "return_value=%d." );\r
+        formatter % STOP;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorryserver_connection_fail(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::tcp::endpoint& sorry_endpoint )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in/out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_sorryserver_connection_fail( const boost::thread::id thread_id,"\r
+                                            "boost::asio::ip::tcp::endpoint& rs_endpoint ): "\r
+                                            "return_value=%d." );\r
+        formatter % STOP;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorryserver_send(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+    /*-------- DEBUG LOG --------*/\r
+    if ( LOG_LV_DEBUG == getloglevel() )\r
+    {\r
+        boost::format formatter( "in/out_function: protocol_module_base::EVENT_TAG protocol_module_sslid::"\r
+                                            "handle_sorryserver_send( const boost::thread::id thread_id) :"\r
+                                            "return_value=%d." );\r
+        formatter % STOP;\r
+        putLogDebug( 030000, formatter.str(), __FILE__, __LINE__ );\r
+    }\r
+    /*------DEBUG LOG END------*/\r
+\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_recv(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::asio::ip::tcp::endpoint& rs_endpoint,\r
+                                                const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                                const size_t recvlen )\r
+{\r
+   return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_recv(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::asio::ip::udp::endpoint& rs_endpoint,\r
+                                                const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                                const size_t recvlen )\r
+{\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorryserver_recv(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::asio::ip::tcp::endpoint& sorry_endpoint,\r
+                                                const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                                const size_t recvlen )\r
+{\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_response_send_inform(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_client_connection_check(\r
+                                                const boost::thread::id thread_id,\r
+                                                boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                size_t& datalen )\r
+{\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_client_select(\r
+                                                const boost::thread::id thread_id,\r
+                                                boost::asio::ip::udp::endpoint& cl_endpoint,\r
+                                                boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                size_t& datalen )\r
+{\r
+   return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_client_send(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_client_disconnect(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+    return FINALIZE;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorry_enable(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorry_disable(\r
+                                                const boost::thread::id thread_id )\r
+{\r
+    return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_disconnect(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::asio::ip::tcp::endpoint& rs_endpoint )\r
+{\r
+   return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_sorryserver_disconnect(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::asio::ip::tcp::endpoint& sorry_endpoint )\r
+{\r
+   return STOP;\r
+}\r
+\r
+protocol_module_base::EVENT_TAG protocol_module_sslid::handle_realserver_close(\r
+                                                const boost::thread::id thread_id,\r
+                                                const boost::asio::ip::udp::endpoint& rs_endpoint )\r
+{\r
+   return STOP;\r
+}\r
+\r
+void protocol_module_sslid::replication_interrupt()\r
+{\r
+\r
+}\r
+\r
+//! put data into send buffer function\r
+//! @param const boost::thread::id& thread_id\r
+//! @param boost::array<char,MAX_BUFFER_SIZE>& sendbuffer\r
+//! @param size_t& datalen\r
+//! @return 0 : success -1: failed\r
+int protocol_module_sslid::put_data_to_sendbuffer(\r
+                                const boost::thread::id& thread_id,\r
+                                boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                size_t& datalen)\r
+{\r
+    return 0;\r
+}\r
+\r
+bool protocol_module_sslid::realserver_selected(const boost::asio::ip::tcp::endpoint& rs_endpoint)\r
+{\r
+    return true;\r
+}\r
+\r
+}\r
diff --git a/module/protocol/protocol_module_sslid.h b/module/protocol/protocol_module_sslid.h
new file mode 100644 (file)
index 0000000..b482bc3
--- /dev/null
@@ -0,0 +1,187 @@
+#ifndef PROTOCOL_MODULE_SSLID_H\r
+#define PROTOCOL_MODULE_SSLID_H\r
+\r
+#include "ssl_protocol_module_base.h"\r
+#include "sslid_replication_data_processor.h"\r
+#include "sslid_session_data_processor.h"\r
+#include <boost/thread/mutex.hpp>\r
+#include <map>\r
+\r
+#define MAX_SSLID_BUFFER_SIZE (MAX_BUFFER_SIZE + 76)\r
+namespace l7vs\r
+{\r
+\r
+struct session_thread_data_sslid\r
+{\r
+        int thread_division;\r
+        boost::thread::id pair_thread_id;\r
+        int end_flag;\r
+        int realserver_connect_failed_count;\r
+        boost::asio::ip::tcp::endpoint selected_realserver;\r
+        boost::array<char, MAX_SSLID_BUFFER_SIZE> data_buffer;\r
+        int data_begain_offset;\r
+        int data_size;\r
+        int current_record_rest_size;\r
+        bool hello_message_flag;\r
+};\r
+\r
+class protocol_module_sslid : public ssl_protocol_module_base\r
+{\r
+    public:\r
+        protocol_module_sslid();\r
+\r
+        virtual ~protocol_module_sslid();\r
+\r
+        bool is_tcp();\r
+\r
+        bool is_udp();\r
+\r
+        void initialize( rs_list_itr_func_type inlist_begin,\r
+                         rs_list_itr_func_type inlist_end,\r
+                                                rs_list_itr_func_type  inlist_next,\r
+                                                boost::function< void( void ) >        inlist_lock,\r
+                                                boost::function< void( void ) >        inlist_unlock );\r
+\r
+        void finalize();\r
+\r
+        bool is_use_sorry();\r
+\r
+        check_message_result check_parameter( const std::vector<std::string>& args );\r
+\r
+        check_message_result set_parameter( const std::vector<std::string>& args );\r
+\r
+        check_message_result add_parameter( const std::vector<std::string>& args );\r
+\r
+        void handle_rslist_update();\r
+\r
+        void register_schedule( tcp_schedule_func_type inschedule );\r
+\r
+        void register_schedule( udp_schedule_func_type inschedule );\r
+\r
+        EVENT_TAG handle_session_initialize(\r
+                                const boost::thread::id up_thread_id,\r
+                                const boost::thread::id down_thread_id );\r
+\r
+        EVENT_TAG handle_session_finalize(\r
+                                const boost::thread::id up_thread_id,\r
+                                const boost::thread::id down_thread_id );\r
+\r
+        EVENT_TAG handle_accept( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_client_recv(\r
+                                const boost::thread::id thread_id,\r
+                                const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                const size_t recvlen );\r
+\r
+        EVENT_TAG handle_realserver_select(\r
+                                const boost::thread::id thread_id,\r
+                                boost::asio::ip::tcp::endpoint& rs_endpoint );\r
+\r
+        EVENT_TAG handle_realserver_select(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               boost::asio::ip::udp::endpoint& rs_endpoint,\r
+                                                               boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                               size_t& datalen );\r
+\r
+        EVENT_TAG handle_realserver_connect(\r
+                                const boost::thread::id thread_id,\r
+                                boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                size_t& datalen );\r
+\r
+        EVENT_TAG handle_realserver_connection_fail(\r
+                                const boost::thread::id thread_id,\r
+                                const boost::asio::ip::tcp::endpoint& rs_endpoint );\r
+\r
+        EVENT_TAG handle_realserver_send( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_sorryserver_select(\r
+                                const boost::thread::id thread_id,\r
+                                                               boost::asio::ip::tcp::endpoint& sorry_endpoint );\r
+\r
+        EVENT_TAG handle_sorryserver_connect(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                               size_t& datalen );\r
+\r
+        EVENT_TAG handle_sorryserver_connection_fail(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::tcp::endpoint& sorry_endpoint );\r
+\r
+        EVENT_TAG handle_sorryserver_send( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_realserver_recv(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::tcp::endpoint& rs_endpoint,\r
+                                                               const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                                               const size_t recvlen );\r
+\r
+        EVENT_TAG handle_realserver_recv(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::udp::endpoint& rs_endpoint,\r
+                                                               const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                                               const size_t recvlen );\r
+\r
+        EVENT_TAG handle_sorryserver_recv(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::tcp::endpoint& sorry_endpoint,\r
+                                                               const boost::array<char,MAX_BUFFER_SIZE>& recvbuffer,\r
+                                                               const size_t recvlen );\r
+\r
+        EVENT_TAG handle_response_send_inform( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_client_connection_check(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                               size_t& datalen );\r
+\r
+        EVENT_TAG handle_client_select(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               boost::asio::ip::udp::endpoint& cl_endpoint,\r
+                                                               boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                                               size_t& datalen );\r
+\r
+        EVENT_TAG handle_client_send( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_client_disconnect( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_sorry_enable( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_sorry_disable( const boost::thread::id thread_id );\r
+\r
+        EVENT_TAG handle_realserver_disconnect(\r
+                                const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::tcp::endpoint& rs_endpoint );\r
+\r
+        EVENT_TAG handle_sorryserver_disconnect(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::tcp::endpoint& sorry_endpoint );\r
+\r
+        EVENT_TAG handle_realserver_close(\r
+                                                               const boost::thread::id thread_id,\r
+                                                               const boost::asio::ip::udp::endpoint& rs_endpoint );\r
+\r
+        void replication_interrupt();\r
+\r
+        bool realserver_selected( const boost::asio::ip::tcp::endpoint& rs_endpoint );\r
+\r
+    protected:\r
+        int put_data_to_sendbuffer(\r
+                                const boost::thread::id& thread_id,\r
+                                boost::array<char,MAX_BUFFER_SIZE>& sendbuffer,\r
+                                size_t& datalen);\r
+    protected:\r
+        int timeout;\r
+        int maxlist;\r
+        int reschedule;\r
+        typedef std::map<boost::thread::id, session_thread_data_sslid*> session_thread_data_map_type;\r
+        session_thread_data_map_type session_thread_data_map;\r
+        boost::mutex session_thread_data_map_mutex;\r
+        int realserver_connect_failed_max_count;\r
+        sslid_replication_data_processor* replication_data_processor;\r
+        sslid_session_data_processor* session_data_processor;\r
+    private:\r
+        static const std::string MODULE_NAME;\r
+};\r
+\r
+}\r
+#endif // PROTOCOL_MODULE_SSLID_H\r
diff --git a/unit_tests/sessionless/Makefile b/unit_tests/sessionless/Makefile
new file mode 100644 (file)
index 0000000..e02ec9f
--- /dev/null
@@ -0,0 +1,21 @@
+TARGET         =       sessionless_ut
+CPP                    =       g++
+INCLUDES       = 
+CPPFLAGS       =       -g -Wall -Werror -pthread -O0
+LD                     =       g++
+LIBS           =       -lboost_system_gcc41-mt \
+                               -lboost_thread_gcc41-mt
+LDFLAGS                =       -lrt -ldl -pthread
+SRCS           =       sessionless_ut.cpp
+OBJS           =       $(SRCS:.cpp=.o)
+
+all:   $(TARGET)
+
+$(TARGET):     $(OBJS)
+       $(LD) $(INCLUDES) $(LDFLAGS) -o -$@ $(OBJS) $(LIBS)
+
+clean:
+       rm -f $(TARGET) $(OBJS)
+
+.cpp.o:
+       $(CPP) $(CPPFLAGS) $(INCLUDES) -c $<
diff --git a/unit_tests/sessionless/sessionless_ut.cpp b/unit_tests/sessionless/sessionless_ut.cpp
new file mode 100644 (file)
index 0000000..30e4d2f
--- /dev/null
@@ -0,0 +1,1541 @@
+#include <boost/test/included/unit_test.hpp>\r
+#include "../../module/protocol/protocol_module_sessionless.cpp"\r
+\r
+using namespace std;\r
+using namespace boost;\r
+using namespace boost::unit_test;\r
+using namespace l7vs;\r
+\r
+typedef l7vs::protocol_module_sessionless::check_message_result\r
+               check_message_result;\r
+\r
+//protocol_module_sessionless ég\89Æ\8f\83\r
+void protocol_module_sessionless_test(){\r
+\r
+       //unit_test[1] \83\82\83W\83\85\81[\83\8b\96¼\81i"sessionless"\81j\r
+    protocol_module_sessionless obj1;\r
+    BOOST_CHECK_EQUAL("sessionless",obj1.name);\r
+\r
+    //unit_test[2] new\r
+    protocol_module_sessionless *p1=new protocol_module_sessionless();\r
+    BOOST_CHECK_EQUAL("sessionless", p1->name);\r
+    delete p1;\r
+}\r
+\r
+//~protocol_module_sessionless ég\89Æ\8f\83\r
+\r
+//is_tcp ég\89Æ\8f\83\r
+void is_tcp_test(){\r
+\r
+       //unit_test[4] TRUE\82ð\95Ô\8bp\82·\82é\r
+    protocol_module_sessionless obj;\r
+    BOOST_CHECK(obj.is_tcp());\r
+}\r
+\r
+//is_udp ég\89Æ\8f\83\r
+void is_udp_test(){\r
+\r
+       //unit_test[5] FALSE\82ð\95Ô\8bp\82·\82é\r
+    protocol_module_sessionless obj;\r
+    BOOST_CHECK(!obj.is_udp());\r
+}\r
+\r
+//get_name ég\89Æ\8f\83\r
+void get_name_test(){\r
+\r
+       //unit_test[5] \83\82\83W\83\85\81[\83\8b\96¼\81i"sessionless"\81j\82ð\95Ô\8bp\82·\82é\r
+    protocol_module_sessionless obj;\r
+    BOOST_CHECK_EQUAL("sesslonless", obj.get_name());\r
+}\r
+\r
+//initialize \93\9f\8dì\95û\r
+typedef protocol_module_sessionless::realserverlist_type real_server_list;\r
+typedef        protocol_module_sessionless::rs_list_itr_func_type rs_list_itr_func_type;\r
+real_server_list real_list;\r
+real_server_list::iterator real_begin() {return real_list.begin();}\r
+real_server_list::iterator real_end() {return real_list.end();}\r
+real_server_list::iterator real_next() {return ++real_list.begin();}\r
+void list_lock_for_test() {}\r
+void list_unlock_for_test() {}\r
+void initialize_test() {\r
+\r
+       //unit_test[1] RealServer\83\8a\83X\83g\82Ì\8ae\91\80\8dì\8aÖ\90\94\83\81\83\\83b\83h\82Ì\83e\83X\83g\r
+       //unit_test[1] test data:RealServer\83\8a\83X\83g\90æ\93ª\8eæ\93¾\8aÖ\90\94,RealServer\83\8a\83X\83g\96\96\92[\8eæ\93¾\8aÖ\90\94,RealServer\83\8a\83X\83g\8e\9f\97v\91f\8eæ\93¾\8aÖ\90\94\r
+       //unit_test[1] test data:RealServer\83\8a\83X\83g\83\8d\83b\83N\8aÖ\90\94,RealServer\83\8a\83X\83g\83A\83\93\83\8d\83b\83N\8aÖ\90\94\r
+       rs_list_itr_func_type inrslist_begin = real_begin;\r
+       rs_list_itr_func_type inrslist_end = real_end;\r
+       rs_list_itr_func_type inrslist_next = real_next;\r
+       function<void(void)> inlist_lock = list_lock_for_test;\r
+       function<void(void)> inlist_unlock = list_unlock_for_test;\r
+\r
+       protocol_module_sessionless sessionless;\r
+       sessionless.initialize(inrslist_begin,inrslist_end,inrslist_next,inlist_lock,inlist_unlock);\r
+\r
+       BOOST_CHECK_EQUAL(sessionless.rs_list_begin, real_begin);\r
+       BOOST_CHECK_EQUAL(sessionless.rs_list_end, real_end);\r
+       BOOST_CHECK_EQUAL(sessionless.rs_list_next, real_next);\r
+       BOOST_CHECK_EQUAL(sessionless.rs_list_lock, list_lock_for_test);\r
+       BOOST_CHECK_EQUAL(sessionless.rs_list_unlock, list_unlock_for_test);\r
+\r
+};\r
+\r
+//finalize \93\9f\8dì\95û\r
+void finalize_test() {\r
+\r
+       //unit_test[2] \8ae\91\80\8dì\8aÖ\90\94\82ð\8f\89\8aú\89»\82·\82é\r
+       //unit_test[2] test data\r
+       protocol_module_sessionless sessionless;\r
+       sessionless.finalize();\r
+\r
+       BOOST_CHECK(!sessionless.getloglevel);\r
+       BOOST_CHECK(!sessionless.putLogFatal);\r
+       BOOST_CHECK(!sessionless.putLogError);\r
+       BOOST_CHECK(!sessionless.putLogWarn);\r
+       BOOST_CHECK(!sessionless.putLogInfo);\r
+       BOOST_CHECK(!sessionless.putLogDebug);\r
+\r
+       BOOST_CHECK(!sessionless.rs_list_begin);\r
+       BOOST_CHECK(!sessionless.rs_list_end);\r
+       BOOST_CHECK(!sessionless.rs_list_next);\r
+       BOOST_CHECK(!sessionless.rs_list_lock);\r
+       BOOST_CHECK(!sessionless.rs_list_unlock);\r
+\r
+       BOOST_CHECK(!sessionless.replication_pay_memory);\r
+       BOOST_CHECK(!sessionless.replication_area_lock);\r
+       BOOST_CHECK(!sessionless.replication_area_unlock);\r
+\r
+       BOOST_CHECK(!sessionless.schedule_tcp);\r
+       BOOST_CHECK(!sessionless.schedule_udp);\r
+\r
+       BOOST_CHECK_EQUAL(sessionless.forwarded_for, 0);\r
+    BOOST_CHECK_EQUAL( '\0', sessionless.sorry_uri[0] );\r
+\r
+}\r
+\r
+//is_use_sorry \94n\90\89\90\89\r
+void is_use_sorry_test() {\r
+       protocol_module_sessionless sessionless;\r
+\r
+       // unit_test[1]  is_use_sorry\83\81\83\\83b\83h\82Ì\83e\83X\83g\r
+       bool is_return = sessionless.is_use_sorry();\r
+       BOOST_CHECK_EQUAL(is_return,true);\r
+}\r
+\r
+//check_parameter \94n\90\89\90\89\r
+void check_parameter_test() {\r
+       protocol_module_sessionless sessionless;\r
+       check_message_result result;\r
+       vector<string> args(5);\r
+\r
+       // unit_test[2] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       // unit_test[2] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ\82É\83f\81[\83^\82È\82µ\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,true);\r
+\r
+       // unit_test[3] \91\97\90M\8c³\90Ý\92è\8ew\8e¦\90Ý\92è\83t\83\89\83O\82ðON,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       // unit_test[3] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-F"\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-F";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,true);\r
+\r
+       // unit_test[4] \91\97\90M\8c³\90Ý\92è\8ew\8e¦\90Ý\92è\83t\83\89\83O\82ðON, \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       // unit_test[4] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-F"\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "--forwarded-for";\r
+       sessionless.check_parameter(args);\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,true);\r
+\r
+       // unit_test[5] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-S/--sorryURI' option value '%s' is too long."\81i%s\82Í\8e\9f\97v\91f\81j\82ð\90Ý\92è\82·\82é\r
+       // unit_test[5] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· > 127\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"'-S/--sorryURI' option value 'http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/' is too long.");\r
+\r
+       // unit_test[6] sorryURI\90Ý\92è\83t\83\89\83O\82ðON \83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[6] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· = 127 \83`\83F\83b\83NOK\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/12345678/";\r
+       args[3] = "----sorryURI";\r
+       args[4] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/12345678/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.message,"Cannot set multiple option ''-S/--sorryURI'.");\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+\r
+       // unit_test[7] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-S/--sorryURI' option value '%s' is not a valid URI."\81i%s\82Í\8e\9f\97v\91f\81j\82ð\90Ý\92è\82·\82é\r
+       // unit_test[7] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· = 127 \83`\83F\83b\83NNG\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/1234567+/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"'-S/--sorryURI' option value 'http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/1234567+/' is not a valid URI.");\r
+\r
+       // unit_test[8] sorryURI\90Ý\92è\83t\83\89\83O\82ðON \83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[8] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· < 127 \83`\83F\83b\83NOK\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcd.com/";\r
+       args[3] = "----sorryURI";\r
+       args[4] = "http://abcd.com/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.message,"Cannot set multiple option ''-S/--sorryURI'.");\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+\r
+       // unit_test[9] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-S/--sorryURI' option value '%s' is not a valid URI."\81i%s\82Í\8e\9f\97v\91f\81j\82ð\90Ý\92è\82·\82é\r
+       // unit_test[9] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· < 127 \83`\83F\83b\83NNG\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcd.com/aa+";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"'-S/--sorryURI' option value 'http://abcd.com/aa+' is not a valid URI.");\r
+\r
+       // unit_test[10] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"You have to set  option value ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[10] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"You have to set  option value ''-S/--sorryURI'.");\r
+\r
+       // unit_test[11] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[11] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = ON\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcd.com/";\r
+       args[3] = "-S";\r
+       args[4] = "http://www.xyz.com/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"Cannot set multiple option ''-S/--sorryURI");\r
+\r
+       // unit_test[12] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Option error."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[12] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ"-F","-S" \88È\8aO\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-D";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"Option error.");\r
+\r
+}\r
+\r
+//set_parameter \94n\90\89\90\89\r
+void set_parameter_test() {\r
+       protocol_module_sessionless sessionless;\r
+       check_message_result result;\r
+       vector<string> args(5);\r
+\r
+       // unit_test[13] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       // unit_test[13] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ\82É\83f\81[\83^\82È\82µ\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,true);\r
+\r
+       // unit_test[14] \91\97\90M\8c³\90Ý\92è\8ew\8e¦\82É1\82ð\90Ý\92è\82·\82é\r
+       args[0] = "l7vsadmin";\r
+       sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(sessionless.forwarded_for,1);\r
+\r
+       // unit_test[15] \91\97\90M\8c³\90Ý\92è\8ew\8e¦\90Ý\92è\83t\83\89\83O\82ðON,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       // unit_test[15] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-F"\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-F";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(sessionless.forwarded_for,1);\r
+       BOOST_CHECK_EQUAL(result.flag,true);\r
+\r
+       // unit_test[16] \91\97\90M\8c³\90Ý\92è\8ew\8e¦\90Ý\92è\83t\83\89\83O\82ðON,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       // unit_test[16] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-F"\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "--forwarded-for";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(sessionless.forwarded_for,1);\r
+       BOOST_CHECK_EQUAL(result.flag,true);\r
+\r
+       // unit_test[17] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-S/--sorryURI' option value '%s' is too long."\81i%s\82Í\8e\9f\97v\91f\81j\82ð\90Ý\92è\82·\82é\r
+       // unit_test[17] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· > 127\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"'-S/--sorryURI' option value 'http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/' is too long.");\r
+\r
+       // unit_test[18] sorryURI\90Ý\92è\83t\83\89\83O\82ðON \83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[18] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· = 127 \83`\83F\83b\83NOK\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/12345678/";\r
+       args[3] = "--sorryURI";\r
+       args[4] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/12345678/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.message,"Cannot set multiple option ''-S/--sorryURI'.");\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+\r
+       // unit_test[19] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-S/--sorryURI' option value '%s' is not a valid URI."\81i%s\82Í\8e\9f\97v\91f\81j\82ð\90Ý\92è\82·\82é\r
+       // unit_test[19] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· = 127 \83`\83F\83b\83NNG\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/1234567+/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"'-S/--sorryURI' option value 'http://abcde.com/0123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/1234567+/' is not a valid URI.");\r
+\r
+       // unit_test[20] sorryURI\90Ý\92è\83t\83\89\83O\82ðON \83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[20] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· < 127 \83`\83F\83b\83NOK\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcd.com/";\r
+       args[3] = "--sorryURI";\r
+       args[4] = "http://abcd.com/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.message,"Cannot set multiple option ''-S/--sorryURI'.");\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+\r
+       // unit_test[21] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-S/--sorryURI' option value '%s' is not a valid URI."\81i%s\82Í\8e\9f\97v\91f\81j\82ð\90Ý\92è\82·\82é\r
+       // unit_test[21] test data:\8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\92· < 127 \83`\83F\83b\83NNG\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcd.com/aa+";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"'-S/--sorryURI' option value 'http://abcd.com/aa+' is not a valid URI.");\r
+\r
+       // unit_test[22] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"You have to set  option value ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[22] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"You have to set  option value ''-S/--sorryURI'.");\r
+\r
+       // unit_test[23] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option ''-S/--sorryURI'."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[23] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-S" sorryURI\90Ý\92è\83t\83\89\83O = ON\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcd.com/";\r
+       args[3] = "-S";\r
+       args[4] = "http://www.xyz.com/";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"Cannot set multiple option ''-S/--sorryURI");\r
+\r
+       // unit_test[24] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Option error."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[24] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ"-F","-S" \88È\8aO\82Ì\8fê\8d\87\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-D";\r
+       result = sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"Option error.");\r
+\r
+       // unit_test[25] \91\97\90M\8c³\90Ý\92è\8ew\8e¦\82É0\82ð\90Ý\92è\82·\82é\r
+       // unit_test[25] test data:\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O = TRUE\82Ì\8fê\8d\87\81A\91\97\90M\8c³\90Ý\92è\8ew\8e¦\90Ý\92è\83t\83\89\83O = OFF\r
+       args[0] = "l7vsadmin";\r
+       args[1] = "-S";\r
+       args[2] = "http://abcd.com/";\r
+       sessionless.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(sessionless.forwarded_for,0);\r
+\r
+}\r
+\r
+//add_parameter \94n\90\89\90\89\r
+void add_parameter_test() {\r
+       protocol_module_sessionless sessionless;\r
+       check_message_result result;\r
+       vector<string> args(2);\r
+\r
+       // unit_test[58] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       // unit_test[58] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+       result = sessionless.add_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,true);\r
+\r
+       // unit_test[59] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é, \83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot add option."\82ð\90Ý\92è\82·\82é\r
+       // unit_test[59] test data:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ\82ª\91\8dÝ\82·\82é\8fê\8d\87\r
+       args[0] = "-F";\r
+       result = sessionless.add_parameter(args);\r
+       BOOST_CHECK_EQUAL(result.flag,false);\r
+       BOOST_CHECK_EQUAL(result.message,"Cannot add option.");\r
+}\r
+\r
+//handle_rslist_update \94n\90\89\90\89\r
+\r
+//register_schedule(tcp) \93\9f\8dì\95û\r
+void schedule_tcp( const boost::thread::id id,\r
+                          rs_list_itr_func_type func_type1,\r
+                          rs_list_itr_func_type func_type2,\r
+                          rs_list_itr_func_type func_type3,\r
+                          boost::asio::ip::tcp::endpoint& ) {};\r
+void register_schedule_tcp_test() {\r
+\r
+       // unit_test[3]  schedule_tcp\83\81\83\\83b\83h\82Ì\83e\83X\83g\r
+       // unit_test[3] test data:Client\90U\82è\95ª\82¯\8f\88\97\9d\8aÖ\90\94\r
+       protocol_module_sessionless::tcp_schedule_func_type  func = schedule_tcp;\r
+\r
+       protocol_module_sessionless sessionless;\r
+       sessionless.register_schedule(func);\r
+\r
+       BOOST_CHECK_EQUAL(sessionless.schedule_tcp,schedule_tcp);\r
+}\r
+\r
+//register_schedule(udp) \93\9f\8dì\95û\r
+\r
+\r
+//handle_session_initialize \93\9f\8dì\95û\r
+typedef protocol_module_sessionless::session_thread_data_sessionless session_thread_data;\r
+typedef std::map< thread::id, session_thread_data*> thread_map;\r
+void up_thread_func(){}\r
+void down_thread_func(){}\r
+void handle_session_initialize_test() {\r
+\r
+       // unit_test[5] \91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = ACCEPT\r
+       // unit_test[5] test data:\83X\83\8c\83b\83h\r
+       boost::thread up_thread(up_thread_func);\r
+       boost::thread down_thread(down_thread_func);\r
+\r
+       protocol_module_sessionless sessionless;\r
+       protocol_module_base::EVENT_TAG ret =\r
+               sessionless.handle_session_initialize(up_thread.get_id(),down_thread.get_id());\r
+\r
+    BOOST_CHECK_EQUAL( protocol_module_base::ACCEPT, ret);\r
+\r
+    thread_map::iterator thread_map_iterator;\r
+    thread_map::iterator thread_map_iterator_end;\r
+\r
+    //unit_test[6]  \8fã\82è\83X\83\8c\83b\83h\83}\83v\8bó\82Ì\83e\83X\83g\r
+    //unit_test[6] test data:\83}\83v\r
+    thread_map_iterator = sessionless.session_thread_data_map.find(up_thread.get_id());\r
+    thread_map_iterator_end = sessionless.session_thread_data_map.end();\r
+    BOOST_CHECK(thread_map_iterator != thread_map_iterator_end);\r
+\r
+    //unit_test[7]  \8fã\82è\83X\83\8c\83b\83h\83}\83v\82Ì\83e\83X\83g\r
+    thread_map_iterator = sessionless.session_thread_data_map.find(up_thread.get_id());\r
+    session_thread_data* data = thread_map_iterator->second;\r
+\r
+    BOOST_CHECK(!data);\r
+    BOOST_CHECK_EQUAL(up_thread.get_id(), data->thread_id);\r
+    BOOST_CHECK_EQUAL(0, data->thread_division);\r
+    BOOST_CHECK_EQUAL(down_thread.get_id(), data->pair_thread_id);\r
+    BOOST_CHECK(!(data->recive_data_map.empty()));\r
+\r
+    BOOST_CHECK_EQUAL(data->end_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->accept_end_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->sorry_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->sorryserver_switch_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->realserver_switch_flag, 0);\r
+\r
+    //unit_test[8]  \89º\82è\83X\83\8c\83b\83h\83}\83v\8bó\82Ì\83e\83X\83g\r
+    thread_map_iterator = sessionless.session_thread_data_map.find(down_thread.get_id());\r
+    BOOST_CHECK(thread_map_iterator != thread_map_iterator_end);\r
+\r
+       //unit_test[9]  \89º\82è\83X\83\8c\83b\83h\83}\83v\82Ì\83e\83X\83g\r
+    thread_map_iterator = sessionless.session_thread_data_map.find(down_thread.get_id());\r
+    data = thread_map_iterator->second;\r
+\r
+    BOOST_CHECK(!data);\r
+    BOOST_CHECK_EQUAL(down_thread.get_id(), data->thread_id);\r
+    BOOST_CHECK_EQUAL(data->thread_division, 1);\r
+    BOOST_CHECK_EQUAL(up_thread.get_id(), data->pair_thread_id);\r
+    BOOST_CHECK(!(data->recive_data_map.empty()));\r
+\r
+    BOOST_CHECK_EQUAL(data->end_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->accept_end_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->sorry_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->sorryserver_switch_flag, 0);\r
+    BOOST_CHECK_EQUAL(data->realserver_switch_flag, 0);\r
+}\r
+\r
+//handle_session_finalize \93\9f\8dì\95û\r
+void handle_session_finalize_test() {\r
+\r
+       //unit_test[1] \83Z\83b\83V\83\87\83\93\83X\83\8c\83b\83h\82É\91Î\89\9e\82·\82é\8fI\97¹\8f\88\97\9d\r
+       //unit_test[1] test data:\83Z\83b\83V\83\87\83\93\83X\83\8c\83b\83h\8f\89\8aú\89»\r
+       boost::thread up_thread(up_thread_func);\r
+       boost::thread down_thread(down_thread_func);\r
+       protocol_module_sessionless sessionless;\r
+       sessionless.handle_session_initialize(up_thread.get_id(),down_thread.get_id());\r
+       protocol_module_base::EVENT_TAG ret =\r
+               sessionless.handle_session_finalize(up_thread.get_id(), down_thread.get_id());\r
+\r
+    thread_map::iterator thread_map_iterator;\r
+    thread_map::iterator thread_map_iterator_end;\r
+    thread_map_iterator = sessionless.session_thread_data_map.find(up_thread.get_id());\r
+\r
+    thread_map_iterator_end = sessionless.session_thread_data_map.end();\r
+    BOOST_CHECK(thread_map_iterator == thread_map_iterator_end);\r
+\r
+    thread_map_iterator = sessionless.session_thread_data_map.find(down_thread.get_id());\r
+    BOOST_CHECK(thread_map_iterator == thread_map_iterator_end);\r
+\r
+    BOOST_CHECK_EQUAL( protocol_module_base::STOP, ret);\r
+\r
+}\r
+\r
+//handle_accept \93\9f\8dì\95û\r
+void thread_func_for_accept(){}\r
+void handle_accept_test() {\r
+\r
+       session_thread_data  data;\r
+       boost::thread accept_thread(thread_func_for_accept);\r
+\r
+       //unit_test[13] sorry\8fó\91Ô\82Ì\8fê\8d\87\r
+       //unit_test[13] test data:accept_end_flag=0,sorry_flag=1\r
+       data.accept_end_flag = 0;\r
+       data.sorry_flag = 1;\r
+\r
+       protocol_module_sessionless obj1;\r
+       obj1.session_thread_data_map.insert(\r
+                       std::pair<boost::thread::id, session_thread_data*>(accept_thread.get_id(), &data));\r
+\r
+       protocol_module_base::EVENT_TAG ret = obj1.handle_accept(accept_thread.get_id());\r
+\r
+       BOOST_CHECK_EQUAL(data.accept_end_flag, 1);//accept\8a®\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(ret, protocol_module_base::SORRYSERVER_SELECT);//\91J\88Ú\90æ\83X\83e\81[\83^\83X=SORRYSERVER_SELECT\r
+\r
+       //unit_test[13] sorry\8fó\91Ô\88È\8aO\82Ì\8fê\8d\87\r
+       data.accept_end_flag = 0;\r
+       data.sorry_flag = 0;\r
+\r
+       protocol_module_sessionless obj2;\r
+       obj2.session_thread_data_map.insert(\r
+                               std::pair<boost::thread::id, session_thread_data*>(accept_thread.get_id(), &data));\r
+\r
+       ret = obj2.handle_accept(accept_thread.get_id());\r
+\r
+       BOOST_CHECK_EQUAL(data.accept_end_flag, 1);//accept\8a®\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(ret, protocol_module_base::REALSERVER_SELECT);//\91J\88Ú\90æ\83X\83e\81[\83^\83X=REALSERVER_SELECT\r
+}\r
+\r
+//handle_client_recv\r
+\r
+//handle_realserver_select(tcp) ég\89Æ\8f\83\r
+void upthread_func_for_handle_realserver_select_test(){}\r
+void downthread_func_for_handle_realserver_select_test(){}\r
+\r
+void schedule_tcp_determinate(//endpoint = \8c\88\92è\r
+               const boost::thread::id thread_id,\r
+               protocol_module_base::rs_list_itr_func_type rs_list_begin,\r
+               protocol_module_base::rs_list_itr_func_type rs_list_end,\r
+               protocol_module_base::rs_list_itr_func_type rs_list_next,\r
+               boost::asio::ip::tcp::endpoint &rs_endpoint){\r
+       rs_endpoint.resize(1234);\r
+}\r
+\r
+void schedule_tcp_nodeterminate(//endpoint = \96¢\8c\88\92è\r
+               const boost::thread::id thread_id,\r
+               protocol_module_base::rs_list_itr_func_type rs_list_begin,\r
+               protocol_module_base::rs_list_itr_func_type rs_list_end,\r
+               protocol_module_base::rs_list_itr_func_type rs_list_next,\r
+               boost::asio::ip::tcp::endpoint &rs_endpoint){\r
+}\r
+void handle_realserver_select_test(){\r
+\r
+       //unit_test[6] endpoint = \8c\88\92è\r
+       protocol_module_sessionless obj1;\r
+\r
+       boost::thread upt1(upthread_func_for_handle_realserver_select_test);\r
+       boost::thread downt1(downthread_func_for_handle_realserver_select_test);\r
+       session_thread_data dataup;\r
+       session_thread_data datadown;\r
+       obj1.session_thread_data_map[upt1.get_id()] = &dataup;\r
+       obj1.session_thread_data_map[downt1.get_id()] = &datadown;\r
+       dataup.thread_division = 0;\r
+       dataup.pair_thread_id = downt1.get_id();\r
+       datadown.thread_division = 1;\r
+       datadown.pair_thread_id = upt1.get_id();\r
+       datadown.recive_data_map.clear();\r
+       protocol_module_sessionless::tcp_schedule_func_type func1 = &schedule_tcp_determinate;\r
+\r
+       obj1.register_schedule(func1);\r
+\r
+       boost::asio::ip::tcp::endpoint ep1;\r
+       protocol_module_base::EVENT_TAG ret=obj1.handle_realserver_select(upt1.get_id(), ep1);\r
+\r
+       BOOST_CHECK_EQUAL(ep1.size(), static_cast<size_t>(1234));\r
+       BOOST_CHECK(datadown.recive_data_map.find(ep1) != datadown.recive_data_map.end());\r
+       BOOST_CHECK_EQUAL(ret, protocol_module_base::CLIENT_RECV);\r
+\r
+       //unit_test[7] endpoint = \96¢\8c\88\92è\r
+       protocol_module_sessionless obj2;\r
+\r
+       boost::thread upt2(upthread_func_for_handle_realserver_select_test);\r
+       session_thread_data dataup2;\r
+       obj2.session_thread_data_map[upt2.get_id()] = &dataup2;\r
+       dataup2.end_flag = 0;\r
+       protocol_module_sessionless::tcp_schedule_func_type func2 = &schedule_tcp_nodeterminate;\r
+\r
+       obj2.register_schedule(func2);\r
+\r
+       boost::asio::ip::tcp::endpoint ep2;\r
+       ret=obj2.handle_realserver_select(upt2.get_id(), ep2);\r
+\r
+       BOOST_CHECK_EQUAL(dataup2.end_flag, 1);\r
+       BOOST_CHECK_EQUAL(ret, protocol_module_base::CLIENT_DISCONNECT);\r
+}\r
+\r
+//handle_realserver_select(udp)\r
+\r
+//handle_realserver_connect\r
+\r
+//handle_realserver_connection_fail ég\89Æ\8f\83\r
+void handle_realserver_connection_fail_test(){\r
+       //unit_test[8] \8fI\97¹\83t\83\89\83O,\91J\88Ú\90æ\83X\83e\81[\83^\83X\r
+       protocol_module_sessionless obj;\r
+\r
+       boost::thread t;\r
+       boost::asio::ip::tcp::endpoint ep;\r
+       protocol_module_sessionless::EVENT_TAG ret;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data;\r
+       data.thread_id = t.get_id();\r
+       obj.session_thread_data_map[t.get_id()] = &data;\r
+\r
+       ret = obj.handle_realserver_connection_fail(t.get_id(),ep);\r
+\r
+       BOOST_CHECK_EQUAL(data.end_flag, 1);            //\8fI\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_DISCONNECT, ret);                //status = CLIENT_DISCONNECT\r
+}\r
+\r
+//handle_realserver_send \93\9f\8dì\95û\r
+\r
+//handle_sorryserver_select ég\89Æ\8f\83\r
+void handle_sorryserver_select_test(){\r
+\r
+       //unit_test[9] \8aY\93\96\83X\83\8c\83b\83h\82Ì\91\97\90M\89Â\94\\83f\81[\83^\82ð\8eæ\93¾\82·\82é,\89º\82è\83X\83\8c\83b\83h\82Ésorryserver\8eó\90M\83o\83b\83t\83@\82ð\8am\95Û\82·\82é,\91\97\90M\90æendpoint,\91J\88Ú\90æ\83X\83e\81[\83^\83X\r
+       protocol_module_sessionless obj;\r
+\r
+       boost::thread upt,downt;\r
+       boost::asio::ip::tcp::endpoint ep;\r
+       protocol_module_sessionless::EVENT_TAG ret;\r
+\r
+       //up,down thread map\r
+       protocol_module_sessionless::session_thread_data_sessionless dataup,datadown;\r
+       obj.session_thread_data_map[upt.get_id()] = &dataup;\r
+       obj.session_thread_data_map[downt.get_id()] = &datadown;\r
+       dataup.thread_id = upt.get_id();\r
+       dataup.thread_division = 0;\r
+       dataup.pair_thread_id = downt.get_id();\r
+       datadown.thread_id = downt.get_id();\r
+       datadown.thread_division = 1;\r
+       datadown.pair_thread_id = upt.get_id();\r
+       datadown.recive_data_map.clear();\r
+\r
+       //send_status\91\97\90M\89Â\94\\83f\81[\83^\r
+       protocol_module_sessionless::send_status st;\r
+       st.status = protocol_module_sessionless::SEND_OK;\r
+       st.send_possible_size = 2;\r
+       dataup.recive_data_map[ep].send_status_list.push_back(st);\r
+\r
+       ret = obj.handle_sorryserver_select(upt.get_id(), ep);\r
+\r
+       BOOST_CHECK(!datadown.recive_data_map.empty());         //\89º\82è\83X\83\8c\83b\83h\82Ésorryserver\8eó\90M\83o\83b\83t\83@\82ð\8am\95Û\82·\82é\r
+       //BOOST_CHECK_EQUAL(ep, dataup.sorry_endpoint); // \91\97\90M\90æendpoint\82Éendpoint\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(protocol_module_base::SORRYSERVER_CONNECT, ret);      //status = SORRYSERVER_CONNECT\r
+}\r
+\r
+//handle_sorryserver_connect\r
+\r
+//handle_sorryserver_connection_fail\r
+\r
+//handle_sorryserver_send\r
+\r
+//handle_realserver_recv(tcp)\r
+\r
+//handle_realserver_recv(udp)\r
+\r
+//handle_sorryserver_recv\r
+\r
+//handle_response_send_inform\r
+\r
+//handle_client_connection_check\r
+void handle_client_connection_check_test(){\r
+       //unit_test[10] \91\97\90M\83o\83b\83t\83@\83T\83C\83Y\81@>\81@\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\r
+       protocol_module_sessionless obj1;\r
+\r
+       boost::thread t1;\r
+       boost::array<char,MAX_BUFFER_SIZE> sbf1;\r
+       std::size_t d1;\r
+       protocol_module_sessionless::EVENT_TAG ret;\r
+       boost::asio::ip::tcp::endpoint ep1;\r
+\r
+       //session_thread_data_sessionless\r
+       protocol_module_sessionless::session_thread_data_sessionless data1;\r
+       obj1.session_thread_data_map[t1.get_id()] = &data1;\r
+       //send_status\r
+       protocol_module_sessionless::send_status sd1;\r
+       sd1.status = protocol_module_sessionless::SEND_OK;\r
+       sd1.send_possible_size = 2;\r
+       sd1.send_offset = 1;\r
+       //recive_data\r
+       protocol_module_sessionless::recive_data rd1;\r
+       rd1.recive_buffer = "abcd";\r
+       //send_status->recive_data\r
+       rd1.send_status_list.push_back(sd1);\r
+       //recive_data->session_thread_data_sessionless\r
+       data1.recive_data_map[ep1] = rd1;\r
+\r
+       ret = obj1.handle_client_connection_check(t1.get_id(),sbf1,d1);\r
+       //\91\97\90M\89Â\94\\83f\81[\83^\82ð\90æ\93ª\82©\82ç\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\95ª\81A\91\97\90M\83o\83b\83t\83@\82É\83R\83s\81[\82·\82é\r
+       std::string chk1 = "bc";\r
+       BOOST_CHECK_EQUAL(chk1.c_str(),sbf1.data());\r
+       //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(data1.recive_data_map[ep1].send_status_list.rbegin()->send_end_size, 2);\r
+       //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(data1.recive_data_map[ep1].send_status_list.rbegin()->send_possible_size, 0);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_SEND, ret);\r
+\r
+\r
+       //unit_test[11] \91\97\90M\83o\83b\83t\83@\83T\83C\83Y\81@<\81@\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\r
+       protocol_module_sessionless obj2;\r
+\r
+       boost::thread t2;\r
+       boost::array<char,MAX_BUFFER_SIZE> sbf2;\r
+       std::size_t d2;\r
+       boost::asio::ip::tcp::endpoint ep2;\r
+\r
+       //session_thread_data_sessionless\r
+       protocol_module_sessionless::session_thread_data_sessionless data2;\r
+       obj2.session_thread_data_map[t2.get_id()] = &data2;\r
+       //send_status\r
+       protocol_module_sessionless::send_status sd2;\r
+       sd2.status = protocol_module_sessionless::SEND_OK;\r
+       sd2.send_possible_size = 5000;\r
+       sd2.send_offset = 1;\r
+       //recive_data\r
+       protocol_module_sessionless::recive_data rd2;\r
+       rd2.recive_buffer = "abcdefg";\r
+       //send_status->recive_data\r
+       rd2.send_status_list.push_back(sd2);\r
+       //recive_data->session_thread_data_sessionless\r
+       data2.recive_data_map[ep2] = rd2;\r
+\r
+       ret = obj2.handle_client_connection_check(t2.get_id(),sbf2,d2);\r
+       //\91\97\90M\89Â\94\\83f\81[\83^\82ð\90æ\93ª\82©\82ç\91\97\90M\83o\83b\83t\83@\83T\83C\83Y\95ª\81A\91\97\90M\83o\83b\83t\83@\82É\83R\83s\81[\82·\82é\r
+       std::string chk2 = "bcdef";\r
+       BOOST_CHECK_EQUAL(chk2.c_str(),sbf2.data());\r
+       //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É\91\97\90M\83o\83b\83t\83@\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+       int sbfsize = sbf2.max_size();\r
+       BOOST_CHECK_EQUAL(data2.recive_data_map[ep2].send_status_list.rbegin()->send_end_size, sbfsize);\r
+       //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82©\82ç\91\97\90M\83o\83b\83t\83@\83T\83C\83Y\82ð\8c¸\8eZ\82·\82é\r
+       BOOST_CHECK_EQUAL(5000-sbfsize,data2.recive_data_map[ep2].send_status_list.rbegin()->send_possible_size);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_SEND,ret);\r
+\r
+       //unit_test[10] \91\97\90M\83o\83b\83t\83@\83T\83C\83Y\81@=\81@\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\r
+       protocol_module_sessionless obj3;\r
+\r
+       boost::thread t3;\r
+       boost::array<char,MAX_BUFFER_SIZE> sbf3;\r
+       std::size_t d3;\r
+       boost::asio::ip::tcp::endpoint ep3;\r
+\r
+       //session_thread_data_sessionless\r
+       protocol_module_sessionless::session_thread_data_sessionless data3;\r
+       obj1.session_thread_data_map[t3.get_id()] = &data3;\r
+       //send_status\r
+       protocol_module_sessionless::send_status sd3;\r
+       sd3.status = protocol_module_sessionless::SEND_OK;\r
+       sd3.send_possible_size = 4096;\r
+       sd3.send_offset = 1;\r
+       //recive_data\r
+       protocol_module_sessionless::recive_data rd3;\r
+       memset(rd3.recive_buffer,96,4096);\r
+       //send_status->recive_data\r
+       rd3.send_status_list.push_back(sd3);\r
+       //recive_data->session_thread_data_sessionless\r
+       data3.recive_data_map[ep3] = rd3;\r
+\r
+       ret = obj3.handle_client_connection_check(t3.get_id(),sbf3,d3);\r
+       //\91\97\90M\89Â\94\\83f\81[\83^\82ð\90æ\93ª\82©\82ç\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\95ª\81A\91\97\90M\83o\83b\83t\83@\82É\83R\83s\81[\82·\82é\r
+       char *chk3;\r
+       memset(chk3,96,4095);\r
+       BOOST_CHECK_EQUAL(chk3, sbf3.data());\r
+       //\91\97\90M\8dÏ\83f\81[\83^\83T\83C\83Y\82É\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(data3.recive_data_map[ep3].send_status_list.rbegin()->send_end_size, 4096);\r
+       //\91\97\90M\89Â\94\\83f\81[\83^\83T\83C\83Y\82É0\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(data3.recive_data_map[ep3].send_status_list.rbegin()->send_possible_size, 0);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_SEND, ret);\r
+\r
+}\r
+\r
+//handle_client_select\r
+void handle_client_select_test(){\r
+       //unit_test[1] STOP\r
+       protocol_module_sessionless obj;\r
+\r
+       boost::thread t;\r
+       boost::asio::ip::udp::endpoint ep;\r
+       boost::array<char,MAX_BUFFER_SIZE> sbf;\r
+       std::size_t d;\r
+       protocol_module_sessionless::EVENT_TAG ret;\r
+       ret = obj.handle_client_select(t.get_id(),ep,sbf,d);\r
+\r
+       BOOST_CHECK_EQUAL(protocol_module_base::STOP, ret);\r
+}\r
+\r
+//handle_client_send\r
+\r
+//handle_client_disconnect ég\89Æ\8f\83\r
+void handle_client_disconnect_test(){\r
+       //unit_test[12] \91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é\r
+       protocol_module_sessionless obj;\r
+\r
+       protocol_module_sessionless::EVENT_TAG ret;\r
+       boost::thread t;\r
+\r
+       ret=obj.handle_client_disconnect(t.get_id());\r
+       BOOST_CHECK_EQUAL(protocol_module_base::FINALIZE,ret);\r
+}\r
+\r
+//handle_sorry_enable \94n\90\89\90\89\r
+void thread_t(){}\r
+void handle_sorry_enable_test() {\r
+       protocol_module_sessionless sessionless;\r
+       protocol_module_sessionless::EVENT_TAG status;\r
+       protocol_module_sessionless::send_status sendstatus;\r
+       protocol_module_sessionless::recive_data receivedata;\r
+       session_thread_data *thread_data = new session_thread_data();\r
+       boost::thread thread_up(&thread_t);\r
+       boost::thread thread_down(&thread_t);\r
+       boost::thread::id thread_id_up = thread_up.get_id();\r
+       boost::thread::id thread_id_down = thread_down.get_id();\r
+       boost::asio::ip::tcp::endpoint endpoint;\r
+       boost::asio::ip::tcp::endpoint endpoint_down;\r
+\r
+       // \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87\r
+       thread_data->thread_division = 0;\r
+       thread_data->thread_id = thread_id_up;\r
+       sessionless.session_thread_data_map.insert(std::pair<boost::thread::id, session_thread_data*>(thread_id_up,thread_data));\r
+\r
+       // unit_test[26] sorry\8fó\91Ô\82ðON,status = protocol_module_sessionless::ACCEPT\r
+       // unit_test[26] test data:accept\8a®\97¹\83t\83\89\83OOFF\82Ì\8fê\8d\87\r
+       sessionless.session_thread_data_map[thread_id_up]->accept_end_flag = 0;\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->sorry_flag,1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::ACCEPT);\r
+\r
+       // unit_test[27] status =SORRYSERVER_SELECT\r
+       // unit_test[27] test data:accept\8a®\97¹\83t\83\89\83OON\82Ì\8fê\8d\87,sorry\8fó\91Ô\82Ì\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\82Ì\8fê\8d\87 list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_up]->accept_end_flag = 1;\r
+       sessionless.session_thread_data_map[thread_id_up]->sorry_flag = 1;\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       sendstatus.send_possible_size = 10;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_SELECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[28] status =SORRYSERVER_SELECT\r
+       // unit_test[28] test data:\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\82Ì\8fê\8d\87 list 2\8c\8f 1\8c\8f\82 \82è\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       sendstatus.send_possible_size = 10;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_SELECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[29] status =CLIENT_RECV\r
+       // unit_test[29] test data:\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_RECV);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[30] \8fI\97¹\83t\83\89\83O\82ðON,status = REALSERVER_DISCONNECT\r
+       // unit_test[30] test data:sorry\8fó\91Ô\88È\8aO\82Ì\8fê\8d\87,\91\97\90M\8cp\91±\83f\81[\83^\82 \82è list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_up]->sorry_flag = 0;\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->end_flag,1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[31] \8fI\97¹\83t\83\89\83O\82ðON,status = REALSERVER_DISCONNECT\r
+       // unit_test[31] test data:\91\97\90M\8cp\91±\83f\81[\83^\82 \82è list 2\8c\8f 1\8c\8f\82 \82è\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->end_flag,1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[32] sorryserver\90Ø\91Ö\92\86\83t\83\89\83OON,sorry\8fó\91Ô\82ðON,status = REALSERVER_DISCONNECT\r
+       // unit_test[32] test data:\91\97\90M\8cp\91±\83f\81[\83^\82È\82µ list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->sorryserver_switch_flag,1);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->sorry_flag,1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87\r
+       sessionless.session_thread_data_map.clear();\r
+       thread_data->thread_division = 1;\r
+       thread_data->thread_id = thread_id_down;\r
+       sessionless.session_thread_data_map.insert(std::pair<boost::thread::id, session_thread_data*>(thread_id_down,thread_data));\r
+\r
+       // unit_test[33] status =CLIENT_CONNECTION_CHECK\r
+       // unit_test[33] test data:sorry\8fó\91Ô\82Ì\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82 \82è list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_down]->sorry_flag = 1;\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       sendstatus.send_possible_size = 10;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_CONNECTION_CHECK);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[34] status =CLIENT_CONNECTION_CHECK\r
+       // unit_test[34] test data:\91\97\90M\89Â\94\\83f\81[\83^\82 \82è list 2\8c\8f 1\8c\8f\82 \82è\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       sendstatus.send_possible_size = 10;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_CONNECTION_CHECK);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[35] status =SORRYSERVER_RECV\r
+       // unit_test[35] test data:\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_RECV);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[36] \8fI\97¹\83t\83\89\83O\82ðON,status = REALSERVER_DISCONNECT\r
+       // unit_test[36] test data:sorry\8fó\91Ô\88È\8aO\82Ì\8fê\8d\87,\91\97\90M\95s\89Â\83f\81[\83^\82 \82è list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_down]->sorry_flag = 0;\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_down]->end_flag , 1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[37] \8fI\97¹\83t\83\89\83O\82ðON,status = REALSERVER_DISCONNECT\r
+       // unit_test[37] test data:\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82·\82é\8fê\8d\87 list 2\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 10;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 20;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_down]->end_flag , 1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[38] sorry\8fó\91Ô\82ðON\r
+       // unit_test[38] test data:\91\97\90M\95s\89Â\83f\81[\83^\82È\82µ\81@\82©\82Â\81@\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87 list 1\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_down]->sorry_flag,1);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[39]  status = SORRYSERVER_RECV\r
+       // unit_test[39] test data:\91\97\90M\95s\89Â\83f\81[\83^\82È\82µ\81@\82©\82Â\81@\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ list 1\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_RECV);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[40] \91\97\90M\89Â\94\\83f\81[\83^\82 \82è status = CLIENT_CONNECTION_CHECK\r
+       // unit_test[40] test data:\91\97\90M\95s\89Â\83f\81[\83^\82È\82µ\81@\82©\82Â\81@\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82 \82è list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_CONNECTION_CHECK);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[41] status =FINALIZE\r
+       // unit_test[41] test data:thread_id\91Î\89\9e\82Ìsession_thread_data\82È\82µ\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_enable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::FINALIZE);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+}\r
+\r
+//handle_sorry_disable \94n\90\89\90\89\r
+void handle_sorry_disable_test(){\r
+       protocol_module_sessionless sessionless;\r
+       protocol_module_sessionless::EVENT_TAG status;\r
+       protocol_module_sessionless::send_status sendstatus;\r
+       protocol_module_sessionless::recive_data receivedata;\r
+       session_thread_data *thread_data = new session_thread_data();\r
+       boost::thread thread_up(&thread_t);\r
+       boost::thread thread_down(&thread_t);\r
+       boost::thread::id thread_id_up = thread_up.get_id();\r
+       boost::thread::id thread_id_down = thread_down.get_id();\r
+       boost::asio::ip::tcp::endpoint endpoint;\r
+       boost::asio::ip::tcp::endpoint endpoint_down;\r
+\r
+       // \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87\r
+       thread_data->thread_division = 0;\r
+       thread_data->thread_id = thread_id_up;\r
+       sessionless.session_thread_data_map.insert(std::pair<boost::thread::id, session_thread_data*>(thread_id_up,thread_data));\r
+\r
+       // unit_test[42] sorry\8fó\91Ô\82ðOFF,status =ACCEPT\r
+       // unit_test[42] test data:accept\8a®\97¹\83t\83\89\83OOFF\82Ì\8fê\8d\87\r
+       sessionless.session_thread_data_map[thread_id_up]->accept_end_flag = 0;\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->sorry_flag,0);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::ACCEPT);\r
+\r
+       // unit_test[43] \8fI\97¹\83t\83\89\83O\82ðON,status = SORRYSERVER_DISCONNECT\r
+       // unit_test[43] test data:accept\8a®\97¹\83t\83\89\83OON\82Ì\8fê\8d\87,sorry\8fó\91Ô\82Ì\8fê\8d\87,\91\97\90M\8cp\91±\83f\81[\83^\82 \82è list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_up]->accept_end_flag = 1;\r
+       sessionless.session_thread_data_map[thread_id_up]->sorry_flag = 1;\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->end_flag,1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[44] \8fI\97¹\83t\83\89\83O\82ðON,status = SORRYSERVER_DISCONNECT\r
+       // unit_test[44] test data:\91\97\90M\8cp\91±\83f\81[\83^\82 \82è list 2\8c\8f 1\8c\8f\82 \82è\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->end_flag,1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[45] realserver\90Ø\91Ö\92\86,sorry\8fó\91Ô\82ðOFF,status = SORRYSERVER_DISCONNECT\r
+       // unit_test[45] test data:\91\97\90M\8cp\91±\83f\81[\83^\82È\82µ list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->realserver_switch_flag,1);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_up]->sorry_flag,0);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[46] status =REALSERVER_SELECT\r
+       // unit_test[46] test data:sorry\8fó\91Ô\88È\8aO\82Ì\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\82Ì\8fê\8d\87 list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_up]->sorry_flag = 0;\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_SELECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[47] status =REALSERVER_SELECT\r
+       // unit_test[47] test data:\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\82Ì\8fê\8d\87 list 2\8c\8f 1\8c\8f\82 \82è\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_SELECT);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // unit_test[48] status =CLIENT_RECV\r
+       // unit_test[48] test data:\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_RECV);\r
+       sessionless.session_thread_data_map[thread_id_up]->recive_data_map.clear();\r
+\r
+       // \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87\r
+       sessionless.session_thread_data_map.clear();\r
+       thread_data->thread_division = 1;\r
+       thread_data->thread_id = thread_id_down;\r
+       sessionless.session_thread_data_map.insert(std::pair<boost::thread::id, session_thread_data*>(thread_id_down,thread_data));\r
+\r
+       // unit_test[49] \8fI\97¹\83t\83\89\83O\82ðON,status = SORRYSERVER_DISCONNECT\r
+       // unit_test[49] test data:sorry\8fó\91Ô\82Ì\8fê\8d\87,\91\97\90M\95s\89Â\83f\81[\83^\82 \82è list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_down]->sorry_flag = 1;\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_down]->end_flag , 1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[50] \8fI\97¹\83t\83\89\83O\82ðON,status = SORRYSERVER_DISCONNECT\r
+       // unit_test[50] test data:\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82·\82é\8fê\8d\87 list 2\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 10;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 20;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_down]->end_flag , 1);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::SORRYSERVER_DISCONNECT);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[51] sorry\8fó\91Ô\82ðOFF\r
+       // unit_test[51] test data:\91\97\90M\95s\89Â\83f\81[\83^\82È\82µ\81@\82©\82Â\81@\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87 list 1\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(sessionless.session_thread_data_map[thread_id_down]->sorry_flag,0);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[52] sorry\8fó\91Ô\82ðOFF,\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ status = REALSERVER_RECV\r
+       // unit_test[52] test data:\91\97\90M\95s\89Â\83f\81[\83^\82È\82µ\81@\82©\82Â\81@\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ list 1\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_RECV);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[53] status = CLIENT_CONNECTION_CHECK\r
+       // unit_test[53] test data:\91\97\90M\95s\89Â\83f\81[\83^\82È\82µ\81@\82©\82Â\81@\91\97\90M\83f\81[\83^\8ec\83T\83C\83\81\84 \82O\81@\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82 \82è list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       sendstatus.send_rest_size = 0;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_CONNECTION_CHECK);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[54] status =CLIENT_CONNECTION_CHECK\r
+       // unit_test[54] test data:sorry\8fó\91Ô\88È\8aO\82Ì\8fê\8d\87,\91\97\90M\89Â\94\\83f\81[\83^\82 \82è list 1\8c\8f\r
+       sessionless.session_thread_data_map[thread_id_down]->sorry_flag = 0;\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_CONNECTION_CHECK);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[55] status =CLIENT_CONNECTION_CHECK\r
+       // unit_test[55] test data:\91\97\90M\89Â\94\\83f\81[\83^\82 \82è list 2\8c\8f 1\8c\8f\82 \82è\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::CLIENT_CONNECTION_CHECK);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[56] status =REALSERVER_RECV\r
+       // unit_test[56] test data:\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ list 3\8c\8f\r
+       sendstatus.status = protocol_module_sessionless::SEND_END;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_CONTINUE;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sendstatus.status = protocol_module_sessionless::SEND_NG;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_down);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::REALSERVER_RECV);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+\r
+       // unit_test[57] status =FINALIZE\r
+       // unit_test[57] test data:thread_id\91Î\89\9e\82Ìsession_thread_data\82È\82µ\r
+       sendstatus.status = protocol_module_sessionless::SEND_OK;\r
+       receivedata.send_status_list.push_back(sendstatus);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.insert(std::pair<boost::asio::ip::tcp::endpoint, protocol_module_sessionless::recive_data>(endpoint_down,receivedata));\r
+       status = sessionless.handle_sorry_disable(thread_id_up);\r
+       BOOST_CHECK_EQUAL(status,protocol_module_sessionless::FINALIZE);\r
+       sessionless.session_thread_data_map[thread_id_down]->recive_data_map.clear();\r
+}\r
+\r
+//handle_realserver_disconnect(tcp)\r
+void handle_realserver_disconnect_test(){\r
+\r
+       //unit_test[13] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªON\82Ì\8fê\8d\87\r
+       protocol_module_sessionless obj1;\r
+\r
+       boost::thread t1;\r
+       boost::asio::ip::tcp::endpoint ep1;\r
+       protocol_module_sessionless::EVENT_TAG ret;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data1;\r
+       obj1.session_thread_data_map[t1.get_id()] = &data1;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data1.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªON\82Ì\8fê\8d\87 1->on\r
+       data1.end_flag = 1;\r
+\r
+       ret = obj1.handle_realserver_disconnect(t1.get_id(), ep1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_RECV\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_RECV, ret);\r
+\r
+\r
+       //unit_test[14] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87->sorryserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless obj2;\r
+\r
+       boost::thread t2;\r
+       boost::asio::ip::tcp::endpoint ep2;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data2;\r
+       obj2.session_thread_data_map[t2.get_id()] = &data2;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data2.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87 0->off\r
+       data2.end_flag = 0;\r
+       //make sorryserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87 1->\90Ø\91Ö\92\86\r
+       data2.sorryserver_switch_flag = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless::send_status st2;\r
+       st2.status = protocol_module_sessionless::SEND_OK;\r
+       st2.send_possible_size = 100;\r
+       data2.recive_data_map[ep2].send_status_list.push_back(st2);\r
+\r
+\r
+       ret = obj2.handle_realserver_disconnect(t2.get_id(),ep2);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = SORRYSERVER_SELECT\r
+       BOOST_CHECK_EQUAL(protocol_module_base::SORRYSERVER_SELECT, ret);\r
+\r
+\r
+       //unit_test[15] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87->sorryserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless obj3;\r
+\r
+       boost::thread t3;\r
+       boost::asio::ip::tcp::endpoint ep3;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data3;\r
+       obj3.session_thread_data_map[t3.get_id()] = &data3;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data3.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87 0->off\r
+       data3.end_flag = 0;\r
+       //make sorryserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87 1->\90Ø\91Ö\92\86\r
+       data3.sorryserver_switch_flag = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless::send_status st3;\r
+       //send_possible=0\r
+       st3.send_possible_size = 0;\r
+       data3.recive_data_map[ep3].send_status_list.push_back(st3);\r
+\r
+       ret = obj3.handle_realserver_disconnect(t3.get_id(), ep3);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_RECV\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_RECV, ret);\r
+\r
+\r
+       //unit_test[16] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87->sorryserver\90Ø\91Ö\92\86\82Å\82È\82¢\8fê\8d\87\r
+       protocol_module_sessionless obj4;\r
+\r
+       boost::thread t4;\r
+       boost::asio::ip::tcp::endpoint ep4;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data4;\r
+       obj4.session_thread_data_map[t4.get_id()] = &data4;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data4.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87 0->off\r
+       data4.end_flag = 0;\r
+       //make sorryserver\90Ø\91Ö\92\86\82Å\82È\82¢\8fê\8d\87 0->\90Ø\91Ö\92\86\82Å\82È\82¢\r
+       data4.sorryserver_switch_flag = 0;\r
+\r
+       ret = obj4.handle_realserver_disconnect(t4.get_id(),ep4);\r
+       //\8fI\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(data4.end_flag, 1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_RECV\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_RECV, ret);\r
+\r
+\r
+       //unit_test[17] \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless obj5;\r
+\r
+       boost::thread t5;\r
+       boost::asio::ip::tcp::endpoint ep5;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data5;\r
+       obj5.session_thread_data_map[t5.get_id()] = &data5;\r
+       //make \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 1->\89º\82è\83X\83\8c\83b\83h\r
+       data5.thread_division = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless::send_status st5;\r
+       st5.status = protocol_module_sessionless::SEND_OK;\r
+       //send_possible>0\r
+       st5.send_possible_size = 100;\r
+       data5.recive_data_map[ep5].send_status_list.push_back(st5);\r
+\r
+       ret = obj5.handle_realserver_disconnect(t5.get_id(), ep5);\r
+       //\8fI\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(data5.end_flag, 1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_CONNECTION_CHECK\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_CONNECTION_CHECK, ret);\r
+\r
+\r
+       //unit_test[18] \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless obj6;\r
+\r
+       boost::thread t6;\r
+       boost::asio::ip::tcp::endpoint ep6;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data6;\r
+       obj6.session_thread_data_map[t6.get_id()] = &data6;\r
+       //make \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 1->\89º\82è\83X\83\8c\83b\83h\r
+       data6.thread_division = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless::send_status st6;\r
+       //send_possible>0\r
+       st5.send_possible_size = 0;\r
+       data6.recive_data_map[ep6].send_status_list.push_back(st6);\r
+\r
+       ret = obj6.handle_realserver_disconnect(t6.get_id(), ep6);\r
+       //\8fI\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(data6.end_flag, 1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_DISCONNECT\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_DISCONNECT, ret);\r
+}\r
+\r
+//handle_realserver_disconnect(udp)\r
+\r
+//handle_sorryserver_disconnect ég\89Æ\8f\83\r
+void handle_sorryserver_disconnect_test(){\r
+\r
+       //unit_test[19] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªON\82Ì\8fê\8d\87\r
+       protocol_module_sessionless obj1;\r
+\r
+       boost::thread t1;\r
+       boost::asio::ip::tcp::endpoint ep1;\r
+       protocol_module_sessionless::EVENT_TAG ret;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data1;\r
+       obj1.session_thread_data_map[t1.get_id()] = &data1;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data1.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªON\82Ì\8fê\8d\87 1->on\r
+       data1.end_flag = 1;\r
+\r
+       ret = obj1.handle_realserver_disconnect(t1.get_id(), ep1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_RECV\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_RECV, ret);\r
+\r
+\r
+       //unit_test[20] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87->realserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless obj2;\r
+\r
+       boost::thread t2;\r
+       boost::asio::ip::tcp::endpoint ep2;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data2;\r
+       obj2.session_thread_data_map[t2.get_id()] = &data2;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data2.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87 0->off\r
+       data2.end_flag = 0;\r
+       //make realserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87 1->\90Ø\91Ö\92\86\r
+       data2.realserver_switch_flag = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless::send_status st2;\r
+       st2.status = protocol_module_sessionless::SEND_OK;\r
+       //send_possible>0\r
+       st2.send_possible_size = 100;\r
+       data2.recive_data_map[ep2].send_status_list.push_back(st2);\r
+\r
+       ret = obj2.handle_realserver_disconnect(t2.get_id(), ep2);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = REALSERVER_SELECT\r
+       BOOST_CHECK_EQUAL(protocol_module_base::REALSERVER_SELECT, ret);\r
+\r
+\r
+       //unit_test[21] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87->realserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless obj3;\r
+\r
+       boost::thread t3;\r
+       boost::asio::ip::tcp::endpoint ep3;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data3;\r
+       obj3.session_thread_data_map[t3.get_id()] = &data3;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data3.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87 0->off\r
+       data3.end_flag = 0;\r
+       //make realserver\90Ø\91Ö\92\86\82Ì\8fê\8d\87 1->\90Ø\91Ö\92\86\r
+       data3.realserver_switch_flag = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless::send_status st3;\r
+       //send_possible=0\r
+       st3.send_possible_size = 0;\r
+       data3.recive_data_map[ep3].send_status_list.push_back(st3);\r
+\r
+       ret = obj3.handle_realserver_disconnect(t3.get_id(), ep3);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_RECV\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_RECV, ret);\r
+\r
+\r
+       //unit_test[22] \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87->realserver\90Ø\91Ö\92\86\82Å\82È\82¢\8fê\8d\87\r
+       protocol_module_sessionless obj4;\r
+\r
+       boost::thread t4;\r
+       boost::asio::ip::tcp::endpoint ep4;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data4;\r
+       obj4.session_thread_data_map[t4.get_id()] = &data4;\r
+       //make \8fã\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 0->\8fã\82è\83X\83\8c\83b\83h\r
+       data4.thread_division = 0;\r
+       //make \8fI\97¹\83t\83\89\83O\82ªOFF\82Ì\8fê\8d\87 0->off\r
+       data4.end_flag = 0;\r
+       //make realserver\90Ø\91Ö\92\86\82Å\82È\82¢\8fê\8d\87 0->\90Ø\91Ö\92\86\82Å\82È\82¢\r
+       data4.realserver_switch_flag = 0;\r
+\r
+       ret = obj4.handle_realserver_disconnect(t4.get_id(),ep4);\r
+       //\8fI\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(data4.end_flag,1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_RECV\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_RECV, ret);\r
+\r
+\r
+       //unit_test[23] \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless obj5;\r
+\r
+       boost::thread t5;\r
+       boost::asio::ip::tcp::endpoint ep5;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data5;\r
+       obj5.session_thread_data_map[t5.get_id()] = &data5;\r
+       //make \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 1->\89º\82è\83X\83\8c\83b\83h\r
+       data5.thread_division = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82 \82è\r
+       protocol_module_sessionless::send_status st5;\r
+       st5.status = protocol_module_sessionless::SEND_OK;\r
+       //send_possible>0\r
+       st5.send_possible_size = 100;\r
+       data5.recive_data_map[ep5].send_status_list.push_back(st5);\r
+\r
+       ret = obj5.handle_realserver_disconnect(t5.get_id(),ep5);\r
+       //\8fI\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(data5.end_flag, 1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_CONNECTION_CHECK\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_CONNECTION_CHECK, ret);\r
+\r
+\r
+       //unit_test[24] \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87->\91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless obj6;\r
+\r
+       boost::thread t6;\r
+       boost::asio::ip::tcp::endpoint ep6;\r
+\r
+       protocol_module_sessionless::session_thread_data_sessionless data6;\r
+       obj6.session_thread_data_map[t6.get_id()] = &data6;\r
+       //make \89º\82è\83X\83\8c\83b\83h\82Ì\8fê\8d\87 1->\89º\82è\83X\83\8c\83b\83h\r
+       data6.thread_division = 1;\r
+       //make \91\97\90M\89Â\94\\83f\81[\83^\82È\82µ\r
+       protocol_module_sessionless::send_status st6;\r
+       //send_possible=0\r
+       st6.send_possible_size = 0;\r
+       data6.recive_data_map[ep6].send_status_list.push_back(st6);\r
+\r
+       ret = obj6.handle_realserver_disconnect(t6.get_id(),ep6);\r
+       //\8fI\97¹\83t\83\89\83O\82ðON\r
+       BOOST_CHECK_EQUAL(data6.end_flag,1);\r
+       //\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é status = CLIENT_DISCONNECT\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_DISCONNECT,ret);\r
+}\r
+\r
+\r
+test_suite*    init_unit_test_suite( int argc, char* argv[] ){\r
+\r
+       test_suite* ts = BOOST_TEST_SUITE( "sessionless test" );\r
+\r
+       ts->add(BOOST_TEST_CASE(&protocol_module_sessionless_test));\r
+       ts->add(BOOST_TEST_CASE(&is_tcp_test));\r
+       ts->add(BOOST_TEST_CASE(&is_udp_test));\r
+       ts->add(BOOST_TEST_CASE(&get_name_test));\r
+       ts->add(BOOST_TEST_CASE(&initialize_test));\r
+       ts->add(BOOST_TEST_CASE(&finalize_test));\r
+       ts->add(BOOST_TEST_CASE(&is_use_sorry_test));\r
+       ts->add(BOOST_TEST_CASE(&check_parameter_test));\r
+       ts->add(BOOST_TEST_CASE(&set_parameter_test));\r
+       ts->add(BOOST_TEST_CASE(&add_parameter_test));\r
+       ts->add(BOOST_TEST_CASE(&register_schedule_tcp_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_session_initialize_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_session_finalize_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_accept_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_realserver_select_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_realserver_connection_fail_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_sorryserver_select_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_client_connection_check_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_client_select_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_client_disconnect_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_sorry_enable_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_sorry_disable_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_realserver_disconnect_test));\r
+       ts->add(BOOST_TEST_CASE(&handle_sorryserver_disconnect_test));\r
+\r
+       framework::master_test_suite().add(ts);\r
+       return 0;\r
+}\r
+\r
diff --git a/unit_tests/sslid/protocol_module_sslid_test.cpp b/unit_tests/sslid/protocol_module_sslid_test.cpp
new file mode 100644 (file)
index 0000000..7cd9d18
--- /dev/null
@@ -0,0 +1,1051 @@
+#include "sslid_to_be_test_file.h"\r
+#include <boost/thread.hpp>\r
+\r
+using namespace boost::unit_test;\r
+using namespace l7vs;\r
+\r
+// declaration\r
+std::list<realserver> rs_list;\r
+bool function_check_flag = false;\r
+void rs_list_init(void);\r
+void rs_list_fini(void);\r
+std::list<realserver>::iterator rs_list_itr_begin(void);\r
+std::list<realserver>::iterator rs_list_itr_end(void);\r
+std::list<realserver>::iterator rs_list_itr_next(void);\r
+void list_lock(void);\r
+void list_unlock(void);\r
+void thread_callback(void);\r
+void rs_list_init(void)\r
+{\r
+       for(int i=0; i<5; i++)\r
+       {\r
+               realserver rs;\r
+               rs_list.push_back(rs);\r
+       }\r
+}\r
+\r
+void rs_list_fini(void)\r
+{\r
+       rs_list.clear();\r
+}\r
+\r
+std::list<realserver>::iterator rs_list_itr_begin(void)\r
+{\r
+       function_check_flag = true;\r
+       return rs_list.begin();\r
+}\r
+\r
+std::list<realserver>::iterator rs_list_itr_end(void)\r
+{\r
+       function_check_flag = true;\r
+       return rs_list.end();\r
+}\r
+\r
+std::list<realserver>::iterator rs_list_itr_next(void)\r
+{\r
+       function_check_flag = true;\r
+       return ++rs_list.begin();\r
+}\r
+\r
+void list_lock(void)\r
+{\r
+       function_check_flag = true;\r
+}\r
+\r
+void list_unlock(void)\r
+{\r
+       function_check_flag = true;\r
+}\r
+\r
+void thread_callback(void){}\r
+\r
+void thread_func(){}\r
+\r
+void thread_func2(){}\r
+\r
+bool check=false;\r
+\r
+\r
+//protocol_module_sslid é¸\8eu\94ò\r
+void protocol_module_sslid_test(){\r
+\r
+       protocol_module_sslid sslid;\r
+\r
+       // unit_test[1] check the module name\r
+       BOOST_CHECK_EQUAL("sslid", sslid.name);\r
+}\r
+\r
+//is_tcp \8b\96\8fH\95²\r
+void is_tcp_test(){\r
+    protocol_module_sslid sslid;\r
+    //unit_test[1] is_tcp()\83\81\83\\83b\83h\82Ì\83e\83X\83g\81@ normal\r
+    //unit_test[1] test data:NULL\r
+    BOOST_CHECK(sslid.is_tcp());\r
+}\r
+\r
+//is_udp \8b\96\8fH\95²\r
+void is_udp_test(){\r
+       protocol_module_sslid sslid;\r
+       //unit_test[2] is_udp()\83\81\83\\83b\83h\82Ì\83e\83X\83g\81@ normal\r
+       //unit_test[2] test data:NULL\r
+       BOOST_CHECK(!sslid.is_udp());\r
+}\r
+\r
+//get_name \8b\96\8fH\95²\r
+void get_name_test()\r
+{\r
+       protocol_module_sslid sslid;\r
+       std::string name=sslid.get_name();\r
+       std::string sslidname="sslid";\r
+       //unit_test[3]\81@get_name()\83\81\83\\83b\83h\82Ì\83e\83X\83g\81@ normal\r
+       //unit_test[3] test data:NULL\r
+       BOOST_CHECK_EQUAL(sslidname,name);\r
+}\r
+\r
+//initialize é¸\8eu\94ò\r
+void initialize_test(){\r
+\r
+       std::list<realserver> rs_list;\r
+       rs_list_init();\r
+       boost::function<std::list<realserver>::iterator(void)> inrslist_begin = rs_list_itr_begin;\r
+       boost::function<std::list<realserver>::iterator(void)> inrslist_end = rs_list_itr_end;\r
+       boost::function<std::list<realserver>::iterator(void)> inrslist_next = rs_list_itr_next;\r
+       boost::function<void(void)> inlist_lock = list_lock;\r
+       boost::function<void(void)> inlist_unlock = list_unlock;\r
+       l7vs::protocol_module_sslid sslid;\r
+\r
+       // unit_test[3] check the initial data\r
+       sslid.initialize(inrslist_begin, inrslist_end, inrslist_next, inlist_lock, inlist_unlock);\r
+       BOOST_CHECK_EQUAL(sslid.rs_list_begin, rs_list_itr_begin);\r
+       function_check_flag = false;\r
+       sslid.rs_list_begin();\r
+       BOOST_CHECK(function_check_flag);\r
+       BOOST_CHECK_EQUAL(sslid.rs_list_end, rs_list_itr_end);\r
+       function_check_flag = false;\r
+       sslid.rs_list_end();\r
+       BOOST_CHECK(function_check_flag);\r
+       BOOST_CHECK_EQUAL(sslid.rs_list_next, rs_list_itr_next);\r
+       function_check_flag = false;\r
+       sslid.rs_list_next();\r
+       BOOST_CHECK(function_check_flag);\r
+       BOOST_CHECK_EQUAL(sslid.rs_list_lock, list_lock);\r
+       function_check_flag = false;\r
+       sslid.rs_list_lock();\r
+       BOOST_CHECK(function_check_flag);\r
+       BOOST_CHECK_EQUAL(sslid.rs_list_unlock, list_unlock);\r
+       function_check_flag = false;\r
+       sslid.rs_list_unlock();\r
+       BOOST_CHECK(function_check_flag);\r
+\r
+       // unit_test[4] pass NULL to initialize(), check function object\r
+       sslid.initialize(NULL, NULL, NULL, NULL, NULL);\r
+       BOOST_CHECK(!sslid.rs_list_begin);\r
+       BOOST_CHECK(!sslid.rs_list_end);\r
+       BOOST_CHECK(!sslid.rs_list_next);\r
+       BOOST_CHECK(!sslid.rs_list_lock);\r
+       BOOST_CHECK(!sslid.rs_list_unlock);\r
+\r
+       rs_list_fini();\r
+}\r
+\r
+//finalize é¸\8eu\94ò\r
+void finalize_test(){\r
+       l7vs::protocol_module_sslid sslid;\r
+\r
+       // unit_test[5] check finalize\r
+       sslid.finalize();\r
+       BOOST_CHECK(!sslid.getloglevel);\r
+       BOOST_CHECK(!sslid.putLogFatal);\r
+       BOOST_CHECK(!sslid.putLogError);\r
+       BOOST_CHECK(!sslid.putLogWarn);\r
+       BOOST_CHECK(!sslid.putLogInfo);\r
+       BOOST_CHECK(!sslid.putLogDebug);\r
+       BOOST_CHECK(!sslid.rs_list_begin);\r
+       BOOST_CHECK(!sslid.rs_list_end);\r
+       BOOST_CHECK(!sslid.rs_list_next);\r
+       BOOST_CHECK(!sslid.rs_list_lock);\r
+       BOOST_CHECK(!sslid.rs_list_unlock);\r
+       BOOST_CHECK(!sslid.replication_pay_memory);\r
+       BOOST_CHECK(!sslid.replication_area_lock);\r
+       BOOST_CHECK(!sslid.replication_area_unlock);\r
+       BOOST_CHECK(!sslid.schedule_tcp);\r
+       BOOST_CHECK(!sslid.schedule_udp);\r
+       BOOST_CHECK_EQUAL(sslid.timeout, 0);\r
+       BOOST_CHECK_EQUAL(sslid.maxlist, 0);\r
+       BOOST_CHECK_EQUAL(sslid.reschedule, 0);\r
+       BOOST_CHECK(sslid.session_data_processor == NULL);\r
+       BOOST_CHECK(sslid.replication_data_processor == NULL);\r
+}\r
+\r
+//is_use_sorry \8b\96\8fH\95²\r
+void is_use_sorry_test()\r
+{\r
+       protocol_module_sslid  sslid;\r
+       //unit_test[4] is_use_sorry()\83\81\83\\83b\83h\82Ì\83e\83X\83g\81@ normal\r
+       //unit_test[4] test data:NULL\r
+       BOOST_CHECK(!sslid.is_use_sorry());\r
+}\r
+\r
+//check_parameter \8b\96\8fH\95²\r
+void check_parameter_test()\r
+{\r
+\r
+       l7vs::protocol_module_sslid sslid;\r
+       std::vector<std::string> args;\r
+\r
+       //unit_test[13] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[13] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+       args.push_back("l7vsdadm");\r
+       protocol_module_base::check_message_result check_message;\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[14] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T", timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[14] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T", timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+       args.push_back("-T");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+\r
+       //unit_test[15] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-T/--timeout' option value 2ewqt is not numeric character."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[15] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87\r
+       args.push_back("2ewqt");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-T/--timeout option' value 2ewqt is not numeric character.");\r
+\r
+       //unit_test[16] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92\81\84 INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-T/--timeout' option value 2148583647 is not numeric character."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[16] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92\81\84 INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2148583647");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-T/--timeout option' value 2148583647 is too large.");\r
+\r
+       //unit_test[17] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l < INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[17] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l < INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2000");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[18] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l = INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[18] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l = INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2147483674");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[19] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l <= INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option '-T/timeout'"\82ð\90Ý\92è\82·\82é\r
+       //unit_test[19] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l = INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2000");\r
+       args.push_back("-T");\r
+       args.push_back("3000");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("Cannot set multiple option '-T/timeout'",check_message.message);\r
+\r
+       //unit_test[20] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l <= INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option '-T/timeout'"\82ð\90Ý\92è\82·\82é\r
+       //unit_test[20] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-T" timeout\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l = INT_MAX\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("--timeout");\r
+       args.push_back("100");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("Cannot set multiple option'-T/--timeout'",check_message.message);\r
+\r
+       //unit_test[21] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[21] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("--timeout");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+\r
+       //unit_test[22] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-T/--timeout' option value 2ewqt is not numeric character."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[22] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87\r
+       args.push_back("2ewqt");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-T/--timeout option' value 2ewqt is not numeric character.");\r
+\r
+       //unit_test[23] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92\81\84 INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-T/--timeout' option value 2148583647 is not numeric character."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[23] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92\81\84 INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2148583647");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-T/--timeout option' value 2148583647 is too large.");\r
+\r
+       //unit_test[24] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l < INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[24] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l < INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2000");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[25] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l = INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[25] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l = INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2147483674");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //\90\94\92l <= INT_MAX timeout\90Ý\92è\83t\83\89\83O = ON\r
+       //unit_test[26] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l <= INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option '-T/timeout'"\82ð\90Ý\92è\82·\82é\r
+       //unit_test[26] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--timeout" timeout\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a\82Ì\8fê\8d\87 \90\94\92l <= INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2000");\r
+       args.push_back("-timeout");\r
+       args.push_back("3000");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("Cannot set multiple option '-T/timeout'",check_message.message);\r
+\r
+       //maxlist\r
+       //unit_test[27] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[27] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("-M");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[28] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-M/--maxlist option' value 1st is not numeric character."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[28] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\r
+       args.push_back("1st");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-M/--maxlist option' value 1st is not numeric character.");\r
+\r
+       //unit_test[29] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92\81\84 INT_MAX\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-M/--maxlist option' value 2148583647 is too large."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[29] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92\81\84 INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2148583647");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-M/--maxlist option' value 2148583647 is too large.");\r
+\r
+       //unit_test[30] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l < INT_MAX\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[30] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l < INT_MAX\r
+       args.pop_back();\r
+       args.push_back("100");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[31] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l = INT_MAX\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[31] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l = INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2147483674");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+\r
+       //unit_test[32] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l <= INT_MAX\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option '-M/maxlist'"\82ð\90Ý\92è\82·\82é\r
+       //unit_test[32] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l <= INT_MAX\r
+       args.pop_back();\r
+       args.push_back("100");\r
+       args.push_back("-M");\r
+       args.push_back("200");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("Cannot set multiple option '-M/maxlist'",check_message.message);\r
+\r
+       //unit_test[33] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l <= INT_MAX\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option '-M/maxlist'"\82ð\90Ý\92è\82·\82é\r
+       //unit_test[33] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = ON \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a \90\94\92l <= INT_MAX\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("--maxlist");\r
+       args.push_back("200");\r
+       check_message=sslid.check_parameter(args);\r
+       //unit_test[21] \83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option '-M/maxlist'"\82ð\90Ý\92è\82·\82é\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("Cannot set multiple option '-M/maxlist'",check_message.message);\r
+\r
+       //unit_test[34] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[34] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82ª\91\8dÝ\82µ\82È\82¢\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("--maxlist");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[35] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-M/--maxlist option' value 1st is not numeric character."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[35] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82É\90\94\8e\9a\88È\8aO\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82é\r
+       args.push_back("1st");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-M/--maxlist option' value 1st is not numeric character.");\r
+\r
+       //unit_test[36] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a,\90\94\92\81\84 INT_MAX\82Ì\8fê\8d\87,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"'-M/--maxlist option' value 2148583647 is too large."\82ð\90Ý\92è\82·\82é\r
+       //unit_test[36] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "-M" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a,\90\94\92\81\84 INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2148583647");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL(check_message.message,"'-M/--maxlist option' value 2148583647 is too large.");\r
+\r
+       //unit_test[37] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a,\90\94\92l <= INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[37] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a,\90\94\92l <= INT_MAX\r
+       args.pop_back();\r
+       args.push_back("100");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[38] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a,\90\94\92l = INT_MAX,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[38] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist" maxlist\90Ý\92è\83t\83\89\83O = OFF \8e\9f\97v\91f\82Ì\95\8e\9a\97ñ\82ª\91S\82Ä\90\94\8e\9a,\90\94\92l = INT_MAX\r
+       args.pop_back();\r
+       args.push_back("2147483674");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+\r
+       //unit_test[39] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist",\90\94\92l <= INT_MAX maxlist\90Ý\92è\83t\83\89\83O = ON,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"Cannot set multiple option '-M/maxlist'"\82ð\90Ý\92è\82·\82é\r
+       //unit_test[39] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = "--maxlist",\90\94\92l <= INT_MAX maxlist\90Ý\92è\83t\83\89\83O = ON\r
+       args.pop_back();\r
+       args.push_back("100");\r
+       args.push_back("--maxlist");\r
+       args.push_back("200");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("Cannot set multiple option '-M/maxlist'",check_message.message);\r
+\r
+       //unit_test[40] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-R",no_reschedule\90Ý\92è\83t\83\89\83O = ON,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"You have to choose either of reschedule or no_reschedule\82ð\90Ý\92è\82·\82é\r
+       //unit_test[40] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-R",no_reschedule\90Ý\92è\83t\83\89\83O = ON\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("-N");\r
+       args.push_back("-R");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("You have to choose either of reschedule or no_reschedule",check_message.message);\r
+\r
+       //unit_test[41] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-N",reschedule\90Ý\92è\83t\83\89\83O = ON,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"You have to choose either of reschedule or no_reschedule\82ð\90Ý\92è\82·\82é\r
+       //unit_test[41] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-N",reschedule\90Ý\92è\83t\83\89\83O = ON\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("-R");\r
+       args.push_back("-N");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("You have to choose either of reschedule or no_reschedule",check_message.message);\r
+\r
+       //unit_test[42] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-T 2000 --maxlist 100 -R",\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉTRUE\82ð\90Ý\92è\82·\82é\r
+       //unit_test[42] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-T 2000 --maxlist 100 -R"\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("-T");\r
+       args.push_back("2000");\r
+       args.push_back("--maxlist");\r
+       args.push_back("100");\r
+       args.push_back("-R");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(true,check_message.flag);\r
+\r
+       //unit_test[43] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-T 2000 --maxlist 100 -R -N",\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"You have to choose either of reschedule or no_reschedule\82ð\90Ý\92è\82·\82é\r
+       //unit_test[43] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ ="-T 2000 --maxlist 100 -R"\r
+       args.push_back("-N");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("You have to choose either of reschedule or no_reschedule",check_message.message);\r
+\r
+       //unit_test[44] \83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = \8fã\8bL\88È\8aO,\83`\83F\83b\83N\8c\8b\89Ê\83t\83\89\83O\82ÉFALSE\82ð\90Ý\92è\82·\82é,\83`\83F\83b\83N\8c\8b\89Ê\83\81\83b\83Z\81[\83W\82É"option error"\82ð\90Ý\92è\82·\82é\r
+       //unit_test[44] data test:\83I\83v\83V\83\87\83\93\95\8e\9a\97ñ = \8fã\8bL\88È\8aO\r
+       args.pop_back();\r
+       args.pop_back();\r
+       args.push_back("-$");\r
+       check_message=sslid.check_parameter(args);\r
+       BOOST_CHECK_EQUAL(false,check_message.flag);\r
+       BOOST_CHECK_EQUAL("option error",check_message.message);\r
+}\r
+\r
+//register_schedule \8b\96\8fH\95²\r
+void t_schedule(const boost::thread::id,protocol_module_base::rs_list_itr_func_type,\r
+               protocol_module_base::rs_list_itr_func_type,\r
+               protocol_module_base::rs_list_itr_func_type,\r
+               boost::asio::ip::tcp::endpoint&)\r
+{\r
+       check=true;\r
+}\r
+void register_schedule_test()\r
+{\r
+       protocol_module_sslid sslid;\r
+       //unit_test[10] schedule_tcp\82Ét_schedule\82ð\90Ý\92è\82·\82é\r
+       //unit_test[10] test data:NULL\r
+       boost::thread thread1(thread_func);\r
+       const boost::thread::id thread_id=thread1.get_id();\r
+       protocol_module_base::rs_list_itr_func_type rs_1,rs_2,rs_3;\r
+       boost::asio::ip::tcp::endpoint ep;\r
+       protocol_module_base::tcp_schedule_func_type tcp_schedule;//initialize it\r
+    tcp_schedule=t_schedule;\r
+       sslid.register_schedule(tcp_schedule);\r
+       sslid.schedule_tcp(thread_id,rs_1,rs_2,rs_3,ep);\r
+       BOOST_CHECK_EQUAL(check,true);\r
+       BOOST_CHECK_EQUAL(sslid.schedule_tcp,t_schedule);\r
+}\r
+\r
+//handle_session_finalize é¸\8eu\94ò\r
+void handle_session_finalize_test(){\r
+       boost::thread up_thread(thread_callback);\r
+       boost::thread down_thread(thread_callback);\r
+       boost::thread::id up_thread_id = up_thread.get_id();\r
+       boost::thread::id down_thread_id = down_thread.get_id();\r
+       protocol_module_base::EVENT_TAG status;\r
+       protocol_module_sslid sslid;\r
+\r
+       // unit_test[7]\r
+       sslid.handle_session_initialize(up_thread_id, down_thread_id);\r
+       status = sslid.handle_session_finalize(up_thread_id, down_thread_id);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::STOP);\r
+       std::map<const boost::thread::id, session_thread_data_sslid*>::iterator itr;\r
+       itr = sslid.session_thread_data_map.find(up_thread_id);\r
+       BOOST_CHECK(itr == sslid.session_thread_data_map.end());\r
+       itr = sslid.session_thread_data_map.find(down_thread_id);\r
+       BOOST_CHECK(itr == sslid.session_thread_data_map.end());\r
+}\r
+\r
+\r
+//handle_accept \8b\96\8fH\95²\r
+void handle_accept_test()\r
+{\r
+       protocol_module_sslid sslid;\r
+       boost::thread thread1(thread_func);\r
+       boost::thread::id thread1_id=thread1.get_id();\r
+       //unit_test[5] handle_accpet()\83\81\83\\83b\83h\82Ì\83e\83X\83g\81@ normal\r
+       //unit_test[5] test data:NULL\r
+       protocol_module_base::EVENT_TAG accept=sslid.handle_accept(thread1_id);\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_RECV, accept);\r
+}\r
+\r
+//handle_client_recv é¸\8eu\94ò\r
+void handle_client_recv_test(){\r
+\r
+       boost::thread up_thread(thread_callback);\r
+       boost::thread down_thread(thread_callback);\r
+       boost::thread::id up_thread_id = up_thread.get_id();\r
+       boost::thread::id down_thread_id = down_thread.get_id();\r
+       protocol_module_sslid sslid;\r
+       session_thread_data_sslid* up_thread_data;\r
+       boost::array<char, MAX_BUFFER_SIZE> recvbuffer;\r
+       int recvlen = 0;\r
+       protocol_module_base::EVENT_TAG status;\r
+       unsigned short low_length = 0;\r
+       unsigned short high_length = 0;\r
+       unsigned short all_length = 0;\r
+       int all_data_size = 0;\r
+\r
+       // unit_test[8]\r
+       // condition:\r
+       //      end_flag = 1(ON)\r
+       // check:\r
+       //      handle_client_recv() return CLIENT_RECV\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 1;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::CLIENT_RECV);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[9]\r
+       // condition:\r
+       //      end_flag = 0 (OFF), data_size = 0, current_record_rest_size != 0\r
+       // check:\r
+       //  handle_client_recv() return REALSERVER_SELECT\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 0;\r
+       up_thread_data->current_record_rest_size = 10;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[10]\r
+       // condition:\r
+       //  end_flag = 0 (OFF), data_size = 0, current_record_rest_size = 0, check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       // check:\r
+       //  handle_client_recv() return FINALIZE\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 0;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvbuffer[0] = 0x00;\r
+       recvlen = 6;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::FINALIZE);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[11]\r
+       // condition:\r
+       //      end_flag = 0 (OFF), data_size = 0, current_record_rest_size = 0, check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       // check:\r
+       //  handle_client_recv() return CLIENT_RECV\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 0;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 1;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::CLIENT_RECV);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[12]\r
+       // condition:\r
+       //  end_flag = 0 (OFF), data_size = 0, current_record_rest_size = 0, check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       //  is hello message\r
+       // check:\r
+       //  hello_message_flag = true, handle_client_recv() return REALSERVER_SELECT, current_record_rest_size\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 0;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 76;\r
+       recvbuffer[0] = 0x16;\r
+       recvbuffer[1] = 0x03;\r
+       recvbuffer[2] = 0x01;\r
+       recvbuffer[3] = 0x00;\r
+       recvbuffer[4] = 0x9e;\r
+       recvbuffer[5] = 0x01;\r
+       recvbuffer[9] = 0x03;\r
+       recvbuffer[10] = 0x01;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[4]));\r
+       all_length = (high_length | low_length) + 5;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_length, sslid.session_thread_data_map[up_thread_id]->current_record_rest_size);\r
+       BOOST_CHECK(sslid.session_thread_data_map[up_thread_id]->hello_message_flag);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[13]\r
+       // condition:\r
+       //  end_flag = 0 (OFF), data_size = 0, current_record_rest_size = 0, check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       // is not hello message\r
+       // check:\r
+       // hello_message_flag = false, handle_client_recv() return REALSERVER_SELECT, current_record_rest_size\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 0;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 6;\r
+       recvbuffer[0] = 0x17;\r
+       recvbuffer[1] = 0x03;\r
+       recvbuffer[2] = 0x01;\r
+       recvbuffer[3] = 0x05;\r
+       recvbuffer[4] = 0x8c;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[4]));\r
+       all_length = (high_length | low_length) + 5;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_length, sslid.session_thread_data_map[up_thread_id]->current_record_rest_size);\r
+       BOOST_CHECK(!sslid.session_thread_data_map[up_thread_id]->hello_message_flag);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[13]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0, current_record_rest_size != 0, data_begain_offset != 0\r
+       // check:\r
+       //  handle_client_recv() return REALSERVER_SELECT, data_size, data_begain_offset\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 10;\r
+       up_thread_data->data_begain_offset = 36;\r
+       up_thread_data->current_record_rest_size = 15;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 5;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[14]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0, current_record_rest_size != 0, data_begain_offset = 0\r
+       // check:\r
+       //  handle_client_recv() return REALSERVER_SELECT, data_size, data_begain_offset\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 10;\r
+       up_thread_data->data_begain_offset = 0;\r
+       up_thread_data->current_record_rest_size = 15;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 5;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[15]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0,current_record_rest_size = 0,data_begain_offset != 0\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       // check:\r
+       //  handle_client_recv() return FINALIZE, data_size, data_begain_offset\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 10;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_begain_offset = 12;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 5;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       recvbuffer[0] = 0x00;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::FINALIZE);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[16]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0,current_record_rest_size = 0,data_begain_offset = 0\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       // check:\r
+       //  handle_client_recv() return FINALIZE, data_size, data_begain_offset\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 10;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_begain_offset = 0;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 5;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       recvbuffer[0] = 0x00;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::FINALIZE);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[17]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0,current_record_rest_size = 0,data_begain_offset != 0\r
+       //  check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       // check:\r
+       //  handle_client_recv() return CLIENT_RECV, data_size, data_begain_offset\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 1;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_begain_offset = 13;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 2;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::CLIENT_RECV);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[18]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0,current_record_rest_size = 0,data_begain_offset = 0\r
+       //  check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       // check:\r
+       //  handle_client_recv() return CLIENT_RECV, data_size, data_begain_offset\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 1;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_begain_offset = 0;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 2;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::CLIENT_RECV);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[19]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0, current_record_rest_size = 0,data_begain_offset != 0\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\), is hello message\r
+       // check:\r
+       // handle_client_recv() return REALSERVER_SELECT, data_size, data_begain_offset,current_record_rest_size\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 3;\r
+       up_thread_data->data_begain_offset = 12;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_buffer[12] = 0x16;\r
+       up_thread_data->data_buffer[13] = 0x03;\r
+       up_thread_data->data_buffer[14] = 0x01;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 76;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       recvbuffer[0] = 0x00;\r
+       recvbuffer[1] = 0x9e;\r
+       recvbuffer[2] = 0x01;\r
+       recvbuffer[3] = 0x03;\r
+       recvbuffer[4] = 0x01;\r
+       recvbuffer[5] = 0x00;\r
+       recvbuffer[6] = 0x03;\r
+       recvbuffer[7] = 0x01;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[0]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[1]));\r
+       all_length = (high_length | low_length) + 5;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK(sslid.session_thread_data_map[up_thread_id]->hello_message_flag);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(all_length, sslid.session_thread_data_map[up_thread_id]->current_record_rest_size);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[20]\r
+       // condition:\r
+       //  end_flag = 0, data_size > 0, current_record_rest_size = 0,data_begain_offset = 0\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\), is hello message\r
+       // check:\r
+       // handle_client_recv() return REALSERVER_SELECT, data_size, data_begain_offset,current_record_rest_size\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 3;\r
+       up_thread_data->data_begain_offset = 0;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_buffer[12] = 0x16;\r
+       up_thread_data->data_buffer[13] = 0x03;\r
+       up_thread_data->data_buffer[14] = 0x01;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 76;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       recvbuffer[0] = 0x00;\r
+       recvbuffer[1] = 0x9e;\r
+       recvbuffer[2] = 0x01;\r
+       recvbuffer[3] = 0x03;\r
+       recvbuffer[4] = 0x01;\r
+       recvbuffer[5] = 0x00;\r
+       recvbuffer[6] = 0x03;\r
+       recvbuffer[7] = 0x01;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[0]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[1]));\r
+       all_length = (high_length | low_length) + 5;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK(sslid.session_thread_data_map[up_thread_id]->hello_message_flag);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(all_length, sslid.session_thread_data_map[up_thread_id]->current_record_rest_size);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[21]\r
+       // condition:\r
+       //  end_flag = 0,data_size>0,current_record_rest_size=0,data_begain_offset != 0\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\), is not hello message\r
+       // check:\r
+       // handle_client_recv() return REALSERVER_SELECT, data_size, data_begain_offset,current_record_rest_size\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 3;\r
+       up_thread_data->data_begain_offset = 12;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_buffer[12] = 0x17;\r
+       up_thread_data->data_buffer[13] = 0x03;\r
+       up_thread_data->data_buffer[14] = 0x01;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 6;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       recvlen = 6;\r
+       recvbuffer[0] = 0x00;\r
+       recvbuffer[1] = 0x9e;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[0]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[1]));\r
+       all_length = (high_length | low_length) + 5;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK(!sslid.session_thread_data_map[up_thread_id]->hello_message_flag);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(all_length, sslid.session_thread_data_map[up_thread_id]->current_record_rest_size);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[22]\r
+       // condition:\r
+       //  end_flag = 0,data_size>0,current_record_rest_size=0,data_begain_offset = 0\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\), is not hello message\r
+       // check:\r
+       // handle_client_recv() return REALSERVER_SELECT, data_size, data_begain_offset,current_record_rest_size\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 3;\r
+       up_thread_data->data_begain_offset = 0;\r
+       up_thread_data->current_record_rest_size = 0;\r
+       up_thread_data->data_buffer[12] = 0x17;\r
+       up_thread_data->data_buffer[13] = 0x03;\r
+       up_thread_data->data_buffer[14] = 0x01;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = 6;\r
+       all_data_size = up_thread_data->data_size + recvlen;\r
+       recvlen = 6;\r
+       recvbuffer[0] = 0x00;\r
+       recvbuffer[1] = 0x9e;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[0]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(recvbuffer[1]));\r
+       all_length = (high_length | low_length) + 5;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(all_data_size, sslid.session_thread_data_map[up_thread_id]->data_size);\r
+       BOOST_CHECK(!sslid.session_thread_data_map[up_thread_id]->hello_message_flag);\r
+       BOOST_CHECK_EQUAL(0, sslid.session_thread_data_map[up_thread_id]->data_begain_offset);\r
+       BOOST_CHECK_EQUAL(all_length, sslid.session_thread_data_map[up_thread_id]->current_record_rest_size);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::REALSERVER_SELECT);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+       // unit_test[23]\r
+       // condition:\r
+       //  recvlen > recvbuffer.size()\r
+       // check:\r
+       //  handle_client_recv() return FINALIZE\r
+       recvlen = recvbuffer.size() + 1;\r
+       status = sslid.handle_client_recv(up_thread_id,recvbuffer,recvlen);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::FINALIZE);\r
+\r
+       // unit_test[24]\r
+       // condition:\r
+       //  up_thread_id is not in map\r
+       // check:\r
+       //  handle_client_recv() return FINALIZE\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       BOOST_CHECK_EQUAL(status, protocol_module_base::FINALIZE);\r
+\r
+       // unit_test[25]\r
+       // condition:\r
+       //  end_flag = 0, data_size+recvlen > MAX_BUFFER_SIZE\r
+       // check:\r
+       //  handle_client_recv() return FINALIZE\r
+       up_thread_data = new session_thread_data_sslid;\r
+       up_thread_data->end_flag = 0;\r
+       up_thread_data->data_size = 10;\r
+       up_thread_data->data_begain_offset = 0;\r
+       sslid.session_thread_data_map[up_thread_id] = up_thread_data;\r
+       recvlen = MAX_BUFFER_SIZE;\r
+       status = sslid.handle_client_recv(up_thread_id, recvbuffer, recvlen);\r
+       delete up_thread_data;\r
+       sslid.session_thread_data_map.clear();\r
+\r
+}\r
+\r
+//handle_realserver_connection_fail \8b\96\8fH\95²\r
+void handle_realserver_connection_fail_test()\r
+{\r
+       protocol_module_sslid sslid;\r
+       boost::thread thread_up(thread_func);\r
+       const boost::thread::id thread_up_id=thread_up.get_id();\r
+       boost::asio::ip::tcp::endpoint ep;\r
+       session_thread_data_sslid thread_up_data_value;\r
+       thread_up_data_value.thread_division=0;\r
+       thread_up_data_value.realserver_connect_failed_count=0;\r
+       thread_up_data_value.data_begain_offset=0;\r
+       thread_up_data_value.data_size=0;\r
+       thread_up_data_value.current_record_rest_size=0;\r
+       thread_up_data_value.hello_message_flag=false;\r
+       session_thread_data_sslid* thread_up_data=&thread_up_data_value;\r
+       sslid.session_thread_data_map.insert(std::pair<const boost::thread::id,session_thread_data_sslid*>(thread_up_id,thread_up_data));\r
+       std::map<const boost::thread::id,session_thread_data_sslid*>::iterator iter;\r
+       iter=sslid.session_thread_data_map.find(thread_up_id);\r
+       session_thread_data_sslid* data=iter->second;\r
+       if(iter == sslid.session_thread_data_map.end())\r
+       {\r
+               BOOST_MESSAGE("end of the map");\r
+       }\r
+\r
+       //unit_test[7] reschedule\83\82\81[\83h\82Ì\8fê\8d\87,realserver_connect_failed_count \82Å1\82ð\89Á\8eZ\82·\82é,\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é,status = REALSERVER_SELECT\r
+       //unit_test[7] test data:reschedule\83\82\81[\83h,the first fail\r
+       sslid.reschedule=1;\r
+       protocol_module_base::EVENT_TAG schedule1=sslid.handle_realserver_connection_fail(thread_up_id,ep);\r
+       int fail_count_add=data->realserver_connect_failed_count;\r
+       BOOST_CHECK_EQUAL(fail_count_add,1);\r
+       BOOST_CHECK_EQUAL(protocol_module_base::REALSERVER_SELECT,schedule1);\r
+\r
+       //unit_test[8] reschedule\83\82\81[\83h\82Ì\8fê\8d\87,realserver_connect_failed_count \82Å1\82ð\89Á\8eZ\82·\82é,\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é,status = REALSERVER_SELECT\r
+       //unit_test[8] test data:reschedule, the third fail\r
+       sslid.reschedule=1;\r
+       protocol_module_base::EVENT_TAG schedule3=sslid.handle_realserver_connection_fail(thread_up_id,ep);\r
+       schedule3=sslid.handle_realserver_connection_fail(thread_up_id,ep);\r
+       int fail_count_add3=data->realserver_connect_failed_count;\r
+       BOOST_CHECK_EQUAL(fail_count_add3,3);\r
+       BOOST_CHECK_EQUAL(protocol_module_base::REALSERVER_SELECT,schedule3);\r
+\r
+       //unit_test[9] no reschedule\83\82\81[\83h\82Ì\8fê\8d\87,\8fI\97¹\83t\83\89\83O\82ðON,\91J\88Ú\90æ\83X\83e\81[\83^\83X\82ð\90Ý\92è\82·\82é,status = CLIENT_DISCONNECT\r
+       //unit_test[9] test data:no reschedule\83\82\81[\83h\r
+       sslid.reschedule=0;\r
+       protocol_module_base::EVENT_TAG schedule=sslid.handle_realserver_connection_fail(thread_up_id,ep);\r
+       BOOST_CHECK_EQUAL(data->end_flag,1);\r
+       BOOST_CHECK_EQUAL(protocol_module_base::CLIENT_DISCONNECT,schedule);\r
+}\r
+\r
+//handle_client_disconnect \8b\96\8fH\95²\r
+void handle_client_disconnect_test()\r
+{\r
+       protocol_module_sslid sslid;\r
+       boost::thread thread1(thread_func);\r
+       boost::thread::id thread_id=thread1.get_id();\r
+       //unit_test[6] handle_client_disconnect()\83\81\83\\83b\83h\82Ì\83e\83X\83g\81@ normal\r
+       //unit_test[6] test data:NULL\r
+       protocol_module_base::EVENT_TAG disconn=sslid.handle_client_disconnect(thread_id);\r
+       BOOST_CHECK(protocol_module_base::FINALIZE==disconn);\r
+}\r
+\r
+void protocol_module_sslid_test_main()\r
+{\r
+       test_suite* ts = BOOST_TEST_SUITE( "protocol_module_sslid_ut" );\r
+\r
+       ts->add( BOOST_TEST_CASE( &protocol_module_sslid_test) );\r
+       ts->add( BOOST_TEST_CASE( &is_tcp_test) );\r
+       ts->add( BOOST_TEST_CASE( &is_udp_test) );\r
+       ts->add( BOOST_TEST_CASE( &get_name_test) );\r
+       ts->add( BOOST_TEST_CASE( &initialize_test) );\r
+       ts->add( BOOST_TEST_CASE( &finalize_test) );\r
+       ts->add( BOOST_TEST_CASE( &is_use_sorry_test) );\r
+       ts->add( BOOST_TEST_CASE( &check_parameter_test) );\r
+       ts->add( BOOST_TEST_CASE( &register_schedule_test) );\r
+       ts->add( BOOST_TEST_CASE( &handle_session_finalize_test) );\r
+       ts->add( BOOST_TEST_CASE( &handle_accept_test) );\r
+       ts->add( BOOST_TEST_CASE( &handle_client_recv_test) );\r
+       ts->add( BOOST_TEST_CASE( &handle_realserver_connection_fail_test) );\r
+       ts->add( BOOST_TEST_CASE( &handle_client_disconnect_test) );\r
+       framework::master_test_suite().add( ts );\r
+}\r
+\r
diff --git a/unit_tests/sslid/ssl_protocol_module_base_test.cpp b/unit_tests/sslid/ssl_protocol_module_base_test.cpp
new file mode 100644 (file)
index 0000000..4307b6c
--- /dev/null
@@ -0,0 +1,1229 @@
+/*\r
+ * ssl_protocol_module_base_test.cpp\r
+ *\r
+ *  Created on: Jan 20, 2009\r
+ *      Author: root\r
+ */\r
+#include "sslid_to_be_test_file.h"\r
+\r
+using namespace boost::unit_test;\r
+using namespace l7vs;\r
+\r
+//get_ssl_session_id\r
+void get_ssl_session_id_test(){\r
+       protocol_module_sslid ssl_base;\r
+       std::string session_id;\r
+       int ret = 0;\r
+       char *record_data;\r
+\r
+       // unit_test[1]\r
+       ret = ssl_base.get_ssl_session_id(NULL, 0, session_id);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+\r
+       // unit_test[2]\r
+       record_data = new char[76];\r
+       record_data[43] = 0x20;\r
+       ret = ssl_base.get_ssl_session_id(record_data, 76, session_id);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[3]\r
+       record_data = new char[76];\r
+       record_data[43] = 0x00;\r
+       ret = ssl_base.get_ssl_session_id(record_data, 76, session_id);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[4]\r
+       record_data = new char[100];\r
+       record_data[43] = 0x20;\r
+       ret = ssl_base.get_ssl_session_id(record_data, 100, session_id);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[5]\r
+       record_data = new char[100];\r
+       record_data[43] = 0x00;\r
+       ret = ssl_base.get_ssl_session_id(record_data, 100, session_id);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+}\r
+\r
+//check_ssl_record_sendable\r
+void check_ssl_record_sendable(){\r
+       protocol_module_sslid ssl_base;\r
+       bool is_message_from_client;\r
+       char* record_data;\r
+       int recv_length;\r
+       int all_length;\r
+       int check_all_length;\r
+       bool is_hello_message;\r
+       int ret;\r
+       unsigned short high_length;\r
+       unsigned short low_length;\r
+\r
+       // unit_test[6]\r
+       // condition:\r
+       //  recv_length < 6\r
+       // check:\r
+       //  check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       recv_length = 5;\r
+       record_data = new char[recv_length];\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 1);\r
+       delete record_data;\r
+\r
+       // unit_test[7]\r
+       // condition:\r
+       //  recv_length = 6, record_data is not a ssl record\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 6;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x00;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[8]\r
+       // condition:\r
+       //  recv_length = 6, record_data is a ssl record(minimal size), but is not a hello message.\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 6;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x17;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x01;\r
+       record_data[5] = 0x00;\r
+       all_length = 0;\r
+       is_hello_message = true;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[9]\r
+       // condition:\r
+       //  recv_length = 6, record_data is a ssl record(minimal size), but is not a hello message.\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 6;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x17;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x01;\r
+       record_data[5] = 0x00;\r
+       all_length = 0;\r
+       is_hello_message = true;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[10]\r
+       // condition:\r
+       //  recv_length = 6, record_data is a ssl record(minimal size), and is a hello message.\r
+       // check:\r
+       //  check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       recv_length = 6;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x01;\r
+       record_data[5] = 0x01;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 1);\r
+       delete record_data;\r
+\r
+       // unit_test[11]\r
+       // condition:\r
+       //  recv_length = 6, record_data is a ssl record(minimal size), and is a hello message.\r
+       // check:\r
+       //  check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       recv_length = 6;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x01;\r
+       record_data[5] = 0x01;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 1);\r
+       delete record_data;\r
+\r
+       // unit_test[12]\r
+       // condition:\r
+       //  recv_length > 6, record_data is  not ssl record data\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 10;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x00;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[13]\r
+       // condition:\r
+       //  recv_length > 6, record_data is ssl record data, but is not a hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 10;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x17;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x05;\r
+       record_data[5] = 0x00;\r
+       is_hello_message = true;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[14]\r
+       // condition:\r
+       //  recv_length > 6, record_data is ssl record data, but is not a hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 10;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x17;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x05;\r
+       record_data[5] = 0x00;\r
+       is_hello_message = true;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[15]\r
+       // condition:\r
+       //  recv_length > 6, recv_length < 76, record_data is ssl record data, is a hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       recv_length = 10;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x05;\r
+       record_data[5] = 0x01;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 1);\r
+       delete record_data;\r
+\r
+       // unit_test[16]\r
+       // condition:\r
+       //  recv_length > 6, recv_length < 76, record_data is ssl record data, is a hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 1 (\91\97\90M\95s\89Â)\r
+       recv_length = 10;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x05;\r
+       record_data[5] = 0x01;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, 1);\r
+       delete record_data;\r
+\r
+       // unit_test[17]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, but is a error hello message,\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01;\r
+       record_data[9] = 0x00;\r
+       record_data[10] = 0x00;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[18]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, but is a error hello message,\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01;\r
+       record_data[9] = 0x00;\r
+       record_data[10] = 0x00;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[19]\r
+       // condition:\r
+       //      recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[20]\r
+       // condition:\r
+       //      recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[21]\r
+       // condition:\r
+       //      recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[22]\r
+       // condition:\r
+       //      recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[23]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[24]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[25]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[26]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[27]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[28]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[29]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[30]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[31]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[32]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[33]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[34]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 76;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x47;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[35]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, but is a error hello message,\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01;\r
+       record_data[9] = 0x00;\r
+       record_data[10] = 0x00;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[36]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, but is a error hello message,\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01;\r
+       record_data[9] = 0x00;\r
+       record_data[10] = 0x00;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[37]\r
+       // condition:\r
+       //      recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[38]\r
+       // condition:\r
+       //      recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[39]\r
+       // condition:\r
+       //      recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[40]\r
+       // condition:\r
+       //      recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[41]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[42]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[43]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[44]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, but is a error hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = true;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(!is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+\r
+       // unit_test[45]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[46]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[47]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[48]\r
+       // condition:\r
+       //  recv_length > 76, record_data is ssl record data, and is client hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x01; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = true;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[49]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[50]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x01;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[51]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x01;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[52]\r
+       // condition:\r
+       //  recv_length = 76, record_data is ssl record data, and is server hello message\r
+       // check:\r
+       //  check_ssl_record_sendable() return 0 (\91\97\90M\89Â\94\)\r
+       recv_length = 100;\r
+       record_data = new char[recv_length];\r
+       record_data[0] = 0x16;\r
+       record_data[1] = 0x03;\r
+       record_data[2] = 0x00;\r
+       record_data[3] = 0x00;\r
+       record_data[4] = 0x64;\r
+       record_data[5] = 0x02; // client hello = 0x01, server hello = 0x02\r
+       record_data[9] = 0x03;\r
+       record_data[10] = 0x00;\r
+       is_message_from_client = false;\r
+       is_hello_message = false;\r
+       all_length = 0;\r
+       high_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[3]));\r
+       high_length = high_length << 8;\r
+       low_length = static_cast<unsigned short>(static_cast<unsigned char>(record_data[4]));\r
+       check_all_length = (high_length | low_length) + 5;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data,\r
+                       recv_length, all_length, is_hello_message);\r
+       BOOST_CHECK(is_hello_message);\r
+       BOOST_CHECK_EQUAL(all_length, check_all_length);\r
+       BOOST_CHECK_EQUAL(ret, 0);\r
+       delete record_data;\r
+\r
+       // unit_test[53]\r
+       // condition:\r
+       //  record_data = NULL\r
+       // check:\r
+       //  check_ssl_record_sendable() return -1 (\88Ù\8fí)\r
+       record_data = NULL;\r
+       ret = ssl_base.check_ssl_record_sendable(is_message_from_client, record_data, 0,\r
+                       all_length, is_hello_message);\r
+       BOOST_CHECK_EQUAL(ret, -1);\r
+       delete record_data;\r
+}\r
+\r
+void ssl_protocol_module_base_test_main()\r
+{\r
+       test_suite* ts = BOOST_TEST_SUITE( "ssl_protocol_module_base_ut" );\r
+       ts->add( BOOST_TEST_CASE( &get_ssl_session_id_test ) );\r
+       ts->add( BOOST_TEST_CASE( &check_ssl_record_sendable ) );\r
+       framework::master_test_suite().add( ts );\r
+}\r