diff options
author | sauros <sauros@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2003-03-12 16:19:28 +0000 |
---|---|---|
committer | sauros <sauros@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2003-03-12 16:19:28 +0000 |
commit | 343a19f250f0af4b355e2ff642a7e9e0a68f50df (patch) | |
tree | 46fb306f7676b5e73fc38ab0626a94e35a9175e1 /src/zabbix_agent_win32/main.cpp | |
parent | 629691194e3c17429cb89d50d8a7a27acfc8b1a9 (diff) | |
download | zabbix-343a19f250f0af4b355e2ff642a7e9e0a68f50df.tar.gz zabbix-343a19f250f0af4b355e2ff642a7e9e0a68f50df.tar.xz zabbix-343a19f250f0af4b355e2ff642a7e9e0a68f50df.zip |
Added alpha version of subagent API (Victor)
git-svn-id: svn://svn.zabbix.com/trunk@712 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/zabbix_agent_win32/main.cpp')
-rw-r--r-- | src/zabbix_agent_win32/main.cpp | 71 |
1 files changed, 64 insertions, 7 deletions
diff --git a/src/zabbix_agent_win32/main.cpp b/src/zabbix_agent_win32/main.cpp index 6d0343d7..5cc50960 100644 --- a/src/zabbix_agent_win32/main.cpp +++ b/src/zabbix_agent_win32/main.cpp @@ -28,7 +28,6 @@ // Global variables // -DWORD dwTlsLogPrefix; HANDLE eventShutdown; HANDLE eventCollectorStarted; @@ -41,6 +40,9 @@ DWORD confServerCount=0; DWORD confTimeout=3000; // 3 seconds default timeout DWORD confMaxProcTime=100; // 100 milliseconds is default acceptable collector sample processing time +SUBAGENT *subagentList; // List of loaded subagents +SUBAGENT_NAME *subagentNameList=NULL; + DWORD (__stdcall *imp_GetGuiResources)(HANDLE,DWORD); BOOL (__stdcall *imp_GetProcessIoCounters)(HANDLE,PIO_COUNTERS); BOOL (__stdcall *imp_GetPerformanceInfo)(PPERFORMANCE_INFORMATION,DWORD); @@ -102,17 +104,59 @@ static void ImportSymbols(void) // +// Load subagent +// + +static BOOL LoadSubAgent(char *name,char *cmdLine) +{ + SUBAGENT *sbi; + int rc; + + sbi=(SUBAGENT *)malloc(sizeof(SUBAGENT)); + sbi->hModule=LoadLibrary(name); + if (sbi->hModule==NULL) + { + WriteLog(MSG_LOAD_FAILED,EVENTLOG_ERROR_TYPE,"se",name,GetLastError()); + free(sbi); + return FALSE; + } + + sbi->init=(int (__zabbix_api *)(char *,SUBAGENT_COMMAND **))GetProcAddress(sbi->hModule,"zabbix_subagent_init"); + sbi->shutdown=(void (__zabbix_api *)(void))GetProcAddress(sbi->hModule,"zabbix_subagent_shutdown"); + if ((sbi->init==NULL)||(sbi->shutdown==NULL)) + { + WriteLog(MSG_NO_ENTRY_POINTS,EVENTLOG_ERROR_TYPE,"s",name); + FreeLibrary(sbi->hModule); + free(sbi); + return FALSE; + } + + if ((rc=sbi->init(cmdLine,&sbi->cmdList))!=0) + { + WriteLog(MSG_SUBAGENT_INIT_FAILED,EVENTLOG_ERROR_TYPE,"sd",name,rc); + FreeLibrary(sbi->hModule); + free(sbi); + return FALSE; + } + + // Add new subagent to chain + sbi->next=subagentList; + subagentList=sbi; + + WriteLog(MSG_SUBAGENT_LOADED,EVENTLOG_INFORMATION_TYPE,"s",name); + + return TRUE; +} + + +// // Initialization routine // BOOL Initialize(void) { WSAData sockInfo; - - dwTlsLogPrefix=TlsAlloc(); - if (dwTlsLogPrefix==TLS_OUT_OF_INDEXES) - return FALSE; - TlsSetValue(dwTlsLogPrefix,NULL); // Set no prefix for main thread + int i; // Initialize Windows Sockets API WSAStartup(0x0002,&sockInfo); @@ -122,6 +166,20 @@ BOOL Initialize(void) // Dynamically import functions that may not be presented in all Windows versions ImportSymbols(); + // Load subagents + if (subagentNameList!=NULL) + { + for(i=0;subagentNameList[i].name!=NULL;i++) + { + LoadSubAgent(subagentNameList[i].name,subagentNameList[i].cmdLine); + free(subagentNameList[i].name); + if (subagentNameList[i].cmdLine!=NULL) + free(subagentNameList[i].cmdLine); + } + free(subagentNameList); + } + + // Create synchronization stuff eventShutdown=CreateEvent(NULL,TRUE,FALSE,NULL); eventCollectorStarted=CreateEvent(NULL,TRUE,FALSE,NULL); @@ -149,7 +207,6 @@ void Shutdown(void) Sleep(1000); // Allow other threads to terminate WriteLog(MSG_AGENT_SHUTDOWN,EVENTLOG_INFORMATION_TYPE,NULL); CloseLog(); - TlsFree(dwTlsLogPrefix); } |