--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+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 $<
--- /dev/null
+#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\83Y \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\83Y \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\83Y \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\83Y \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\83Y \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\83Y \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\83Y \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\83Y \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(®ister_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
--- /dev/null
+#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\92l \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\92l \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\92l \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\92l \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\92l \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\92l \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\92l \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\92l \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( ®ister_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
--- /dev/null
+/*\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