00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef _WIN32
00036 #include "config.h"
00037 #else
00038 #include "winconfig.h"
00039 #endif
00040
00041 #include <stdio.h>
00042 #include <stdlib.h>
00043 #include <string.h>
00044 #include "include/agent_task.h"
00045 #include "include/mc_error.h"
00046
00047 agent_task_p
00048 agent_task_New(void)
00049 {
00050 agent_task_p task;
00051 task = (agent_task_p)malloc(sizeof(agent_task_t));
00052 if(task == NULL) {
00053 fprintf(stderr, "Memory Error. %s:%d\n", __FILE__, __LINE__);
00054 } else {
00055 memset(task, 0, sizeof(agent_task_t));
00056 }
00057 task->agent_variable_list = agent_variable_list_New();
00058
00059 task->saved_variables = NULL;
00060 task->num_saved_variables = 0;
00061
00062 task->agent_file_list = agent_file_list_New();
00063
00064 return task;
00065 }
00066
00067 agent_task_p
00068 agent_task_Copy(agent_task_p task)
00069 {
00070 int i;
00071 interpreter_variable_data_t* interp_data;
00072 agent_task_p cp_task;
00073 cp_task = (agent_task_p)malloc(sizeof(agent_task_t));
00074
00075 cp_task->number_of_elements = task->number_of_elements;
00076 cp_task->size_of_element_array = task->size_of_element_array;
00077 cp_task->persistent = task->persistent;
00078 cp_task->init_agent_status = task->init_agent_status;
00079
00080 cp_task->var_name = (char*)malloc
00081 (
00082 sizeof(char) *
00083 (strlen(task->var_name) + 1)
00084 );
00085 strcpy(cp_task->var_name, task->var_name);
00086
00087 cp_task->server_name = (char*)malloc
00088 (
00089 sizeof(char) *
00090 (strlen(task->server_name) + 1)
00091 );
00092 strcpy(cp_task->server_name, task->server_name);
00093
00094 if (task->code_id != NULL) {
00095 cp_task->code_id = (char*)malloc
00096 (
00097 sizeof(char) *
00098 (strlen(task->code_id) + 1)
00099 );
00100 strcpy(cp_task->code_id, task->code_id);
00101 } else {
00102 cp_task->code_id = NULL;
00103 }
00104
00105 if(task->agent_return_data != NULL) {
00106 cp_task->agent_return_data = interpreter_variable_data_Copy(task->agent_return_data);
00107 }
00108
00109
00110 cp_task->agent_variable_list = agent_variable_list_New();
00111 for(i = 0; i < task->agent_variable_list->size; i++) {
00112 interp_data = (interpreter_variable_data_t*)ListSearch(
00113 (list_p)task->agent_variable_list,
00114 i );
00115 if (interp_data == NULL) { continue; }
00116 interp_data = interpreter_variable_data_Copy(interp_data);
00117 ListAdd(
00118 (list_p)cp_task->agent_variable_list,
00119 interp_data
00120 );
00121 }
00122
00123 cp_task->saved_variables = (char**)malloc(sizeof(char*) * (task->num_saved_variables+1));
00124 for(i = 0; i < task->num_saved_variables; i++) {
00125 cp_task->saved_variables[i] = strdup(task->saved_variables[i]);
00126 }
00127 cp_task->saved_variables[i] = NULL;
00128 cp_task->num_saved_variables = task->num_saved_variables;
00129
00130 return cp_task;
00131 }
00132
00133 int
00134 agent_task_Destroy( agent_task_p agent_task )
00135 {
00136 int i;
00137 if(agent_task == NULL) {
00138 return MC_SUCCESS;
00139 }
00140 if (agent_task->var_name != NULL) {
00141 free(agent_task->var_name);
00142 }
00143 if (agent_task->server_name != NULL) {
00144 free(agent_task->server_name);
00145 }
00146 if (agent_task->code_id != NULL) {
00147 free(agent_task->code_id);
00148 }
00149
00150 agent_variable_list_Destroy(agent_task->agent_variable_list);
00151
00152 if(agent_task->saved_variables != NULL) {
00153 for(i = 0; agent_task->saved_variables[i] != NULL; i++) {
00154 free(agent_task->saved_variables[i]);
00155 }
00156 free(agent_task->saved_variables);
00157 }
00158
00159 interpreter_variable_data_Destroy(agent_task->agent_return_data);
00160
00161 free(agent_task);
00162
00163 return MC_SUCCESS;
00164 }
00165