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 _DF_H_
00036 #define _DF_H_
00037 #include "../mc_list/list.h"
00038 #include "../include/macros.h"
00039 #ifdef _WIN32
00040 #include <windows.h>
00041 #endif
00042
00043 struct mc_platform_s;
00044
00045
00046 enum df_request_list_index_e{
00047 #define REQUEST(name, string, description) REQUEST_##name,
00048 #include "df_request.x.h"
00049 #undef REQUEST
00050 REQUEST_COUNT
00051 };
00052
00053 enum service_types_e {
00054 ZERO,
00055 MISC,
00056 INSERT,
00057 SOME,
00058 TYPES,
00059 HERE
00060 };
00061
00062 STRUCT(df_request_list_node,
00063
00064 MUTEX_T *lock;
00065 COND_T *cond;
00066 const char* command;
00067 void* data;
00068 int data_size;
00069 )
00070
00071 STRUCT( df_search_results,
00072
00073 char **agent_names;
00074 char **service_names;
00075 int *agent_ids;
00076 int num_results;
00077 )
00078
00079 STRUCT( df_request_search,
00080 MUTEX_T *lock;
00081 COND_T *cond;
00082 char *search_string;
00083 df_search_results_p search_results;
00084 )
00085
00086 STRUCT( df_node,
00087
00088 MUTEX_T *lock;
00089
00090 int agent_id;
00091 char *agent_name;
00092
00093 int num_services;
00094 char **service_names;
00095 enum service_types_e service_types;
00096 )
00097
00098 STRUCT( df,
00099 struct mc_platform_s* mc_platform;
00100 MUTEX_T *lock;
00101 COND_T *cond;
00102 list_p service_list;
00103 list_p request_list;
00104
00105 int num_entries;
00106 int waiting;
00107 MUTEX_T *waiting_lock;
00108 COND_T *waiting_cond;
00109 THREAD_T thread;
00110 )
00111
00112 STRUCT( df_deregister,
00113
00114 int agent_id;
00115 char *service_name;
00116 )
00117
00118
00119
00120 int
00121 df_Add(struct df_s* df, struct df_node_s * node);
00122
00123 int
00124 df_AddRequest(struct df_s* df, struct df_request_list_node_s* node);
00125
00126 int
00127 df_Destroy(df_p df);
00128
00129 df_p
00130 df_Initialize(struct mc_platform_s* mc_platform);
00131
00132 int df_ProcessRequest(
00133 struct mc_platform_s* global
00134 );
00135
00136 int
00137 df_SearchForService(
00138 df_p df,
00139 const char* searchstring,
00140 char*** agent_names,
00141 char*** service_names,
00142 int** agent_ids,
00143 int* num_entries
00144 );
00145
00146 void
00147 df_Start(struct mc_platform_s* mc_platform);
00148
00149
00150 int
00151 df_node_Destroy(df_node_p df_node);
00152
00153
00154 int
00155 df_request_list_node_Destroy(df_request_list_node_p node);
00156
00157 df_request_list_node_p
00158 df_request_list_node_New(void);
00159
00160
00161 int
00162 df_request_list_Destroy(list_t* df_request_list);
00163
00164
00165
00166 df_request_search_p
00167 df_request_search_New(void);
00168
00169 int
00170 df_request_search_Destroy(df_request_search_p node);
00171
00172 #ifndef _WIN32
00173 void* df_Thread(void* arg);
00174 #else
00175 DWORD WINAPI df_Thread( LPVOID arg );
00176 #endif
00177
00178
00179 #define REQUEST(name, string, description) \
00180 int request_handler_##name (struct mc_platform_s *global, void* data);
00181 #include "df_request.x.h"
00182 #undef REQUEST
00183
00184
00185 #endif