void php_get_amule_categories(PHP_VALUE_NODE *result) { cast_value_array(result); 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->GetFirstTagSafe(); if (cats_tag->HasChildTags()) { int i = 0; for (CECTag::const_iterator it = cats_tag->begin(); it != cats_tag->end(); it++) { const CECTag *categoryTitle = it->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; }
bool operator<(const SortElem &o1, const SortElem &o2) { PHP_VALUE_NODE result; value_value_assign(&SortElem::callback->params[0].si_var->var->value, &o1.obj->value); value_value_assign(&SortElem::callback->params[1].si_var->var->value, &o2.obj->value); switch_push_scope_table((PHP_SCOPE_TABLE_TYPE *)SortElem::callback->scope); // // params passed by-value, all & notations ignored // result.type = PHP_VAL_NONE; php_execute(SortElem::callback->code, &result); cast_value_dnum(&result); // // restore stack, free arg list // switch_pop_scope_table(0); value_value_free(&SortElem::callback->params[0].si_var->var->value); value_value_free(&SortElem::callback->params[1].si_var->var->value); return result.int_val != 0; }
void amule_server_prop_get(void *ptr, char *prop_name, PHP_VALUE_NODE *result) { if ( !ptr ) { value_value_free(result); return; } ServerEntry *obj = (ServerEntry *)ptr; if ( strcmp(prop_name, "name") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sServerName)); } else if ( strcmp(prop_name, "desc") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sServerDescription)); } else if ( strcmp(prop_name, "addr") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sServerIP)); } else if ( strcmp(prop_name, "users") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nServerUsers; } else if ( strcmp(prop_name, "ip") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nServerIP; } else if ( strcmp(prop_name, "port") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nServerPort; } else if ( strcmp(prop_name, "maxusers") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nServerMaxUsers; } else if ( strcmp(prop_name, "files") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nServerFiles; } else { php_report_error(PHP_ERROR, "'ServerEntry' property [%s] is unknown", prop_name); } }
void php_native_load_amule_vars(PHP_VALUE_NODE *result) { PHP_SCOPE_ITEM *si_str = get_scope_item(g_current_scope, "__param_0"); if ( !si_str ) { php_report_error(PHP_ERROR, "Missing argument 'varname' for 'load_amule_vars'"); return; } PHP_VALUE_NODE *str = &si_str->var->value; if ( str->type != PHP_VAL_STRING ) { php_report_error(PHP_ERROR, "Argument 'varname' for 'load_amule_vars' must be string"); return; } char *varname = str->str_val; if ( result ) { cast_value_array(result); } if ( strcmp(varname, "downloads") == 0 ) { amule_load_downloads(result); } else if ( strcmp(varname, "uploads") == 0 ) { amule_load_uploads(result); } else if ( strcmp(varname, "shared") == 0 ) { amule_load_shared(result); } else if ( strcmp(varname, "searchresult") == 0 ) { amule_load_search(result); } else if ( strcmp(varname, "servers") == 0 ) { amule_load_servers(result); } else if ( strcmp(varname, "stats_graph") == 0 ) { amule_load_stats(); } else if ( strcmp(varname, "stats_tree") == 0 ) { amule_load_stats_tree(result); } else { value_value_free(result); php_report_error(PHP_ERROR, "This type of amule variable is unknown"); } }
void amule_load_stats_tree(PHP_VALUE_NODE *result) { if ( !result ) { return; } value_value_free(result); CECPacket req(EC_OP_GET_STATSTREE, EC_DETAIL_WEB); const CECPacket *response = CPhPLibContext::g_curr_context->WebServer()->webInterface->SendRecvMsg_v2(&req); if ( !response ) { return; } const CECTag *server_ver = response->GetTagByName(EC_TAG_SERVER_VERSION); const CECTag *user_nick = response->GetTagByName(EC_TAG_USER_NICK); if ( !server_ver || !user_nick ) { delete response; return; } CEC_StatTree_Node_Tag *stats_root = (CEC_StatTree_Node_Tag *)response->GetTagByName(EC_TAG_STATTREE_NODE); //ecstats2php(stats_root, result); for (CECTag::const_iterator it = stats_root->begin(); it != stats_root->end(); it++) { CEC_StatTree_Node_Tag *tag = (CEC_StatTree_Node_Tag*) & *it; if (tag->GetTagName() == EC_TAG_STATTREE_NODE) { ecstats2php(tag, result); } } }
/* * 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; } 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->GetFirstTagSafe()->GetStringData())); delete response; result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(serverInfoString)); } }
void amule_search_file_prop_get(void *ptr, char *prop_name, PHP_VALUE_NODE *result) { if ( !ptr ) { value_value_free(result); return; } SearchFile *obj = (SearchFile *)ptr; if ( strcmp(prop_name, "name") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sFileName)); } else if ( strcmp(prop_name, "short_name") == 0 ) { result->type = PHP_VAL_STRING; wxString short_name(obj->sFileName.Length() > 60 ? (obj->sFileName.Left(60) + (wxT(" ..."))) : obj->sFileName); result->str_val = strdup((const char *)unicode2UTF8(short_name)); } else if ( strcmp(prop_name, "hash") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sHash)); } else if ( strcmp(prop_name, "size") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->lFileSize; } else if ( strcmp(prop_name, "sources") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->lSourceCount; } else if ( strcmp(prop_name, "present") == 0 ) { result->type = PHP_VAL_BOOL; result->int_val = obj->bPresent; } else { php_report_error(PHP_ERROR, "'SearchFile' property [%s] is unknown", prop_name); } }
void amule_version(PHP_VALUE_NODE *val) { if ( !val ) { return; } value_value_free(val); val->type = PHP_VAL_STRING; val->str_val = strdup(PACKAGE_VERSION); }
/* * Amule objects implementations */ void amule_download_file_prop_get(void *ptr, char *prop_name, PHP_VALUE_NODE *result) { if ( !ptr ) { value_value_free(result); return; } DownloadFile *obj = (DownloadFile *)ptr; result->type = PHP_VAL_INT; if ( strcmp(prop_name, "name") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sFileName)); } else if ( strcmp(prop_name, "short_name") == 0 ) { result->type = PHP_VAL_STRING; wxString short_name(obj->sFileName.Length() > 60 ? (obj->sFileName.Left(60) + (wxT(" ..."))) : obj->sFileName); result->str_val = strdup((const char *)unicode2UTF8(short_name)); } else if ( strcmp(prop_name, "hash") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sFileHash)); } else if ( strcmp(prop_name, "progress") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->m_Image->GetHTML())); } else if ( strcmp(prop_name, "link") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sED2kLink)); } else if ( strcmp(prop_name, "category") == 0 ) { result->int_val = obj->nCat; } else if ( strcmp(prop_name, "status") == 0 ) { result->int_val = obj->nFileStatus; } else if ( strcmp(prop_name, "size") == 0 ) { result->int_val = obj->lFileSize; } else if ( strcmp(prop_name, "size_done") == 0 ) { result->int_val = obj->lFileCompleted; } else if ( strcmp(prop_name, "size_xfer") == 0 ) { result->int_val = obj->lFileTransferred; } else if ( strcmp(prop_name, "speed") == 0 ) { result->int_val = obj->lFileSpeed; } else if ( strcmp(prop_name, "src_count") == 0 ) { result->int_val = obj->lSourceCount; } else if ( strcmp(prop_name, "src_count_not_curr") == 0 ) { result->int_val = obj->lNotCurrentSourceCount; } else if ( strcmp(prop_name, "src_count_a4af") == 0 ) { result->int_val = obj->lSourceCountA4AF; } else if ( strcmp(prop_name, "src_count_xfer") == 0 ) { result->int_val = obj->lTransferringSourceCount; } else if ( strcmp(prop_name, "prio") == 0 ) { result->int_val = obj->lFilePrio; } else if ( strcmp(prop_name, "prio_auto") == 0 ) { result->int_val = obj->bFileAutoPriority; } else if ( strcmp(prop_name, "last_seen_complete") == 0 ) { result->int_val = obj->wxtLastSeenComplete.GetTicks(); } else { php_report_error(PHP_ERROR, "'DownloadFile' property [%s] is unknown", prop_name); } }
void amule_shared_file_prop_get(void *ptr, char *prop_name, PHP_VALUE_NODE *result) { if ( !ptr ) { value_value_free(result); return; } SharedFile *obj = (SharedFile *)ptr; if ( strcmp(prop_name, "name") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sFileName)); } else if ( strcmp(prop_name, "short_name") == 0 ) { result->type = PHP_VAL_STRING; wxString short_name(obj->sFileName.Length() > 60 ? (obj->sFileName.Left(60) + (wxT(" ..."))) : obj->sFileName); result->str_val = strdup((const char *)unicode2UTF8(short_name)); } else if ( strcmp(prop_name, "hash") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sFileHash)); } else if ( strcmp(prop_name, "size") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->lFileSize; } else if ( strcmp(prop_name, "link") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup(unicode2UTF8(obj->sED2kLink)); } else if ( strcmp(prop_name, "xfer") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nFileTransferred; } else if ( strcmp(prop_name, "xfer_all") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nFileAllTimeTransferred; } else if ( strcmp(prop_name, "req") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nFileRequests; } else if ( strcmp(prop_name, "req_all") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nFileAllTimeRequests; } else if ( strcmp(prop_name, "accept") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nFileAccepts; } else if ( strcmp(prop_name, "accept_all") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nFileAllTimeAccepts; } else if ( strcmp(prop_name, "prio") == 0 ) { result->type = PHP_VAL_INT; result->int_val = obj->nFilePriority; } else if ( strcmp(prop_name, "prio_auto") == 0 ) { result->type = PHP_VAL_BOOL; result->int_val = obj->bFileAutoPriority; } else { php_report_error(PHP_ERROR, "'SharedFile' property [%s] is unknown", prop_name); } }
/* * 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); 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->HasChildTags()) { 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); } }
void amule_upload_file_prop_get(void *ptr, char *prop_name, PHP_VALUE_NODE *result) { if ( !ptr ) { value_value_free(result); return; } UploadFile *obj = (UploadFile *)ptr; result->type = PHP_VAL_INT; if ( strcmp(prop_name, "name") == 0 ) { result->type = PHP_VAL_STRING; SharedFile *sharedfile = SharedFile::GetContainerInstance()->GetByID(obj->nUploadFile); // uploading file we don't share ?! We are either out of sync with core or a shared file has been removed while uploading it if ( !sharedfile ) { SharedFile::GetContainerInstance()->ReQuery(); sharedfile = SharedFile::GetContainerInstance()->GetByID(obj->nUploadFile); } result->str_val = strdup(sharedfile ? (const char *)unicode2UTF8(sharedfile->sFileName) : "???"); } else if ( strcmp(prop_name, "short_name") == 0 ) { result->type = PHP_VAL_STRING; SharedFile *sharedfile = SharedFile::GetContainerInstance()->GetByID(obj->nUploadFile); if ( !sharedfile ) { SharedFile::GetContainerInstance()->ReQuery(); sharedfile = SharedFile::GetContainerInstance()->GetByID(obj->nUploadFile); } wxString short_name; if (sharedfile) { short_name = sharedfile->sFileName.Length() > 60 ? (sharedfile->sFileName.Left(60) + (wxT(" ..."))) : sharedfile->sFileName; } else { short_name = wxT("???"); } result->str_val = strdup((const char *)unicode2UTF8(short_name)); } else if ( strcmp(prop_name, "user_name") == 0 ) { result->type = PHP_VAL_STRING; result->str_val = strdup((const char *)unicode2UTF8(obj->sUserName)); } else if ( strcmp(prop_name, "xfer_up") == 0 ) { result->int_val = obj->nTransferredUp; } else if ( strcmp(prop_name, "xfer_down") == 0 ) { result->int_val = obj->nTransferredDown; } else if ( strcmp(prop_name, "xfer_speed") == 0 ) { result->int_val = obj->nSpeed; } else { php_report_error(PHP_ERROR, "'UploadFile' property [%s] is unknown", prop_name); } }
/* * Query amule status. Return hash containing stats values */ void php_get_amule_stats(PHP_VALUE_NODE *result) { CECPacket stat_req(EC_OP_STAT_REQ, EC_DETAIL_FULL); const CECPacket *stats = CPhPLibContext::g_curr_context->WebServer()->webInterface->SendRecvMsg_v2(&stat_req); if (!stats) { return ; } CEC_ConnState_Tag *tag = (CEC_ConnState_Tag *)stats->GetTagByName(EC_TAG_CONNSTATE); if (!tag) { return ; } cast_value_array(result); PHP_VAR_NODE *id = array_get_by_str_key(result, "id"); cast_value_dnum(&id->value); id->value.int_val = tag->GetEd2kId(); const CECTag *server = tag->GetTagByName(EC_TAG_SERVER); if ( server ) { PHP_VAR_NODE *srv_ip = array_get_by_str_key(result, "serv_addr"); value_value_free(&srv_ip->value); srv_ip->value.type = PHP_VAL_STRING; srv_ip->value.str_val =strdup(unicode2UTF8(server->GetIPv4Data().StringIP())); const CECTag *sname = server->GetTagByName(EC_TAG_SERVER_NAME); if ( sname ) { PHP_VAR_NODE *srv_name = array_get_by_str_key(result, "serv_name"); value_value_free(&srv_name->value); srv_name->value.type = PHP_VAL_STRING; srv_name->value.str_val = strdup(unicode2UTF8(sname->GetStringData())); } const CECTag *susers = server->GetTagByName(EC_TAG_SERVER_USERS); if ( susers ) { PHP_VAR_NODE *srv_users = array_get_by_str_key(result, "serv_users"); value_value_free(&srv_users->value); srv_users->value.type = PHP_VAL_INT; srv_users->value.int_val = susers->GetInt(); } } // kademlia PHP_VAR_NODE *kad = array_get_by_str_key(result, "kad_connected"); value_value_free(&kad->value); kad->value.type = PHP_VAL_BOOL; if ( tag->IsConnectedKademlia() ) { kad->value.int_val = 1; PHP_VAR_NODE *kad_fwl = array_get_by_str_key(result, "kad_firewalled"); kad_fwl->value.type = PHP_VAL_BOOL; kad_fwl->value.int_val = tag->IsKadFirewalled(); } else { kad->value.int_val = 0; } // traffic stats PHP_VAR_NODE *speed; speed = array_get_by_str_key(result, "speed_up"); value_value_free(&speed->value); speed->value.type = PHP_VAL_INT; speed->value.int_val = stats->GetTagByName(EC_TAG_STATS_UL_SPEED)->GetInt(); speed = array_get_by_str_key(result, "speed_down"); value_value_free(&speed->value); speed->value.type = PHP_VAL_INT; speed->value.int_val = stats->GetTagByName(EC_TAG_STATS_DL_SPEED)->GetInt(); 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)->GetInt(); 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)->GetInt(); delete stats; }