php_core_lib.cpp

来自「wxWidgets写的电驴」· C++ 代码 · 共 1,791 行 · 第 1/4 页

CPP
1,791
字号
	speed = array_get_by_str_key(result, "speed_limit_up");	value_value_free(&speed->value);	speed->value.type = PHP_VAL_INT;	speed->value.int_val = stats->GetTagByName(EC_TAG_STATS_UL_SPEED_LIMIT)->GetInt32Data();		speed = array_get_by_str_key(result, "speed_limit_down");	value_value_free(&speed->value);	speed->value.type = PHP_VAL_INT;	speed->value.int_val = stats->GetTagByName(EC_TAG_STATS_DL_SPEED_LIMIT)->GetInt32Data();	delete stats;#else	cast_value_array(result);	PHP_VAR_NODE *id = array_get_by_str_key(result, "id");	cast_value_dnum(&id->value);	id->value.int_val = 1234567;#endif}void php_get_amule_categories(PHP_VALUE_NODE *result){	cast_value_array(result);#ifndef PHP_STANDALONE_EN	CECPacket req(EC_OP_GET_PREFERENCES);	req.AddTag(CECTag(EC_TAG_SELECT_PREFS, (uint32)EC_PREFS_CATEGORIES));	const CECPacket *reply = CPhPLibContext::g_curr_context->WebServer()->webInterface->SendRecvMsg_v2(&req);	if ( !reply ) {		return ;	}	const CECTag *cats_tag = reply->GetTagCount() ? reply->GetTagByIndex(0) : 0;	if ( cats_tag && cats_tag->GetTagCount() ) {		for (int i = 0; i < cats_tag->GetTagCount(); i++) {			const CECTag *tag = cats_tag->GetTagByIndex(i);			const CECTag *categoryTitle = tag->GetTagByName(EC_TAG_CATEGORY_TITLE);			PHP_VAR_NODE *cat = array_get_by_int_key(result, i);			value_value_free(&cat->value);			cat->value.type = PHP_VAL_STRING;			cat->value.str_val = strdup(unicode2UTF8(categoryTitle->GetStringData()));		}	} else {		PHP_VAR_NODE *cat = array_get_by_int_key(result, 0);		value_value_free(&cat->value);		cat->value.type = PHP_VAL_STRING;		cat->value.str_val = strdup("all");	}	delete reply;#else	for (int i = 0; i < 5; i++) {		PHP_VAR_NODE *cat = array_get_by_int_key(result, i);		value_value_free(&cat->value);		cat->value.type = PHP_VAL_STRING;		cat->value.str_val = strdup("some_cat");	}#endif}#ifndef PHP_STANDALONE_ENtypedef struct {	char *php_name;	ec_opcode_t tagname;	int opsize;} PHP_2_EC_OPT_DEF;PHP_2_EC_OPT_DEF g_connection_opt_defs[] = {	{ "max_line_up_cap", EC_TAG_CONN_UL_CAP, 4}, { "max_line_down_cap", EC_TAG_CONN_DL_CAP, 4},	{ "max_up_limit", EC_TAG_CONN_MAX_UL, 2}, { "max_down_limit", EC_TAG_CONN_MAX_DL, 2},	{ "slot_alloc", EC_TAG_CONN_SLOT_ALLOCATION, 2},	{ "tcp_port", EC_TAG_CONN_TCP_PORT, 2}, { "udp_port", EC_TAG_CONN_UDP_PORT, 2}, 	{ "udp_dis", EC_TAG_CONN_UDP_DISABLE, 0},	{ "max_file_src", EC_TAG_CONN_MAX_FILE_SOURCES, 2},	{ "max_conn_total", EC_TAG_CONN_MAX_CONN, 2}, 	{ "autoconn_en", EC_TAG_CONN_AUTOCONNECT, 0}, { "reconn_en", EC_TAG_CONN_RECONNECT, 0},	{0, 0, 0}};PHP_2_EC_OPT_DEF g_file_opt_defs[] = {	{ "ich_en", EC_TAG_FILES_ICH_ENABLED, 0},	{ "aich_trust", EC_TAG_FILES_AICH_TRUST, 0},	{ "new_files_paused", EC_TAG_FILES_NEW_PAUSED, 0},	{ "new_files_auto_dl_prio", EC_TAG_FILES_NEW_AUTO_DL_PRIO, 0},	{ "preview_prio", EC_TAG_FILES_PREVIEW_PRIO, 0},	{ "new_files_auto_ul_prio", EC_TAG_FILES_NEW_AUTO_UL_PRIO, 0},	{ "upload_full_chunks", EC_TAG_FILES_UL_FULL_CHUNKS, 0},	{ "first_last_chunks_prio", EC_TAG_FILES_PREVIEW_PRIO, 0},	{ "start_next_paused", EC_TAG_FILES_START_NEXT_PAUSED, 0},	{ "resume_same_cat", EC_TAG_FILES_RESUME_SAME_CAT, 0},	{ "save_sources", EC_TAG_FILES_SAVE_SOURCES, 0},	{ "extract_metadata", EC_TAG_FILES_EXTRACT_METADATA, 0},	{ "alloc_full_chunks", EC_TAG_FILES_ALLOC_FULL_CHUNKS, 0},	{ "alloc_full", EC_TAG_FILES_ALLOC_FULL_SIZE, 0},	{ "check_free_space", EC_TAG_FILES_CHECK_FREE_SPACE, 0},	{ "min_free_space", EC_TAG_FILES_MIN_FREE_SPACE, 4},	{0, 0, 0}};PHP_2_EC_OPT_DEF g_webserver_opt_defs[] = {	{ "use_gzip", EC_TAG_WEBSERVER_USEGZIP, 0},	{ "autorefresh_time", EC_TAG_WEBSERVER_REFRESH, 4},	{0, 0, 0}};PHP_2_EC_OPT_DEF g_coretweak_opt_defs[] = {	{ "max_conn_5sec", EC_TAG_CORETW_MAX_CONN_PER_FIVE, 2},	{0, 0, 0}};void set_array_int_val(PHP_VALUE_NODE *array, std::string arrkey, int value){	PHP_VAR_NODE *key = array_get_by_str_key(array, arrkey);	PHP_VALUE_NODE intval;	intval.type = PHP_VAL_INT;	intval.int_val = value;	value_value_assign(&key->value, &intval);}void ec_tag_2_php(const CECTag *cattag, PHP_2_EC_OPT_DEF *opts, PHP_VAR_NODE *catvar){	for(PHP_2_EC_OPT_DEF *def = opts; def->php_name; def++) {		int val;		switch(def->opsize) {			case 0: val = cattag->GetTagByName(def->tagname) ? 1 : 0; break;			case 1: val = cattag->GetTagByNameSafe(def->tagname)->GetInt8Data(); break;			case 2: val = cattag->GetTagByNameSafe(def->tagname)->GetInt16Data(); break;			case 4: val = cattag->GetTagByNameSafe(def->tagname)->GetInt32Data(); break;			default: val = -1;		}		wxASSERT(val != -1);		set_array_int_val(&catvar->value, def->php_name, val);	}}#endif/* * Return hash of amule options. *  Key: option name *  Value: option value (string) */void php_get_amule_options(PHP_VALUE_NODE *result){	cast_value_array(result);#ifndef PHP_STANDALONE_EN	CECPacket req(EC_OP_GET_PREFERENCES);	req.AddTag(CECTag(EC_TAG_SELECT_PREFS, (uint32)0xffffffff));	const CECPacket *reply = CPhPLibContext::g_curr_context->WebServer()->webInterface->SendRecvMsg_v2(&req);	if ( !reply || !reply->GetTagCount()) {		return ;	}	const CECTag *cattag = 0;	PHP_VALUE_NODE intval;	intval.type = PHP_VAL_INT;    if ((cattag = reply->GetTagByName(EC_TAG_PREFS_GENERAL)) != 0) {		PHP_VAR_NODE *key = array_get_by_str_key(result, "nick");		value_value_free(&key->value);		key->value.type = PHP_VAL_STRING;		key->value.str_val = strdup(unicode2UTF8(cattag->GetTagByNameSafe(EC_TAG_USER_NICK)->GetStringData()));	}	if ((cattag = reply->GetTagByName(EC_TAG_PREFS_CONNECTIONS)) != 0) {		PHP_VAR_NODE *cat = array_get_by_str_key(result, "connection");		cast_value_array(&cat->value);				ec_tag_2_php(cattag, g_connection_opt_defs, cat);	}	if ((cattag = reply->GetTagByName(EC_TAG_PREFS_FILES)) != 0) {		PHP_VAR_NODE *cat = array_get_by_str_key(result, "files");		cast_value_array(&cat->value);		ec_tag_2_php(cattag, g_file_opt_defs, cat);	}	if ((cattag = reply->GetTagByName(EC_TAG_PREFS_REMOTECTRL)) != 0) {		PHP_VAR_NODE *cat = array_get_by_str_key(result, "webserver");		cast_value_array(&cat->value);		ec_tag_2_php(cattag, g_webserver_opt_defs, cat);	}	if ((cattag = reply->GetTagByName(EC_TAG_PREFS_CORETWEAKS)) != 0) {		PHP_VAR_NODE *cat = array_get_by_str_key(result, "coretweaks");		cast_value_array(&cat->value);		ec_tag_2_php(cattag, g_coretweak_opt_defs, cat);	}		#endif}#ifndef PHP_STANDALONE_ENbool php_2_ec_tag(CECTag *cattag, PHP_2_EC_OPT_DEF *opts, PHP_VALUE_NODE *catvar){	for(PHP_2_EC_OPT_DEF *def = opts; def->php_name; def++) {		PHP_VAR_NODE *opt_var = array_get_by_str_key(catvar, def->php_name);		if ( opt_var->value.type == PHP_VAL_NONE ) {			continue;		}		cast_value_dnum(&opt_var->value);		switch(def->opsize) {			case 0: // always transmit !			case 1: cattag->AddTag(CECTag(def->tagname ,(uint8)opt_var->value.int_val)); break;			case 2: cattag->AddTag(CECTag(def->tagname ,(uint16)opt_var->value.int_val)); break;			case 4: cattag->AddTag(CECTag(def->tagname ,(uint32)opt_var->value.int_val)); break;			default: return false;		}	}	return true;}#endif/* * Set amule options from given array. Argument looks like "amule_get_options" result */void php_set_amule_options(PHP_VALUE_NODE *){	PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0");	if ( !si || (si->var->value.type != PHP_VAL_ARRAY)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 1 (options array)");		return;	}#ifndef PHP_STANDALONE_EN	CECPacket req(EC_OP_SET_PREFERENCES);	PHP_VAR_NODE *opt_group_array = 0;	// files	opt_group_array = array_get_by_str_key(&si->var->value, "files");	if ( opt_group_array->value.type == PHP_VAL_ARRAY ) {		CECEmptyTag filePrefs(EC_TAG_PREFS_FILES);		php_2_ec_tag(&filePrefs, g_file_opt_defs, &opt_group_array->value);		req.AddTag(filePrefs);	}	// connection	opt_group_array = array_get_by_str_key(&si->var->value, "connection");	if ( opt_group_array->value.type == PHP_VAL_ARRAY ) {		CECEmptyTag connPrefs(EC_TAG_PREFS_CONNECTIONS);		php_2_ec_tag(&connPrefs, g_connection_opt_defs, &opt_group_array->value);		req.AddTag(connPrefs);	}	// webserver	opt_group_array = array_get_by_str_key(&si->var->value, "webserver");	if ( opt_group_array->value.type == PHP_VAL_ARRAY ) {		CECEmptyTag webPrefs(EC_TAG_PREFS_REMOTECTRL);		php_2_ec_tag(&webPrefs, g_webserver_opt_defs, &opt_group_array->value);		req.AddTag(webPrefs);		// also apply settings localy		PHP_VAR_NODE *pref = array_get_by_str_key(&opt_group_array->value, "use_gzip");		cast_value_dnum(&pref->value);		CPhPLibContext::g_curr_context->WebServer()->webInterface->m_UseGzip = pref->value.int_val != 0;		pref = array_get_by_str_key(&opt_group_array->value, "autorefresh_time");		cast_value_dnum(&pref->value);		CPhPLibContext::g_curr_context->WebServer()->webInterface->m_PageRefresh = pref->value.int_val;	}	CPhPLibContext::g_curr_context->WebServer()->Send_Discard_V2_Request(&req);	#endif}/* * Download 1 of search results. Params: hash, category (default=0) */void php_native_search_download_cmd(PHP_VALUE_NODE *){	PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0");	if ( !si || (si->var->value.type != PHP_VAL_STRING)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 1 (file hash)");		return;	}	char *str_hash = si->var->value.str_val;		si = get_scope_item(g_current_scope, "__param_1");	if ( !si || (si->var->value.type != PHP_VAL_STRING)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 2 (category)");		return;	}	cast_value_dnum(&si->var->value);	int cat = si->var->value.int_val;#ifndef PHP_STANDALONE_EN	CPhPLibContext::g_curr_context->WebServer()->Send_DownloadSearchFile_Cmd(		wxString(char2unicode(str_hash)), cat);#else	printf("php_native_search_download_cmd: hash=%s category=%d\n", str_hash, cat);#endif}void php_native_search_start_cmd(PHP_VALUE_NODE *){	PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0");	if ( !si || (si->var->value.type != PHP_VAL_STRING)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 1 (search term)");		return;	}	char *search = si->var->value.str_val;	if ( !(si = get_scope_item(g_current_scope, "__param_1")) || (si->var->value.type != PHP_VAL_STRING)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 2 (file extension)");		return;	}	char *ext = si->var->value.str_val;	if ( !(si = get_scope_item(g_current_scope, "__param_2")) || (si->var->value.type != PHP_VAL_STRING)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 3 (file type)");		return;	}	char *type = si->var->value.str_val;	if ( !(si = get_scope_item(g_current_scope, "__param_3")) ) {		php_report_error(PHP_ERROR, "Invalid or missing argument 4 (search type)");		return;	}	cast_value_dnum(&si->var->value);	EC_SEARCH_TYPE search_type;	switch(si->var->value.int_val) {		case 0: search_type = EC_SEARCH_LOCAL; break;		case 1: search_type = EC_SEARCH_GLOBAL; break;		case 2: search_type = EC_SEARCH_KAD; break;		default: 			php_report_error(PHP_ERROR, "Invalid search type %d", si->var->value.int_val);			return;	}	if ( !(si = get_scope_item(g_current_scope, "__param_4")) ) {		php_report_error(PHP_ERROR, "Invalid or missing argument 5 (availability)");		return;	}	cast_value_dnum(&si->var->value);	int avail = si->var->value.int_val;	if ( !(si = get_scope_item(g_current_scope, "__param_5")) ) {		php_report_error(PHP_ERROR, "Invalid or missing argument 6 (min size)");		return;	}	cast_value_dnum(&si->var->value);	int min_size = si->var->value.int_val;	if ( !(si = get_scope_item(g_current_scope, "__param_6")) ) {		php_report_error(PHP_ERROR, "Invalid or missing argument 7 (max size)");		return;	}	cast_value_dnum(&si->var->value);	int max_size = si->var->value.int_val;#ifndef PHP_STANDALONE_EN	CPhPLibContext::g_curr_context->WebServer()->Send_Search_Cmd(		wxString(char2unicode(search)), wxString(char2unicode(ext)), wxString(char2unicode(type)),		search_type, avail, min_size, max_size);#else	printf("php_native_search_start_cmd: search=%s \n", search);#endif}/* * Request contents of log */void php_get_log(PHP_VALUE_NODE *result){	value_value_free(result);		PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0");	bool rst;	if ( !si ) {		rst = false;	} else {		cast_value_dnum(&si->var->value);		rst = si->var->value.int_val != 0;	}#ifndef PHP_STANDALONE_EN	if ( rst ) {		CECPacket req(EC_OP_RESET_LOG);		CPhPLibContext::g_curr_context->WebServer()->Send_Discard_V2_Request(&req);	}	CECPacket req(EC_OP_GET_LOG);	const CECPacket *response = CPhPLibContext::g_curr_context->WebServer()->webInterface->SendRecvMsg_v2(&req);	if (response) {		wxString serverInfoString(_SpecialChars(response->GetTagByIndexSafe(0)->GetStringData()));		delete response;		result->type = PHP_VAL_STRING;		result->str_val = strdup((const char *)unicode2UTF8(serverInfoString));	}#else	printf("php_get_log: reset=%d\n", rst);#endif}/* * Request contents of server info */void php_get_serverinfo(PHP_VALUE_NODE *result){	value_value_free(result);		PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0");	bool rst;	if ( !si ) {		rst = false;	} else {		cast_value_dnum(&si->var->value);		rst = si->var->value.int_val != 0;	}#ifndef PHP_STANDALONE_EN	if ( rst ) {		CECPacket req(EC_OP_CLEAR_SERVERINFO);		CPhPLibContext::g_curr_context->WebServer()->Send_Discard_V2_Request(&req);	}	CECPacket req(EC_OP_GET_SERVERINFO);	const CECPacket *response = CPhPLibContext::g_curr_context->WebServer()->webInterface->SendRecvMsg_v2(&req);	if (response) {		wxString serverInfoString(_SpecialChars(response->GetTagByIndexSafe(0)->GetStringData()));		delete response;		result->type = PHP_VAL_STRING;		result->str_val = strdup((const char *)unicode2UTF8(serverInfoString));	}#else	printf("php_get_serverinfo: reset=%d\n", rst);#endif}/* * Download ed2k link. Params: link, category (default=0) */void php_native_ed2k_download_cmd(PHP_VALUE_NODE *result){	PHP_SCOPE_ITEM *si = get_scope_item(g_current_scope, "__param_0");	if ( !si || (si->var->value.type != PHP_VAL_STRING)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 1 (file link)");		return;	}	char *str_link = si->var->value.str_val;		si = get_scope_item(g_current_scope, "__param_1");	if ( !si || (si->var->value.type != PHP_VAL_STRING)) {		php_report_error(PHP_ERROR, "Invalid or missing argument 2 (category)");		return;	}	cast_value_dnum(&si->var->value);	int cat = si->var->value.int_val;#ifndef PHP_STANDALONE_EN	bool cmd_result = CPhPLibContext::g_curr_context->WebServer()->Send_DownloadEd2k_Cmd(		wxString(char2unicode(str_link)), cat);	if ( result ) {		cast_value_bool(result);		result->int_val = cmd_result;	}#else

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?